从 ARM 模板中的 customData (cloud-init) 部分访问 keyvault 中的秘密

access secret in keyvault from customData (cloud-init) section in ARM template

是否可以从 ARM 模板中参数文件的自定义数据 (cloud-init) 部分中的密钥保管库获取机密?这就是我想要完成的:

我需要将一个 config.json 文件注入虚拟机的特定位置,为简单起见,假设为 /tmp。我正在考虑使用 cloud-init。

config.json 文件如下所示:

#other cloud-init directives here....
"user": {
        "username": "admin",
        "password": "password",
        "role": "system_administrator",
        "type": "local"
    }
 

不言而喻,我正在寻找一种方法来不在我将使用 cloud-init 创建的文件中对密码进行硬编码。是否可以从 cloud-init 配置中调用 secret?

如果上述方法不可行,我可以在我的 arm 模板中创建一个变量(从密钥库获取密码),然后在 cloud-init 配置中引用该变量吗?

如果这也不可能,有没有人建议如何在 cloud-init 中创建一个有密码的配置文件?

欢迎任何想法,最终将使用 azure DevOps 部署 arm 模板,所以也许还有其他方法?或者 cloud-init 不是正确的选择?

我不确定你的问题到底是什么,但你可以参考 this 文章来了解如何使用模板中的密钥保管库机密,这非常简单。

一些注意事项:

  1. 您将不得不使用 concat 将秘密插入到您在问题中提到的一行中
  2. 我有理由相信您需要以 base64 编码的单行形式提供 cloud-init 文本,没有办法解决这个问题
  3. 你也可以在cloud-init中做这样的事情,这可以减轻你的痛苦:
#include
http://somesite.com/path/to/cloud-init.txt

我建议将托管标识包装到具有 AccessPolicy READ 到 Keyvault 的 VM。然后只需通过 Powershell 或 API (invoke-restmethod) 提取值作为 CustomData 字段中的内联命令。