Conceder acesso de identidade gerida de uma aplicação do Service Fabric aos recursos do Azure

Antes que o aplicativo possa usar sua identidade gerenciada para acessar outros recursos, as permissões devem ser concedidas a essa identidade no recurso protegido do Azure que está sendo acessado. Conceder permissões normalmente é uma ação de gerenciamento no 'plano de controle' do serviço do Azure que possui o recurso protegido roteado por meio do Gerenciador de Recursos do Azure, que imporá qualquer verificação de acesso baseada em função aplicável.

A sequência exata de etapas dependerá do tipo de recurso do Azure que está sendo acessado, bem como do idioma/cliente usado para conceder permissões. O restante do artigo assume uma identidade atribuída pelo usuário atribuída ao aplicativo e inclui vários exemplos típicos para sua conveniência, mas não é de forma alguma uma referência exaustiva para este tópico; consulte a documentação dos respetivos serviços do Azure para obter instruções atualizadas sobre a concessão de permissões.

Concedendo acesso ao Armazenamento do Azure

Você pode usar a identidade gerenciada do aplicativo Service Fabric (atribuída pelo usuário neste caso) para recuperar os dados de um blob de armazenamento do Azure. Conceda à identidade as permissões necessárias para a conta de armazenamento atribuindo a função Leitor de Dados de Blob de Armazenamento à identidade gerenciada do aplicativo no escopo do grupo de recursos.

Para obter os passos detalhados, veja o artigo Atribuir funções do Azure com o portal do Azure.

Concedendo acesso ao Cofre da Chave do Azure

Da mesma forma, com o acesso ao armazenamento, você pode aproveitar a identidade gerenciada de um aplicativo do Service Fabric para acessar um cofre de chaves do Azure. As etapas para conceder acesso no portal do Azure são semelhantes às listadas acima e não serão repetidas aqui. Consulte a imagem abaixo para ver as diferenças.

Key Vault access policy

O exemplo a seguir ilustra a concessão de acesso a um cofre por meio de uma implantação de modelo; Adicione o(s) trecho(s) abaixo como outra entrada sob o resources elemento do modelo. O exemplo demonstra a concessão de acesso para os tipos de identidade atribuídos pelo usuário e pelo sistema, respectivamente - escolha o aplicável.

    # under 'variables':
  "variables": {
        "userAssignedIdentityResourceId" : "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]",
    }
    # under 'resources':
    {
        "type": "Microsoft.KeyVault/vaults/accessPolicies",
        "name": "[concat(parameters('keyVaultName'), '/add')]",
        "apiVersion": "2018-02-14",
        "properties": {
            "accessPolicies": [
                {
                    "tenantId": "[reference(variables('userAssignedIdentityResourceId'), '2018-11-30').tenantId]",
                    "objectId": "[reference(variables('userAssignedIdentityResourceId'), '2018-11-30').principalId]",
                    "dependsOn": [
                        "[variables('userAssignedIdentityResourceId')]"
                    ],
                    "permissions": {
                        "keys":         ["get", "list"],
                        "secrets":      ["get", "list"],
                        "certificates": ["get", "list"]
                    }
                }
            ]
        }
    },

E para identidades gerenciadas atribuídas ao sistema:

    # under 'variables':
  "variables": {
        "sfAppSystemAssignedIdentityResourceId": "[concat(resourceId('Microsoft.ServiceFabric/clusters/applications/', parameters('clusterName'), parameters('applicationName')), '/providers/Microsoft.ManagedIdentity/Identities/default')]"
    }
    # under 'resources':
    {
        "type": "Microsoft.KeyVault/vaults/accessPolicies",
        "name": "[concat(parameters('keyVaultName'), '/add')]",
        "apiVersion": "2018-02-14",
        "properties": {
            "accessPolicies": [
            {
                    "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
                    "tenantId": "[reference(variables('sfAppSystemAssignedIdentityResourceId'), '2018-11-30').tenantId]",
                    "objectId": "[reference(variables('sfAppSystemAssignedIdentityResourceId'), '2018-11-30').principalId]",
                    "dependsOn": [
                        "[variables('sfAppSystemAssignedIdentityResourceId')]"
                    ],
                    "permissions": {
                        "secrets": [
                            "get",
                            "list"
                        ],
                        "certificates": 
                        [
                            "get", 
                            "list"
                        ]
                    }
            },
        ]
        }
    }

Para obter mais detalhes, consulte Vaults - Update Access Policy.

Próximos passos