【问题标题】:How to pass username as parameter recursively from a file in SecretStringTemplate (rotation secret cloudformation template code)?如何从 SecretStringTemplate(旋转秘密 cloudformation 模板代码)中的文件递归地传递用户名作为参数?
【发布时间】: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


    【解决方案1】:

    所以我能够找到解决方法,特别是使用 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"
    

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 2021-07-23
      • 2020-05-21
      • 2018-11-15
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2011-09-14
      • 2014-11-02
      相关资源
      最近更新 更多