Secrets Manager e Parameter Store
Faça a rotação automática das credenciais do banco de dados com o Secrets Manager, armazene configurações não secretas no Parameter Store e integre ambos ao Lambda e ao ECS.
Secrets Manager e Parameter Store é uma aula grátis de Cloud & IT Cert Prep no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cloud & IT Cert Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cloud & IT Cert Prep inclui 4 aulas no total.
O Problema dos Segredos no Código
Um antipadrão comum e perigoso é armazenar segredos (senhas de banco de dados, chaves de API, tokens OAuth) no código-fonte da aplicação, em variáveis de ambiente ou em arquivos de configuração adicionados ao controle de versão. Quando esses repositórios são expostos — acidentalmente tornados públicos ou acessados por um invasor — todos os segredos são comprometidos imediatamente. A AWS oferece dois serviços gerenciados para eliminar esse problema: o AWS Secrets Manager, para credenciais que precisam de rotação automática, e o AWS Systems Manager Parameter Store, para valores de configuração e segredos sem rotação.
# Anti-pattern: secrets in code (NEVER do this)
# db_password = 'supersecret123'
# api_key = 'sk-abc123def456'
# Best practice: retrieve at runtime
import boto3
client = boto3.client('secretsmanager', region_name='us-east-1')
response = client.get_secret_value(SecretId='prod/myapp/db-password')
password = response['SecretString'] # fresh value, always currentVisão Geral do AWS Secrets Manager
O AWS Secrets Manager é um serviço gerenciado para armazenar, recuperar e fazer a rotação automática de segredos. Ele criptografa todos os segredos com KMS (por padrão, usando uma chave gerenciada pela AWS ou sua CMK). Os segredos podem armazenar qualquer dado estruturado como uma cadeia JSON de chave-valor. O Secrets Manager cobra US$ 0,40 por segredo por mês, mais US$ 0,05 a cada 10.000 chamadas de API. Principal diferença em relação ao Parameter Store: rotação automática integrada para RDS, Redshift, DocumentDB e segredos personalizados por meio de funções de rotação do Lambda — sem necessidade de alterações na aplicação durante a rotação.
# Create a secret in Secrets Manager
aws secretsmanager create-secret \
--name 'prod/myapp/database' \
--description 'Production MySQL credentials' \
--secret-string '{"username":"admin","password":"changeme123","host":"mydb.rds.amazonaws.com","port":3306,"dbname":"orders"}'
# Retrieve the secret (by application)
aws secretsmanager get-secret-value \
--secret-id 'prod/myapp/database' \
--query 'SecretString' \
--output text | python3 -c 'import sys,json; s=json.load(sys.stdin); print(s["password"])'Rotação automática com o Secrets Manager
A rotação automática é o recurso mais poderoso do Secrets Manager. Para bancos de dados RDS, o Secrets Manager faz a rotação nativa das senhas: 1) gera uma nova senha; 2) atualiza a senha do usuário do banco de dados no RDS; 3) atualiza o segredo com a nova senha; 4) verifica se as novas credenciais funcionam. Tudo isso acontece enquanto sua aplicação está em execução — sem tempo de inatividade e sem intervenção manual. As aplicações sempre chamam get-secret-value para recuperar a senha atual, portanto usam automaticamente as credenciais alternadas.
# Enable automatic rotation for RDS secret
aws secretsmanager rotate-secret \
--secret-id 'prod/myapp/database' \
--rotation-rules AutomaticallyAfterDays=30 \
--rotation-lambda-arn arn:aws:lambda:us-east-1:123:function:SecretsManagerRDSMySQLRotationSingleUser
# AWS provides pre-built rotation Lambda functions for:
# - RDS MySQL/PostgreSQL/MariaDB/Oracle/SQL Server
# - DocumentDB
# - Redshift
# - Custom: write your own Lambda for other services
# Application code: always call GetSecretValue, never cache long-termArmazenamento local de segredos em cache
Chamar o Secrets Manager em cada consulta ao banco de dados seria caro e lento. A prática recomendada é armazenar o segredo localmente em cache na memória por um curto período. A AWS fornece clientes oficiais de armazenamento em cache do Secrets Manager para Java e Python, que armazenam os segredos em cache por um TTL configurável. Quando o cache expira, o cliente busca novamente o segredo no Secrets Manager. Se uma aplicação receber um erro de autenticação (indicando que a senha foi alternada), ela atualiza imediatamente o cache e tenta novamente. Esse padrão oferece desempenho e atualidade sem sobrecarregar a API do Secrets Manager.
# Python: Secrets Manager caching client
# pip install aws-secretsmanager-caching
from botocore.session import get_session
from aws_secretsmanager_caching import SecretCache, SecretCacheConfig
client = get_session().create_client('secretsmanager')
cache = SecretCache(
config=SecretCacheConfig(secret_refresh_interval=3600), # cache 1 hour
client=client
)
# Returns cached value unless refresh interval expired
secret = cache.get_secret_string('prod/myapp/database')AWS Systems Manager Parameter Store
O AWS Systems Manager (SSM) Parameter Store é um armazenamento hierárquico gratuito (para parâmetros padrão) de pares chave-valor para dados de configuração e segredos. Ele oferece suporte aos tipos de parâmetro String, StringList e SecureString. SecureString criptografa os valores usando KMS. Ao contrário do Secrets Manager, o Parameter Store NÃO oferece suporte à rotação automática — ele foi projetado para valores de configuração que mudam com pouca frequência. Os parâmetros padrão são gratuitos e podem armazenar até 4 KB. Os parâmetros avançados aceitam valores maiores (até 8 KB), políticas de parâmetros (lembretes de expiração e rotação) e custam US$ 0,05 por parâmetro ao mês.
# Create Parameter Store parameters
aws ssm put-parameter \
--name '/prod/myapp/db-host' \
--value 'mydb.cluster-abc.us-east-1.rds.amazonaws.com' \
--type String
aws ssm put-parameter \
--name '/prod/myapp/db-password' \
--value 'mysecretpassword' \
--type SecureString \
--key-id alias/my-kms-key
# Retrieve parameter
aws ssm get-parameter \
--name '/prod/myapp/db-password' \
--with-decryption \
--query 'Parameter.Value' --output textHierarquia do Parameter Store e IAM
Organize os valores do Parameter Store usando uma estrutura hierárquica de caminhos que reflita seu ambiente e a arquitetura da aplicação. Isso permite criar políticas de IAM com permissões detalhadas, concedendo acesso aos parâmetros por prefixo de caminho. Por exemplo, conceda a uma função Lambda acesso somente aos parâmetros em /prod/payment-service/ — ela não poderá acessar os parâmetros de outros serviços. Esse princípio do menor privilégio para configurações impede que um serviço comprometido leia os segredos de outro serviço.
# Parameter hierarchy
/prod/payment-service/db-password
/prod/payment-service/stripe-api-key
/prod/order-service/db-password
/prod/order-service/redis-url
/staging/payment-service/db-password
# IAM policy: payment-service Lambda can ONLY read its params
{
'Effect': 'Allow',
'Action': ['ssm:GetParameter', 'ssm:GetParameters', 'ssm:GetParametersByPath'],
'Resource': 'arn:aws:ssm:us-east-1:123:parameter/prod/payment-service/*'
}
# Get all parameters for an app at once
aws ssm get-parameters-by-path \
--path '/prod/payment-service/' \
--with-decryption --recursiveSecrets Manager ou Parameter Store: quando usar cada um
Escolha entre os dois serviços com base nos seus requisitos: use o Secrets Manager quando precisar de rotação automática de segredos, estiver armazenando credenciais de banco de dados, o segredo precisar ser compartilhado entre várias contas AWS ou a conformidade exigir políticas de rotação documentadas. Use o Parameter Store quando precisar de valores de configuração (não secretos), quiser uma solução gratuita para armazenamento simples de pares chave-valor, precisar de configuração hierárquica com controle de acesso baseado em caminhos ou precisar armazenar o histórico de versões dos parâmetros. Muitas arquiteturas usam os dois em conjunto: Parameter Store para configurações e Secrets Manager para credenciais.
# Usage comparison:
# Secrets Manager:
# Cost: $0.40/secret/month
# Rotation: Automatic (RDS, custom Lambda)
# Cross-account: Yes
# Best for: Database passwords, API keys, OAuth tokens
# Parameter Store:
# Cost: Free (standard) / $0.05/month (advanced)
# Rotation: Manual only
# Cross-account: No (use Secrets Manager)
# Best for: Config values, feature flags, non-rotating secretsIntegração com Lambda e ECS
As funções Lambda e as tarefas do ECS devem recuperar os segredos na inicialização, e não em cada invocação. Para Lambda: recupere os segredos no código de inicialização (fora da função manipuladora) e armazene-os em variáveis globais — o ambiente de execução do Lambda persiste entre as invocações, portanto os segredos são buscados apenas uma vez durante o tempo de vida de cada ambiente. Para ECS: use o campo secrets na definição da tarefa para injetar valores do Secrets Manager ou SecureStrings do Parameter Store como variáveis de ambiente — o ECS os recupera e injeta na inicialização da tarefa, sem nenhuma alteração no código da aplicação.
# ECS task definition: inject secret as environment variable
{
'containerDefinitions': [{
'name': 'api',
'image': 'my-api:latest',
'secrets': [
{
'name': 'DB_PASSWORD',
'valueFrom': 'arn:aws:secretsmanager:us-east-1:123:secret:prod/myapp/database:password::'
},
{
'name': 'API_KEY',
'valueFrom': '/prod/myapp/api-key'
}
]
}]
}
# Application reads DB_PASSWORD from env var
# ECS injects the current secret value at task startParameter Store para IDs de AMI
Um uso prático, mas frequentemente ignorado, do Parameter Store é armazenar IDs de AMI e outras referências de implantação. Em vez de codificar IDs de AMI diretamente nos modelos do CloudFormation (que ficam desatualizados quando novas AMIs são lançadas), faça referência a um valor do Parameter Store. Seu pipeline de CI/CD atualiza o ID da AMI no Parameter Store sempre que uma nova AMI dourada é criada. O CloudFormation lê o ID mais recente da AMI no Parameter Store no momento da implantação. A AWS também publica os IDs das AMIs mais recentes do Amazon Linux em caminhos públicos do Parameter Store, aos quais você pode fazer referência diretamente.
# Get AWS public AMI ID from Parameter Store
aws ssm get-parameter \
--name '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64' \
--query 'Parameter.Value' --output text
# CloudFormation: reference public AMI parameter
Parameters:
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64'
Resources:
MyEC2:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref LatestAmiIdAuditoria e conformidade de segredos
A governança de segredos exige saber quem acessou os segredos e quando. O AWS CloudTrail registra cada chamada de API ao Secrets Manager e ao Parameter Store: GetSecretValue, PutParameter, GetParameter. Isso fornece uma trilha de auditoria completa para fins de conformidade. Use alarmes do CloudWatch com métricas do CloudTrail para alertar quando os segredos forem acessados fora dos padrões normais — por exemplo, se um segredo de produção for acessado por um Principal do IAM incomum ou por um IP que não esteja no seu intervalo conhecido, dispare um alerta para investigação.
# CloudTrail metric filter: alert on unexpected secret access
aws logs put-metric-filter \
--log-group-name CloudTrail/management-events \
--filter-name 'SecretAccessOutsideHours' \
--filter-pattern '{ $.eventSource = "secretsmanager.amazonaws.com" && $.eventName = "GetSecretValue" && $.userAgent != "lambda.amazonaws.com" }' \
--metric-transformations \
metricName=UnexpectedSecretAccess,metricNamespace=Security,metricValue=1
# Then create CloudWatch alarm on this metric
# Alert fires when non-Lambda principal accesses secretsCompartilhamento de segredos entre contas
Em arquiteturas com várias contas, às vezes as aplicações de uma conta precisam de segredos gerenciados em outra conta (por exemplo, uma conta central de Security gerencia todas as senhas do RDS). As políticas de recursos do Secrets Manager permitem o acesso entre contas. Configure uma política baseada em recursos no segredo que conceda a uma função da conta consumidora permissão para chamar GetSecretValue. A função da conta consumidora também deve ter uma política do IAM que permita chamadas ao ARN do segredo. As políticas de chaves do KMS também devem conceder à conta consumidora acesso à CMK usada para criptografar o segredo.
# Secret resource policy: allow cross-account access
aws secretsmanager put-resource-policy \
--secret-id 'prod/shared/rds-password' \
--resource-policy '{
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::999999999999:role/AppRole"
},
"Action": "secretsmanager:GetSecretValue",
"Resource": "*"
}]
}'
# KMS key policy must also allow account 999999999999
# IAM policy in 999999999999 must allow GetSecretValue on ARNVerificação rápida
Teste sua compreensão dos conceitos de AWS Solutions Architect (SAA-C03) apresentados nesta lição.
Resumo da lição
Nesta lição, você aprendeu que: o Secrets Manager oferece rotação automática para credenciais de banco de dados e chaves de API e é a opção preferencial para segredos que precisam ser alternados; o Parameter Store oferece armazenamento hierárquico gratuito de configurações, com controle de acesso do IAM baseado em caminhos; e o ECS e o Lambda podem injetar segredos como variáveis de ambiente sem alterações no código da aplicação. O CloudTrail fornece trilhas de auditoria para todos os acessos a segredos. A seguir, exploraremos WAF, Shield e Network Firewall.
Aprenda Cloud & IT Cert Prep com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 150
- Aulas
- 600
Perguntas Frequentes
A aula “Secrets Manager e Parameter Store” é grátis?
Sim — o texto completo de “Secrets Manager e Parameter Store” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cloud & IT Cert Prep, atualize para CoddyKit PRO. O curso de Cloud & IT Cert Prep inclui 4 aulas no total.
O que vou aprender em “Secrets Manager e Parameter Store”?
Faça a rotação automática das credenciais do banco de dados com o Secrets Manager, armazene configurações não secretas no Parameter Store e integre ambos ao Lambda e ao ECS. Você pratica Cloud & IT Cert Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Cloud & IT Cert Prep?
Nenhuma experiência prévia é necessária. Cloud & IT Cert Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Secrets Manager e Parameter Store”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Cloud & IT Cert Prep?
Sim. Cada aula de Cloud & IT Cert Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- KMS, ACM e padrões de criptografia
- GuardDuty, Inspector e Macie
- Secrets Manager e Parameter Store
- WAF, Shield e Network Firewall