共用方式為


適用於 Kubernetes 的 Azure 角色型存取控制授權

本文說明如何使用適用於 Kubernetes 授權的 Azure RBAC,以允許跨 Azure 資源、AKS 和 Kubernetes 資源進行統一管理和存取控制。 如需詳細資訊,請參閱 適用於 Kubernetes 授權的 Azure RBAC 授權

注意

當您使用 Microsoft Entra ID 與 AKS 之間的整合式驗證時,您可以使用 Microsoft Entra 使用者、群組或服務主體作為 Kubernetes 角色型存取控制 (Kubernetes RBAC) 中的主體。 使用此功能可讓您不必個別管理 Kubernetes 的使用者身分識別和認證。 不過,您仍必須個別設定和管理 Azure RBAC 和 Kubernetes RBAC。

開始之前

  • 您必須安裝並設定 Azure CLI 2.24.0 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI
  • 您需要最低版本為 1.18.3kubectl
  • 您需要在叢集上啟用受控 Microsoft Entra 整合,才能新增適用於 Kubernetes 的 Azure RBAC 授權。 如果您需要啟用受控 Microsoft Entra 整合,請參閱 在 AKS 中使用 Microsoft Entra ID
  • 如果您有 CRD,並進行自訂角色定義,則目前涵蓋 CRD 的唯一方法是使用 Microsoft.ContainerService/managedClusters/*/read。 對於其餘物件,您可以使用特定的 API 群組,例如:Microsoft.ContainerService/apps/deployments/read
  • 新的角色指派最多可能需要五分鐘才能傳播,並由授權伺服器更新。
  • 適用於 Kubernetes 的 Azure RBAC 授權要求針對驗證設定的 Microsoft Entra 租用戶,與保留 AKS 叢集之訂用帳戶的租用戶相同。

使用受控 Microsoft Entra 整合和適用於 Kubernetes 的 RBAC 授權,建立新的 AKS 叢集

  1. 使用 az group create 命令建立 Azure 資源群組。

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. 使用 az aks create 命令搭配受控 Microsoft Entra 整合和適用於 Kubernetes 的 RBAC 授權,建立 AKS 叢集。

    export CLUSTER_NAME=<cluster-name>
    
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --enable-aad \
        --enable-azure-rbac \
        --generate-ssh-keys
    

    您的輸出看起來應類似下列的範例輸出:

    "AADProfile": {
        "adminGroupObjectIds": null,
        "clientAppId": null,
        "enableAzureRbac": true,
        "managed": true,
        "serverAppId": null,
        "serverAppSecret": null,
        "tenantId": "****-****-****-****-****"
    }
    

在現有的 AKS 叢集上啟用 Azure RBAC

  • 若要在現有的 AKS 叢集上啟用適用於 Kubernetes 的 Azure RBAC 授權,請使用 az aks update 命令搭配 --enable-azure-rbac 旗標。

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
    

將適用於 Kubernetes 的 Azure RBAC 授權從 AKS 叢集停用

  • 若要將適用於 Kubernetes 的 Azure RBAC 授權從現有的 AKS 叢集中移除,請使用 az aks update 命令搭配 --disable-azure-rbac 旗標。

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

AKS 內建角色

AKS 提供下列內建角色:

角色 描述
Azure Kubernetes Service RBAC 讀取者 允許唯讀存取來查看命名空間中的大部分物件。 其不允許檢視角色或角色繫結。 此角色不允許檢視 Secrets,因為讀取祕密的內容可存取命名空間中的 ServiceAccount 認證,這會允許 API 以命名空間中任何 ServiceAccount 身分來存取 (權限提升的形式)。
Azure Kubernetes Service RBAC 寫入者 允許命名空間中大部分物件的讀取/寫入存取權。 不允許檢視或修改角色或角色繫結。 然而,此角色允許以命名空間中的任何 ServiceAccount 身分存取 Secrets 和執行 Pod,因此可用來取得命名空間中任何 ServiceAccount 的 API 存取層級。
Azure Kubernetes Service RBAC 管理員 允許管理員存取權,其用途是在命名空間內授與。 允許命名空間 (或叢集範圍) 中大部分的資源的讀取/寫入存取權 ,包括可在命名空間內建立角色和角色繫結。 此角色不允許對資源配額或命名空間本身進行寫入存取。
Azure Kubernetes Service RBAC 叢集管理員 允許進階使用者在任何資源上執行的存取權。。 這會提供叢集中和全部命名空間中每個資源的完整控制權。

建立叢集存取的角色指派

  1. 使用 az aks show 命令取得您的 AKS 資源識別碼。

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. 使用 az role assignment create 命令建立角色指派。 <AAD-ENTITY-ID> 可以是服務主體的使用者名稱或用戶端識別碼。 下列範例會建立 Azure Kubernetes Service RBAC 管理員角色的角色指派。

    az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

    注意

    您可以使用 az role assignment create 命令將 Azure Kubernetes Service RBAC 讀取器Azure Kubernetes Service RBAC 寫入器建立在叢集內特定命名空間,並設定所需命名空間的範圍。

    az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
    

建立自訂角色定義

以下是自訂角色的範例,可讓使用者唯讀部署,而不讀取其他內容。 如需可能動作的完整清單,請參閱 Microsoft.ContainerService 作業

  1. 若要建立您自己的自訂角色定義,請複製下列檔案,將 <YOUR SUBSCRIPTION ID> 取代為您自己的訂用帳戶識別碼,然後將它儲存為 deploy-view.json

    {
        "Name": "AKS Deployment Reader",
        "Description": "Lets you view all deployments in cluster/namespace.",
        "Actions": [],
        "NotActions": [],
        "DataActions": [
            "Microsoft.ContainerService/managedClusters/apps/deployments/read"
        ],
        "NotDataActions": [],
        "assignableScopes": [
            "/subscriptions/<YOUR SUBSCRIPTION ID>"
        ]
    }
    
  2. 使用 az role definition create 命令建立角色定義,將 --role-definition 設定為您在上一個步驟中建立的 deploy-view.json 檔案。

    az role definition create --role-definition @deploy-view.json 
    
  3. 使用 az role assignment create 命令,將角色定義指派給使用者或其他身分識別。

    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

將 Azure RBAC for Kubernetes Authorization 與 kubectl 搭配使用

  1. 請確定您有 Azure Kubernetes Service 叢集使用者內建角色,然後使用 az aks get-credentials 命令取得 AKS 叢集的 kubeconfig。

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. 您現在可以使用 kubectl 來管理叢集。 例如,您可以使用 kubectl get nodes 命令,列出叢集中的節點。

    kubectl get nodes
    

    範例輸出:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

將 Azure RBAC for Kubernetes Authorization 與 kubelogin 搭配使用

AKS 建立 kubelogin 外掛程式協助解除封鎖案例,例如非互動式登入、較舊的 kubectl 版本,或跨多個叢集利用 SSO,而不需要登入新的叢集。

  1. 執行下列命令來使用 kubelogin 外掛程式:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. 您現在可以使用 kubectl 來管理叢集。 例如,您可以使用 kubectl get nodes 命令,列出叢集中的節點。

    kubectl get nodes
    

    範例輸出:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

清除資源

刪除角色指派

  1. 使用 az role assignment list 命令列出角色指派。

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. 使用 az role assignment delete 命令刪除角色指派。

    az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
    

刪除角色定義

  • 使用 az role definition delete 命令刪除自訂角色定義。

    az role definition delete --name "AKS Deployment Reader"
    

刪除資源群組和 AKS 叢集

  • 使用 az group delete 命令刪除資源群組和 AKS 叢集。

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

下一步

若要深入了解 AKS Authentication、Authorization、Kubernetes RBAC 和 Azure RBAC,請參閱: