azure - 访问 Azure ARM 模板中的机密
问题描述
我按照官方文档中的教程如何访问 arm 模板中的密钥库机密。我用静态和动态密钥库 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"
}
}
}
问题是为什么这种方法不起作用?也许与手臂模板生命周期有关?当您只需要从密钥保管库访问一两个秘密时,这将显着减少样板文件的数量。
再说一遍,我确实使官方文档中的静态和动态 id 方法与嵌套模板一起使用。如果可能的话,这是试图减少 arm 模板中的行数或消除对嵌套模板的需求。
解决方案
如文档中所示,您只能在链接模板参数中声明动态密钥保管库 ID,对于每个链接模板,每次都必须重复该 ID。
据我了解,您希望传入参数一次,然后将其重用于多个链接模板。
考虑到上述情况,您可以securestring
使用内联参数从 PowerShell传递New-AzResourceGroupDeployment
ARM 模板
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Key vault secret"
}
}
电源外壳
$adminPassword = (Get-AzKeyVaultSecret `
-VaultName "keyVaultName" `
-Name "adminPassword").SecretValue
New-AzResourceGroupDeployment `
-ResourceGroupName "my-resource-group" `
-TemplateFile template.json `
-TemplateParameterFile parameters.json `
-adminPassword $adminPassword
您还可以将其与Azure Devops YAML 管道中的Azure Key Vault 任务集成:
- task: AzureKeyVault@1
inputs:
azureSubscription: $(subscriptionID)
KeyVaultName: $(keyVaultName)
SecretsFilter: '*'
RunAsPreJob: false
然后您可以在后续任务中引用该秘密。您还可以将此机密作为参数传递给Azure 资源组部署任务。
推荐阅读
- python-3.x - 理解 pyro 上的深度马尔可夫模型代码
- css - 嵌套 CSS calc 不适用于 IE 11 和 Edge
- powershell - 测试 Windows 激活的功能
- python-requests - 仅在使用 python-requests 时从 Typeform API 获取 406 Not Acceptable
- c# - 从应用程序屏幕自定义生成的 PNG
- ios - 我如何通过通用链接使用深度链接打开相同的应用程序
- php - 如何使用 PHP Post 检索表单字段值
- android - 工具栏按钮单击事件在 Android 中不起作用
- c# - EF Core2.2:Scaffold-DbContext 不适用于 WPF 项目中的命名连接字符串
- ruby-on-rails - 第二个控制器中的 Ruby link_to 错误 - 没有路由匹配