Cloud Intelligence™
Compartilhando Secrets no AWS Parameter Store
Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.
About Tyler Wengerd
Cloud Architect with 10+ years of cloud expertise, both on AWS and GCP. Focused on security, networking, and IaC.
When I'm not at work, you might find me riding my bicycle or playing the ukulele (not simultaneously).
My personal pagePerfectScale™ for Kubernetes
Ready to optimize?
Get your free Kubernetes savings analysis

Introdução
Em 22 de fevereiro de 2024, a Amazon Web Services (AWS) anunciou a possibilidade de compartilhar parâmetros do Systems Manager Parameter Store entre contas.
Esse recurso é novo no Parameter Store, mas o AWS Secrets Manager sempre ofereceu suporte a secrets entre contas. Agora que dá para compartilhar parâmetros do Parameter Store, será que vale a pena usá-lo no lugar do Secrets Manager para guardar e compartilhar secrets?
Este artigo mostra as diferenças entre o Secrets Manager e o Parameter Store e traz o passo a passo para criar e compartilhar um parâmetro secreto entre contas da AWS.
Secrets Manager vs. parâmetros criptografados
Recursos e limitações do Secrets Manager
- Os secrets são criptografados automaticamente com chaves do KMS
- Os secrets podem ser rotacionados automaticamente
- Tamanho máximo do secret de 64KB
- Dá para criar secrets pelo console web, CLI, CloudFormation, Terraform etc.
- Os secrets podem ser replicados automaticamente entre regiões
- Suporta até 10.000 requisições
GetSecretValuepor segundo - Acessível a partir de um amplo conjunto de serviços da AWS e também de serviços de terceiros, como o Hashicorp Vault
- Custos: US$ 0,40 por secret por mês; US$ 0,05 a cada 10.000 chamadas de API
- Os secrets podem ser compartilhados alterando a resource policy do secret
Recursos e limitações do Parameter Store
- Os parâmetros podem ser criptografados com chaves do KMS quando se usa o tipo
SecureString - Não há suporte a rotação automática
- Tamanho máximo de 8KB para parâmetros avançados
- Parâmetros
SecureStringnão podem ser criados via CloudFormation, mas podem ser criados pelo console web, CLI, Terraform etc. - Os parâmetros são regionais, sem replicação automática
- Suporta até 10.000 requisições
GetParameterpor segundo (40 por padrão) - Acessível a partir de uma lista menor de serviços da AWS
- Custos: US$ 0,05 por parâmetro compartilhado por mês; US$ 0,05 a cada 10.000 chamadas de API
- Os parâmetros podem ser compartilhados pelo Resource Access Manager (RAM)
Tanto o Secrets Manager quanto o Parameter Store funcionam com o doitintl/secrets-init — uma ferramenta open source que simplifica a integração de serviços de gerenciamento de secrets com workloads em clusters Kubernetes. Temos um post no blog com mais detalhes aqui.
Qual escolher?
O Secrets Manager continua sendo a primeira opção quando o assunto é armazenar secrets. Ele foi pensado desde o início para isso, tem amplo suporte entre serviços e oferece recursos como rotação automática e secrets maiores do que os parâmetros do Parameter Store.
Mesmo assim, o Parameter Store pode ser uma boa alternativa para compartilhar secrets se:
- Você gerencia uma quantidade enorme de secrets e a economia faz diferença (US$ 0,05 contra US$ 0,40 por secret por mês)
- Você já tem parâmetros secretos no Parameter Store e não precisa dos recursos extras do Secrets Manager
Your cloud bill shouldn't be a mystery
Optimization, automation, expertise. In one platform.
Criando e compartilhando um parâmetro secreto criptografado
A documentação do Parameter Store traz um passo a passo para criar e compartilhar um parâmetro. Criar e compartilhar um parâmetro SecureString é parecido, mas a chave do KMS usada para criptografar o parâmetro também precisa ser compartilhada.
1. Crie uma chave no KMS
Primeiro, crie uma chave KMS simétrica na AWS, que será usada para criptografar o parâmetro. A AWS documenta o processo completo aqui.

Captura de tela do processo de criação da chave KMS. Criar um alias é opcional, mas recomendado.
Na política dessa chave, inclua uma condição que permita o uso da chave pelas outras contas. Se quiser compartilhar essa chave e o parâmetro com toda a sua organização AWS, dá para usar uma Condition na política, conforme explicado neste artigo do AWS re:Post.

