Compartilhar via


Usar identidades gerenciadas

Use identidades gerenciadas do Microsoft Entra para conceder permissão ao Azure CycleCloud para gerenciar clusters em sua assinatura. Essa abordagem serve como uma alternativa ao uso de uma entidade de serviço. Atribua identidades gerenciadas a VMs do CycleCloud para fornecer acesso aos recursos do Azure, como Armazenamento, Key Vault ou Registros de Contêiner do Azure.

Permissões de máquinas virtuais do CycleCloud com identidade gerenciada

O CycleCloud automatiza muitas chamadas para o Azure Resource Manager para gerenciar clusters HPC. Essa automação precisa de certas permissões para o CycleCloud. Você pode conceder esse acesso ao CycleCloud configurando uma Entidade de Serviço ou atribuindo uma Identidade Gerenciada à VM do CycleCloud.

É recomendável usar uma Identidade gerenciada atribuída pelo sistema ou Atribuída pelo usuário para conceder essas permissões em vez de uma Entidade Principal de Serviço.

Quando você instala o Azure CycleCloud em uma VM do Azure e atribui uma Identidade Gerenciada à VM, a caixa de diálogo Adicionar Assinatura funciona um pouco diferente. A caixa de diálogo habilita e pré-seleciona a opção de autenticação de Identidade Gerenciada. Ele também preenche a ID da Assinatura com a assinatura da VM do host.

adicionar identidades gerenciadas por assinatura

adicionar identidades gerenciadas por assinatura

Você ainda pode inserir o conjunto padrão de credenciais selecionando a opção de autenticação de Registro de Aplicativo . Quando você seleciona essa opção, os campos padrão aparecem no formulário. Você também pode usar uma ID de Assinatura diferente; o valor fornecido é apenas para conveniência.

Ao usar uma Identidade Gerenciada Atribuída pelo Sistema, deixe o campo ClientID em branco. Mas quando você usar o CycleCloud com uma Identidade Gerenciada Atribuída pelo Usuário, defina a ClientID como a ClientID da Identidade gerenciada específica desejada para orquestração de cluster.

Acesso ao cofre de armazenamento

Além de usar uma identidade gerenciada para orquestração de cluster na VM do CycleCloud, você pode configurar o CycleCloud para atribuir uma identidade gerenciada atribuída pelo usuário aos clusters para acesso à conta de armazenamento e ao cofre a partir dos nós do cluster. Essa abordagem usa a identidade gerenciada atribuída pelo usuário em vez de tokens SAS derivados da chave de acesso compartilhado da conta de armazenamento.

Para configurar clusters para usar uma identidade gerenciada atribuída pelo usuário em vez da chave de acesso compartilhado, crie uma identidade gerenciada dedicada atribuída pelo usuário com acesso ao Leitor de Dados do Blob de Armazenamento no escopo da conta de armazenamento. Primeiro, crie a conta de armazenamento e a identidade gerenciada atribuída pelo usuário em sua assinatura do Azure. Em seguida, na seção Configuração do cofre de armazenamento da caixa de diálogo Adicionar assinatura, selecione a nova identidade gerenciada na lista suspensa Identidade do locker e conta de armazenamento na lista suspensa Conta de armazenamento.

Criar uma função personalizada e uma identidade gerenciada para o CycleCloud

A opção mais simples que fornece direitos de acesso suficientes é atribuir as funções Contributor e Storage Blob Data Contributor a assinatura à VM do CycleCloud como uma identidade gerenciada atribuída pelo sistema. No entanto, a Contributor função tem um nível de privilégio mais alto do que o CycleCloud exige. Você pode criar e atribuir uma função personalizada à VM. Da mesma forma, atribua a função Storage Blob Data Contributor no escopo da conta de armazenamento em vez do escopo da assinatura se você já tiver criado a conta de armazenamento.

Essa função abrange todos os recursos do CycleCloud:

