使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

更新 Secrets Manager 中的密碼時為何未自動更新 AWS CloudFormation 中的密碼?

1 分的閱讀內容
0

我在 AAWS Secrets Manager 中更新了密碼,但在 AWS CloudFormation 堆疊更新期間,動態參考並未更新。

簡短描述

當您在 Secrets Manager 中更新密碼時,CloudFormation 不會自動偵測密碼的值是否已變更。在堆疊更新期間,CloudFormation 不會擷取動態參考的值,除非對動態參考本身進行了變更。

在 Secrets Manager 中更新密碼後,您必須更新 CloudFormation 堆疊,還必須在動態參考字串中指定 VersionId。指定 VersionId 是確保 CloudFormation 會擷取密碼的更新版本的最佳實務。

解決方案

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確認您使用的是最新的 AWS CLI 版本

以下範例情境示範如何在 CloudFormation 中更新您的 Secrets Manager 動態參考。

1.    在 CloudFormation 範本中動態參考 Secrets Manager 密碼。

例如,下列 CloudFormation 範本會動態參考 Secrets Manager 密碼 (secret-id mysecret 和 secret-string {"MyKey":"MyValue"}):

Resources:
    SG:
        Type: AWS::EC2::SecurityGroup
        Properties:
            GroupDescription: '{{resolve:secretsmanager:mysecret:SecretString:MyKey}}'
            SecurityGroupIngress:
                  - IpProtocol: tcp
                    FromPort: 8080
                    ToPort: 8080
                    CidrIp: 0.0.0.0/0

**注意:**前述動態參考將解析為 GroupDescription 屬性的 MyValue

2.    透過 AWS Command Line Interface (AWS CLI) 執行 update-secret 命令,更新 Secrets Manager 中的密碼,並指定 secret-string。在範例情境中,secret-string 是 {"MyKey":"NewValue"}

**注意:**VersionId 不會顯示在 AWS 管理主控台上。如果您透過 AWS 管理主控台更新了密碼,則透過 AWS CLI 執行 get-secret-value 命令以擷取 VersionId

3.    記下輸出中的 VersionId

範例輸出:

$ aws secretsmanager update-secret --secret-id mysecret --secret-string {\"MyKey\":\"NewValue\"}
{
    "ARN": "arn:aws:secretsmanager:us-east-1:xxxxxxxxxxxx:secret:mysecret-ABCDeF",
    "Name": "mysecret",
    "VersionId": "ab01234c-5d67-89ef-01gh-2ijk345l6m78"
}

**注意:**前述輸出的 VersionId "ab01234c-5d67-89ef-01gh-2ijk345l6m78" 不會自動應用於 CloudFormation 堆疊中的動態參考。

4.    更新堆疊,並在動態參考字串中指定 VersionId。例如:

Resources:
    SG:
        Type: AWS::EC2::SecurityGroup
        Properties:
            GroupDescription: '{{resolve:secretsmanager:mysecret:SecretString:MyKey::ab01234c-5d67-89ef-01gh-2ijk345l6m78}}'
            SecurityGroupIngress:
                  - IpProtocol: tcp
                    FromPort: 8080
                    ToPort: 8080
                    CidrIp: 0.0.0.0/0

**注意:**在前述範例範本中,VersionId "ab01234c-5d67-89ef-01gh-2ijk345l6m78" 之前的 :: 是正確的語法。動態參考字串的此部分留空,因為不需要指定 version-stage


AWS 官方
AWS 官方已更新 3 年前