Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
¿Cómo puedo transmitir secretos o información confidencial de forma segura a los contenedores de una tarea de Amazon ECS?
Quiero transmitir secretos o información confidencial de forma segura a los contenedores de una tarea de Amazon Elastic Container Service (Amazon ECS).
Descripción corta
Si pasas datos confidenciales en texto sin formato, puedes provocar problemas de seguridad. Es posible que los datos se puedan detectar en la consola de administración de AWS o mediante la API DescribeTaskDefinition de AWS.
Como práctica de seguridad recomendada, transfiere la información confidencial a los contenedores como variables de entorno. Para inyectar datos de forma segura en los contenedores, consulta los valores almacenados en el almacén de parámetros, una funcionalidad de AWS Systems Manager. También puedes usar AWS Secrets Manager en una definición de tareas de Amazon ECS. A continuación, puedes exponer tu información confidencial como variables de entorno o en la configuración de registro de un contenedor.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Requisitos previos:
- Las tareas deben utilizar la versión de la plataforma 1.3.0 o posterior de AWS Fargate con el tipo de inicio de AWS Fargate.
- Las instancias de contenedor deben utilizar la versión 1.22.0 o posterior de amazon-ecs-agent con el tipo de inicio de Amazon Elastic Compute Cloud (Amazon EC2). Para obtener más información, consulta Changelog en el sitio web de GitHub.
- La plataforma de Fargate debe tener la versión 1.4.0 o posterior para Linux o 1.0.0 para Windows para insertar una clave JSON.
- Para usar claves JSON o versiones secretas específicas, el agente de contenedores de ECS de tu instancia de contenedor debe ejecutar la versión 1.37.0 o posterior para la inyección de secretos.
- El agente de contenedores de ECS de tu instancia de contenedor debe ejecutar la versión 1.22.0 o posterior para inyectar todo el contenido de los secretos en las configuraciones de registro o las variables de entorno.
Creación del rol y las políticas de IAM
Sigue estos pasos:
-
Guarda tu información confidencial en el almacén de parámetros o en Secrets Manager.
Para el almacén de parámetros, ejecuta el siguiente comando put-parameter de la AWS CLI:
aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValueNota: Sustituye awsExampleParameter por tus propios parámetros. Sustituye awsExampleValue por tu valor secreto.
Para Secrets Manager, ejecuta el siguiente comando create-secret de la AWS CLI:
aws secretsmanager create-secret --name awsExampleParameter --secret-string awsExampleValueNota: Sustituye awsExampleParameter por tus propios parámetros. Sustituye awsExampleValue por tu valor secreto. El agente de contenedores de ECS utiliza un rol de ejecución de tareas para obtener la información del almacén de parámetros o de Secrets Manager. El rol de ejecución de tareas debe conceder permisos para las acciones siguientes: ssm:GetParameters, secretsmanager:GetSecretValue y kms:Decrypt.
-
Abre la consola de AWS Identity and Access Management (IAM).
-
Crea un rol con una relación de confianza para ecs-tasks.amazonaws.com.
Ejemplo de política de confianza del rol:{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
Elige Roles y, a continuación, selecciona el rol que has creado.
-
En la pestaña Permisos, selecciona la lista desplegable Agregar permisos.
-
Selecciona Crear política insertada y, a continuación, selecciona la pestaña JSON.
-
Adjunta la siguiente política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter", "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter*" ] } ] }Nota: Sustituye us-east-1 y awsExampleAccountID por la región y la cuenta de AWS en las que se almacenan tus parámetros. Sustituye awsExampleParameter por el nombre de los parámetros que has creado. Puedes usar una clave administrada por el cliente de AWS Key Management Service (AWS KMS) para cifrar los datos en el almacén de parámetros o Secrets Manager. Para usar la clave administrada por el cliente, obtén permisos para kms:Decrypt.
-
(Opcional) Adjunta la política administrada AmazonECSTaskExecutionRolePolicy al rol que has creado.
Importante: Las tareas que envían registros a Amazon CloudWatch o utilizan imágenes almacenadas en Amazon Elastic Container Registry (Amazon ECR) deben tener una política administrada.
Referencia a información confidencial en la definición de tareas de ECS
Utiliza la consola de Amazon ECS o la AWS CLI para hacer referencia a la información confidencial en la definición de tareas de ECS.
Uso de la consola de Amazon ECS
Sigue estos pasos:
- Abre la consola de Amazon ECS.
- En el panel de navegación, elige Definiciones de tareas y, a continuación, Crear una nueva definición de tarea.
En Familia de definiciones de tareas, introduce un nombre.
En Tipo de inicio, elige AWS Fargate o instancias de Amazon EC2. - En Rol de ejecución de tareas, elige el rol de IAM de ejecución de tareas que creaste anteriormente.
- En la sección Definiciones de contenedores, en la sección Variables de entorno, elige Agregar variable de entorno.
- En Clave, introduce una clave para la variable de entorno.
- En la lista desplegable ValueType, elige ValueFrom.
- En el cuadro de texto de la clave, introduce el nombre de recurso de Amazon (ARN) de tu recurso del almacén de parámetros o Secrets Manager.
Nota: También puedes especificar secretos en la configuración del controlador de registro.
Uso de AWS CLI
Utiliza la sección de secretos para hacer referencia a los recursos del almacén de parámetros o Secrets Manager en la definición de la tarea como variables de entorno. O bien, utiliza la sección secretOptions para hacer referencia al almacén de parámetros o Secrets Manager como opciones de configuración de registros.
Ejemplo de definición de tarea:
{ "requiresCompatibilities": [ "EC2" ], "family": "Web", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "web", "image": "httpd", "memory": 128, "essential": true, "portMappings": [ { "containerPort": 80, "protocol": "tcp" } ], "logConfiguration": { "logDriver": "splunk", "options": { "splunk-url": "https://sample.splunk.com:8080" }, "secretOptions": [ { "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter" } ] }, "secrets": [ { "name": "DATABASE_PASSWORD", "valueFrom": "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter" } ] } ], "executionRoleArn": "arn:aws:iam::awsExampleAccountID:role/awsExampleRoleName" }
Nota: Sustituye us-east-1 y awsExampleAccountID por tu región y tu ID de cuenta. Sustituye awsExampleParameter por el parámetro que creaste anteriormente. Sustituye awsExampleRoleName por el rol que has creado.
A continuación, ejecuta el siguiente comando register-task-definition de la AWS CLI para registrar la definición de la tarea:
aws ecs register-task-definition --family-name yourTaskDefinitionFamily --cli-input-json file://pathToYourJsonFile
Nota: Sustituye yourTaskDefinitionFamily por el nombre de la familia de definiciones de tareas.
Al iniciar una tarea con esta definición, el agente de contenedores de ECS resuelve automáticamente los secretos. A continuación, el agente de contenedores inyecta los valores como variables de entorno en el contenedor.
Actualización de los secretos y despliegue de los cambios
Al iniciar el contenedor de ECS, el contenedor inyecta datos confidenciales en él. Si actualizas o rotas el parámetro secreto o del almacén de parámetros, el contenedor no recibirá automáticamente el valor actualizado. Debes iniciar una nueva tarea. Si la tarea forma parte de un servicio, actualiza el servicio. Para obligar al servicio a iniciar una nueva tarea, utiliza la opción Forzar un nuevo despliegue.
Para forzar un nuevo despliegue, sigue estos pasos:
- Abre la consola de Amazon ECS.
- Elige Clústeres y, a continuación, selecciona el clúster con su servicio.
- Selecciona Forzar un nuevo despliegue en la lista desplegable Actualizar.
Nota: Para forzar un nuevo despliegue desde AWS CLI, ejecuta el comando update-service con la marca --force-new-deployment.
Información relacionada
- Temas
- Containers
- Etiquetas
- Amazon Elastic Container Service
- Idioma
- Español
Vídeos relacionados


Contenido relevante
- preguntada hace un año
- preguntada hace 4 meses
- preguntada hace 3 meses
- preguntada hace 10 meses
OFICIAL DE AWSActualizada hace 2 años