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.

Prácticas recomendadas

Siga estas prácticas recomendadas cuando use las referencias dinámicas de Secrets Manager en las plantillas de CloudFormation:

  • Utilice referencias sin versión para sus plantillas de CloudFormation: almacene las credenciales en Secrets Manager y utilice referencias dinámicas sin los parámetros version-stage o version-id para respaldar los flujos de trabajo de rotación de secretos adecuados.

  • Aproveche la rotación automática: utilice la característica de rotación automática de Secrets Manager con referencias dinámicas sin versiones para la administración de credenciales. Esto garantiza que sus credenciales se actualicen periódicamente sin necesidad de cambiar la plantilla. Para obtener más información, consulte Rotar secretos de AWS Secrets Manager.

  • Utilice las referencias versionadas con moderación: especifique únicamente parámetros version-stage o version-id explícitos para situaciones específicas, como situaciones de prueba o reversión.

Consideraciones

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

  • CloudFormation no rastrea qué versión de un secreto se usó en implementaciones anteriores. Planifique cuidadosamente su estrategia de administración de secretos antes de implementar referencias dinámicas. Use referencias sin versión siempre que sea posible para aprovechar la rotación automática de secretos. Supervise y valide las actualizaciones de los recursos al realizar cambios en las configuraciones de las referencias dinámicas, por ejemplo, al pasar de referencias dinámicas no versionadas a referencias dinámicas versionadas, y viceversa.

  • Cuando se actualiza únicamente el valor secreto en Secrets Manager, CloudFormation recupera automáticamente el nuevo valor. CloudFormation recupera el valor secreto solo durante la creación del recurso o las actualizaciones que modifican el recurso que contiene la referencia dinámica.

    Por ejemplo, supongamos que la plantilla incluye un recurso AWS::RDS::DBInstanceen el que la propiedad MasterPassword está configurada como una referencia dinámica de Secrets Manager. Tras crear una pila a partir de esta plantilla, se actualiza el valor del secreto en Secrets Manager. Sin embargo, la propiedad MasterPassword conserva el valor de la contraseña anterior.

    Para aplicar el nuevo valor secreto, tendrá que modificar el recurso AWS::RDS::DBInstance en la plantilla de CloudFormation y realizar una actualización de la pila.

    Considere la posibilidad de utilizar Secrets Manager para que cambie automáticamente el secreto.

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

  • 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.

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. En este ejemplo se muestra el patrón recomendado para las referencias dinámicas sin versión, que utiliza automáticamente la versión AWSCURRENT y admite los flujos de trabajo de rotación de Secrets Manager sin necesidad de cambiar la plantilla.

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