

# Obtenha um segredo ou valor secreto do Secrets Manager
<a name="dynamic-references-secretsmanager"></a>

O Secrets Manager é um serviço que permite armazenar e gerenciar segredos com segurança, como credenciais de banco de dados, senhas e chaves de API de terceiros. Usando o Secrets Manager, você pode armazenar e controlar o acesso a esses segredos centralmente, para que você possa substituir credenciais codificadas no seu código (incluindo senhas) por uma chamada de API para o Secrets Manager recuperar o segredo de forma programática. Para obter mais informações, consulte [O que é o AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) no * Guia do usuário do AWS Secrets Manager*.

Use referências dinâmicas `secretsmanager` para usar todos os segredos ou valores secretos armazenados no Secrets Manager em seus modelos do CloudFormation.

## Práticas recomendadas
<a name="dynamic-references-secretsmanager-best-practices"></a>

Siga estas práticas recomendadas ao usar as referências dinâmicas do Secrets Manager em seus modelos do CloudFormation:
+ **Use referências sem versão para seus modelos do CloudFormation**: armazene credenciais no Secrets Manager e use referências dinâmicas sem especificar parâmetros `version-stage` ou `version-id` para suportar fluxos de trabalho adequados de rodízio de segredos.
+ **Aproveite o rodízio automático**: use o atributo de rodízio automático do Secrets Manager com referências dinâmicas sem versão para gerenciamento de credenciais. Isso garante que suas credenciais sejam atualizadas regularmente sem exigir alterações no modelo. Para ter mais informações, consulte [Alternar segredos do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html).
+ **Use referências versionadas com moderação**: especifique somente parâmetros explícitos `version-stage` ou `version-id` para cenários específicos, como situações de teste ou reversão.

## Considerações
<a name="dynamic-references-secretsmanager-considerations"></a>

Ao usar referências dinâmicas do `secretsmanager`, existem considerações importantes que devem ser consideradas:
+ O CloudFormation não rastreia qual versão de um segredo foi usada em implantações anteriores. Planeje cuidadosamente sua estratégia de gerenciamento de segredo antes de implementar referências dinâmicas. Use referências sem versão quando possível para aproveitar o rodízio automático de segredos. Monitore e valide as atualizações de recursos ao fazer alterações nas configurações de referência dinâmica, como ao fazer a transição de referências dinâmicas não versionadas para referências dinâmicas versionadas e vice-versa.
+ Atualizar somente o valor do segredo no Secrets Manager não faz com que o CloudFormation recupere automaticamente o novo valor. O CloudFormation recupera o valor do segredo somente durante a criação de recursos ou atualizações que modificam o recurso que contém a referência dinâmica. 

  Por exemplo, suponha que seu modelo inclua um 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) em que a propriedade `MasterPassword` esteja definida como uma referência dinâmica do Secrets Manager. Depois de criar uma pilha a partir desse modelo, você atualiza o valor do segredo no Secrets Manager. No entanto, a propriedade `MasterPassword` mantém o valor da senha antiga. 

  Para aplicar o novo valor de segredo, você precisará modificar o recurso `AWS::RDS::DBInstance` em seu modelo do CloudFormation e realizar uma atualização da pilha. 

  Para evitar esse processo manual no futuro, considere usar o Secrets Manager para fazer o rodízio automático do segredo. 
+ No momento, as referências dinâmicas para valores seguros, como `secretsmanager`, não são compatíveis com recursos personalizados.
+ A referência dinâmica `secretsmanager` pode ser usada em todas as propriedades de recursos. Usar a referência dinâmica `secretsmanager` indica que nem o Secrets Manager, nem o CloudFormation deve registrar ou persistir qualquer valor secreto resolvido. No entanto, o valor secreto pode aparecer no serviço cujo recurso está sendo usado. Revise seu uso para evitar o vazamento de dados secretos.

## Permissões
<a name="dynamic-references-secretsmanager-permissions"></a>

Para especificar um segredo armazenado no Secrets Manager, você deve ter permissão para chamar [https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) para o segredo.

## Padrão de referência
<a name="dynamic-references-secretsmanager-pattern"></a>

Para fazer referência a segredos do Secrets Manager em seu modelo do CloudFormation, use este padrão de referência `secretsmanager`.

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

`secret-id`  
O nome ou ARN completo do segredo.  
Para acessar um segredo na sua Conta da AWS, é necessário especificar apenas o nome do segredo. Para acessar um segredo em uma Conta da AWS diferente, especifique o ARN completo do segredo.  
Obrigatório.

`secret-string`  
O único valor aceito é `SecretString`. O padrão é `SecretString`.

`json-key`  
O nome da chave do par de chave-valor cujo valor você deseja recuperar. Se você não especificar um `json-key`, o CloudFormation recuperará todo o texto do segredo.  
Esse segmento não pode incluir o caractere de dois pontos ( `:`).

`version-stage`  
O rótulo de preparação da versão do segredo a ser utilizada. O Secrets Manager usa rótulos de preparação para acompanhar diferentes versões durante o processo de alternância. Se você usar `version-stage`, não especifique `version-id`. Se você não especificar `version-stage` ou `version-id`, o padrão é a versão `AWSCURRENT`.  
Esse segmento não pode incluir o caractere de dois pontos ( `:`).

`version-id`  
O identificador exclusivo da versão do segredo a usar. Se você especificar `version-id`, não especifique `version-stage`. Se você não especificar `version-stage` ou `version-id`, o padrão é a versão `AWSCURRENT`.  
Esse segmento não pode incluir o caractere de dois pontos ( `:`).

## Exemplos
<a name="dynamic-references-secretsmanager-examples"></a>

**Topics**
+ [Recuperar valores de nome de usuário e senha de um segredo](#dynamic-references-secretsmanager-examples-user-name-and-password)
+ [Recuperar todo o SecretString](#dynamic-references-secretsmanager-examples-entire-secretstring)
+ [Recuperar um valor de uma versão específica de um segredo](#dynamic-references-secretsmanager-examples-specific-version)
+ [Recuperar segredos de outro Conta da AWS](#dynamic-references-secretsmanager-examples-secrets-from-another-account)

### Recuperar valores de nome de usuário e senha de um segredo
<a name="dynamic-references-secretsmanager-examples-user-name-and-password"></a>

O exemplo a seguir [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 os valores de nome de usuário e senha armazenados no segredo `MySecret`. Este exemplo mostra o padrão recomendado para referências dinâmicas sem versão, que usa automaticamente a versão `AWSCURRENT` e dá suporte aos fluxos de trabalho de rodízio do Secrets Manager sem exigir alterações no modelo.

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

### Recuperar todo o SecretString
<a name="dynamic-references-secretsmanager-examples-entire-secretstring"></a>

A referência dinâmica a seguir recupera o `SecretString` para `MySecret`.

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

Alternativa:

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

### Recuperar um valor de uma versão específica de um segredo
<a name="dynamic-references-secretsmanager-examples-specific-version"></a>

A referência dinâmica a seguir recupera o valor `password` para a versão `AWSPREVIOUS` do `MySecret`.

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

### Recuperar segredos de outro Conta da AWS
<a name="dynamic-references-secretsmanager-examples-secrets-from-another-account"></a>

A referência dinâmica a seguir recupera o `SecretString` para `MySecret` que esteja em outra Conta da AWS. Você deve especificar o ARN do segredo completo para acessar segredos em outra Conta da AWS.

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

A referência dinâmica a seguir recupera o valor `password` para `MySecret` que esteja em outra Conta da AWS. Você deve especificar o ARN do segredo completo para acessar segredos em outra Conta da AWS.

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