如何使用从链接的 ARM 模板返回的 secureObject 或 securestring
How to use secureObject or securestring returned from a linked ARM template
如何使用从链接的 ARM 模板返回的 securestring
或 secureObject
的值?
例如,一个名为 CreateStorage
的子链接模板
- 创建 Azure 存储帐户
- 在该帐户上创建 blob 容器
- 为容器创建 SAS 密钥
- 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。
但是,当我将返回对象的类型更改为securestring
或secureObject
时,当调用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 模板返回 securestring
或 secureObject
时,.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.
并且 securestring
和 secureObject
作为模板输入参数工作正常所以我一定是做错了什么。
如何使用从链接的 ARM 模板返回的 securestring
或 secureObject
的值?
secureString\secureObject 类型从 input\output 中省略。你不能 "get" 他们。他们只是被通过了,仅此而已。这就是为什么它们被称为 secure
。他们没有被记录在任何地方。没有真正的解决方法。
在您的情况下,您只需在需要的地方提取密钥,而不必将它们提取到嵌套模板中并将它们传递给父模板。
如何使用从链接的 ARM 模板返回的 securestring
或 secureObject
的值?
例如,一个名为 CreateStorage
- 创建 Azure 存储帐户
- 在该帐户上创建 blob 容器
- 为容器创建 SAS 密钥
- 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。
但是,当我将返回对象的类型更改为securestring
或secureObject
时,当调用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 模板返回 securestring
或 secureObject
时,.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.
并且 securestring
和 secureObject
作为模板输入参数工作正常所以我一定是做错了什么。
如何使用从链接的 ARM 模板返回的 securestring
或 secureObject
的值?
secureString\secureObject 类型从 input\output 中省略。你不能 "get" 他们。他们只是被通过了,仅此而已。这就是为什么它们被称为 secure
。他们没有被记录在任何地方。没有真正的解决方法。
在您的情况下,您只需在需要的地方提取密钥,而不必将它们提取到嵌套模板中并将它们传递给父模板。