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": {}
},
}
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
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 . OName
atributo precisa correspondername
à propriedade definida namanagedIdentities
seção.ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="AdminUser" /> </ManagedIdentities> </Principals>
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>
Atualize o manifesto de serviço para adicionar uma ManagedIdentity dentro da seção Recursos com o nome correspondente ao
ServiceIdentityRef
IdentityBindingPolicy
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
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.
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 nomeWebAdmin
amigável.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 doIdentityBindingPolicy
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.