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

How to use secureObject or securestring returned from a linked ARM template

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

例如,一个名为 CreateStorage

的子链接模板
  1. 创建 Azure 存储帐户
  2. 在该帐户上创建 blob 容器
  3. 为容器创建 SAS 密钥
  4. returns 模板 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 部署中 UI。

但是,当我将返回对象的类型更改为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 模板返回 securestringsecureObject 时,.value 属性 似乎不存在。

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

Output values support the same types as template input parameters.

并且 securestringsecureObject 作为模板输入参数工作正常所以我一定是做错了什么。

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

secureString\secureObject 类型从 input\output 中省略。你不能 "get" 他们。他们只是被通过了,仅此而已。这就是为什么它们被称为 secure。他们没有被记录在任何地方。没有真正的解决方法。

在您的情况下,您只需在需要的地方提取密钥,而不必将它们提取到嵌套模板中并将它们传递给父模板。