Captura de tela da tela final de revisão do processo de criação da chave KMS
2. Crie um parâmetro Advanced no Parameter Store
Com a chave do KMS pronta, crie o parâmetro no Parameter Store conforme documentado pela AWS aqui.
Escolha o tier Advanced, o tipo SecureString e selecione a chave KMS criada antes.

Só parâmetros Advanced podem ser armazenados! Se você escolher um parâmetro standard sem querer, sem problema — dá para alterar depois.
3. Compartilhe o parâmetro com o Resource Access Manager (RAM)
Depois de criar o parâmetro, abra o Resource Access Manager e crie um novo Resource Share para ele, conforme documentado pela AWS aqui.
Use a política AWSRAMDefaultPermissionsSSMParameterReadOnly na etapa Associate managed permissions e indique as contas que devem ter acesso ao parâmetro (ou toda a sua organização AWS, se preferir) na etapa Grant access to principals.

Vale lembrar que as tags associadas ao resource share aqui não alteram as tags do parâmetro em si

A permissão AWSRAMDefaultPermissionsSSMParameterReadOnly basta quando o objetivo é acesso somente leitura

Neste exemplo, só o ID de conta 123456789012 vai ter acesso ao parâmetro compartilhado. Não inclua a conta em que o parâmetro já existe.

O passo final é só uma tela de revisão
4. Aceite o resource share
Depois que o resource share é criado, talvez as contas externas precisem aceitar o convite.
Se as contas compartilhadas estão na sua organização AWS e o compartilhamento de recursos dentro da organização está habilitado, isso ocorre automaticamente.
Para contas que não fazem parte da sua organização, ou caso o compartilhamento de recursos dentro da organização não esteja habilitado, o resource share precisa ser aceito por cada conta.
5. Confirme se você consegue acessar o parâmetro compartilhado
Com o parâmetro criado e compartilhado, é hora de testar!
Uma forma rápida de testar o acesso ao parâmetro a partir de uma conta externa é usar a AWS CLI (em um terminal local ou no AWS CloudShell):
aws ssm get-parameter --name <ARN completo do parâmetro> --with-decryption
Veja abaixo um exemplo de saída com o valor do parâmetro descriptografado:

Se você preferir não exibir o valor do parâmetro secreto, é só omitir a flag with-decryption
Referências
- https://github.com/doitintl/secrets-init
- https://www.doit.com/kubernetes-and-secrets-management-in-cloud/
- https://aws.amazon.com/about-aws/whats-new/2024/02/aws-systems-manager-parameter-store-cross-account-sharing/
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_limits.html
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/integrating.html
- https://developer.hashicorp.com/hcp/docs/vault-secrets/integrations/aws-secrets-manager
- https://aws.amazon.com/secrets-manager/pricing/
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples_cross.html
- https://docs.aws.amazon.com/general/latest/gr/ssm.html
- https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html#systemsmanager-PutParameter-request-Type
- https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html
- https://aws.amazon.com/systems-manager/pricing/#Parameter_Store
- https://docs.aws.amazon.com/ram/latest/userguide/shareable.html
- https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-shared-parameters.html
- https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk
- https://repost.aws/knowledge-center/kms-key-organization-account
- https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html
- https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html
- https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs
- https://docs.aws.amazon.com/ram/latest/userguide/working-with-shared-invitations.html
- https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html
- https://gist.github.com/enigmango/0e2332bfc0b3cbbf234a7c5968020eaf
Poder compartilhar parâmetros do Parameter Store é um ótimo acréscimo, principalmente para distribuir parâmetros não sensíveis a partir de uma conta central em toda a organização AWS. Já para gerenciar secrets, o Secrets Manager continua sendo a primeira escolha.
Exemplo de código
Quer testar com Infrastructure-as-Code? Este gist do GitHub traz um exemplo de código Terraform para criar um parâmetro criptografado compartilhado em toda a sua AWS Organization.
Mais informações
Na DoiT International, oferecemos expertise e suporte para Secrets Manager, Parameter Store e outros serviços de nuvem. Para saber mais sobre consultoria com a DoiT, acesse https://www.doit.com/services/.