gpt4 book ai didi

azure - 循环访问 ARM 模板中的值

转载 作者:行者123 更新时间:2023-12-02 09:10:10 25 4
gpt4 key购买 nike

我已经花了一天多的时间来解决 ARM 模板遇到的问题,并且似乎陷入困境,因此请询问 SO,以防有人可以提供帮助。

为了描述该问题,我有一个现有的 Azure Key Vault 设置,并希望向该资源组添加许多访问策略。出于引用目的,以下是用于添加 Key Vault 访问策略的 ARM 模板引用:

https://learn.microsoft.com/en-gb/azure/templates/Microsoft.KeyVault/2018-02-14/vaults/accessPolicies

我希望向许多用户分配相同的权限,并且此用户列表不太可能经常更改,因此我希望在模板本身中硬编码引用这些用户的 objectId 数组,然后使用用于创建多重访问策略的“复制”功能。本质上,我希望最终结果与此接近,其中访问策略之间唯一变化的值是标识用户的 objectID:

{
"name": "TestKeyVault/add",
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"apiVersion": "2018-02-14",
"properties": {
"accessPolicies": [

{
"tenantId": "tenantIDStringGoesHere",
"objectId": "guidForUser1GoesHere",
"permissions": {
"keys": ["List"],
"secrets": ["List"],
"certificates": ["List"]
}
},

{
"tenantId": "tenantIDStringGoesHere",
"objectId": "guidForUser2GoesHere",
"permissions": {
"keys": ["List"],
"secrets": ["List"],
"certificates": ["List"]
}
}

]
}
}

我想用循环来解决这个问题而不是手动复制访问策略的原因是我相信这将使维护更容易,因为可以通过在数组中添加或删除值来处理人员变更,而不是通过复制或删除较大部分的文本。

我试图理解此处概述的“复制”语法,但我还没有找到适合我的用例的正确组合:

https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-multiple

我得到的最接近的是:

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

"keyVaultName": {
"type": "string",
"metadata": {
"description": "Name of the Vault"
}
},

"tenantId": {
"type": "string",
"defaultValue": "[subscription().tenantId]",
"metadata": {
"description": "Tenant Id of the subscription. Get using Get-AzureRmSubscription cmdlet or Get Subscription API"
}
},

"objectId": {
"type": "array",
"defaultValue": [
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
],
"metadata": {
"description": "Object Id of the AD user. Get using Get-AzureRmADUser or Get-AzureRmADServicePrincipal cmdlets"
}
},

"secretsPermissions": {
"type": "array",
"defaultValue": [
"list"
],
"metadata": {
"description": "Permissions to secrets in the vault. Valid values are: all, get, set, list, and delete."
}
}

},

"variables": {
"objectIdCount": "[length(parameters('objectId'))]"
},

"resources": [
{

"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "TestKeyVault/add",
"apiVersion": "2018-02-14",
"properties": {
"accessPolicies": [{
"tenantId": "[parameters('tenantId')]",
"objectId": "[parameters('objectId')[copyIndex('objectIdCopy')]]",
"permissions": {
"secrets": "[parameters('secretsPermissions')]"
},
"copy": {
"name": "objectIdCopy",
"count": 2
}


}]
}

}
]

}

值得注意的是,虽然我用 X 和 Y 替换了这个 SO 版本中的 objectId,但如果我替换 "objectId": "[parameters('objectId')[copyIndex('objectIdCopy'),则代码可以在真实版本中工作)]]"与 "objectId": "[parameters('objectId')[0]]"(换句话说,如果我只是对数组索引进行硬编码,它就可以工作,但如果我尝试使用 copyIndex,它就不行)。

我尝试过此模板的不同变体,但收到了各种错误消息,但在最新的迭代中,尝试通过 PowerShell 部署模板时收到的错误消息基本上可以概括为“模板函数此位置不应出现“copyIndex””。

谈谈我一直用来测试它的PowerShell,以下是一个简化版本:

Clear-Host

$deploymentResourceGroupName = 'TestRG'

$templatePath = 'test_template.json'

$templateParameterObject = @{}
$templateParameterObject += @{'keyVaultName' = 'TestKeyVault'}

New-AzureRmResourceGroupDeployment -ResourceGroupName $deploymentResourceGroupName -TemplateFile $templatePath -TemplateParameterObject $templateParameterObject

我意识到这是一个很长的问题,但我希望我已经提供了足够的信息来帮助调试这个问题。

有什么建议我应该更改以使复制功能正常工作吗?

最佳答案

这或多或少是你想要的(如果我正确理解你的话):

{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "TestKeyVault/add",
"apiVersion": "2018-02-14",
"properties": {
"copy": [
{
"name": "accessPolicies",
"count": "[length(parameters('objectId'))]",
"input": {
"tenantId": "[parameters('tenantId')]",
"objectId": "[parameters('objectId')[copyIndex('accessPolicies')]]",
"permissions": {
"secrets": "[parameters('secretsPermissions')]"
}
}
}
]
}
}

正在阅读:https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-multiple#property-iteration

关于azure - 循环访问 ARM 模板中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53323560/

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