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.

Considerações

Ao usar referências dinâmicas do secretsmanager, há algumas considerações de segurança importantes que você deve ter em mente:

  • 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.

  • Atualizar um segredo no Secrets Manager não atualiza automaticamente o segredo no CloudFormation. Para que o CloudFormation atualize uma referência dinâmica secretsmanager, é necessário executar uma atualização de pilha que atualize o recurso que contenha a referência dinâmica, atualizando a propriedade do recurso que contenha a referência dinâmica secretsmanager ou atualizando alguma outra propriedade do recurso.

    Por exemplo, suponha que no modelo você especifique a propriedade MasterPassword de um recurso AWS::RDS::DBInstance para ser uma referência dinâmica secretsmanager e crie uma pilha a partir do modelo. Mais tarde, atualize o valor do segredo no Secrets Manager, mas não atualize o recurso AWS::RDS::DBInstance no modelo. Nesse caso, mesmo se você executar uma atualização de pilha, o valor do segredo na propriedade MasterPassword não será atualizado e permanecerá com o valor do segredo anterior.

    Além disso, considere usar o Secrets Manager para alternar o segredo automaticamente para um serviço ou banco de dados protegido. Para obter mais informações, consulte Alternar segredos do AWS Secrets Manager.

  • No momento, as referências dinâmicas para valores seguros, como secretsmanager, não são compatíveis com recursos personalizados.

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. A versão do segredo recuperada é a versão com o valor de estágio de versão de AWSCURRENT.

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