部署中的关键保管库值以及链接的模板参数

时间:2016-05-10 16:52:40

标签: azure-resource-manager azure-service-fabric azure-keyvault arm-template

我有一个模板来创建一个密钥库和一个秘密。我还有一个服务结构模板,它需要来自密钥库的3件事:Vault URI,证书URL和证书指纹。

如果我使用powershell创建密钥保管库和密钥,则可以轻松地从输出中手动复制这3个内容,并将其粘贴到服务结构模板的参数中。但是,由于此证书与服务结构集群具有相同的生命周期,我希望做的是从密钥保管库模板链接到服务结构模板,因此当我部署密钥保险库和密钥时(btw是一个基础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')))]"
    
  2. 但certificateUrlValue不正确。您可以看到我尝试使用和不使用listKeys,但似乎都没有工作......(指纹在certUrl本身内)

    1. 如果我要获得正确的值,我想尝试将它们作为参数传递给下一个模板。有问题的模板比我想传递的3个参数多了很多。那么有可能有一个parametersLink元素链接到参数文件,以及只有那些3的参数元素?或者有预期的方法吗?
    2. 干杯

2 个答案:

答案 0 :(得分:3)

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

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

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

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

关于如何做到这一点的几点想法(这取决于你想要如何构建部署的其余部分)......

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

除此之外,我无法想到任何优雅的东西 - 因为你想通过"动态"实际上,只有这样才能在链接后面动态编写param文件或将所有参数传递给部署资源。

HTH - LMK,如果它没有......

答案 1 :(得分:-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"
      }
    }
  },