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