Compartilhar via


Adicionar uma identidade gerenciada a um tipo de nó de cluster gerenciado do Service Fabric

Cada tipo de nó em um cluster gerenciado do Service Fabric é armazenado em backup por um conjunto de dimensionamento de máquinas virtuais. Para permitir que identidades gerenciadas sejam usadas com um tipo de nó de cluster gerenciado, uma propriedade vmManagedIdentity foi adicionada às definições de tipo de nó que contém uma lista de identidades que podem ser usadas, userAssignedIdentities. A funcionalidade espelha como as identidades gerenciadas podem ser usadas em clusters não gerenciados, como usar uma identidade gerenciada com a extensão do conjunto de dimensionamento de máquinas virtuais do Azure Key Vault.

Para obter um exemplo de uma implantação de cluster gerenciado do Service Fabric que usa a identidade gerenciada em um tipo de nó, veja estes modelos. O exemplo tem dois modelos:

  1. Identidade gerenciada e atribuição de função: modelo para criar a identidade gerenciada e a atribuição de função para permitir que o RP do Service Fabric atribua a identidade ao conjunto de dimensionamento de máquinas virtuais do cluster gerenciado. Essa implantação deve ocorrer apenas uma vez antes que a identidade gerenciada seja usada no recurso de tipo de nó.

  2. Cluster gerenciado e tipo de nó: modelo do cluster gerenciado do Service Fabric e dos recursos do tipo de nó usando a identidade gerenciada já criada.

Observação

Atualmente, somente as identidades atribuídas ao usuário têm suporte para esse recurso.

Pré-requisitos

Antes de começar:

  • Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
  • Se você planejar usar o PowerShell, instale a CLI do Azure para executar comandos de referência da CLI.

1. Criar uma identidade e uma atribuição de função

Criar uma identidade gerenciada atribuída ao usuário

Uma identidade gerenciada atribuída pelo usuário pode ser definida na seção de recursos de um modelo de Azure Resource Manager (ARM) para criação na implantação:

{
  "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
  "name": "[parameters('userAssignedIdentityName')]",
  "apiVersion": "2023-01-31",
  "location": "[resourceGroup().location]"
}

ou criado por meio do PowerShell:

New-AzResourceGroup -Name <managedIdentityRGName> -Location <location>
New-AzUserAssignedIdentity -ResourceGroupName <managedIdentityRGName> -Name <userAssignedIdentityName>

Adicionar uma atribuição de função com o provedor de recursos do Service Fabric

Adicione uma atribuição de função à identidade gerenciada com o aplicativo do provedor de recursos do Service Fabric. Essa atribuição permite que o provedor de recursos do Service Fabric atribua a identidade, criada na etapa anterior, ao conjunto de dimensionamento de máquinas virtuais do cluster gerenciado. Essa é uma ação avulsa

Obter a entidade de serviço para o aplicativo do provedor de recursos do Service Fabric:

Login-AzAccount
Select-AzSubscription -SubscriptionId <SubId>
Get-AzADServicePrincipal -DisplayName "Azure Service Fabric Resource Provider"

Observação

Verifique se você está na assinatura correta. A ID da entidade de segurança será alterada se a assinatura estiver em um locatário diferente.

ServicePrincipalNames : {74cb6831-0dbb-4be1-8206-fd4df301cdc2}
ApplicationId         : 74cb6831-0dbb-4be1-8206-fd4df301cdc2
ObjectType            : ServicePrincipal
DisplayName           : Azure Service Fabric Resource Provider
Id                    : 00000000-0000-0000-0000-000000000000

Use a ID da saída anterior como a principalId e a ID de definição de função abaixo como a roleDefinitionId no modelo ou no comando do PowerShell quando necessário:

Nome da definição de função ID de definição de função
Operador de Identidade Gerenciada f1a07417-d97a-45cb-824c-7a7467783830

Essa atribuição de função pode ser definida no modelo da seção de recursos usando a ID de entidade de segurança e a ID de definição de função:

