Поделиться через


Предоставление доступа к ресурсам Azure управляемому удостоверению приложения Service Fabric

Прежде чем приложение сможет использовать управляемое удостоверение для доступа к другим ресурсам, необходимо предоставить этому удостоверению доступ к защищенному ресурсу Azure. Разрешения обычно предоставляются на уровне управления службы Azure, которой принадлежит защищенный ресурс. Для этого используется Azure Resource Manager, который выполняет все необходимые проверки доступа на основе ролей.

Точная последовательность действий зависит от типа ресурса Azure, к которому предоставляется доступ, а также от языка и клиента, используемого для предоставления разрешений. Остальная часть статьи предполагает, что удостоверение приложения назначено пользователем. В статье приведено несколько типичных примеров для удобства, но она не является исчерпывающим источником информации по этой теме. Ознакомьтесь с документацией по соответствующим службам Azure, чтобы получить актуальные инструкции по предоставлению разрешений.

Предоставление доступа к службе хранилища Azure

Для получения данных из BLOB-объекта службы хранилища Azure можно использовать управляемое удостоверение приложения Service Fabric (в данном случае назначаемое пользователем). Предоставьте удостоверению необходимые разрешения для учетной записи хранения, назначив управляемому удостоверению приложения роль читателя данных BLOB-объектов хранилища для области resource-group.

Подробные инструкции см. в статье Назначение ролей Azure с помощью портала Microsoft Azure.

Предоставление доступа к Azure Key Vault

Помимо предоставления доступа к хранилищу, управляемое удостоверение приложения Service Fabric также можно использовать для доступа к Azure Key Vault. Действия по предоставлению доступа на портале Azure аналогичны перечисленным выше и не описываются отдельно. Различия показаны на приведенном ниже рисунке.

Политики доступа Key Vault

В следующем примере показано, как предоставить доступ к хранилищу путем развертывания шаблона. Добавьте приведенные ниже фрагменты кода в качестве дополнительной записи в элемент resources шаблона. В образце демонстрируется предоставление доступа для удостоверений, назначаемых пользователем и системой соответственно. Выберите нужный вариант.

    # 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"]
                    }
                }
            ]
        }
    },

Для удостоверений, назначаемых системой

    # 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"
                        ]
                    }
            },
        ]
        }
    }

Дополнительные сведения см. в разделе Хранилища — обновление политики доступа.

Следующие шаги