Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Compartir secretos en AWS Parameter Store

By Tyler WengerdJun 17, 20245 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

Introducción

El 22 de febrero de 2024, Amazon Web Services (AWS) anunció la posibilidad de compartir parámetros de Systems Manager Parameter Store entre cuentas.

Es una funcionalidad nueva en Parameter Store, pero AWS Secrets Manager siempre soportó secretos entre cuentas. Ahora que los parámetros de Parameter Store también pueden compartirse, ¿conviene usar Parameter Store en lugar de Secrets Manager para almacenar y compartir secretos?

En este artículo se repasan las diferencias entre Secrets Manager y Parameter Store y se detallan los pasos para crear y compartir un parámetro secreto entre cuentas de AWS.

Secrets Manager vs. parámetros cifrados

Características y limitaciones de Secrets Manager

Características y limitaciones de Parameter Store

Tanto Secrets Manager como Parameter Store funcionan con doitintl/secrets-init, una herramienta de código abierto que simplifica la integración de los servicios de gestión de secretos con workloads que corren en clústeres de Kubernetes. Tenemos un artículo del blog con más información acá.

¿Cuál elegir?

Secrets Manager sigue siendo el primer servicio que deberías considerar para almacenar secretos. Fue diseñado desde el inicio con ese propósito, tiene amplio soporte entre servicios e incluye funcionalidades como la rotación automática y un tamaño de secreto mayor que el de los parámetros de Parameter Store.

Aun así, Parameter Store puede ser una alternativa para compartir secretos si:

  • Manejas una cantidad enorme de secretos y el ahorro sería significativo (USD 0,05 vs. USD 0,40 por secreto al mes)
  • Ya tienes parámetros secretos en Parameter Store y no necesitas las funcionalidades adicionales de Secrets Manager

Crear y compartir un parámetro secreto cifrado

La documentación de Parameter Store incluye un paso a paso para crear y compartir un parámetro. Crear y compartir un parámetro SecureString es un proceso similar, con la diferencia de que también hay que compartir la clave KMS usada para cifrarlo.

1. Crea una clave en KMS

Primero, crea una clave KMS simétrica en AWS para cifrar el parámetro. AWS documenta el proceso completo acá.

Captura del paso 2 del proceso de creación de la clave KMS

Captura del proceso de creación de la clave KMS. Crear un alias es opcional, pero recomendable.

En la política de la clave, agrega una condición que permita que las otras cuentas la usen. Si quieres compartir esta clave y el parámetro con toda tu organización de AWS, puedes incluir un Condition en la política como se explica en este artículo de AWS re:Post.

Captura de la pantalla de revisión del proceso de creación de la clave KMS

Captura de la pantalla de revisión final del proceso de creación de la clave KMS

2. Crea un parámetro Advanced en Parameter Store

Una vez creada la clave KMS, crea el parámetro en Parameter Store tal como lo documenta AWS acá.

Elige el nivel Advanced, el tipo SecureString y selecciona la clave KMS que creaste antes.

Captura del proceso de creación del parámetro

Solo se pueden almacenar parámetros Advanced. Si elegiste por error un parámetro estándar, no pasa nada: lo puedes cambiar después.

3. Comparte el parámetro con Resource Access Manager (RAM)

Una vez creado el parámetro, abre Resource Access Manager y crea un nuevo Resource Share para el parámetro, tal como lo documenta AWS acá.

Usa la política AWSRAMDefaultPermissionsSSMParameterReadOnly en el paso Associate managed permissions y especifica las cuentas que deberían tener acceso al parámetro (o toda tu organización de AWS si lo prefieres) en el paso Grant access to principals.

Captura de Resource Access Manager compartiendo el parámetro — sección \

Ten en cuenta que las etiquetas asociadas al resource share no modifican las etiquetas del parámetro

Captura de Resource Access Manager compartiendo el parámetro — sección \

El permiso AWSRAMDefaultPermissionsSSMParameterReadOnly alcanza si solo se necesita acceso de lectura

Captura de Resource Access Manager compartiendo el parámetro — sección \

En este ejemplo, solo el ID de cuenta 123456789012 tendrá acceso al parámetro compartido. No agregues la cuenta donde ya existe el parámetro.

Captura de Resource Access Manager compartiendo el parámetro — pantalla de revisión final

El último paso es simplemente una pantalla de revisión

4. Acepta el resource share

Una vez creado el resource share, puede que las cuentas externas tengan que aceptar la invitación.

Si las cuentas compartidas pertenecen a tu organización de AWS y el uso compartido de recursos dentro de la organización está habilitado, esto sucede automáticamente.

Para cuentas que no estén en tu organización, o si el uso compartido de recursos dentro de la organización no está habilitado, el resource share deberá aceptarse desde cada cuenta.

5. Verifica que puedes acceder al parámetro compartido

Una vez creado y compartido el parámetro, ¡toca probarlo!

Una forma rápida de probar el acceso desde una cuenta externa es usar la AWS CLI (desde una terminal local o con AWS CloudShell):

 aws ssm get-parameter --name <ARN completo del parámetro> --with-decryption

A continuación, un ejemplo de la salida con el valor del parámetro descifrado:

Captura de AWS CloudShell con el comando para leer el parámetro cifrado y la salida exitosa

Si prefieres no exponer el valor del parámetro secreto, puedes omitir el flag with-decryption

Referencias

Poder compartir parámetros de Parameter Store es una excelente incorporación, sobre todo cuando se trata de parámetros no secretos que se comparten desde una cuenta central hacia toda una organización de AWS. Para gestionar secretos, en cambio, Secrets Manager debería ser la primera opción.

Ejemplo de código

¿Quieres probarlo con Infrastructure-as-Code? Este gist de GitHub incluye código de ejemplo en Terraform para crear un parámetro cifrado y compartido en toda tu AWS Organization.

Más información

En DoiT International brindamos experiencia y soporte para Secrets Manager, Parameter Store y otros servicios cloud. Si quieres saber más sobre la consultoría con DoiT, visita https://www.doit.com/services/.