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-stageoversion-idpara 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-stageoversion-idexplí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
MasterPasswordestá 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 propiedadMasterPasswordconserva el valor de la contraseña anterior.Para aplicar el nuevo valor secreto, tendrá que modificar el recurso
AWS::RDS::DBInstanceen 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
secretsmanagerse pueden utilizar en todas las propiedades de recursos. El uso de la referencia dinámicasecretsmanagerindica 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 esSecretString. 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 especifiqueversion-id. Si no especificaversion-stageniversion-id, la versión predeterminada es laAWSCURRENT.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 especifiqueversion-stage. Si no especificaversion-stageniversion-id, la versión predeterminada es laAWSCURRENT.Este segmento no puede incluir el signo de dos puntos (
:).
Ejemplos
Temas
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 . En este ejemplo se muestra el patrón recomendado para las referencias dinámicas sin versión, que utiliza automáticamente la versión MySecretAWSCURRENT 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 para la versión password de AWSPREVIOUS.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 que hay en otra Cuenta de AWS. Debe especificar el ARN del secreto completo para obtener acceso a otra Cuenta de AWS.MySecret
{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret}}
La siguiente referencia dinámica recupera el valor de para password que hay en otra Cuenta de AWS. Debe especificar el ARN del secreto completo para obtener acceso a otra Cuenta de AWS.MySecret
{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret:SecretString:password}}