azure - 访问 Azure ARM 模板中的 secret

标签 azure azure-pipelines azure-resource-manager azure-keyvault

我按照 official documention 上的教程进行操作如何访问 Arm 模板中的 key 保管库 secret 。我尝试了静态和动态 key 保管库 ID 的两种方法,并且我让它们都工作了。 奇怪的是动态 id 方法需要设置大量样板文件(需要嵌套模板)。

在静态id方法中,您需要在模板参数文件中指定:

"adminPassword": {
        "reference": {
          "keyVault": {
          "id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>"
          },
          "secretName": "ExamplePassword"
        }
      }

这是很好且简单的设置。

但是,如果我在主模板文件的参数部分(不在参数文件中)尝试动态 id 方法的类似设置(没有嵌套模板),它将不起作用:

"adminPassword": {
      "type": "secureobject",
      "metadata": {
        "description": "Key vault secret"
      },
      "defaultValue": {
        "reference": {
          "keyVault": {
            "id": "[resourceId('keyvault-resource-group','Microsoft.KeyVault/vaults', 'keyvault-name')]"
          },
          "secretName": "ExamplePassword"
        }
      }
    }

问题是为什么这种方法不起作用?也许与arm模板生命周期有关? 当您只需要从 key 保管库访问一两个 secret 时,这将显着减少样板文件的数量。

重复一下,我确实使用了官方文档中的静态和动态 id 方法来使用嵌套模板。这是尝试减少(如果可能)arm 模板中的行数或消除对嵌套模板的需要。

最佳答案

documentation所示,您只能在链接模板参数中声明动态 key 保管库 ID,每次都必须为每个链接模板重复该 ID。

根据我的理解,您希望传入参数一次,然后将其重复用于多个链接的模板。

考虑到上述内容,您可以使用 New-AzResourceGroupDeployment 的内联参数从 PowerShell 传递securestring

ARM 模板

"adminPassword": {
  "type": "securestring",
  "metadata": {
    "description": "Key vault secret"
  }
}

PowerShell

$adminPassword = (Get-AzKeyVaultSecret `
    -VaultName "keyVaultName" `
    -Name "adminPassword").SecretValue

New-AzResourceGroupDeployment `
    -ResourceGroupName "my-resource-group" `
    -TemplateFile template.json `
    -TemplateParameterFile parameters.json `
    -adminPassword $adminPassword

您还可以将其与 Azure Key Vault Task 集成在 Azure Devops YAML 管道中:

- task: AzureKeyVault@1
  inputs:
    azureSubscription: $(subscriptionID)
    KeyVaultName: $(keyVaultName)
    SecretsFilter: '*'
    RunAsPreJob: false

然后您就可以在后续任务中引用该 secret 。您还可以将此 secret 作为参数传递给 Azure Resource Group Deployment task .

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

相关文章:

python - 未找到 Azure Flask 路由

sql-server - BCP SQL Server 日期格式无效

visual-studio - Visual Studio 2012 - 仅显示发布到 Azure

Azure Pipeline 拒绝从 zip 部署,而是从不存在的 blob 调用

当我重新部署逻辑应用程序 IaC 部分时,Azure 逻辑应用程序(标准)工作流被删除,如何避免这种情况?

azure-devops - Azure Pipelines 如何为 "Manual only"触发版本过滤每个阶段的工件

azure-resource-manager - 如何以编程方式将 NIC 从 Azure ARM 中的 VM 分离

linux - 如何为 VM 资源 azurerm_virtual_machine_scale_set 的每个实例执行具有不同参数的脚本?

azure - 基础设施版本控制 持续部署

azure - 如何使用 ARM 模板为 Azure 功能配置指定粘性槽设置