使用 Azure 角色型存取控制 (RBAC) 進行 Kubernetes 授權
適用於:Azure 本機上的 AKS 版本 23H2
基礎結構系統管理員可以使用 Azure 角色型存取控制 (Azure RBAC) 來控制誰可以存取 kubeconfig 檔案及其擁有的許可權。 Kubernetes 操作員可以使用 kubectl 工具,根據指定的許可權與 Kubernetes 叢集互動。 Azure CLI 可讓您輕鬆取得存取認證和 kubeconfig 組態檔,以使用 kubectl 連線到您的 AKS 叢集。
當您在 Microsoft Entra ID 與 AKS 之間使用整合式驗證時,可以使用 Microsoft Entra 使用者、群組或服務主體作為 Kubernetes 角色型存取控制 (Kubernetes RBAC) 中的主體。 此功能可讓您不必個別管理 Kubernetes 的使用者身分識別和認證。 不過,您仍必須個別設定和管理 Azure RBAC 和 Kubernetes RBAC。
本文說明如何使用 Azure RBAC 進行 Kubernetes 叢集授權,並搭配 Microsoft Entra ID 和 Azure 角色指派。
如需概念性概觀,請參閱 Azure Arc 所啟用 AKS 的 Azure RBAC for Kubernetes 授權 。
開始之前
開始之前,請確定您有下列必要條件:
Azure 本機上的 AKS 版本 23H2 目前僅支援在 Kubernetes 叢集建立期間啟用 Azure RBAC。 建立 Kubernetes 叢集之後,您無法啟用 Azure RBAC。
安裝最新版的 aksarc 和 connectedk8s Azure CLI 擴充功能。 請注意,您必須執行 aksarc 擴充功能 1.1.1 版或更新版本,才能啟用 Azure RBAC。 若要尋找最新版本,請執行
az --version
。 如果您需要安裝或升級 Azure CLI,請參閱 安裝 Azure CLI。az extension add --name aksarc az extension add --name connectedk8s
如果您已安裝擴充
aksarc
功能,請將擴充功能更新為最新版本:az extension update --name aksarc az extension update --name connectedk8s
您需要下列許可權,才能在建立 Kubernetes 叢集時啟用 Azure RBAC:
- 若要建立 Kubernetes 叢集,您需要 Azure Kubernetes Service Arc 參與者 角色。
- 若要使用
--enable-azure-rbac
參數,您需要角色型 存取控制 系統管理員角色,才能存取 Microsoft.Authorization/roleAssignments/write 許可權。 如需詳細資訊,請參閱<Azure 內建角色>。 - 新的角色指派最多可能需要五分鐘才能傳播,並由授權伺服器更新。
啟用 Azure RBAC 之後,您可以使用直接模式或 Proxy 模式,以指定的許可權存取 Kubernetes 叢集。
- 若要直接使用
az aksarc get-credentials
命令存取 Kubernetes 叢集,您需要 azure Kubernetes Service Arc 叢集使用者角色許可權中包含的 Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action。 - 若要使用 命令或從 Azure 入口網站,從任何地方使用
az connectedk8s proxy
Proxy 模式存取 Kubernetes 叢集,您需要 Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action 動作動作,其包含在已啟用 Azure Arc 的 Kubernetes 叢集使用者角色許可權中。 同時,您必須確認執行上線程式的代理程式和計算機符合已啟用 Azure Arc 的 Kubernetes 網路需求中指定的 網路需求。
- 若要直接使用
若要使用 kubectl,您可以使用 Azure RBAC 或 AAD 管理群組來存取它。
- 若要搭配 Azure RBAC 使用 kubectl,您需要 限定於連線叢集資源的 Azure Arc Kubernetes Viewer 角色。
- 若要搭配 AAD 系統管理員群組使用 kubectl,您不需要任何特定角色,但您必須確定您位於已連線叢集資源的 add-admin-group 清單中的其中一個群組中。
步驟 1:建立已啟用 Azure RBAC 的 Kubernetes 叢集
您可以建立已啟用 Azure RBAC 的 Kubernetes 叢集進行授權,以及用於驗證的Microsoft Entra ID。
az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --enable-azure-rbac
幾分鐘後,命令會完成並傳回關於叢集的 JSON 格式資訊。
步驟 2:為使用者建立角色指派以存取叢集
Arc 所啟用的 AKS 提供下列五個內建角色。 它們與 Kubernetes 內建角色 類似,但有一些差異,例如支援 CRD。 請參閱每個 Azure 內建角色所允許的動作完整清單。
角色 | 描述 |
---|---|
已啟用 Azure Arc 的 Kubernetes 叢集使用者 | 可讓您擷取叢集 Connect 型 kubeconfig 檔案,以從任何地方管理叢集。 |
Azure Arc Kubernetes 檢視器 | 允許唯讀存取來查看命名空間中的大部分物件。 不允許檢視秘密,因為 秘密的讀取 許可權可存取 命名空間中的 ServiceAccount 認證。 這些認證接著允許透過該 ServiceAccount 值進行 API 存取(許可權提升的形式)。 |
Azure Arc Kubernetes 寫入器 | 允許命名空間中大部分物件的讀取/寫入存取權。 不允許檢視或修改角色或角色系結。 不過,此角色允許存取秘密和執行 Pod 做為命名空間中的任何 ServiceAccount 值,因此可用來取得命名空間中任何這類 ServiceAccount 值的 API 存取層級。 |
Azure Arc Kubernetes 管理員 | 允許管理員存取。 其旨在透過 RoleBinding 授與命名空間內。 如果您在 RoleBinding 中使用,它允許讀取/寫入命名空間中的大部分資源,包括能夠在命名空間內建立角色和角色系結。 此角色不允許對資源配額或命名空間本身進行寫入存取。 |
Azure Arc Kubernetes 叢集管理員 | 允許「超級使用者」存取在任何資源上執行任何動作。 當您在 ClusterRoleBinding 中使用時,它會完全控制叢集中和所有命名空間中的每個資源。 當您在 RoleBinding 中使用時,它會完整控制角色系結命名空間中的每個資源,包括命名空間本身。 |
您可以使用 az role assignment create
命令來建立角色指派。
首先,取得 $ARM-ID
您要指派角色的目標叢集的 。
$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)
然後,使用 az role assignment create
命令將角色指派給 Kubernetes 叢集。 您必須從第一步驟與assignee-object-id
此步驟的提供 $ARM_ID
。 assignee-object-id
可以是Microsoft Entra ID 或服務主體用戶端標識碼。
下列範例會將 Azure Arc Kubernetes Viewer 角色指派給 Kubernetes 叢集:
az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID
在此範例中,範圍是叢集的 Azure Resource Manager 標識符。 它也可以是包含 Kubernetes 叢集的資源群組。
建立自訂角色定義
您可以選擇建立自己的角色定義,以用於角色指派。
下列範例顯示角色定義,可讓使用者只讀取部署。 如需詳細資訊,請參閱可用來建構角色定義之資料動作的完整清單。 如需建立自定義角色的詳細資訊,請參閱 建立自定義角色的步驟
若要建立您自己的自定義角色定義,請將下列 JSON 物件複製到名為 custom-role.json 的檔案中。 將 <subscription-id>
預留位置取代為實際的訂用帳戶識別碼。 自訂角色會使用其中一個資料動作,並且讓您檢視角色指派建立所在的範圍 (叢集或命名空間) 中的所有部署。
{
"Name": "AKS Arc Deployment Reader",
"Description": "Lets you view all deployments in cluster/namespace.",
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
],
"NotDataActions": [],
"assignableScopes": [
"/subscriptions/<YOUR SUBSCRIPTION ID>"
]
}
如需自定義角色以及如何撰寫它們的資訊,請參閱 Azure 自定義角色。
使用 az role definition create
命令建立角色定義,並將 參數設定 --role-definition
為您 在上一個步驟中建立的 deploy-view.json檔案:
az role definition create --role-definition @deploy-view.json
使用 az role assignment create
命令將角色定義指派給使用者或其他身分識別:
az role assignment create --role "AKS Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID
步驟 3:存取 Kubernetes 叢集
您現在可以使用直接模式或 Proxy 模式,使用指定的許可權來存取 Kubernetes 叢集。
使用 kubectl 存取您的叢集(直接模式)
若要存取具有指定許可權的 Kubernetes 叢集,Kubernetes 操作員需要 Microsoft Entra kubeconfig,您可以使用 命令。az aksarc get-credentials
此命令提供系統管理員型 kubeconfig 的存取權,以及以用戶為基礎的 kubeconfig。 系統管理員型 kubeconfig 檔案包含秘密,應該定期安全地儲存和輪替。 另一方面,以用戶為基礎的Microsoft Entra ID kubeconfig 不包含秘密,而且可以散發給從其用戶端計算機連線的使用者。
若要執行此 Azure CLI 命令,您需要 azure Kubernetes Service Arc 叢集使用者角色許可權中包含的 Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action:
az aksarc get-credentials -g "$resource_group_name" -n $aks_cluster_name --file <file-name>
現在您可以使用 kubectl 管理叢集。 例如,您可以使用 kubectl get nodes
命令,列出叢集中的節點。 第一次執行時,您必須登入,如下列範例所示:
kubectl get nodes
從用戶端裝置存取您的叢集 (Proxy 模式)
若要使用 命令從任何地方存取 az connectedk8s proxy
Kubernetes 叢集,您需要 Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action,其包含在已啟用 Azure Arc 的 Kubernetes 叢集使用者角色許可權中。
在另一個用戶端裝置上執行下列步驟:
使用 Microsoft Entra 驗證登入
取得叢集連線 kubeconfig ,以從任何地方與叢集通訊(即使是從叢集周圍的防火牆外部):
az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
注意
此命令會開啟 Proxy 並封鎖目前的殼層。
在不同的殼層工作階段中,使用
kubectl
將要求傳送至叢集:kubectl get pods -A
您現在應該會看到叢集的回應,其中包含 default
命名空間下所有 Pod 的清單。
如需詳細資訊,請參閱 從用戶端裝置存取您的叢集。
清除資源
刪除角色指派
# List role assignments
az role assignment list --scope $ARM_ID --query [].id -o tsv
# Delete role assignments
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
刪除角色定義
az role definition delete -n "AKS Arc Deployment Reader"