创建 Azure 角色分配

在本部分中,您将为 GKE on Azure 授予访问 Azure API 的权限。

要将服务主账号和订阅 ID 保存到 Shell 变量,请运行以下命令。将 APPLICATION_NAME 替换为您的应用的名称。

APPLICATION_ID=$(az ad app list --all \
    --query "[?displayName=='APPLICATION_NAME'].appId" \
    --output tsv)
SERVICE_PRINCIPAL_ID=$(az ad sp list --all  --output tsv \
      --query "[?appId=='$APPLICATION_ID'].id")
SUBSCRIPTION_ID=$(az account show --query "id" --output tsv)

将权限分配给服务主账号。GKE on Azure 需要权限,以便在订阅级别为托管式 Azure 资源预配所需的角色。

如需创建具有所需订阅范围权限的自定义角色,请执行以下操作:

  1. 创建名为 RoleAssignmentCreator.json 的新文件。

  2. 在编辑器中打开 RoleAssignmentCreator.json 并添加以下权限:

    {
        "Name": "Role Assignment Creator",
        "IsCustom": true,
        "Description": "Can create Azure role assignments.",
        "Actions": [
            "Microsoft.Authorization/roleAssignments/read",
            "Microsoft.Authorization/roleAssignments/write",
            "Microsoft.Authorization/roleAssignments/delete",
            "Microsoft.Authorization/roleDefinitions/read"
        ],
        "NotActions": [],
        "DataActions": [],
        "NotDataActions": [],
        "AssignableScopes": ["/subscriptions/${SUBSCRIPTION_ID}"]
    }
    
  3. 使用以下命令创建新的自定义角色:

    az role definition create --role-definition "~/CustomRoles/RoleAssignmentCreator.json"
    
  4. 使用以下命令将角色分配给服务主账号:

    az role assignment create --assignee ${SERVICE_PRINCIPAL_ID} --role "Role Assignment Creator" --scope /subscriptions/${SUBSCRIPTION_ID}
    

分配权限时,您可以在 Azure 订阅级层(应用于订阅中的所有资源)或资源组级层(将权限限制为特定资源组)限定权限范围。

订阅

为订阅分配 Contributor、User Access Administrator 和 Key Vault Administrator 角色:

az role assignment create \
    --role "Contributor" \
    --assignee "${SERVICE_PRINCIPAL_ID}" \
    --scope "/subscriptions/${SUBSCRIPTION_ID}"

az role assignment create \
    --role "User Access Administrator" \
    --assignee "${SERVICE_PRINCIPAL_ID}" \
    --scope "/subscriptions/${SUBSCRIPTION_ID}"

az role assignment create \
    --role "Key Vault Administrator" \
    --assignee "${SERVICE_PRINCIPAL_ID}" \
    --scope "/subscriptions/${SUBSCRIPTION_ID}"

资源组

  1. 创建范围限定为集群资源组的角色分配。将 CLUSTER_RESOURCE_GROUP_NAME 替换为 GKE on Azure 的资源组名称。

    az role assignment create \
      --role "Contributor" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/CLUSTER_RESOURCE_GROUP_NAME"
    
    az role assignment create \
      --role "User Access Administrator" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/CLUSTER_RESOURCE_GROUP_NAME"
    
    az role assignment create \
      --role "Key Vault Administrator" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/CLUSTER_RESOURCE_GROUP_NAME"
    
  2. 如果 Azure 虚拟网络位于不同的资源组中,请创建范围限定为虚拟网络资源组的角色分配。

    az role assignment create \
      --role "Virtual Machine Contributor" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/VNET_RESOURCE_GROUP_NAME"
    
    az role assignment create \
      --role "User Access Administrator" \
      --assignee "${SERVICE_PRINCIPAL_ID}" \
      --scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/VNET_RESOURCE_GROUP_NAME"
    

    请替换以下内容:

    • VNET_RESOURCE_GROUP_NAME:GKE on Azure VNet 的资源组名称

后续步骤