当前位置: 首页 > 知识库问答 >
问题:

无法在同一ARM模板部署中创建和引用keyvault机密

诸葛品
2023-03-14
{
  "type": "Microsoft.KeyVault/vaults",
  "name": "[variables('KeyVaultName')]",
  "apiVersion": "2015-06-01",
  "location": "[resourceGroup().location]",
  "properties": {
    "enabledForTemplateDeployment": "true",
    "accessPolicies": "[variables('KeyVaultAccessPolicies')]",
    "tenantId": "[parameters('TenantId')]",
    "sku": {
      "name": "Standard",
      "family": "A"
    }
  }
},
{
  "type": "Microsoft.KeyVault/vaults/secrets",
  "name": "[concat(variables('KeyVaultName'), '/secretname')]",
  "apiVersion": "2015-06-01",
  "properties": {
    "value": "<a randomised value>"
  },
  "dependsOn": [
    "[concat('Microsoft.KeyVault/vaults/', variables('KeyVaultName'))]"
  ]
},
{
  "apiVersion": "2017-05-10",
  "name": "deploy",
  "type": "Microsoft.Resources/deployments",
  "resourceGroup": "<another resource group>",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "<my linked template>",
      "contentVersion": "1.0.0.0"
    },
    "parameters": {
      "SQLServerAdminPasswordSecretName": {
        "value": "secretname"
      }
    }
  },
  "dependsOn": [
    "[resourceId('Microsoft.KeyVault/vaults/secrets', variables('KeyVaultName'), 'secretname')]"
  ]
}
{
    "apiVersion": "2017-05-10",
    "name": "sql-server-deployment",
    "type": "Microsoft.Resources/deployments",
    "properties": {
        "mode": "Incremental",
        "templateLink": {
            "uri": "<another linked tempalate>",
            "contentVersion": "1.0.0.0"
        },
        "parameters": {
            "SQLServerName": {
                "value": "[variables('SQLServerName')]"
            },
            "SQLServerAdminPassword": {
                "reference": {
                    "keyVault": {
                        "id": "[resourceId(parameters('ParentResourceGroupName'), 'Microsoft.KeyVault/vaults', parameters('ParentKeyVaultName'))]"
                    },
                    "secretName": "[parameters('SQLServerAdminPasswordSecretName')]"
                }
            }
        }
    }
}

这个引用目前扼杀了我的整个部署,说:

“找不到指定得KeyVault'/subscriptions/[订阅id]/ResourceGroups/[父资源组]/Providers/Microsoft.KeyVault/Vaults/[my KeyVault]'.”

如果删除链接模板中的Keyvault引用,错误就会消失。

共有1个答案

平元明
2023-03-14

参数引用是在“编译”时评估的(即验证),因此验证模板时存储库确实需要存在。您可以通过嵌套几个层次的深度并使用来自嵌套部署的输出引用来实现这一点。你需要做这样的事情:

  • 嵌套存储库设置并输出VaultiD
  • 将SQL Server部署嵌套到“Level 1”嵌套中
  • 在上述项目符号的参数中,引用步骤1中的输出
  • 用从“Level 1”嵌套中的vaultId构造的参数引用嵌套另一个部署

我对你为什么要这么做很感兴趣...通常,vault引用用于保护纯文本/JSON之外的秘密。由于您在顶层将secret值传递到部署中,因此您已经拥有了该值。因为你已经有了它,所以没有理由从金库里引用它...

 类似资料:
  • 我正在Azure中部署一个虚拟机。用户名和密码将自动创建,并在部署时作为参数传递。部署vm的资源组也作为参数传递,所以可以是任何参数。 我的Keyvault在一个特定的资源组中,vm的用户名和密码应该存储在这里。

  • 我已经创建了服务主体,并授予了他对密钥库的所有权限。此外,我还在ARM模板中为密钥库启用了访问秘密。 使用powershell,我可以作为部署SP登录并检索秘密(证书)。 但是,在部署带有密钥存储库引用的ARM模板时,这不起作用。我得到以下错误:

  • 我有一组资源,希望使用Azure Portal中的模板部署特性来部署它们。在我的参数文件中,我很少引用这里提到的键库中的参数。在Azure portal中部署模板(单击Deploy a custom template)并提供这些值时,门户仍然会显式地要求这些参数,而我绝对不能以纯文本形式提供这些参数。

  • 我试图在powershell上使用ARM模板部署一个IoTHub,但是我得到了错误消息“:”对于sku=Free,Max alloved=1,Current=2超过了Iot集线器的最大数量“。 ARM模板中IoTHub参数的JSON如下所示:- “skuname”:{“type”:“string”,“defaultvalue”:“f1”,“metadata”:{“description”:“指定I

  • 我的源代码在GitHub上 我已设置Azure Devops管道,以构建应用程序并将其部署到Azure订阅 我也在ARM模板中定义了完整的azure环境。 我想只在我的GitHub回购中的特定文件夹更改时运行模板部署。 路径触发器仅适用于Azure Devops回购。 我调查了其他可能的解决方案,但没有明确的文档说明如何准确实现这一点: 生成或发布任务的自定义条件 部署前条件。也许是人工制品过滤器