Obtenha um segredo ou valor secreto do Secrets Manager - AWS CloudFormation

Obtenha um segredo ou valor secreto do Secrets Manager

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

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.

  • 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

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 AWS::RDS::DBInstance 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

Para especificar um segredo armazenado no Secrets Manager, você deve ter permissão para chamar GetSecretValue para o segredo.

Padrão de referência

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

Recuperar valores de nome de usuário e senha de um segredo

O exemplo a seguir AWS::RDS::DBInstance 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

{ "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}}'

Recuperar todo o SecretString

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