gpt4 book ai didi

amazon-web-services - CloudFormation 模板中未解析的 Parameter Store SecureString 动态引用

转载 作者:行者123 更新时间:2023-12-03 07:44:28 25 4
gpt4 key购买 nike

根据 AWS 的说法,在使用 CloudFormation 部署需要 secret (即密码或类似内容)的基础设施时,一种流行的解决方案是使用 SSM 中的 Parameter Store 的 SecureStrings。

但是,尽管存在 CFN documentation describing step-by-step how to use the Dynamic References within the CFN templates ,我无法设法利用 SecureStrings 的实际值。

假设存储在 SSM 参数存储中的现有 SecureString 具有以下 JSON 表示形式:

{
"MyRedshiftMasterUserPassword": {
"value": "Abcd2019",
"type": "SecureString"
}
}

以及按照文档中所述使用它的 YAML CFN 模板:

Resources
Redshift:
Type: 'AWS::Redshift::Cluster'
Properties:
NodeType: dc2.large
NumberOfNodes: !Ref RedshiftNodes
ClusterType: multi-node
AutomatedSnapshotRetentionPeriod: !Ref AutomatedSnapshotRetentionPeriod
DBName: datawarehouse_v1
MasterUsername: !Ref RedshiftMasterUsername
MasterUserPassword: '{{resolve:ssm-secure:MyRedshiftMasterUserPassword:1}}'

上述解决方案不起作用,因此要么我错误地定义了模板,要么没有正确实现对此功能的支持,考虑到它来自 AWS,这对我来说似乎很奇怪。

特别是,我遇到了以下错误,这些错误最终都以 UPDATE_FAILED 堆栈的形式出现:

  1. 只要要解析的引用参数名称足够长,CloudFormation 就会发出提示:

The parameter MasterUserPassword is not a valid password because it is longer than 64 characters. (Service: AmazonRedshift; Status Code: 400; Error Code: InvalidParameterValue; Request ID: 7be9bd43-2927-11e9-aa88-29bbdcae859e)

  • 此外,尽管特别提到可以在模板引用中使用斜杠,例如/infrastruct/datawarehouse/redshift/MyRedshiftMasterUserPassword 发出以下错误:
  • The parameter MasterUserPassword is not a valid password. Only printable ASCII characters except for '/', '@', '"', ' ', '\', ''' may be used. (Service: AmazonRedshift; Status Code: 400; Error Code: InvalidParameterValue)

    因此,作为结果引用的 SecureString 似乎与 SSM ParameterStore 层次结构(带斜杠的参数)不兼容。

  • 此外,从参数名称中删除之前报告的任何无效字符,然后它会发出以下错误消息:
  • The parameter MasterUserPassword must contain at least 1 upper case letter. (Service: AmazonRedshift; Status Code: 400; Error Code: InvalidParameterValue; Request ID: 90a263bd-2929-11e9-80c0-ffcecf297c44)


    最后,虽然在模板中使用基本的短非斜杠参数名称可以让堆栈完成更新操作动态引用仍然不能发生,因为实际使用的值是提供的参数名称而不是由此引用的值,例如 MyRedshiftMasterUserPassword 而不是 Abcd2019

    我知道也可以使用 AWS Secrets Manager,但它不是免费的。

    最佳答案

    向 AWS 提出支持案例,请求针对 CloudFormation 的这种特殊奇怪行为提供指导。

    根据支持团队的说法,实际上这确实是 CloudFormation 服务的一个已知错误,但预计需要修复时间。尽管在文档中引用了 SSM 参数存储 SecureString 参数,但在 RedshiftMasterUserPassword 属性的特定情况下用作动态引用时,该参数的解析并未得到正确解析,而是使用参数名称。

    或者,他们提供了 2 种解决方法来解决问题:

    1. Get the 'MasterUserPassword' for Redshift from input parameter with property NoEcho set to true. NoEcho property allows you to mask the password value and you don't need to store the password in a template file. However, each time you update the stack you need to enter the password as input parameter. For your reference, below code snippet will be useful.

    第二个选项,它更通用:

    1. Define a Lambda backed Custom Resource in your template file, which queries the SSM service and returns the password to CloudFormation. In this scenario, You need to write a Custom Code for lambda function which uses AWS GetParameter API call to retrieve the value of SSM Secure String Parameter and returns the decrypted value to CloudFormation.

    其他支持的动态引用属性似乎工作正常。

    关于amazon-web-services - CloudFormation 模板中未解析的 Parameter Store SecureString 动态引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54534770/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com