Criar atribuições de papel do Azure

Nesta seção, você concede permissões para que o GKE no Azure acesse as APIs do Azure.

Para salvar os IDs da principal de serviço e da assinatura em uma variável de shell, execute o comando a seguir. Substitua APPLICATION_NAME por um nome para o aplicativo.

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)

Atribua permissões ao principal de serviço. O GKE no Azure requer permissões para provisionar os papéis necessários aos recursos gerenciados do Azure no nível da assinatura.

Para criar um papel personalizado com as permissões necessárias no escopo da assinatura:

  1. Crie um novo arquivo denominado RoleAssignmentCreator.json.

  2. Abra RoleAssignmentCreator.json em um editor e adicione as seguintes permissões:

    {
        "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. Crie o novo papel personalizado com o seguinte comando:

    az role definition create --role-definition "~/CustomRoles/RoleAssignmentCreator.json"
    
  4. Atribua o papel ao principal de serviço usando o seguinte comando:

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

Ao atribuir permissões, é possível definir o escopo delas no nível da assinatura do Azure, que se aplica a todos os recursos da assinatura, ou no nível do grupo de recursos, o que limita as permissões a um grupo de recursos específico.

Inscrição

Atribua os papéis de Colaborador, Administrador de acesso de usuário e Administrador do Vault à sua assinatura:

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}"

Grupo de recursos

  1. Crie atribuições de papéis com escopo para o grupo de recursos do cluster. Substitua CLUSTER_RESOURCE_GROUP_NAME pelo nome do grupo de recursos do GKE no 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. Se a Rede Virtual do Azure estiver em um grupo de recursos diferente, crie atribuições de Papel com escopo definido para o grupo de recursos de rede virtual.

    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"
    

    Substitua:

    • VNET_RESOURCE_GROUP_NAME: o nome do grupo de recursos da VNet do GKE no Azure

A seguir