gpt4 book ai didi

webapp 上的 Azure keyvault 访问策略而不是应用程序服务主体

转载 作者:行者123 更新时间:2023-12-03 02:37:39 26 4
gpt4 key购买 nike

我有一个托管在 Azure WebApp 中的 WebApi。我已在 Azure AD 中创建了应用程序注册。

WebApi 连接字符串存储在 Azure Keyvault 中。我不明白的是,在 Keyvault 访问策略中,我必须授予对 WebApp(获取和列出 secret )的访问权限,而不是授予对 Azure AD 中创建的应用服务主体的访问权限。否则它将无法工作,WebApi 在尝试连接到 KeyVault 时将无法启动并返回 403。

但通常应该将访问权限授予用户或服务主体,而不是 Web 应用程序。这是正确的吗?

最佳答案

我相信你指的是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 上将需要 dependentOn。不想为尚未创建的 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 模板构建/分配,请再次确保正确识别 dependentOn。

把这个也扔出去,如果使用插槽,每个插槽将有它自己的托管身份,该身份将保留在插槽中。因此,Slot-A 将始终作为 Slot-A 提供访问权限,并且在插槽切换时不会交换。

关于webapp 上的 Azure keyvault 访问策略而不是应用程序服务主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62645559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com