如何从 SecretStringTemplate 中的文件递归传递用户名作为参数(旋转秘密 cloudformation 模板代码)?
How to pass username as parameter recursively from a file in SecretStringTemplate (rotation secret cloudformation template code)?
我正在编写一个 cloudformation 模板,以使用 AWS 部署的 lambda 函数在设定的时间段后轮换 Aurora RDS 的秘密凭证。
但我需要通过下面的模板递归传递 3 次以创建 3 个不同的用户机密。为此,我使用了计数和 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”,就像我在属性中使用 Pylate 传递“Name”参数以进行递归调用一样?
所以我找到了解决方法,特别是使用 python 字典:-
GenerateSecretString:
SecretStringTemplate: |
#!PyPlate
import ast,json
creds_dict = {}
creds_dict["username"] = ast.literal_eval(params['pDbUserName'])[%d-1]['pUsername']
creds_dict["masterarn"] = '<arn>'
output = json.dumps(creds_dict)
GenerateStringKey: "password"
我正在编写一个 cloudformation 模板,以使用 AWS 部署的 lambda 函数在设定的时间段后轮换 Aurora RDS 的秘密凭证。
但我需要通过下面的模板递归传递 3 次以创建 3 个不同的用户机密。为此,我使用了计数和 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”,就像我在属性中使用 Pylate 传递“Name”参数以进行递归调用一样?
所以我找到了解决方法,特别是使用 python 字典:-
GenerateSecretString:
SecretStringTemplate: |
#!PyPlate
import ast,json
creds_dict = {}
creds_dict["username"] = ast.literal_eval(params['pDbUserName'])[%d-1]['pUsername']
creds_dict["masterarn"] = '<arn>'
output = json.dumps(creds_dict)
GenerateStringKey: "password"