azure - Azure ARM 模板密钥库资源不断删除其他访问策略
问题描述
我创建了一个 ARM 模板来部署一个 Azure WebApp,它使用托管服务身份验证和 KeyVault 来获取机密。因此 ARM 模板创建 WebApp 资源并启用 MSI,还创建 KeyVault 资源并将 WebApp 租户 ID 和 objectid 添加到 accessPolicies,但是,ARM 模板还会从我的 Keyvault 中删除所有其他现有访问策略。
有没有办法对访问策略进行增量部署,这样我就不必在部署后将用户添加回 KeyVault 访问策略?
{
"type": "Microsoft.KeyVault/vaults",
"name": "[parameters('ICMODSKeyVaultName')]",
"apiVersion": "2016-10-01",
"location": "[resourceGroup().location]",
"properties": {
"sku": {
"family": "A",
"name": "standard"
},
"tenantId": "[reference(variables('identityResourceId'), '2015-08-31-PREVIEW').tenantId]",
"accessPolicies": [
{
"tenantId": "[reference(variables('identityResourceId'), '2015-08-31-PREVIEW').tenantId]",
"objectId": "[reference(variables('identityResourceId'), '2015-08-31-PREVIEW').principalId]",
"permissions": {
"secrets": [
"get"
]
}
}
],
"enabledForDeployment": true,
"enabledForTemplateDeployment": true
},
"dependsOn": [
"[concat('Microsoft.Web/sites/', parameters('AppName'))]"
]
}
解决方案
这是您应该得到的行为,因为 ARM 模板是幂等的。如果您将访问策略创建为单独的资源,您将能够更改此行为:
{
"name": "vaultName/policyName",
"location": xxx,
"api-version": "2016-10-01",
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"properties": {
"accessPolicies": [
{
"tenantId": "00000000-0000-0000-0000-000000000000",
"objectId": "00000000-0000-0000-0000-000000000000",
"permissions": {
"keys": [
"encrypt"
],
"secrets": [
"get"
],
"certificates": [
"get"
]
}
}
]
}
}
请记住,这是一个粗略的草图,它可能不起作用,但你可以很容易地让它工作。这是为了说明这个想法。
参考:https ://docs.microsoft.com/en-us/rest/api/keyvault/vaults/updateaccesspolicy
推荐阅读
- rust - 如何在 rust 中测试异步函数?
- python - 安装了 NodeJS,突然我的 python DLL 丢失了
- python - 如何使用 requests.post 在网站上提交表单?
- python - 在 pyspark 中应用 udf 过滤功能
- c++ - 从字节缓冲区到结构的强制转换有什么作用?
- intellij-idea - IntelliJ 检查在更新到 2021.1 后不起作用
- linux - Apache/Linux - 以 root 身份部署网站?
- visual-studio-code - VSCode 是否可以配置为添加自定义“|” 在 Rust 中使用闭包时(管道)匹配?
- scala - Seq[Any] 上的 scala 中的模式匹配
- oracle - 使用HiLo EF Core 5 设置值到前一个