3

我有一个模板可以在其中创建一个密钥库和一个秘密。我还有一个服务结构模板,它需要密钥库中的 3 个东西:Vault URI、证书 URL 和证书指纹。

如果我使用 powershell 创建密钥库和机密,很容易从输出中手动复制这 3 个内容,并将它们粘贴到服务结构模板的参数中。但是,由于该证书与服务结构集群具有相同的生命周期,我希望做的是从密钥保管库模板链接到服务结构模板,所以当我部署密钥保管库和秘密时(顺便说一句,它是一个以 base 64 编码为字符串的密钥。我可以将其作为另一个密钥库中的秘密......),我可以将 3 个值作为参数传递。

所以我有两个问题。

  1. 如何检索 arm 模板中的 3 个值。Powershell 将它们输出为密钥库的“ResourceId”、密钥的“Id”和密钥的“版本”。我的尝试:

    "sourceVaultValue": {
        "value": "resourceId('Microsoft.KeyVault/vaults/', parameters('keyVaultName')"
        },
    "certificateThumbprint": {
        "value": "[listKeys(resourceId('secrets', parameters('secretName')), '2015-06-01')"
        },
    "certificateUrlValue": { "value": "[concat('https://', parameters('keyVaultName'), '.vault.azure.net:443/secrets/', parameters('secretName'), resourceId('secrets', parameters('secretName')))]"
    

但是 certificateUrlValue 不正确。您可以看到我尝试了使用和不使用 listKeys,但似乎都没有工作......(指纹在 certUrl 本身内)

  1. 如果要获得正确的值,我想尝试将它们作为参数传递给下一个模板。但是,有问题的模板比我要传递的 3 个参数多得多。那么是否有可能有一个parametersLink 元素来链接到参数文件,以及只有这3 个的parameters 元素?或者有没有一种预期的方式来做到这一点?

干杯

4

2 回答 2

4

好的,当你回到键盘时试试这个......

1) 对于 uri,您可以使用如下输出:

"secretUri": {
  "type": "string",
  "value": "[reference(resourceId('Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), parameters('secretName'))).secretUri]"
}

对于#2,您不能混合和匹配链接和某些值,它是一个或另一个。

关于如何做到这一点的一些想法(这在一定程度上取决于您希望如何构建其余部署)......

  • 考虑这一点的一种方法是不要嵌套 SF,而是将它们部署在相同的模板中,因为它们具有相同的生命周期
  • 而不是嵌套SF模板,嵌套KV模板并在SF模板中引用该部署的输出......

除此之外,我想不出任何优雅的东西 - 因为您想将“动态”参数传递给嵌套部署,所以唯一的方法就是动态地将参数文件写入链接后面或将所有参数传递给部署资源。

HTH - LMK 如果没有...

于 2016-05-12T02:21:41.507 回答
-3
Can't  Reference a secret with dynamic id !!!!
The obvious problems with this way of doing things are:
Someone needs to type the cleartext password which means:
it needs to be known to anyone who provisions the environment and how do I feed it into an automated environment deployment?  If I store the password in a parameter… ???????
   "variables": {
    "tenantPassword": {
      "reference": {
        "keyVault": {
          "ID": "[concat(subscription().id,'/resourceGroups/',parameters('keyVaultResourceGroup'),'/providers/Microsoft.KeyVault/vaults/', parameters('VaultName'))]"
        },
        "secretName": "tenantPassword"
      }
    }
  },
于 2017-04-13T16:12:56.890 回答