【发布时间】:2021-11-03 13:54:43
【问题描述】:
我正在编写一个 cloudformation 模板,以使用 AWS 部署的 lambda 函数在设定的时间后轮换 Aurora RDS 的秘密凭据。
但我需要像 3 次递归一样通过下面的模板来创建 3 个不同的用户机密。为此,我使用了 count 和 Pylate 宏。
下面是代码:-
AWSTemplateFormatVersion: '2010-09-09'
Description: |
Aurora DB users rotation mecahnism via autocreated rotation lambda.
Transform:
- AWS::SecretsManager-2020-07-23
- Count
- PyPlate
Parameters:
pEnv:
Type: String
pResAurSg:
Type: String
pDbUserNameCount:
Type: Number
pDbUserName:
Type: String
Conditions:
cDbUserNameCheck:
Count: !Ref pDbUserNameCount
Fn::Not:
- Fn::Equals:
- |
#!PyPlate
import ast
output = ast.literal_eval(params['pDbUserName'])[%d-1]['pName']
- ignore
Resources:
rRDSInstanceRotationSecret:
Count: !Ref pDbUserNameCount
Condition: cDbUserNameCheck%d
Type: AWS::SecretsManager::Secret
Properties:
Name: |
#!PyPlate
import ast
output = {}
output['Fn::Sub'] = f"{ast.literal_eval(params['pDbUserName'])[%d-1]['pName']}"
KmsKeyId: "alias/SecretsManager_KMSKey"
GenerateSecretString:
SecretStringTemplate: '{"username": "rs_ro1", "masterarn": "<arn"}'
GenerateStringKey: "password"
PasswordLength: 16
ExcludeCharacters: "\"@/\\"
Tags: <tags>
...
下面是参数文件:-
"aur_dbuser_params": {
"Dbusername": [
{
"pName": "user1",
"pusername": "rs_su"
},
{
"pName": "user2",
"pusername": "rs_ro1"
},
{
"pName": "user3",
"pusername": "rs_ro2"
}
]
}
}
无法使用计数宏将这些用户名递归地传递到参数文件中的模板中的“SecretStringTemplate”,因为它不接受 JSON。所以也尝试了 JSON.stringify,但没有奏效。
如何将用户名传递给“SecretStringTemplate”,就像我为“Name”参数所做的那样,使用 Pylate 在属性中进行递归调用?
【问题讨论】:
标签: boto3 aws-secrets-manager aws-cloudformation-custom-resource