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-stageouversion-idpara 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-stageouversion-idpara 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
MasterPasswordesteja 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 propriedadeMasterPasswordmantém o valor da senha antiga.Para aplicar o novo valor de segredo, você precisará modificar o recurso
AWS::RDS::DBInstanceem 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
secretsmanagerpode ser usada em todas as propriedades de recursos. Usar a referência dinâmicasecretsmanagerindica 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 especifiqueversion-id. Se você não especificarversion-stageouversion-id, o padrão é a versãoAWSCURRENT.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 especifiqueversion-stage. Se você não especificarversion-stageouversion-id, o padrão é a versãoAWSCURRENT.Esse segmento não pode incluir o caractere de dois pontos (
:).
Exemplos
Tópicos
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 . Este exemplo mostra o padrão recomendado para referências dinâmicas sem versão, que usa automaticamente a versão MySecretAWSCURRENT 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 para a versão password do AWSPREVIOUS.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 que esteja em outra Conta da AWS. Você deve especificar o ARN do segredo completo para acessar segredos em outra Conta da AWS.MySecret
{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret}}
A referência dinâmica a seguir recupera o valor para password que esteja em outra Conta da AWS. Você deve especificar o ARN do segredo completo para acessar segredos em outra Conta da AWS.MySecret
{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret:SecretString:password}}