我认为托管服务身份是一个很好的概念,我喜欢keyvault。然而:
当我使用脚本通过增量资源组部署时:
为简洁起见,修改了样本
{
"type": "Microsoft.KeyVault/vaults",
"name": "[parameters('keyvaultName')]",
"apiVersion": "2015-06-01",
"properties": {
"accessPolicies": [
{
"objectId": "[reference(parameters('functionAppName'), '2016-08-01', 'Full').identity.principalId]",
"permissions": {
"keys": [],
"secrets": [
"Get"
]
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
]
},
{
"apiVersion": "2016-08-01",
"type": "Microsoft.Web/sites",
"name": "[parameters('functionAppName')]",
"kind": "functionapp",
"identity": {
"type": "SystemAssigned"
},
}
它可以成功部署并将MSI添加到keyvault,但是-
它破坏了已经分配的访问策略。 Arm是否有可能保留accessPolicies并仅添加/更新匹配的策略?
没有这个,就不可能用MSI完全编写部署脚本,也无法将主体分配给keyvault。
我想念什么吗?
最佳答案
作为blog post的作者,我将根据mods发布详细信息:
当您部署名称为“add”的Microsoft.KeyVault/vaults/accessPolicies类型的资源时,该资源将合并到您的更改中。创建这种特殊的子资源类型是为了支持托管服务身份方案,在这种情况下,您直到部署VM之前都不知道VM的身份,并且希望在部署过程中向该保管库授予该身份访问权限。
增量部署可以与此json一起使用以实现目标:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vaultName": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "[concat(parameters('vaultName'), '/add')]",
"apiVersion": "2016-10-01",
"properties": {
"accessPolicies": [
{
"tenantId": "dfe47ca8-acfc-4539-9519-7d195a9e79e4",
"objectId": "5abe9358-10ae-4195-ba23-d34111430329",
"permissions": {
"keys": ["all"],
"secrets": ["all"],
"certificates": ["all"],
"storage": ["all"]
}
}
]
}
}
],
"outputs": {
}
}
关于Azure Keyvault通过ARM添加功能MSI,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47667050/