Compartilhar via


Usando identidades gerenciadas

As Managed Identities do Azure AD podem ser usadas para que o Azure CycleCloud gerencie clusters na sua assinatura (como alternativa ao uso de um Service Principal ). Eles também podem ser atribuídos às VMs do CycleCloud para fornecer acesso aos recursos do Azure (como Armazenamento, Key Vault ou Registros de Contêiner do Azure).

Permissões de VM do CycleCloud com Identidade Gerenciada

O CycleCloud automatiza muitas chamadas para o Azure Resource Manager para fins de gerenciamento de clusters HPC. Essa automação requer que determinadas permissões sejam concedidas ao CycleCloud. Esse acesso pode ser concedido ao CycleCloud configurando uma Entidade de Serviço ou atribuindo um de Identidade Gerenciada à VM do CycleCloud.

Geralmente, é recomendável usar uma Identidade Atribuída pelo Sistema ou uma Identidade GerenciadaUser-Assigned para conceder essas permissões em vez de uma Entidade de Serviço.

Quando o Azure CycleCloud tiver sido instalado em uma VM do Azure com uma Identidade Gerenciada atribuída a ela, a caixa de diálogo Criar Conta do Provedor de Nuvem se comportará um pouco diferente. Haverá uma nova caixa de seleção para a Identidade Gerenciada , e a ID de Assinatura será preenchida previamente com a assinatura associada à VM de host.

adicionar identidades gerenciadas por assinatura

adicionar identidades gerenciadas por assinatura

Ainda é possível inserir o conjunto padrão de credenciais simplesmente desmarcando a caixa de seleção Identidade Gerenciada. Ao fazer isso, os campos padrão serão adicionados ao formulário. Além disso, é perfeitamente aceitável usar uma ID de Assinatura separada; o valor fornecido é apenas para conveniência.

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

A opção mais simples (com direitos de acesso suficientes) é atribuir o papel de Colaborador da Assinatura à identidade gerenciada System-Assigned da VM do CycleCloud. No entanto, a Função de Colaborador tem um nível de privilégio mais alto do que o CycleCloud exige. Uma função personalizada pode ser criada e atribuída à VM.

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/*/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/read",
          "Microsoft.Storage/storageAccounts/listKeys/action",
          "Microsoft.Storage/storageAccounts/write"
        ],
        "dataActions": [],
        "notActions": [],
        "notDataActions": []
      }
    ],
    "Name": "CycleCloud <SubscriptionId>",
    "roleType": "CustomRole",
    "type": "Microsoft.Authorization/roleDefinitions"
}

Substitua <SubscriptionId> pela sua ID da assinatura. Essa função está no escopo de uma assinatura, mas pode ser definida para escopo de um único grupo de recursos, se preferir. Observe também que o nome deve ser exclusivo para o locatário.

Importante

O uso de uma função personalizada requer uma licença do Microsoft Entra ID P1. Para encontrar a licença certa para seus requisitos, consulte os planos e preços do Microsoft Entra.

Permissões opcionais

Se você estiver analisando o CycleCloud para usar um único grupo de recursos por cluster, poderá remover o seguinte de actions:

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

Se você não estiver usando o CycleCloud para atribuir Identidades Gerenciadas a VMs que ele cria em clusters, você poderá remover o seguinte de actions:

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

Aviso

As versões futuras do CycleCloud exigirão a capacidade de atribuir Identidades Gerenciadas a VMs, portanto, não é recomendável remover essas permissões.

Criando a função

Uma função pode ser criada a partir das definições de função por meio do CLI do Azure . Use essa função para criar uma definição de função dentro do Locatário do Azure. Depois que a função existir no locatário, atribua a função a uma identidade com escopo adequado.

Veja abaixo 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 é atribuída e está vinculada à identidade e pode ser usada com uma máquina virtual.

Atribuindo funções a VMs de cluster com Identidade Gerenciada

É comum que nós de cluster exijam 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 passar as credenciais de acesso necessárias usando uma User-Assigned Identidade Gerenciada em vez de enviar segredos/credenciais para o nó por meio da configuração do cluster.

User-Assigned Identidades Gerenciadas podem ser configuradas nas VMs do cluster usando a propriedade de nó Azure.Identities. O valor da propriedade Azure.Identities é uma lista separada por vírgulas de IDs de Recursos de 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
...