使用Azure RBAC对Kubernetes进行授权

时间:2023-02-09 19:04:36

前面我们已经配置了Azure AD与AKS之间的集成身份验证。配置好此功能以后,允许客户将 Azure AD 用户、组或服务主体用作 Kubernetes RBAC 中的主体。使用此功能,我们无需分别管理Kubernetes的用户标识和凭据。但是我们仍需要分别设置和管理Azure RBAC和Kubernetes RBAC。

今天我们会给大家介绍一种新方法,此方法允许我们跨Azure资源、AKS和Kubernetes资源实现统一的管理和访问控制。有了通过 Azure 管理 Kubernetes 资源的 RBAC 这一功能,你就可以选择使用 Azure 或原生 Kubernetes 机制管理群集资源的 RBAC。 启用后,将由 Azure RBAC 以独占方式验证 Azure AD 主体,由 Kubernetes RBAC 以独占方式验证常规 Kubernetes 用户和服务帐户

先决条件

若要使用此功能,需要具备如下先决条件:

  • 确保已有 Azure CLI 2.24.0 或更高版本
  • 确保已安装 kubectl v1.18.3+

将Azure RBAC集成到AKS群集

如果要将用于Kubernetes授权的Azure RBAC添加到现有AKS群集中,可以使用如下CLI命令:

az aks update -g gavinwu -n labaks --enable-azure-rbac

使用Azure RBAC对Kubernetes进行授权

注意:如果要使用Azure RBAC进行Kubnernetes授权,必须在现有群集上启用Azure AD集成

为用户创建角色分配

做好了将Azure RBAC集成到AKS群集以后,我们需要为用户创建相应的角色分配,以便于用户可以访问群集内的资源,默认情况下,AKS提供一下四个内置角色:

角色

说明

Azure Kubernetes 服务 RBAC 读取者

允许进行只读访问并查看命名空间中的大多数对象。 不允许查看角色或角色绑定。 此角色不允许查看 ​​Secrets​​,因为读取 Secrets(机密)的内容就可以访问命名空间中的 ServiceAccount 凭据,这样就会允许以命名空间中任何 ServiceAccount 的身份进行 API 访问(一种特权提升形式)

Azure Kubernetes 服务 RBAC 写入者

允许对命名空间中的大多数对象进行读/写访问。 此角色不允许查看或修改角色或角色绑定。 但是,此角色允许以命名空间中任何 ServiceAccount 的身份访问 ​​Secrets​​ 和运行 Pod,因此可用于获取命名空间中任何 ServiceAccount 的 API 访问级别。

Azure Kubernetes 服务 RBAC 管理员

允许要在命名空间内授予的管理员访问权限。 允许对命名空间(或群集范围)中的大多数资源进行读/写访问,包括在命名空间内创建角色和角色绑定。 此角色不允许对资源配额或命名空间本身进行写入访问。

Azure Kubernetes 服务 RBAC 群集管理员

允许超级用户访问权限(对任何资源执行任何操作)。 它提供对群集中每个资源和所有命名空间的完全控制。

除了上述四个内置角色以外,我们也可以根据实际情况选择使用自定义的Azure角色来满足日常的使用需求。

我们今天的演示使用自定义角色来为用户分配访问权限。下面是一个角色定义示例,仅允许用户读取命名空间资源,不允许进行创建和删除操作。

{
"Name": "AKS Namespace Reader",
"Description": "Lets you view all resource in namespace",
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.ContainerService/managedClusters/namespaces/read"
],
"NotDataActions": [],
"assignableScopes": [
"/subscriptions/<YOUR SUBSCRIPTION ID>"
]
}

运行如下命令创建角色定义:

使用Azure RBAC对Kubernetes进行授权

角色定义好以后,可以我们可以将角色分配给特定的用户:

az role assignment create --role "AKS Namespace Reader" --assignee "08bef495-9ee3-4cd4-8b74-717d5b51df37" --scope $AKS_ID

使用Azure RBAC对Kubernetes进行授权

权限分配好以后,使用如下命令重新获取Kubnernetes配置文件:

az aks Get-Credentials -g GavinWu -n LabAKS --overwrite-existing

使用Azure RBAC对Kubernetes进行授权

获取配置文件以后,运行kubectl命令,系统会提示我们进行登录,登录以后可以看到能够成功查看Namespace资源:

使用Azure RBAC对Kubernetes进行授权

当我们尝试创建Namespace资源是时,系统会提示权限不足:

使用Azure RBAC对Kubernetes进行授权