Prácticas recomendadas de roles de IAM en Amazon ECS
Los roles que Amazon ECS necesita dependen del tipo de lanzamiento de la definición de la tarea y de las características que utilice. Recomendamos que cree roles separados en la tabla en lugar de compartir roles.
Rol | Definición | Cuando sea necesario | Más información |
---|---|---|---|
Rol de ejecución de tareas | Este rol permite que Amazon ECS utilice otros servicios de AWS en su nombre. |
La tarea está alojada en AWS Fargate o en instancias externas y:
La tarea está alojada en AWS Fargate o en instancias de Amazon EC2 y:
|
Rol de IAM de ejecución de tareas de Amazon ECS |
Rol de la tarea | Este rol permite que el código de la aplicación (en el contenedor) utilice otros servicios de AWS. | La aplicación obtiene acceso a otros servicios de AWS, como Amazon S3. | Rol de IAM de tarea de Amazon ECS |
Rol de la instancia de contenedor | Este rol permite que sus instancias de EC2 o instancias externas se registren en el clúster. | La tarea está alojada en instancias de Amazon EC2 o en una instancia externa. | Rol de IAM de instancia de contenedor de Amazon ECS |
Rol de Amazon ECS Anywhere | Este rol permite que sus instancias externas accedan a las API de AWS. | La tarea está alojada en instancias externas. | Rol de IAM de Amazon ECS Anywhere |
Rol de CodeDeploy de Amazon ECS | Este rol permite a CodeDeploy llevar a cabo actualizaciones en sus servicios. | Utilice el tipo de implementación azul/verde de CodeDeploy para implementar servicios. | Rol de IAM de CodeDeploy de Amazon ECS |
Rol de EventBridge de Amazon ECS | Este rol permite a EventBridge llevar a cabo actualizaciones en sus servicios. | Utilice las reglas y los objetivos de EventBridge para programar las tareas. | Rol de IAM de EventBridge de Amazon ECS |
Rol de infraestructura de Amazon ECS | Este rol permite a Amazon ECS administrar los recursos de infraestructura de sus clústeres. |
|
Rol de IAM de infraestructura de Amazon ECS |
Rol de la tarea
Le recomendamos que asigne un rol de tarea. Su rol puede distinguirse del rol de la instancia de Amazon EC2 en la que se ejecutan. La asignación de un rol a cada tarea se ajusta al principio de acceso con privilegio mínimo y permite un mayor control pormenorizado de acciones y recursos.
Al agregar un rol de tarea a una definición de tarea, el agente contenedor de Amazon ECS crea automáticamente un token con un ID de credencial único (por ejemplo, 12345678-90ab-cdef-1234-567890abcdef
) para la tarea. A continuación, este token y las credenciales del rol se agregan a la memoria caché interna del agente. El agente rellena la variable de entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
del contenedor con el URI del ID de la credencial (por ejemplo, /v2/credentials/12345678-90ab-cdef-1234-567890abcdef
).
Puede recuperar manualmente las credenciales del rol temporal desde el interior de un contenedor adjuntando la variable de entorno a la dirección IP del agente de contenedor de Amazon ECS y ejecutando el comando curl
en la cadena resultante.
curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
El resultado esperado es el siguiente:
{ "RoleArn": "arn:aws:iam::123456789012:role/SSMTaskRole-SSMFargateTaskIAMRole-DASWWSF2WGD6", "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token": "IQoJb3JpZ2luX2VjEEM/Example==", "Expiration": "2021-01-16T00:51:53Z" }
Las versiones más recientes de los SDK de AWS obtienen automáticamente estas credenciales de la variable de entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
al realizar llamadas a la API de AWS. Para obtener información sobre cómo renovar las credenciales, consulte Renovación de credenciales de AWS
El resultado incluye un par de claves de acceso compuesto por un ID de clave de acceso secreta y una clave secreta que la aplicación utiliza para acceder a los recursos de AWS. También incluye un token que AWS utiliza para comprobar que las credenciales son válidas. De forma predeterminada, las credenciales asignadas a las tareas que utilizan roles de tarea son válidas durante seis horas. Después de eso, el agente de contenedor de Amazon ECS los rota automáticamente.
Rol de ejecución de tareas
El rol de IAM de ejecución de tareas se utiliza para conceder permiso al agente de contenedor de Amazon ECS para llamar a acciones específicas de la API de AWS en su nombre. Por ejemplo, cuando usa AWS Fargate, Fargate necesita un rol de IAM que le permita extraer imágenes de Amazon ECR y escribir registros en CloudWatch Logs. También se requiere un rol de IAM cuando una tarea hace referencia a un secreto almacenado en AWS Secrets Manager, como un secreto de extracción de imágenes.
nota
Si extrae imágenes como usuario autenticado, es menos probable que le afecten los cambios que se hayan producido en los límites de la tasa de extracción de Docker Hub
Al utilizar Amazon ECR y Amazon ECR Public, puede evitar los límites impuestos por Docker. Si extrae imágenes de Amazon ECR, esto también ayuda a acortar los tiempos de extracción de la red y reduce los cambios en la transferencia de datos cuando el tráfico abandona la VPC.
importante
Cuando utilice Fargate, debe autenticarse en un registro de imágenes privado utilizando repositoryCredentials
. No es posible configurar las variables de entorno del agente de contenedor de Amazon ECS ECS_ENGINE_AUTH_TYPE
o ECS_ENGINE_AUTH_DATA
ni modificar el archivo ecs.config
para las tareas alojadas en Fargate. Para obtener más información, consulte Autenticación de registros privados para tareas.
Rol de la instancia de contenedor
La política de IAM administrada AmazonEC2ContainerServiceforEC2Role
debe incluir los siguientes permisos. Siguiendo el consejo de seguridad estándar de concesión de privilegios mínimos, la política administrada AmazonEC2ContainerServiceforEC2Role
se puede utilizar como guía. Si no necesita ninguno de los permisos que se conceden en la política administrada para su caso de uso, cree una política personalizada y agregue solo los permisos que necesite.
-
ec2:DescribeTags
: (opcional) permite que una entidad principal describa las etiquetas asociadas a una instancia de Amazon EC2. El agente contenedor de Amazon ECS utiliza este permiso para admitir la propagación de etiquetas de recursos. Para obtener más información, consulte Cómo se etiquetan los recursos. -
ecs:CreateCluster
: permite a una entidad principal crear un clúster de Amazon ECS (opcional). Este permiso lo utiliza el agente de contenedor de Amazon ECS para crear un clústerdefault
si aún no existe ninguno. -
ecs:DeregisterContainerInstance
: permite a una entidad principal anular el registro de una instancia de contenedor de Amazon ECS de un clúster (opcional). El agente de contenedor de Amazon ECS no llama a esta operación de la API, pero este permiso se conserva para ayudar a garantizar la compatibilidad con versiones anteriores. -
ecs:DiscoverPollEndpoint
: esta acción devuelve puntos de conexión que el agente de contenedor de Amazon ECS utiliza para buscar actualizaciones (obligatorio). -
ecs:Poll
: permite que el agente de contenedor de Amazon ECS se comunique con el plano de control de Amazon ECS y le informe los cambios en el estado de la tarea (obligatorio). -
ecs:RegisterContainerInstance
: permite que una entidad principal registre una instancia de contenedor con un clúster (obligatorio). El agente contenedor de Amazon ECS utiliza este permiso para registrar la instancia de Amazon EC2 con un clúster, así como para admitir la propagación de etiquetas de recursos. -
ecs:StartTelemetrySession
: permite que el agente de contenedor de Amazon ECS se comunique con el plano de control de Amazon ECS para enviar la información de estado y las métricas de cada contenedor y tarea (opcional).Aunque este permiso no es obligatorio, recomendamos que lo agregue para que las métricas de la instancia de contenedor puedan iniciar acciones de escalado y también recibir informes relacionados con los comandos de comprobación de estado.
-
ecs:TagResource
: permite que el agente de contenedor de Amazon ECS etiquete el clúster al crearlo y etiquete las instancias de contenedor cuando se registran en un clúster (opcional). -
ecs:UpdateContainerInstancesState
: permite que un usuario principal modifique el estado de una instancia de contenedor de Amazon ECS. El agente contenedor de Amazon ECS utiliza este permiso para el vaciado de instancias de spot. -
ecs:Submit*
: esto incluye las acciones de la APISubmitAttachmentStateChanges
,SubmitContainerStateChange
ySubmitTaskStateChange
(obligatorio). Los utiliza el agente de contenedores de Amazon ECS para informar los cambios de estado de cada recurso al plano de control de Amazon ECS. El agente de contenedor de Amazon ECS ya no utiliza el permisoSubmitContainerStateChange
, pero se conserva para ayudar a garantizar la compatibilidad con versiones anteriores. -
ecr:GetAuthorizationToken
: permite que una entidad principal recupere un token de autorización (opcional). Un token de autorización representa las credenciales de autenticación de IAM y se puede utilizar para acceder a cualquier registro de Amazon ECR al que tenga acceso el elemento principal de IAM. El token de autorización recibido es válido durante 12 horas. -
ecr:BatchCheckLayerAvailability
: cuando se inserta una imagen de contenedor en un repositorio privado de Amazon ECR, se comprueba cada capa de imagen para verificar si ya se insertó (opcional). Si se insertó, se omite la capa de imagen. -
ecr:GetDownloadUrlForLayer
: cuando se extrae una imagen de contenedor de un repositorio privado de Amazon ECR, se llama a esta API una vez para cada capa de imagen que aún no está almacenada en caché (opcional). -
ecr:BatchGetImage
: cuando se extrae una imagen de contenedor de un repositorio privado de Amazon ECR, se llama una vez a esta API para recuperar el manifiesto de la imagen (opcional). -
logs:CreateLogStream
: permite que una entidad principal cree un flujo de registro de los registros de CloudWatch para un grupo de registro especificado (opcional). -
logs:PutLogEvents
: permite que una entidad principal cargue un lote de eventos de registro en un flujo de registro especificado (opcional).
Roles vinculados a servicios
Puede utilizar el rol vinculado al servicio para que Amazon ECS conceda el permiso de servicio de Amazon ECS para llamar a otras API del servicio en su nombre. Amazon ECS necesita los permisos para crear y eliminar interfaces de red, registrar y anular el registro de objetivos en un grupo objetivo. También necesita los permisos necesarios para crear y eliminar políticas de escalado. Estos permisos se conceden mediante el rol vinculado al servicio. Este rol se crea en su nombre la primera vez que utiliza el servicio.
nota
Si elimina de forma inadvertida el rol vinculado al servicio, puede volver a crearlo. Para obtener instrucciones, consulte Crear el rol vinculado al servicio.
Recomendaciones de roles
Al configurar los roles y las políticas de tarea de IAM, recomendamos que realice las siguientes acciones.
Bloqueo del acceso a metadatos de Amazon EC2
Cuando ejecute sus tareas en instancias de Amazon EC2, le recomendamos encarecidamente que bloquee el acceso a los metadatos de Amazon EC2 para evitar que sus contenedores hereden el rol asignado a esas instancias. Si sus aplicaciones tienen que solicitar una acción de API de AWS, utilice en su lugar los roles de IAM para las tareas.
Para evitar que las tareas que se ejecutan en modo puente accedan a los metadatos de Amazon EC2, ejecute el siguiente comando o actualice los datos de usuario de la instancia. Para obtener más instrucciones sobre cómo actualizar los datos de usuario de una instancia, consulte este artículo de soporte técnico de AWS
sudo yum install -y iptables-services; sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP
Para que este cambio persista tras un reinicio, ejecute el siguiente comando específico para su imagen de máquina de Amazon (AMI):
-
Amazon Linux 2
sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
-
Amazon Linux
sudo service iptables save
Para las tareas que utilizan el modo de red de awsvpc
, defina la variable de entorno ECS_AWSVPC_BLOCK_IMDS
y true
en el archivo /etc/ecs/ecs.config
.
Debe establecer la variable ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST
en false
en el archivo ecs-agent config
para evitar que los contenedores que se ejecutan en la red host
accedan a los metadatos de Amazon EC2.
Uso del modo de red awsvpc
Utilice el modo de red awsvpc
para restringir el flujo de tráfico entre diferentes tareas o entre sus tareas y otros servicios que se ejecutan en su VPC de Amazon. Esto agrega una capa de seguridad adicional. El modo de red awsvpc
proporciona aislamiento de red a nivel de tarea para las tareas que se ejecutan en Amazon EC2. Se trata del modo predeterminado en AWS Fargate. Es el único modo de red que puede utilizar para asignar un grupo de seguridad a las tareas.
Uso de la información del último acceso para limitar los roles
Le recomendamos que elimine cualquier acción que no se haya utilizado nunca o que no se haya utilizado durante algún tiempo. Esto evita que se produzcan accesos no deseados. Para ello, revise la información del último acceso que proporciona IAM y, a continuación, elimine las acciones que no se hayan utilizado nunca o que no se hayan utilizado recientemente. Para ello, siga los siguientes pasos.
Utilice el siguiente comando para generar un informe que muestre la información del último acceso de la política de referencia:
aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1
utilice el JobId
que estaba en el resultado para ejecutar el siguiente comando. A continuación, podrá ver los resultados del informe.
aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9
Para obtener más información, consulte Ajuste de permisos en AWS con información sobre los últimos accesos.
Supervisar AWS CloudTrail para detectar actividades sospechosas
Puede supervisar AWS CloudTrail para detectar cualquier actividad sospechosa. La mayoría de las llamadas a la API de AWS se registran en AWS CloudTrail como eventos. AWS CloudTrail Insights las analiza e informa de cualquier comportamiento sospechoso asociado a las llamadas a la API de write
. Esto podría incluir un aumento en el volumen de llamadas. Estas alertas incluyen información como la hora en que se produjo la actividad inusual y el ARN de identidad principal que contribuyó a las API.
Puede identificar las acciones que realizan las tareas con un rol de IAM en AWS CloudTrail consultando la propiedad de userIdentity
del evento. En el siguiente ejemplo, el arn
incluye el nombre del rol asumido, s3-write-go-bucket-role
, seguido del nombre de la tarea, 7e9894e088ad416eb5cab92afExample
.
"userIdentity": { "type": "AssumedRole", "principalId": "AROA36C6WWEJ2YEXAMPLE:7e9894e088ad416eb5cab92afExample", "arn": "arn:aws:sts::123456789012:assumed-role/s3-write-go-bucket-role/7e9894e088ad416eb5cab92afExample", ... }
nota
Cuando las tareas que asumen un rol se ejecutan en instancias de contenedor de Amazon EC2, el agente de contenedor de Amazon ECS registra una solicitud en el registro de auditoría del agente que se encuentra en una dirección con el formato /var/log/ecs/audit.log.YYYY-MM-DD-HH
. Para obtener más información, consulte Registro de roles de IAM y Registrar eventos de Insights en Trails.