Prácticas recomendadas para la administración de secretos en Amazon ECS - Amazon Elastic Container Service

Prácticas recomendadas para la administración de secretos en Amazon ECS

Las aplicaciones suelen utilizar secretos, como las claves de API y las credenciales de las bases de datos, para acceder a otros sistemas. Suelen consistir en un nombre de usuario y una contraseña, un certificado o una clave de API. El acceso a estos secretos debe restringirse a las entidades principales de IAM específicas que utilizan IAM e deben inyectarse en los contenedores durante el tiempo de ejecución.

Los secretos se pueden introducir sin problemas en los contenedores desde AWS Secrets Manager y Parameter Store de Amazon EC2 Systems Manager. Puede hacer referencia a estos secretos en su tarea mediante cualquiera de las siguientes formas.

  1. Se hace referencia a ellos como variables de entorno que utilizan el parámetro de definición del contenedor de secrets.

  2. Se hace referencia a ellos como secretOptions si su plataforma de registro requiriera autenticación. Para obtener más información, consulte las opciones de configuración del registro.

  3. Se hace referencia a ellos como secretos y se extraen mediante imágenes que utilizan el parámetro de definición del contenedor repositoryCredentials si el registro del que se extrae el contenedor requiere autenticación. Utilice este método cuando extraiga imágenes de la galería pública de Amazon ECR. Para obtener más información, consulte Autenticación de registros privados para tareas.

Recomendaciones de secretos

Se recomienda que realice las siguientes acciones al configurar la administración de secretos.

Utilizar AWS Secrets Manager o Parameter Store de Amazon EC2 Systems Manager para almacenar materiales secretos

Debe almacenar de forma segura las claves de API, las credenciales de bases de datos y otros materiales secretos en AWS Secrets Manager o como un parámetro cifrado en Parameter Store de Amazon EC2 Systems Manager. Estos servicios son similares porque ambos son almacenes clave-valor administrados que utilizan AWS KMS para cifrar datos confidenciales. AWS Secrets Manager, sin embargo, también incluye la capacidad de rotar automáticamente los secretos, generar secretos aleatorios y compartirlos entre cuentas de AWS. Si considera que estas características son importantes, utilice AWS Secrets Manager; de lo contrario, utilice parámetros cifrados.

nota

Las tareas que hacen referencia a un secreto de AWS Secrets Manager o Parameter Store de Amazon EC2 Systems Manager requieren un rol de ejecución de tareas con una política que conceda el acceso de Amazon ECS al secreto deseado y, si corresponde, a la clave AWS KMS utilizada para cifrar y descifrar ese secreto.

importante

Los secretos a los que se hace referencia en las tareas no se rotan automáticamente. Si su secreto cambia, debe forzar una nueva implementación o iniciar una nueva tarea para recuperar el valor secreto más reciente. Para obtener más información, consulte los temas siguientes:

Recuperación de datos de un bucket cifrado de Amazon S3

Como el valor de las variables de entorno puede filtrarse inadvertidamente en los registros y se revela al ejecutar docker inspect, debe almacenar los secretos en un bucket cifrado de Amazon S3 y utilizar roles de tareas para restringir el acceso a esos secretos. De este modo, la aplicación debe escribirse para leer el secreto del bucket de Amazon S3. Para obtener instrucciones, consulte Establecer el comportamiento predeterminado de cifrado del lado del servidor para buckets de Amazon S3.

Montar el secreto en un volumen utilizando un contenedor sidecar

Dado que existe un riesgo elevado de filtración de datos con las variables de entorno, debe utilizar un contenedor sidecar que lea sus secretos de AWS Secrets Manager y los escriba en un volumen compartido. Este contenedor puede ejecutarse y salir antes que el contenedor de la aplicación mediante pedidos de contenedores de Amazon ECS. De este modo, el contenedor de la aplicación monta posteriormente el volumen en el que se escribió el secreto. Al igual que el método de bucket de Amazon S3, la aplicación debe escribirse para leer el secreto del volumen compartido. Como el volumen se limita a la tarea, este se elimina automáticamente cuando la tarea se detiene. Para ver un ejemplo de un contenedor sidecar, consulte el proyecto aws-secret-sidecar-injector.

nota

En Amazon EC2, el volumen en el que está escrito el secreto se puede cifrar con una clave administrada por el cliente de AWS KMS. En AWS Fargate, el almacenamiento por volumen se cifra automáticamente mediante una clave administrada por el servicio.

Recursos adicionales de