来自部署的关键金库值和链接的模板参数

问题描述:

我有一个模板来创建关键金库和其中的秘密。我还有一个服务结构模板,它需要密钥保管库中的三件事: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')))]" 
    

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

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

干杯

+0

埃德 - 只是为了确保,是模板的输出部分之上的JSON片段,创建秘密? –

+0

它本来不是。我在链接模板的参数元素中使用了它,然后将它移动到输出节以测试。我发现我可能需要在他们面前“参考”?我无法检查at th tho。我们将不得不明天重新开会:) –

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

1)的URI,您可以使用输出,如:

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

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

你怎么可以这样做一对夫妇的想法(这取决于你想如何构建部署的休息了一下)......想到这

  • 一种方式是代替嵌套SF,在同一个模板部署它们,因为它们具有相同的生命周期
  • 代替嵌套SF模板,巢KV模板,然后参考SF模板部署的输出...

除了我无法想到任何优雅 - 因为你wa nt将“动态”参数传递给嵌套部署的唯一方法是动态地将param文件写入链接或将所有参数传递给部署资源。

HTH - LMK如果不...

+0

很酷,谢谢。我想我有时候会陷入一种做法,一旦我开始做,然后继续工作,直到它工作或我卡住了。您的替代解决方案都很好,让我意识到我应该毫不犹豫地尝试和思考新的解决方案。 –

+0

我认为秘密对象的属性'secretUri'在秘密文档中有详细描述,但我一直无法找到它。我在这里查看https://msdn.microsoft.com/en-us/library/azure/mt620026.aspx KV文档,看看用什么属性来获取KV的资源ID,我看到我应该是能够使用'id',但它不起作用。例如,vaultUri的工作原理如下:'[reference(resourceId('Microsoft.KeyVault/vaults /',parameters('keyVaultName')))。vaultUri]',就像tenantId .. –

+0

所以我现在看到可以找到元素来自资源管理器。是否只能检索嵌套在资源管理器中的属性中的值? –

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" 
     } 
    } 
    }, 
+0

我建议你阅读堆栈溢出指南[我如何写出一个好的答案?](https://*.com/help/how-to-answer) – RobC