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 ARM. Para obter mais informações sobre como implantar o aplicativo do Service Fabric pelo ARM, confira Implantar um aplicativo em um cluster gerenciado com o Azure Resource Manager.

Observação

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

A implantação do aplicativo do Service Fabric com identidade gerenciada tem suporte na versão de API "2021-05-01" em clusters gerenciados.

Os modelos de cluster gerenciado de exemplo estão disponíveis aqui: modelos de cluster gerenciados pelo Service Fabric

Suporte à identidade gerenciada no cluster gerenciado pelo Service Fabric

Quando um aplicativo Service Fabric é configurado com identidades gerenciadas para recursos do Azure e implantado no cluster, ele dispara a configuração automática do serviço de token de identidade gerenciado no cluster gerenciado pelo Service Fabric. Esse serviço é responsável pela autenticação de aplicativos do Service Fabric usando as respectivas identidades gerenciadas, bem como pela obtenção de tokens de acesso em nome dos aplicativos. Após habilitar o serviço, será possível vê-lo na seção Sistema do painel esquerdo do Service Fabric Explorer. Ele estará em execução com o nome fabric:/System/ManagedIdentityTokenService.

Observação

Na primeira vez que um aplicativo for implantado com identidades gerenciadas, você provavelmente verá uma implantação única, devido à alteração de configuração automática do cluster. Pode ser que demore de 15 minutos para um cluster zonal a 45 minutos para um cluster que abrange mais zonas. Se houver outras implantações em versão de pré-lançamento, a configuração de Identidade Gerenciada terá que esperar que elas sejam concluídas primeiro.

O recurso de aplicativo dá suporte à atribuição de SystemAssigned ou UserAssigned, e a atribuição pode ser feita conforme mostrado no snippet 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 a identidade atribuída pelo usuário, primeiro adicione a propriedade Identity ao recurso de aplicativo com o tipo userAssigned e as identidades atribuídas pelo usuário referenciadas. Depois, adicione uma seção managedIdentities dentro da seção properties para o recurso application que contém uma lista de nomes amigáveis para o mapeamento de principalId para cada uma das identidades atribuídas pelo usuário. Para obter mais informações sobre identidades atribuídas pelo usuário, confira Criar, listar ou excluir uma identidade gerenciada atribuída pelo usuário.

Modelo de aplicativo

Para habilitar o aplicativo com a identidade atribuída pelo usuário, primeiro adicione a propriedade identity ao recurso de aplicativo com o tipo userAssigned e as identidades atribuídas pelo usuário referenciadas e, em seguida, adicione um objeto managedIdentities dentro da seção properties que contém uma lista de nome amigável ao mapeamento principalId para cada uma das identidades atribuídas pelo 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 pelo usuário está sendo usado como o nome amigável da identidade gerenciada para o aplicativo. Os exemplos a seguir presumem que o nome amigável real é "AdminUser".

Pacote de aplicativos

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

    ApplicationManifest.xml

      <Principals>
        <ManagedIdentities>
          <ManagedIdentity Name="AdminUser" />
        </ManagedIdentities>
      </Principals>
    
  2. Na seção ServiceManifestImport, adicione uma IdentityBindingPolicy para o serviço que usa a identidade gerenciada. Essa política mapeia a identidade AdminUser 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 do serviço para adicionar uma ManagedIdentity dentro da seção Resources com um nome correspondente à ServiceIdentityRef na IdentityBindingPolicy do manifesto do aplicativo:

    ServiceManifest.xml

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

Identidade gerenciada atribuída pelo sistema

Modelo de aplicativo

Para habilitar o aplicativo usando uma identidade gerenciada atribuída pelo sistema, adicione a propriedade de identidade ao recurso de aplicativo com o tipo systemAssigned, conforme 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": {
        }
      }
    }

Essa propriedade declara, respectivamente, ao Azure Resource Manager, à Identidade Gerenciada e aos Provedores de Recursos do Service Fabric que esse recurso deverá ter uma identidade gerenciada implícita (system assigned).

Pacote de aplicativos e serviço

  1. Atualize o manifesto do aplicativo para adicionar um elemento ManagedIdentity à seção Entidades de Segurança contendo uma entrada única, conforme mostrado abaixo:

    ApplicationManifest.xml

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

    Esse elemento mapeia a identidade atribuída ao aplicativo como um recurso para um nome amigável a fim de executar uma atribuição posterior aos serviços que compõem o aplicativo.

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

    ApplicationManifest.xml

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

    Esse elemento atribui a identidade do aplicativo ao serviço. Sem essa atribuição, o serviço não será capaz de acessar a identidade do aplicativo. No snippet acima, a identidade SystemAssigned (uma palavra-chave reservada) é mapeada para obter a definição de serviço com o nome amigável WebAdmin.

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

    ServiceManifest.xml

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

    Esse é o mapeamento equivalente de uma identidade usada em um serviço conforme descrito acima, no entanto, da perspectiva da definição de serviço. A identidade é referenciada aqui pelo respectivo nome amigável (WebAdmin), conforme declarado no manifesto do aplicativo.

Próximas etapas