Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Compartilhando Secrets no AWS Parameter Store

By Tyler WengerdJun 17, 20245 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

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

Recursos e limitações do Parameter Store

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 passo 2 do processo de criação da chave KMS

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 de revisão do processo de criação da chave KMS

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.

Captura de tela do processo de criação do parâmetro

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.

Captura de tela do Resource Access Manager compartilhando o parâmetro — seção 'Specify Resource Share Details'

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

Captura de tela do Resource Access Manager compartilhando o parâmetro — seção 'Managed Permissions'

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

Captura de tela do Resource Access Manager compartilhando o parâmetro — seção 'Grant access to principals'

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.

Captura de tela do Resource Access Manager compartilhando o parâmetro — tela final de revisão

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:

Captura de tela do AWS CloudShell mostrando o comando para ler o parâmetro criptografado e a saída bem-sucedida

Se você preferir não exibir o valor do parâmetro secreto, é só omitir a flag with-decryption

Referências

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