¿Por qué al actualizar un secreto en Secrets Manager no se actualiza automáticamente el secreto en AWS CloudFormation?

Actualización más reciente: 26-04-2022

Actualicé mi secreto en AWS Secrets Manager, pero la referencia dinámica no se actualizó durante la actualización de la pila de AWS CloudFormation.

Descripción breve

Cuando actualiza un secreto en Secrets Manager, CloudFormation no detecta automáticamente que ha cambiado el valor del secreto. Durante las actualizaciones de la pila, CloudFormation no recupera el valor de la referencia dinámica a menos que se realice un cambio en la referencia dinámica en sí.

Después de actualizar el secreto en Secrets Manager, debe actualizar la pila de CloudFormation y también especificar el VersionId en la cadena de referencia dinámica. Especificar el VersionId es una práctica recomendada para asegurarse de que CloudFormation recupere la versión actualizada del secreto.

Resolución

Nota: si recibe errores al ejecutar comandos de AWS CLI, asegúrese de que está utilizando la versión más reciente de AWS CLI.

En el siguiente ejemplo se muestra cómo actualizar la referencia dinámica de Secrets Manager en CloudFormation.

1.    Haga referencia dinámica al secreto de Secrets Manager en su plantilla de CloudFormation.

Por ejemplo, la siguiente plantilla de CloudFormation hace referencia dinámica a un secreto de Secrets Manager con el ID de secreto mysecret y la cadena secreta {\"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

Nota: La referencia dinámica anterior se resuelve en MyValue para la propiedad GroupDescription.

2.    Actualice el secreto en Secrets Manager ejecutando el comando update-secret a través de la AWS Command Line Interface (AWS CLI) y especifique la cadena secreta. Para el escenario de ejemplo, la cadena secreta es {\ "MyKey\":\ "NewValue\"}.

Nota: El VersionId no aparece en la consola de administración de AWS. Si actualizó el secreto a través de la consola de administración de AWS, ejecute el comando get-secret-value a través de la AWS CLI para recuperar el VersionId.

3.    Anote el VersionId de la salida.

Salida de ejemplo:

$ 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"
}

Nota: El VersionId «ab01234c-5d67-89ef-01gh-2ijk345l6m78» de la salida anterior no se aplica automáticamente a la referencia dinámica de la pila de CloudFormation.

4.    Actualice la pila y especifique el VersionId en la cadena de referencia dinámica. Por ejemplo:

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

Nota: En la plantilla de ejemplo anterior, la sintaxis correcta es :: antes del VersionId «ab01234c-5d67-89ef-01gh-2ijk345l6m78». Esta sección de la cadena de referencia dinámica se deja en blanco porque no es necesario especificar la etapa de versión.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?