Implantar um aplicativo com Identidade Gerenciada em um cluster gerenciado do Service Fabric

Para implantar um aplicativo do Service Fabric com identidade gerenciada, o aplicativo precisa ser implantado por meio do Azure Resource Manager, normalmente com um modelo do Azure Resource Manager. Para obter mais informações sobre como implantar o aplicativo Service Fabric por meio do Azure Resource Manager, consulte Implantar um aplicativo em um cluster gerenciado usando o Azure Resource Manager.

Nota

Os aplicativos que não são implantados como um recurso do Azure não podem ter Identidades Gerenciadas.

A implantação de aplicativos do Service Fabric com Identidade Gerenciada é suportada com a versão "2021-05-01" da API em clusters gerenciados.

Exemplos de modelos de cluster gerenciado estão disponíveis aqui: Modelos de cluster gerenciado do Service Fabric

Suporte de identidade gerenciada no cluster gerenciado do Service Fabric

Quando um aplicativo do Service Fabric é configurado com identidades gerenciadas para recursos do Azure e implantado no cluster, ele aciona a configuração automática do Serviço de Token de Identidade Gerenciado no cluster gerenciado do Service Fabric. Esse serviço é responsável pela autenticação de aplicativos do Service Fabric usando suas identidades gerenciadas e pela obtenção de tokens de acesso em seu nome. Depois que o serviço estiver habilitado, você poderá vê-lo no Service Fabric Explorer na seção Sistema no painel esquerdo, executando sob o nome fabric:/System/ManagedIdentityTokenService.

Nota

Na primeira vez que um aplicativo é implantado com Identidades Gerenciadas, você deve esperar ver uma implantação única mais longa devido à alteração automática da configuração do cluster. Você deve esperar que isso leve de 15 minutos para um cluster zonal a 45 minutos para um cluster de abrangência de zona. Se houver outras implantações em voo, a configuração de Identidade Gerenciada terá que aguardar que elas sejam concluídas primeiro.

O recurso do aplicativo suporta a atribuição de SystemAssigned ou UserAssigned e a atribuição pode ser feita conforme mostrado no trecho abaixo.

{
  "type": "Microsoft.ServiceFabric/managedclusters/applications",
  "apiVersion": "2021-05-01",
  "identity": {
    "type": "SystemAssigned",
    "userAssignedIdentities": {}
  },
}

Referência JSON completa

Identidade atribuída pelo usuário

Para habilitar o aplicativo com identidade atribuída pelo usuário, primeiro adicione a propriedade identity ao recurso do aplicativo com o tipo userAssigned e as identidades atribuídas pelo usuário referenciadas. Em seguida, adicione uma seção managedIdentities dentro da seção de propriedades para o recurso de aplicativo, que contém uma lista de nomes amigáveis para o mapeamento principalId para cada uma das identidades atribuídas pelo usuário. Para obter mais informações sobre identidades atribuídas pelo usuário, consulte Criar, listar ou excluir uma identidade gerenciada atribuída pelo usuário.

Modelo de aplicação

Para habilitar o aplicativo com identidade Atribuída pelo Usuário, primeiro adicione a propriedade identity ao recurso do aplicativo com o tipo userAssigned e as identidades atribuídas ao usuário referenciado e, em seguida, adicione um objeto managedIdentities dentro da seção de propriedades que contém uma lista de nomes amigáveis ao mapeamento principalId para cada uma das identidades atribuídas ao usuário.

{
  "apiVersion": "2021-05-01",
  "type": "Microsoft.ServiceFabric/managedclusters/applications",
  "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[parameters('applicationVersion')]",
    "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]"
  ],
  "identity": {
    "type" : "userAssigned",
    "userAssignedIdentities": {
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]": {}
    }
  },
  "properties": {
    "version": "[parameters('applicationVersion')]",
    "parameters": {
    },
    "managedIdentities": [
      {
        "name" : "[parameters('userAssignedIdentityName')]",
        "principalId" : "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName')), '2018-11-30').principalId]"
      }
    ]
  }
}

No exemplo acima, o nome do recurso da identidade atribuída ao usuário está sendo usado como o nome amigável da identidade gerenciada para o aplicativo. Os exemplos a seguir assumem que o nome amigável real é "AdminUser".