{
  "type": "Microsoft.Authorization/roleAssignments",
  "apiVersion": "2022-04-01",
  "name": "[parameters('vmIdentityRoleNameGuid')]",
  "scope": "[concat('Microsoft.ManagedIdentity/userAssignedIdentities', '/', parameters('userAssignedIdentityName'))]",
  "dependsOn": [
    "[concat('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]"
  ],
  "properties": {
    "roleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'f1a07417-d97a-45cb-824c-7a7467783830')]",
    "principalId": "<Service Fabric Resource Provider ID>"
  }
}

Observação

vmIdentityRoleNameGuid deve ser um GUID válido. Se você implantar novamente o mesmo modelo, incluindo essa atribuição de função, certifique-se de que o GUID seja igual ao usado originalmente ou remova esse recurso, pois ele só precisa ser criado uma vez.

ou criado por meio do PowerShell usando a ID de entidade de segurança e o nome da definição de função:

New-AzRoleAssignment -PrincipalId "<Service Fabric Resource Provider ID>" -RoleDefinitionName "Managed Identity Operator" -Scope "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userAssignedIdentityName>"

Implantar a identidade gerenciada e a atribuição de função.

Execute o cmdlet New-AzResourceGroupDeployment para criar a identidade gerenciada e adicionar a atribuição de função:

New-AzResourceGroupDeployment -ResourceGroupName <managedIdentityRGName> -TemplateFile ".\MangedIdentityAndSfrpRoleAssignment.json" -TemplateParameterFile ".\MangedIdentityAndSfrpRoleAssignment.Parameters.json" -Verbose

2. Atribuir identidade ao recurso de tipo de nó

Adicionar propriedades de identidade gerenciada à definição de tipo de nó

Por fim, adicione as propriedades vmManagedIdentity e userAssignedIdentities à definição de tipo de nó do cluster gerenciado com a ID do recurso completa da identidade criada na primeira etapa. Use 2021-05-01 ou mais recente para apiVersion.

{
  "type": "Microsoft.ServiceFabric/managedClusters/nodeTypes",
  "apiVersion": "2022-01-01",
  "properties": {
    "isPrimary": true,
    "vmInstanceCount": 5,
    "dataDiskSizeGB": 100,
    "vmSize": "Standard_D2_v2",
    "vmImagePublisher": "MicrosoftWindowsServer",
    "vmImageOffer": "WindowsServer",
    "vmImageSku": "2019-Datacenter",
    "vmImageVersion": "latest",
    "vmManagedIdentity": {
      "userAssignedIdentities": [
        "[parameters('userAssignedIdentityResourceId')]"
      ]
    }
  }
}

Implantar o recurso de tipo de nó atribuindo a identidade

Execute o cmdlet New-AzResourceGroupDeployment para implantar o modelo de clusters gerenciados do Service Fabric que atribui a identidade gerenciada ao recurso de tipo de nó.

New-AzResourceGroupDeployment -ResourceGroupName <sfmcRGName> -TemplateFile ".\SfmcVmMangedIdentity.json" -TemplateParameterFile ".\SfmcVmMangedIdentity.Parameters.json" -Verbose

Após a implantação, a identidade gerenciada criada foi adicionada ao conjunto de dimensionamento de máquinas virtuais do tipo de nó designado e pode ser usada conforme o esperado, assim como em qualquer cluster não gerenciado.

Solução de problemas

Falha ao adicionar corretamente uma atribuição de função será atendida com o seguinte erro na implantação:

Portal do Azure de implantação mostrando o cliente com a ID de objeto/aplicativo do SFRP sem permissão para executar a atividade de gerenciamento de identidade

Nesse caso, verifique se a atribuição de função foi criada corretamente com a função "operador de identidade gerenciada". A atribuição de função pode ser encontrada no portal do Azure no controle de acesso do recurso de identidade gerenciada, como é mostrado abaixo.

Propriedades de atribuição de função do provedor do Service Fabric na identidade gerenciada atribuída pelo usuário mostrada no portal do Azure

Próximas etapas