我相信您指的是Managed Identities 如果是这种情况,那么最佳做法是通过服务主体授予对 Web 应用程序身份的访问权限,因为没有要交换的密码并且身份存在应用的生命周期。
幕后的托管身份使用指纹识别应用就是它所说的那个人。
如果分配给 Azure Key Vault,则需要更新访问策略,并且可以通过 ARM 分配以下内容:
"objectId": "[reference(resourceId('Microsoft.Web/sites', INSERT APP SERVICE NAME), '2018-02-01', 'Full').identity.principalId]"
一个重要的提示是,如果通过相同的 ARM 模板创建应用服务和 Key Vault,则取决于应用服务,Key Vault 上将需要一个 dependsOn。不想为尚未创建的 ID 创建访问策略。
如果通过 ARM 分配托管标识和 RBAC 角色,这是一种解决方案,它说明了将 Azure 内置贡献者角色的应用服务分配给特定存储帐户。在变量部分定义你的角色名称和RoleID:
"Contributor": {
"RoleID": "[concat(variables('roleDefinition'), 'b24988ac-6180-42a0-ab88 20f7382dd24c')]",
"RoleName": "Contributor"
}
然后这将在 ARM 模板中分配:
{
"type": "Microsoft.Storage/storageAccounts/providers/roleAssignments",
"apiVersion": "2018-09-01-preview",
"name": "[concat(variables('storageName'), '/Microsoft.Authorization/', guid(uniqueString(variables('storageName'),variables('Reader').RoleName,parameters('principalId'))))]",
"properties": {
"roleDefinitionId": "[variables('Contributor').RoleID]",
"principalId": "[reference(resourceId('Microsoft.Web/sites', variables('webSiteName')), '2018-02-01', 'Full').identity.principalId]"
}
}
如果通过相同的 ARM 模板构建/分配,请再次确保正确识别 dependsOn。
如果使用插槽,每个插槽都将拥有自己的托管身份,该身份将保留在插槽中。因此,Slot-A 将始终作为 Slot-A 提供访问权限,并且在插槽切换时不会交换。