{
    "assignableScopes": [
      "/subscriptions/<SubscriptionId>"
    ],
    "description": "CycleCloud Orchestrator Role",
    "permissions": [
      {
        "actions": [
          "Microsoft.Authorization/*/read",
          "Microsoft.Authorization/roleAssignments/*",
          "Microsoft.Authorization/roleDefinitions/*",
          "Microsoft.Commerce/RateCard/read",
          "Microsoft.Compute/*/read",
          "Microsoft.Compute/availabilitySets/*",
          "Microsoft.Compute/disks/*",
          "Microsoft.Compute/images/read",
          "Microsoft.Compute/locations/usages/read",
          "Microsoft.Compute/register/action",
          "Microsoft.Compute/skus/read",
          "Microsoft.Compute/virtualMachines/*",
          "Microsoft.Compute/virtualMachineScaleSets/*",
          "Microsoft.Compute/virtualMachineScaleSets/virtualMachines/*",
          "Microsoft.ManagedIdentity/userAssignedIdentities/*/read",
          "Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action",
          "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read",
          "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write",
          "Microsoft.Network/*/read",
          "Microsoft.Network/locations/*/read",
          "Microsoft.Network/networkInterfaces/read",
          "Microsoft.Network/networkInterfaces/write",
          "Microsoft.Network/networkInterfaces/delete",
          "Microsoft.Network/networkInterfaces/join/action",
          "Microsoft.Network/networkSecurityGroups/read",
          "Microsoft.Network/networkSecurityGroups/write",
          "Microsoft.Network/networkSecurityGroups/delete",
          "Microsoft.Network/networkSecurityGroups/join/action",
          "Microsoft.Network/publicIPAddresses/read",
          "Microsoft.Network/publicIPAddresses/write",
          "Microsoft.Network/publicIPAddresses/delete",
          "Microsoft.Network/publicIPAddresses/join/action",
          "Microsoft.Network/register/action",
          "Microsoft.Network/virtualNetworks/read",
          "Microsoft.Network/virtualNetworks/subnets/read",
          "Microsoft.Network/virtualNetworks/subnets/join/action",
          "Microsoft.Resources/deployments/read",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Resources/subscriptions/resourceGroups/write",
          "Microsoft.Resources/subscriptions/resourceGroups/delete",
          "Microsoft.Resources/subscriptions/resourceGroups/resources/read",
          "Microsoft.Resources/subscriptions/operationresults/read",
          "Microsoft.Storage/*/read",
          "Microsoft.Storage/checknameavailability/read",
          "Microsoft.Storage/register/action",
          "Microsoft.Storage/storageAccounts/blobServices/containers/delete",
          "Microsoft.Storage/storageAccounts/blobServices/containers/read",
          "Microsoft.Storage/storageAccounts/blobServices/containers/write",
          "Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action",
          "Microsoft.Storage/storageAccounts/read",
          "Microsoft.Storage/storageAccounts/listKeys/action",
          "Microsoft.Storage/storageAccounts/write"
        ],
        "dataActions": [
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete",
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read",
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write",
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/move/action",
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action"
        ],
        "notActions": [],
        "notDataActions": []
      }
    ],
    "Name": "CycleCloud <SubscriptionId>",
    "roleType": "CustomRole",
    "type": "Microsoft.Authorization/roleDefinitions"
}

Certifique-se de substituir <SubscriptionId> pela ID da sua assinatura. Você pode definir o escopo dessa função para uma assinatura, mas poderá defini-la para um único grupo de recursos, se preferir. O nome deve ser exclusivo para o locatário.

Importante

Para usar uma função personalizada, você precisa de uma licença do Microsoft Entra ID P1. Para obter mais informações sobre licenças, consulte os planos e preços do Microsoft Entra.

Permissões opcionais

Se você estiver configurando o CycleCloud para usar um único grupo de recursos para cada cluster, poderá remover as seguintes permissões do actions:

          "Microsoft.Resources/subscriptions/resourceGroups/write",
          "Microsoft.Resources/subscriptions/resourceGroups/delete",

Se você não estiver usando o CycleCloud para atribuir identidades gerenciadas às VMs que ele cria em clusters, você poderá remover as seguintes permissões de actions:

          "Microsoft.Authorization/*/read",
          "Microsoft.Authorization/roleAssignments/*",
          "Microsoft.Authorization/roleDefinitions/*",

Aviso

Versões futuras do CycleCloud exigem a capacidade de atribuir identidades gerenciadas a VMs. Não recomendamos remover essas permissões.

Criando a função

Você pode criar uma função a partir das definições de função usando a CLI do Azure. Use essa função para criar uma definição de função dentro do locatário do Azure. Quando a função existir no locatário, atribua a função a uma identidade com o escopo adequado.

O exemplo a seguir mostra o fluxo básico usando a CLI do Azure.

# Create a custom role definition
az role definition create --role-definition role.json
# Create user identity
az identity create --name <name>
# Assign the custom role to the identity with proper scope
az role assignment create --role <CycleCloudRole> --assignee-object-id <identity-id> --scope <subscription>

Agora a função personalizada está atribuída e vinculada à identidade. Você pode usá-lo com uma VM.

Atribuindo funções a VMs de cluster com identidade gerenciada

Os nós de cluster geralmente precisam de acesso aos recursos do Azure. Por exemplo, muitos clusters exigem acesso ao Armazenamento do Azure, ao Key Vault ou aos Registros de Contêiner do Azure para executar a carga de trabalho. É altamente recomendável usar uma identidade gerenciadaUser-Assigned para fornecer credenciais de acesso em vez de passar segredos ou credenciais para o nó por meio da configuração do cluster.

Você pode configurar identidades gerenciadas atribuídas pelo usuário nas VMs do cluster usando a propriedade do nó Azure.Identities. Defina a Azure.Identities propriedade como uma lista separada por vírgulas de cadeias de ID de recursos da identidade gerenciada:

[cluster sample]
...
    [[node defaults]]
    ...
    Azure.Identities = $ManagedServiceIdentity
...

[parameters Required Settings]
...
  [[parameter ManagedServiceIdentity]]
  ParameterType = Azure.ManagedIdentity
  Label = MSI Identity
  Description = The resource ID of the Managed Service Identity to apply to the nodes
...