Pacote de aplicação

  1. Para cada identidade definida na managedIdentities seção no modelo do Azure Resource Manager, adicione uma <ManagedIdentity> marca no manifesto do aplicativo na seção Principais . O Name atributo precisa corresponder name à propriedade definida na managedIdentities seção.

    ApplicationManifest.xml

      <Principals>
        <ManagedIdentities>
          <ManagedIdentity Name="AdminUser" />
        </ManagedIdentities>
      </Principals>
    
  2. Na seção ServiceManifestImport, adicione um IdentityBindingPolicy para o serviço que usa a Identidade Gerenciada. Esta política mapeia a AdminUser identidade para um nome de identidade específico do serviço que precisa ser adicionado ao manifesto do serviço posteriormente.

    ApplicationManifest.xml

      <ServiceManifestImport>
        <Policies>
          <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="AdminUser" />
        </Policies>
      </ServiceManifestImport>
    
  3. Atualize o manifesto de serviço para adicionar uma ManagedIdentity dentro da seção Recursos com o nome correspondente ao ServiceIdentityRefIdentityBindingPolicy no manifesto do aplicativo:

    ServiceManifest.xml

      <Resources>
        ...
        <ManagedIdentities DefaultIdentity="WebAdmin">
          <ManagedIdentity Name="WebAdmin" />
        </ManagedIdentities>
      </Resources>
    

Identidade gerida atribuída pelo sistema

Modelo de aplicação

Para habilitar o aplicativo com uma identidade gerenciada atribuída pelo sistema, adicione a propriedade identity ao recurso do aplicativo, com o tipo systemAssigned como mostrado no exemplo abaixo:

    {
      "apiVersion": "2021-05-01",
      "type": "Microsoft.ServiceFabric/managedclusters/applications",
      "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applicationTypes/', parameters('applicationTypeName'), '/versions/', parameters('applicationTypeVersion'))]"
      ],
      "identity": {
        "type" : "systemAssigned"
      },
      "properties": {
        "typeName": "[parameters('applicationTypeName')]",
        "typeVersion": "[parameters('applicationTypeVersion')]",
        "parameters": {
        }
      }
    }

Esta propriedade declara (para o Azure Resource Manager e os Managed Identity e Service Fabric Resource Providers, respectivamente), que esse recurso deve ter uma identidade gerenciada implícita (system assigned).

Pacote de aplicativos e serviços

  1. Atualize o manifesto do aplicativo para adicionar um elemento ManagedIdentity na seção Principals , contendo uma única entrada, conforme mostrado abaixo:

    ApplicationManifest.xml

    <Principals>
      <ManagedIdentities>
        <ManagedIdentity Name="SystemAssigned" />
      </ManagedIdentities>
    </Principals>
    

    Isso mapeia a identidade atribuída ao aplicativo como um recurso para um nome amigável, para posterior atribuição aos serviços que compõem o aplicativo.

  2. Na seção ServiceManifestImport correspondente ao serviço ao qual está sendo atribuída a identidade gerenciada, adicione um elemento IdentityBindingPolicy, conforme indicado abaixo:

    ApplicationManifest.xml

      <ServiceManifestImport>
        <Policies>
          <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="SystemAssigned" />
        </Policies>
      </ServiceManifestImport>
    

    Este elemento atribui a identidade da aplicação ao serviço; Sem essa atribuição, o serviço não poderá acessar a identidade do aplicativo. No trecho acima, a SystemAssigned identidade (que é uma palavra-chave reservada) é mapeada para a definição do serviço sob o nome WebAdminamigável.

  3. Atualize o manifesto do serviço para adicionar um elemento ManagedIdentity dentro da seção Recursos com o nome correspondente ao valor da ServiceIdentityRef configuração da definição no manifesto do IdentityBindingPolicy aplicativo:

    ServiceManifest.xml

      <Resources>
        ...
        <ManagedIdentities DefaultIdentity="WebAdmin">
          <ManagedIdentity Name="WebAdmin" />
        </ManagedIdentities>
      </Resources>
    

    Este é o mapeamento equivalente de uma identidade para um serviço, conforme descrito acima, mas da perspetiva da definição de serviço. A identidade é aqui referenciada pelo seu nome amigável (WebAdmin), conforme declarado no manifesto do pedido.

Próximos passos