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âmicasecretsmanager
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âmicasecretsmanager
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âmicasecretsmanager
e crie uma pilha a partir do modelo. Mais tarde, atualize o valor do segredo no Secrets Manager, mas não atualize o recursoAWS::RDS::DBInstance
no modelo. Nesse caso, mesmo se você executar uma atualização de pilha, o valor do segredo na propriedadeMasterPassword
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 especifiqueversion-id
. Se você não especificarversion-stage
ouversion-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-stage
ouversion-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
. A versão do segredo recuperada é a versão com o valor de estágio de versão de MySecret
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
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
}}