Obtención de un secreto o un valor secreto de Secrets Manager - AWS CloudFormation

Obtención de un secreto o un valor secreto de Secrets Manager

Secrets Manager es un servicio que permite almacenar y administrar de forma segura un secreto, como credenciales de base de datos, contraseñas y claves de API de terceros. Con Secrets Manager, puede almacenar y controlar el acceso a estos secretos de forma centralizada, de modo que pueda reemplazar las credenciales codificadas en su código (incluidas las contraseñas), con una llamada API a Secrets Manager para recuperar el secreto mediante programación. Para obtener más información, consulte ¿Qué es AWS Secrets Manager? en la Guía del usuario de AWS Secrets Manager.

Para utilizar secretos completos o valores secretos que están almacenados en Secrets Manager en las plantillas de CloudFormation, debe utilizar referencias dinámicas secretsmanager.

Consideraciones

Al utilizar referencias dinámicas de secretsmanager, hay algunas consideraciones de seguridad importantes que se deben tener en cuenta:

  • La referencia dinámica secretsmanager se pueden utilizar en todas las propiedades de recursos. El uso de la referencia dinámica secretsmanager indica que ni Secrets Manager ni CloudFormation registren o mantengan valores de secretos resueltos. Sin embargo, el valor del secreto puede mostrarse en el servicio donde se está usando el recurso. Debe revisar el uso para evitar fugas de datos secretos.

  • Cuando se actualiza un secreto en Secrets Manager, el secreto no se actualiza automáticamente en CloudFormation. Para que CloudFormation actualice una referencia dinámica de secretsmanager, debe ejecutar una actualización de pila que actualice el recurso que contiene la referencia dinámica, ya sea actualizando la propiedad del recurso que contenga la referencia dinámica secretsmanager o actualizando otra de las propiedades del recurso.

    Por ejemplo, supongamos que especifica en la plantilla la propiedad MasterPassword de un recurso AWS::RDS::DBInstance para que sea una referencia dinámica de secretsmanager y después crea una pila a partir de la plantilla. Más tarde, actualice el valor de ese secreto en Secrets Manager, pero no actualice el recurso de AWS::RDS::DBInstance en la plantilla. En ese caso, aunque actualice la pila, el valor del secreto de la propiedad MasterPassword no se actualizará y seguirá siendo el valor anterior.

    Considere también la posibilidad de utilizar Secrets Manager para que cambie automáticamente el secreto en las bases de datos o los servicios protegidos. Para obtener más información, consulte Rotar secretos de AWS Secrets Manager.

  • Las referencias dinámicas de valores seguros, como, por ejemplo, secretsmanager, no son compatibles actualmente con los recursos personalizados.

Permisos

Para especificar un secreto almacenado en Secrets Manager, debe tener permiso para llamar a GetSecretValue para el secreto.

Patrón de referencia

Para referenciar secretos de Secrets Manager en una plantilla de CloudFormation, utilice el siguiente patrón de referencia secretsmanager.

{{resolve:secretsmanager:secret-id:secret-string:json-key:version-stage:version-id}}
secret-id

El nombre o el ARN del secreto.

Para obtener acceso a un secreto de su Cuenta de AWS, solo debe especificar el nombre del secreto. Para obtener acceso a un secreto de otra Cuenta de AWS, especifique el ARN completo del secreto.

Obligatorio.

secret-string

El único valor admitido es SecretString. El valor predeterminado es SecretString.

json-key

El nombre de la clave del par clave-valor cuyo valor desea recuperar. Si no se especifica una json-key, CloudFormation recupera todo el texto secreto.

Este segmento no puede incluir el signo de dos puntos (:).

version-stage

La etiqueta de fase de la versión del secreto que se usará. Secrets Manager utiliza etiquetas provisionales para realizar un seguimiento de las diferentes versiones durante el proceso de rotación. Si usa version-stage, no especifique version-id. Si no especifica version-stage ni version-id, la versión predeterminada es la AWSCURRENT.

Este segmento no puede incluir el signo de dos puntos (:).

version-id

El identificador único de la versión del secreto a utilizar. Si especifica version-id, no especifique version-stage. Si no especifica version-stage ni version-id, la versión predeterminada es la AWSCURRENT.

Este segmento no puede incluir el signo de dos puntos (:).

Ejemplos

Recuperación de valores de nombre de usuario y contraseña de un secreto

El siguiente ejemplo de AWS::RDS::DBInstance recupera los valores de nombre de usuario y contraseña almacenados en el secreto MySecret. La versión del secreto recuperada es la versión con el valor de fase de versión de AWSCURRENT.

JSON

{ "MyRDSInstance": { "Type": "AWS::RDS::DBInstance", "Properties": { "DBName": "MyRDSInstance", "AllocatedStorage": "20", "DBInstanceClass": "db.t2.micro", "Engine": "mysql", "MasterUsername": "{{resolve:secretsmanager:MySecret:SecretString:username}}", "MasterUserPassword": "{{resolve:secretsmanager:MySecret:SecretString:password}}" } } }

YAML

MyRDSInstance: Type: 'AWS::RDS::DBInstance' Properties: DBName: MyRDSInstance AllocatedStorage: '20' DBInstanceClass: db.t2.micro Engine: mysql MasterUsername: '{{resolve:secretsmanager:MySecret:SecretString:username}}' MasterUserPassword: '{{resolve:secretsmanager:MySecret:SecretString:password}}'

Recuperación de la totalidad de SecretString

La siguiente referencia dinámica recupera el valor de SecretString para MySecret.

{{resolve:secretsmanager:MySecret}}

Otra opción:

{{resolve:secretsmanager:MySecret::::}}

Recuperación de un valor de una versión específica de un secreto

La siguiente referencia dinámica recupera el valor de password para la versión AWSPREVIOUS de MySecret.

{{resolve:secretsmanager:MySecret:SecretString:password:AWSPREVIOUS}}

Recuperación de secretos de otra Cuenta de AWS

La siguiente referencia dinámica recupera el valor de SecretString para MySecret que hay en otra Cuenta de AWS. Debe especificar el ARN del secreto completo para obtener acceso a otra Cuenta de AWS.

{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret}}

La siguiente referencia dinámica recupera el valor de password para MySecret que hay en otra Cuenta de AWS. Debe especificar el ARN del secreto completo para obtener acceso a otra Cuenta de AWS.

{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret:SecretString:password}}