gpt4 book ai didi

Azure ARM 模板 Keyvault 资源不断删除其他访问策略

转载 作者:行者123 更新时间:2023-12-03 23:15:37 24 4
gpt4 key购买 nike

我创建了一个 ARM 模板来部署 Azure WebApp,该应用程序使用托管服务身份验证和 KeyVault 来获取 secret 。因此,ARM 模板创建 WebApp 资源并启用 MSI,还创建 KeyVault 资源并将 WebApptenantid 和 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'))]"
]
}

最佳答案

accepted answer 的问题其不同之处在于它从 ARM 模板中完全删除了 Key Vault,这意味着在新环境中 Key Vault 的创建变成了手动过程。

ARM 不允许在不清除现有访问策略的情况下重新部署 key 保管库。 accessPolicies 属性是 required (恢复已删除的保管库时除外),因此省略它会导致错误。将其设置为 [] 将清除所有现有策略。已经有Microsoft Feedback request从 2018 年开始解决这个问题,目前有 152 票。

我发现解决此问题的最佳方法是仅在 key 保管库尚不存在时才进行有条件部署,通过单独的 add< 定义访问策略 子资源。这会导致添加或更新指定的策略,同时保留任何其他现有策略。我通过将现有资源名称列表传递到 ARM 模板来检查 key 保管库是否已存在。

在 Azure 管道中:

- task: AzurePowerShell@5
displayName: 'Get existing resource names'
inputs:
azureSubscription: '$(armServiceConnection)'
azurePowerShellVersion: 'LatestVersion'
ScriptType: 'InlineScript'
Inline: |
$resourceNames = (Get-AzResource -ResourceGroupName $(resourceGroupName)).Name | ConvertTo-Json -Compress
Write-Output "##vso[task.setvariable variable=existingResourceNames]$resourceNames"
azurePowerShellVersion: 'LatestVersion'

- task: AzureResourceManagerTemplateDeployment@3
name: DeployResourcesTemplate
displayName: 'Deploy resources through ARM template
inputs:
deploymentScope: 'Resource Group'
action: 'Create Or Update Resource Group'
# ...
overrideParameters: >-
-existingResourceNames $(existingResourceNames)
# ...
deploymentMode: 'Incremental'

在 ARM 模板中:

{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",

"parameters": {
"keyVaultName": {
"type": "string"
},
"existingResourceNames": {
"type": "array",
"defaultValue": []
}
},

"resources": [
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2016-10-01",
"name": "[parameters('keyVaultName')]",
"location": "[resourceGroup().location]",
// Only deploy the key vault if it does not already exist.
// Conditional deployment doesn't cascade to child resources, which can be deployed even when their parent isn't.
"condition": "[not(contains(parameters('existingResourceNames'), parameters('keyVaultName')))]",
"properties": {
"sku": {
"family": "A",
"name": "Standard"
},
"tenantId": "[subscription().tenantId]",
"enabledForDeployment": false,
"enabledForDiskEncryption": false,
"enabledForTemplateDeployment": true,
"enableSoftDelete": true,
"accessPolicies": []
},
"resources": [
{
"type": "accessPolicies",
"apiVersion": "2016-10-01",
"name": "add",
"location": "[resourceGroup().location]",
"dependsOn": [
"[parameters('keyVaultName')]"
],
"properties": {
"accessPolicies": [
// Specify your access policies here.
// List does not need to be exhaustive; other existing access policies are preserved.
]
}
}
]
}
]
}

关于Azure ARM 模板 Keyvault 资源不断删除其他访问策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51508061/

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