

# Obtención de valores almacenados en otros servicios con referencias dinámicas
<a name="dynamic-references"></a>

Las referencias dinámicas ofrecen una forma cómoda de especificar valores externos almacenados y administrados en otros servicios y de separar la información confidencial de sus plantillas de infraestructura como código. CloudFormation recupera el valor de la referencia especificada cuando es necesario durante las operaciones de pila y de conjunto de cambios.

Con las referencias dinámicas, puede:
+ **Usar cadenas seguras**: en el caso de los datos confidenciales, use siempre parámetros de cadenas seguras en el Almacén de datos de AWS Systems Manager o secretos en AWS Secrets Manager para garantizar que sus datos estén cifrados en reposo.
+ **Limitar el acceso**: restrinja el acceso a los parámetros del Almacén de parámetros o a los secretos de Secrets Manager solo a las entidades principales y roles autorizados.
+ **Rotar las credenciales**: rote periódicamente los datos confidenciales almacenados en el Almacén de parámetros o Secrets Manager para mantener un alto nivel de seguridad.
+ **Automatizar la rotación**: aproveche la característica de rotación automática de Secrets Manager para actualizar y distribuir periódicamente sus datos confidenciales en sus aplicaciones y entornos.

## Consideraciones generales
<a name="dynamic-references-considerations"></a>

A continuación, se ofrecen consideraciones generales para que tenga en cuenta antes de especificar referencias dinámicas en sus plantillas de CloudFormation:
+ No incluya referencias dinámicas ni ningún dato confidencial en las propiedades de los recursos que formen parte del identificador principal de un recurso. CloudFormation puede usar el valor real de texto sin formato en el identificador del recurso principal, lo que podría suponer un riesgo para la seguridad. Este ID de recurso puede aparecer en cualquier destino o salida derivada.

  Para determinar qué propiedades de recursos comprenden el identificador principal de un tipo de recurso, consulte la documentación de referencia de recursos para ese recurso en [Referencia de tipos de recursos y propiedades de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html). En la sección **Return values** (Valores de devolución), el valor de devolución de la función `Ref` representa las propiedades del recurso que comprenden el identificador principal del tipo de recurso.
+ Puede incluir hasta 60 referencias dinámicas en una plantilla de pila.
+ Si utiliza transformaciones (como `AWS::Include` o `AWS::Serverless`), CloudFormation no resuelve las referencias dinámicas antes de aplicar la transformación. En su lugar, pasa la cadena literal de la referencia dinámica a la transformación y resuelve las referencias al ejecutar el conjunto de cambios usando la plantilla.
+ No se pueden utilizar referencias dinámicas para valores protegidos (como los almacenados en el Almacén de parámetros o Secrets Manager) en recursos personalizados. 
+ Las referencias dinámicas tampoco se admiten en los metadatos de `AWS::CloudFormation::Init` ni en las propiedades de `UserData` de Amazon EC2.
+ No cree una referencia dinámica que termine con una barra invertida (\$1). CloudFormation no puede resolver estas referencias, lo que provocará un error en las operaciones de apilado.

Los siguientes temas brindan información y otras consideraciones sobre el uso de referencias dinámicas.

