

# Obtención de un secreto o un valor secreto de Secrets Manager
<a name="dynamic-references-secretsmanager"></a>

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?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 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
<a name="dynamic-references-secretsmanager-best-practices"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html).
+ **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
<a name="dynamic-references-secretsmanager-considerations"></a>

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 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html)en 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
<a name="dynamic-references-secretsmanager-permissions"></a>

Para especificar un secreto almacenado en Secrets Manager, debe tener permiso para llamar a [https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) para el secreto.

## Patrón de referencia
<a name="dynamic-references-secretsmanager-pattern"></a>

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
<a name="dynamic-references-secretsmanager-examples"></a>

**Topics**
+ [Recuperación de valores de nombre de usuario y contraseña de un secreto](#dynamic-references-secretsmanager-examples-user-name-and-password)
+ [Recuperación de la totalidad de SecretString](#dynamic-references-secretsmanager-examples-entire-secretstring)
+ [Recuperación de un valor de una versión específica de un secreto](#dynamic-references-secretsmanager-examples-specific-version)
+ [Recuperación de secretos de otra Cuenta de AWS](#dynamic-references-secretsmanager-examples-secrets-from-another-account)

### Recuperación de valores de nombre de usuario y contraseña de un secreto
<a name="dynamic-references-secretsmanager-examples-user-name-and-password"></a>

El siguiente ejemplo de [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html) 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
<a name="dynamic-references-secretsmanager-examples-user-name-and-password.json"></a>

```
{
    "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
<a name="dynamic-references-secretsmanager-examples-user-name-and-password.yaml"></a>

```
  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
<a name="dynamic-references-secretsmanager-examples-entire-secretstring"></a>

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
<a name="dynamic-references-secretsmanager-examples-specific-version"></a>

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
<a name="dynamic-references-secretsmanager-examples-secrets-from-another-account"></a>

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