Согласно AWS, при развертывании инфраструктуры, для которой требуются секреты, т. Е. Пароли или аналогичные, в CloudFormation, одним из популярных решений является использование SecureStrings хранилища параметров из SSM.
Однако, несмотря на существующую документацию CFNОписывая шаг за шагом, как использовать динамические ссылки в шаблонах CFN , я не могу использовать фактическое значение SecureStrings.
Предполагая следующее представление JSON существующегоSecureString хранится в хранилище параметров SSM:
{
"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
:
- Всякий раз, когда ссылкаИмя параметра, которое необходимо разрешить, достаточно длинное. CloudFormation жалуется:
Параметр MasterUserPassword не является допустимым паролем, поскольку он длиннее 64 символов.(Сервис: AmazonRedshift; Код состояния: 400; Код ошибки: InvalidParameterValue; Идентификатор запроса: 7be9bd43-2927-11e9-aa88-29bbdcae859e)
Кроме того, даже если специально указано, что в ссылках шаблона могут использоваться косые черты, например,
/infrastructure/datawarehouse/redshift/MyRedshiftMasterUserPassword
выдается следующая ошибка:
Параметр MasterUserPassword не является допустимым паролем.Можно использовать только печатные символы ASCII, за исключением символов '/', '@', '' ',' ',' \ ',' ''. (Сервис: AmazonRedshift; Код состояния: 400; Код ошибки: InvalidParameterValue)
Таким образом, в результате ссылка на SecureString, по-видимому, не совместима с иерархией SSM ParameterStore (параметры с косой чертой).
Кроме того, удаляя любой ранее сообщенный недопустимый символ из имени параметра, он жалуется на следующее:
Параметр MasterUserPassword должен содержать как минимум 1 заглавную букву.(Сервис: AmazonRedshift; Код состояния: 400; Код ошибки: InvalidParameterValue; Идентификатор запроса: 90a263bd-2929-11e9-80c0-ffcecf297c44)
В конце концов, хотя используется базовое короткое-Slashed Parameter name
в шаблоне позволяет стеку завершать операцию Update Динамическая привязка все еще не происходит , поскольку оказывается, что фактическое используемое значение передается Имя параметра, а не значениеНа это ссылаются, например, MyRedshiftMasterUserPassword
вместо Abcd2019
.
Я знаю, что AWS Secrets Manager также можно использовать, но он не бесплатный.