如何使用从链接的ARM模板返回的secureObject或securestring

时间:2019-01-30 08:09:46

标签: azure arm-template securestring azure-template

如何使用从链接的ARM模板返回的securestringsecureObject的值?

例如,一个名为CreateStorage的子链接模板

  1. 创建一个Azure存储帐户
  2. 在该帐户上创建blob容器
  3. 为容器创建SAS密钥
  4. 返回模板outputs部分中的SAS密钥。

例如在模板输出中返回SAS:

"outputs": {
    "createdContainerSas": {
        "type": "string",
        "value": "[concat('https://', variables('storageAccountName'), '.blob.core.windows.net/', variables('containerName'), '?', listServiceSas(variables('storageAccountName'), '2018-07-01', variables('importSasInputs')).serviceSasToken)]"
    }
}

然后,主模板会将SAS密钥添加到KeyVault,以便其他应用程序可以使用它。主模板的值如下:

"value": "[reference('CreateStorage').outputs.createdContainerSas.value]"

问题是,当前SAS密钥以string的形式返回,这意味着它以纯文本形式出现在Azure部署用户界面中。

但是,当我将返回对象的类型更改为securestringsecureObject时,则在调用createdContainerSas.value时会遇到跟随错误:

{\r\n \"code\": \"InvalidTemplate\",\r\n \"message\": \"Unable to process template language expressions for resource '/subscriptions/<my-subscription-id>/resourceGroups/<my-resource-group>/providers/Microsoft.Resources/deployments/CreateKeyVault' at line '310' and column '9'. 'The language expression property 'value' doesn't exist, available properties are 'type'.'\"\r\n }

因此,从子链接的ARM模板返回.valuesecurestring时,secureObject属性似乎不存在。

位于https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-templates-outputs的Microsoft文档说

  

输出值支持与模板输入参数相同的类型。

并且securestringsecureObject都可以作为模板输入参数正常工作,所以我必须做错了事。

如何使用从链接的ARM模板返回的securestringsecureObject的值?

1 个答案:

答案 0 :(得分:2)

secureString \ secureObject类型从输入\输出中省略。您无法“获得”它们。他们只是被通过,就是这样。这就是为什么将其称为secure的原因。它们没有在任何地方记录。没有实际的解决方法。

在这种情况下,您只需在需要的地方拉键,就不必将它们拉到嵌套模板中并将其传递给父模板。