**Topics**
+ [Consideraciones generales](#dynamic-references-considerations)
+ [Obtención de un valor de texto sin formato del Almacén de parámetros de Systems Manager](dynamic-references-ssm.md)
+ [Obtención de un valor de cadena segura del Almacén de parámetros de Systems Manager](dynamic-references-ssm-secure-strings.md)
+ [Obtención de un secreto o un valor secreto de Secrets Manager](dynamic-references-secretsmanager.md)

# Obtención de un valor de texto sin formato del Almacén de parámetros de Systems Manager
<a name="dynamic-references-ssm"></a>

Al crear una plantilla de CloudFormation, es posible que desee utilizar valores de texto sin formato almacenados en el Almacén de parámetros. Parameter Store es una función de AWS Systems Manager. Para obtener una introducción al Almacén de parámetros, consulte [Almacén de parámetros de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) en la *Guía del usuario de AWS Systems Manager*. 

Para utilizar un valor de texto sin formato del Almacén de parámetros en la plantilla, debe usar una referencia dinámica `ssm`. Esta referencia permite acceder a valores de parámetros de tipo `String` o `StringList` del Almacén de parámetros. 

Para verificar qué versión de una referencia dinámica `ssm` se utilizará en una operación de pila, cree un conjunto de cambios para la operación de pila. A continuación, revise la plantilla procesada en la pestaña **Plantilla**. Para obtener más información, consulte [Creación de un conjunto de cambios para una pila de CloudFormation](using-cfn-updating-stacks-changesets-create.md).

Al utilizar referencias dinámicas `ssm`, debe tener en cuenta varios aspectos:
+ CloudFormation no es compatible con la detección de desviaciones en referencias dinámicas. Para las referencias dinámicas de `ssm` en las que no se ha especificado la versión del parámetro, se recomienda que, si actualiza la versión del parámetro en Systems Manager, también lleve a cabo una operación de actualización de la pila en cualquier pila que incluya la referencia dinámica de `ssm`, con el fin de obtener la versión más reciente del parámetro.
+ Para usar una referencia dinámica `ssm` en la sección `Parameters` de la plantilla de CloudFormation, debe incluir un número de versión. CloudFormation no permite referenciar un valor del Almacén de parámetros sin un número de versión en esta sección. Como alternativa, puede definir el parámetro como un tipo de parámetro de Systems Manager en la plantilla. Al hacerlo, puede especificar una clave de parámetro de Systems Manager como valor predeterminado. A continuación, CloudFormation obtendrá la última versión del valor del parámetro del Almacén de parámetros, sin que tenga que especificar un número de versión. Esto puede hacer que sus plantillas sean más sencillas y fáciles de mantener. Para obtener más información, consulte [Definición de recursos existentes en tiempo de ejecución con tipos de parámetros proporcionados por CloudFormation](cloudformation-supplied-parameter-types.md).
+ En el caso de recursos personalizados, CloudFormation resuelve las referencias dinámicas `ssm` antes de enviar la solicitud al recurso personalizado.
+ CloudFormation no admite el uso de referencias dinámicas para hacer referencia a un parámetro compartido desde otra Cuenta de AWS.
+ CloudFormation no admite el uso de etiquetas de parámetros de Systems Manager en las referencias dinámicas.

## Permisos
<a name="dynamic-references-ssm-permissions"></a>

Para especificar un parámetro guardado en el Almacén de parámetros de Systems Manager, debe tener permiso para llamar a [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) para el parámetro especificado. Para obtener información sobre cómo crear políticas de IAM que proporcionen acceso a parámetros específicos de Systems Manager, consulte [Restricción del acceso a los parámetros de Systems Manager mediante políticas de IAM](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-access.html) en la *Guía del usuario de AWS Systems Manager*.

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

Para referenciar un valor de texto sin formato guardado en el Almacén de parámetros de Systems Manager en una plantilla de CloudFormation, utilice el siguiente patrón de referencia `ssm`.

```
{{resolve:ssm:parameter-name:version}}
```

Su referencia debe cumplir el siguiente patrón de expresión regular para nombre-parámetro y versión:

```
{{resolve:ssm:[a-zA-Z0-9_.\-/]+(:\d+)?}}
```

`parameter-name`  
El nombre del parámetro en el almacén de parámetros de . El nombre de parámetro distingue entre mayúsculas y minúsculas.  
Obligatorio.

`version`  
Un número entero que especifica la versión del parámetro que se va a utilizar. Si no especifica la versión exacta, CloudFormation utiliza la última versión del parámetro cada vez que cree o actualice la pila. Para obtener más información, consulte [Trabajo con versiones de parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-versions.html) en la *Guía del usuario de AWS Systems Manager*.  
Opcional.

## Ejemplos
<a name="dynamic-references-ssm-examples"></a>

**Topics**
+ [Parámetro de ID de AMI públicas](#dynamic-references-ssm-public-ami-example)
+ [Parámetro de ID de AMI personalizado](#dynamic-references-ssm-custom-ami-example)

### Parámetro de ID de AMI públicas
<a name="dynamic-references-ssm-public-ami-example"></a>

En el siguiente ejemplo, se crea una instancia de EC2 que refiere a un parámetro de AMI público. La referencia dinámica recupera el ID de AMI de Amazon Linux 2023 del parámetro público. Para obtener más información acerca de parámetros públicos, consulte [Descubrir parámetros públicos en el Almacén de parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-finding-public-parameters.html) en la *Guía del usuario de AWS Systems Manager*.

#### JSON
<a name="dynamic-references-ssm-public-ami-example.json"></a>

```
{
    "Resources": {
        "MyInstance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}",
                "InstanceType": "t2.micro"
            }
        }
    }
}
```

#### YAML
<a name="dynamic-references-ssm-public-ami-example.yaml"></a>

```
Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}'
      InstanceType: t2.micro
```

### Parámetro de ID de AMI personalizado
<a name="dynamic-references-ssm-custom-ami-example"></a>

En el siguiente ejemplo, se crea una plantilla de lanzamiento de EC2 que refiere a un ID de AMI personalizado almacenado en el Almacén de parámetros. La referencia dinámica recupera el ID de AMI de la versión *`2`* del parámetro `golden-ami` en el momento en que se lanza una instancia desde la plantilla de lanzamiento.

#### JSON
<a name="dynamic-references-ssm-custom-ami-example.json"></a>

```
{
    "Resources": {
        "MyLaunchTemplate": {
            "Type": "AWS::EC2::LaunchTemplate",
            "Properties": {
                "LaunchTemplateName": {
                    "Fn::Sub": "${AWS::StackName}-launch-template"
                },
                "LaunchTemplateData": {
                    "ImageId": "{{resolve:ssm:golden-ami:2}}",
                    "InstanceType": "t2.micro"
                }
            }
        }
    }
}
```

#### YAML
<a name="dynamic-references-ssm-custom-ami-example.yaml"></a>

```
Resources:
  MyLaunchTemplate:
    Type: AWS::EC2::LaunchTemplate
    Properties: 
      LaunchTemplateName: !Sub ${AWS::StackName}-launch-template
      LaunchTemplateData:
        ImageId: '{{resolve:ssm:golden-ami:2}}'
        InstanceType: t2.micro
```

# Obtención de un valor de cadena segura del Almacén de parámetros de Systems Manager
<a name="dynamic-references-ssm-secure-strings"></a>

En CloudFormation, puede usar datos confidenciales, como contraseñas o claves de licencia, sin exponerlos directamente en sus plantillas al almacenar los datos confidenciales como una “cadena segura” en el Almacén de parámetros de AWS Systems Manager. Para obtener una introducción al Almacén de parámetros, consulte [Almacén de parámetros de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) en la *Guía del usuario de AWS Systems Manager*.

Para utilizar una cadena segura del Almacén de parámetros en la plantilla, debe usar una referencia dinámica `ssm-secure`. CloudFormation no almacena nunca el valor real de cadena segura. En su lugar, solo almacena la referencia dinámica literal, que contiene el nombre de parámetro en texto sin formato de la cadena segura. 

Durante la creación o las actualizaciones de la pila, CloudFormation accede al valor de cadena segura según sea necesario, sin exponer el valor real. Las cadenas seguras solo se pueden usar para las propiedades de recursos que admiten el patrón de referencia dinámica `ssm-secure`. Para obtener más información, consulte [Recursos que admiten patrones de parámetros dinámicos para SecureStrings o cadenas seguras](#template-parameters-dynamic-patterns-resources).

CloudFormation no devuelve el valor del parámetro real para las cadenas seguras en ninguna llamada a la API. Solo devuelve la referencia dinámica literal. Al comparar los cambios con el conjunto de cambios, CloudFormation solo compara la cadena de referencia dinámica literal. No resuelve ni compara los valores reales de la cadena segura.

Al utilizar referencias dinámicas `ssm-secure`, debe tener en cuenta varios aspectos:
+ CloudFormation no puede acceder a los valores del Almacén de parámetros desde otras Cuentas de AWS.
+ CloudFormation no es compatible con el uso de etiquetas de parámetros de Systems Manager o parámetros públicos en las referencias dinámicas.
+ En las regiones `cn-north-1` y `cn-northwest-1`, las cadenas seguras no son compatibles con Systems Manager.
+ Las referencias dinámicas de valores seguros, como, por ejemplo, `ssm-secure`, no son compatibles actualmente con los recursos personalizados.
+ Si CloudFormation necesita reversionar la actualización de la pila, y la versión especificada anteriormente de un parámetro de cadena segura ya no está disponible, se producirá un error en dicha operación de reversión. En esos casos, existen dos opciones:
  + Use `CONTINUE_UPDATE_ROLLBACK` para omitir el recurso.
  + Vuelva a crear el parámetro SecureString o de cadena segura en el almacén de parámetros de Administrador de sistemas y actualícelo hasta que la versión del parámetro llegue a la versión que se utiliza en la plantilla. Luego use `CONTINUE_UPDATE_ROLLBACK` sin omitir el recurso.

## Recursos que admiten patrones de parámetros dinámicos para SecureStrings o cadenas seguras
<a name="template-parameters-dynamic-patterns-resources"></a>

Los recursos compatibles con el patrón de referencia dinámica `ssm-secure` son:


| Recurso | Tipo de propiedad | Propiedades | 
| --- | --- | --- | 
| [AWS::DirectoryService::MicrosoftAD](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-directoryservice-microsoftad.html) |  | `Password` | 
| [AWS::DirectoryService::SimpleAD](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-directoryservice-simplead.html) |  | `Password` | 
| [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticache-replicationgroup.html) |  | `AuthToken` | 
| [AWS::IAM::User](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-user.html) | [LoginProfile](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-iam-user-loginprofile.html) | `Password` | 
| [AWS::KinesisFirehose::DeliveryStream](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-kinesisfirehose-deliverystream.html) | [RedshiftDestinationConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-kinesisfirehose-deliverystream-redshiftdestinationconfiguration.html) | `Password` | 
| [AWS::OpsWorks::App](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-opsworks-app.html) | [Origen](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-opsworks-app-source.html) | `Password` | 
| [AWS::OpsWorks::Stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-opsworks-stack.html) | [CustomCookbooksSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-opsworks-stack-source.html) | `Password` | 
| [AWS::OpsWorks::Stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-opsworks-stack.html) | [RdsDbInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-opsworks-stack-rdsdbinstance.html) | `DbPassword` | 
| [AWS::RDS::DBCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbcluster.html) |  | `MasterUserPassword` | 
| [AWS::RDS::DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html) |  | `MasterUserPassword`  | 
| [AWS::Redshift::Cluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-redshift-cluster.html) |  | `MasterUserPassword` | 

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

Para referenciar un valor de cadena segura del Almacén de parámetros de Systems Manager en una plantilla de CloudFormation, utilice el siguiente patrón de referencia `ssm-secure`.

```
{{resolve:ssm-secure:parameter-name:version}}
```

Su referencia debe cumplir el siguiente patrón de expresión regular para nombre-parámetro y versión:

```
{{resolve:ssm-secure:[a-zA-Z0-9_.\-/]+(:\d+)?}}
```

`parameter-name`  
El nombre del parámetro en el almacén de parámetros de . El nombre de parámetro distingue entre mayúsculas y minúsculas.  
Obligatorio.

`version`  
Un número entero que especifica la versión del parámetro que se va a utilizar. Si no especifica la versión exacta, CloudFormation utiliza la última versión del parámetro cada vez que cree o actualice la pila. Para obtener más información, consulte [Trabajo con versiones de parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-versions.html) en la *Guía del usuario de AWS Systems Manager*.  
Opcional.

## Ejemplo
<a name="dynamic-references-ssm-secure-example"></a>

En el siguiente ejemplo, se utiliza una referencia dinámica `ssm-secure` para establecer la contraseña de un usuario de IAM para una cadena segura almacenada en el Almacén de parámetros. Tal y como se especifica, CloudFormation usará la versión *`10`* del parámetro `IAMUserPassword` para las operaciones de pila y de conjunto de cambios.

### JSON
<a name="dynamic-references-ssm-secure-example.json"></a>

```
  "MyIAMUser": {
    "Type": "AWS::IAM::User",
    "Properties": {
      "UserName": "MyUserName",
      "LoginProfile": {
        "Password": "{{resolve:ssm-secure:IAMUserPassword:10}}"
      }
    }
  }
```

### YAML
<a name="dynamic-references-ssm-secure-example.yaml"></a>

```
  MyIAMUser:
    Type: AWS::IAM::User
    Properties:
      UserName: 'MyUserName'
      LoginProfile:
        Password: '{{resolve:ssm-secure:IAMUserPassword:10}}'
```

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