Bonnes pratiques pour les rôles IAM dans Amazon ECS - Amazon Elastic Container Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Bonnes pratiques pour les rôles IAM dans Amazon ECS

Les rôles requis par Amazon ECS dépendent de la définition de tâche, du type de lancement et des fonctionnalités que vous utilisez. Nous vous recommandons de créer des rôles distincts dans le tableau au lieu de partager des rôles.

Rôle Définition En cas de besoin En savoir plus
Rôle d'exécution de tâche Ce rôle permet à Amazon ECS d'utiliser d'autres AWS services en votre nom.

Votre tâche est hébergée sur AWS Fargateou sur des instances externes et :

  • extrait une image de conteneur depuis un référentiel privé Amazon ECR.

  • extrait une image de conteneur d'un référentiel privé Amazon ECR dans un compte différent de celui qui exécute la tâche.

  • envoie les journaux des conteneurs à CloudWatch Logs à l'aide du pilote de awslogs journal.

Votre tâche est hébergée sur l'une AWS Fargate ou l'autre EC2 instance Amazon et :

  • utilise l'authentification du registre privé.

  • utilise la surveillance du temps d'exécution.

  • la définition de la tâche fait référence à des données sensibles à l'aide des secrets de Secrets Manager ou AWS des paramètres du magasin de paramètres de Systems Manager.

Rôle IAM d'exécution de tâche Amazon ECS
Rôle de tâche Ce rôle permet au code de votre application (sur le conteneur) d'utiliser d'autres AWS services. Votre application accède à d'autres AWS services, tels qu'Amazon S3. Rôle IAM de la tâche Amazon ECS
Rôle de l'instance de conteneur Ce rôle permet à vos EC2 instances ou à des instances externes de s'enregistrer auprès du cluster. Votre tâche est hébergée sur des EC2 instances Amazon ou sur une instance externe. Rôle IAM d'instance de conteneur Amazon ECS
Rôle dans Amazon ECS Anywhere Ce rôle permet à vos instances externes d'y accéder AWS APIs. Votre tâche est hébergée sur des instances externes. Rôle IAM dans Amazon ECS Anywhere
CodeDeploy Rôle Amazon ECS Ce rôle permet CodeDeploy de mettre à jour vos services. Vous utilisez le type de déploiement CodeDeploy bleu/vert pour déployer des services. Rôle CodeDeploy IAM d'Amazon ECS
EventBridge Rôle Amazon ECS Ce rôle permet EventBridge de mettre à jour vos services. Vous utilisez les EventBridge règles et les objectifs pour planifier vos tâches. Rôle EventBridge IAM d'Amazon ECS
Rôle de l'infrastructure Amazon ECS Ce rôle permet à Amazon ECS de gérer les ressources d'infrastructure de vos clusters.
  • Vous souhaitez associer des volumes Amazon EBS à vos tâches Amazon ECS de type Fargate ou de EC2 lancement. Le rôle d'infrastructure permet à Amazon ECS de gérer les volumes Amazon EBS pour vos tâches.

  • Vous souhaitez utiliser le protocole TLS (Transport Layer Security) pour chiffrer le trafic entre vos services Amazon ECS Service Connect.

  • Vous souhaitez créer des groupes cibles VPC Lattice.

Rôle IAM dans l'infrastructure Amazon ECS

Rôle de tâche

Nous vous recommandons d'attribuer un rôle de tâche. Son rôle peut être distingué de celui de l' EC2 instance Amazon sur laquelle il s'exécute. L'attribution d'un rôle à chaque tâche est conforme au principe de l'accès au moindre privilège et permet un contrôle plus précis des actions et des ressources.

Lorsque vous ajoutez un rôle de tâche à une définition de tâche, l'agent de conteneur Amazon ECS crée automatiquement un jeton avec un ID d'informations d'identification unique (par exemple, 12345678-90ab-cdef-1234-567890abcdef) pour la tâche. Ce jeton et les informations d'identification du rôle sont ensuite ajoutés au cache interne de l'agent. L'agent remplit la variable d'environnement AWS_CONTAINER_CREDENTIALS_RELATIVE_URI du conteneur avec l'URI de l'ID d'informations d'identification (par exemple, /v2/credentials/12345678-90ab-cdef-1234-567890abcdef).

Vous pouvez récupérer manuellement les informations d'identification du rôle temporaire depuis un conteneur en ajoutant la variable d'environnement à l'adresse IP de l'agent de conteneur Amazon ECS et en exécutant la commande curl sur la chaîne résultante.

curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

La sortie attendue est la suivante :

{ "RoleArn": "arn:aws:iam::123456789012:role/SSMTaskRole-SSMFargateTaskIAMRole-DASWWSF2WGD6", "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token": "IQoJb3JpZ2luX2VjEEM/Example==", "Expiration": "2021-01-16T00:51:53Z" }

Les nouvelles versions du AWS SDKs récupèrent automatiquement ces informations d'identification à partir de la variable d'AWS_CONTAINER_CREDENTIALS_RELATIVE_URIenvironnement lors des appels AWS d'API. Pour plus d'informations sur le renouvellement des informations d'identification, voir Renouveler les AWS informations d'identification sur RePost.

La sortie inclut une paire de clés d'accès composée d'un identifiant de clé d'accès secrète et d'une clé secrète que votre application utilise pour accéder AWS aux ressources. Il inclut également un jeton qui AWS permet de vérifier que les informations d'identification sont valides. Par défaut, les informations d'identification attribuées aux tâches utilisant des rôles de tâches sont valides pendant six heures. Ensuite, elles sont automatiquement soumises à une rotation par l'agent de conteneur Amazon ECS.

Rôle d'exécution de tâche

Le rôle d'exécution des tâches est utilisé pour accorder à l'agent de conteneur Amazon ECS l'autorisation d'appeler des actions d' AWS API spécifiques en votre nom. Par exemple, lorsque vous l'utilisez AWS Fargate, Fargate a besoin d'un rôle IAM lui permettant d'extraire des images d'Amazon ECR et d'écrire des journaux dans Logs. CloudWatch Un rôle IAM est également requis lorsqu'une tâche fait référence à un secret stocké dans AWS Secrets Manager, tel qu'un secret d'extraction d'image.

Note

Si vous extrayez des images en tant qu'utilisateur authentifié, vous êtes moins susceptible d'être impacté par les modifications apportées aux limites de taux d'extraction de Docker Hub. Pour plus d'informations, veuillez consulter Authentification de registre privé pour les instances de conteneur (langue française non garantie).

En utilisant Amazon ECR et Amazon ECR Public, vous pouvez éviter les limites imposées par Docker. Si vous extrayez des images depuis Amazon ECR, cela permet également de raccourcir les temps d'extraction du réseau et de réduire les modifications de transfert de données lorsque le trafic quitte votre VPC.

Important

Lorsque vous utilisez Fargate, vous devez vous authentifier auprès d'un registre d'images privé à l'aide de repositoryCredentials. Il n'est pas possible de définir les variables d'environnement de l'agent de conteneur Amazon ECS ECS_ENGINE_AUTH_TYPE ou ECS_ENGINE_AUTH_DATA, ou de modifier le fichier ecs.config pour les tâches hébergées sur Fargate. Pour plus d'informations, veuillez consulter Authentification de registre privé pour les tâches (langue française non garantie).

Rôle de l'instance de conteneur

La stratégie IAM gérée par AmazonEC2ContainerServiceforEC2Role doit inclure les autorisations suivantes. Conformément aux conseils de sécurité standard pour accorder le moindre privilège, la stratégie gérée par AmazonEC2ContainerServiceforEC2Role peut être utilisée comme guide. Si vous n'avez pas besoin des autorisations accordées dans la stratégie gérée pour votre cas d'utilisation, créez une stratégie personnalisée et ajoutez uniquement les autorisations dont vous avez besoin.

  • ec2:DescribeTags— (Facultatif) Permet à un principal de décrire les balises associées à une EC2 instance Amazon. Cette autorisation est utilisée par l'agent de conteneur Amazon ECS pour prendre en charge la propagation des balises de ressources. Pour de plus amples informations, veuillez consulter Comment les ressources sont étiquetées.

  • ecs:CreateCluster— (Facultatif) Permet à un principal de créer un cluster Amazon ECS. Cette autorisation est utilisée par l'agent de conteneur Amazon ECS pour créer un cluster default, s'il n'existe pas déjà.

  • ecs:DeregisterContainerInstance— (Facultatif) Permet à un principal de désenregistrer une instance de conteneur Amazon ECS d'un cluster. L'agent de conteneur Amazon ECS n'appelle pas cette opération d'API, mais cette autorisation est conservée pour garantir la rétrocompatibilité.

  • ecs:DiscoverPollEndpoint— (Obligatoire) Cette action renvoie les points de terminaison que l'agent de conteneur Amazon ECS utilise pour demander des mises à jour.

  • ecs:Poll— (Obligatoire) Permet à l'agent de conteneur Amazon ECS de communiquer avec le plan de contrôle Amazon ECS pour signaler les modifications de l'état des tâches.

  • ecs:RegisterContainerInstance— (Obligatoire) Permet à un principal d'enregistrer une instance de conteneur auprès d'un cluster. Cette autorisation est utilisée par l'agent de conteneur Amazon ECS pour enregistrer l' EC2 instance Amazon auprès d'un cluster et pour prendre en charge la propagation des balises de ressources.

  • ecs:StartTelemetrySession— (Facultatif) Permet à l'agent de conteneur Amazon ECS de communiquer avec le plan de contrôle Amazon ECS afin de communiquer des informations et des mesures relatives à l'état de santé de chaque conteneur et de chaque tâche.

    Bien que cette autorisation ne soit pas obligatoire, nous vous recommandons de l'ajouter pour permettre aux métriques de l'instance de conteneur de démarrer des actions d'échelle et de recevoir des rapports relatifs aux commandes de vérification de l'état.

  • ecs:TagResource— (Facultatif) Permet à l'agent de conteneur Amazon ECS de baliser le cluster lors de sa création et de baliser les instances de conteneur lorsqu'elles sont enregistrées dans un cluster.

  • ecs:UpdateContainerInstancesState : permet au principal de modifier le statut d'une instance de conteneur Amazon ECS. Cette autorisation est utilisée par l'agent de conteneur Amazon ECS pour le drainage des instances Spot.

  • ecs:Submit*— (Obligatoire) Cela inclut les actions SubmitAttachmentStateChangesSubmitContainerStateChange, et SubmitTaskStateChange API. Elles sont utilisées par l'agent de conteneur Amazon ECS pour signaler les modifications d'état pour chaque ressource au plan de contrôle Amazon ECS. L'SubmitContainerStateChangeautorisation n'est plus utilisée par l'agent de conteneur Amazon ECS, mais elle est conservée pour garantir la rétrocompatibilité.

  • ecr:GetAuthorizationToken— (Facultatif) Permet à un principal de récupérer un jeton d'autorisation. Un jeton d'autorisation représente vos informations d'authentification IAM et peut être utilisé pour accéder à n'importe quel registre Amazon ECR auquel votre principal IAM a accès. Le jeton d'autorisation reçu est valide pendant 12 heures.

  • ecr:BatchCheckLayerAvailability— (Facultatif) Lorsqu'une image de conteneur est transférée vers un référentiel privé Amazon ECR, chaque couche d'image est vérifiée pour vérifier si elle est déjà envoyée. Le cas échéant, le calque d'image est ignoré.

  • ecr:GetDownloadUrlForLayer— (Facultatif) Lorsqu'une image de conteneur est extraite d'un référentiel privé Amazon ECR, cette API est appelée une fois pour chaque couche d'image qui n'est pas déjà mise en cache.

  • ecr:BatchGetImage— (Facultatif) Lorsqu'une image de conteneur est extraite d'un référentiel privé Amazon ECR, cette API est appelée une seule fois pour récupérer le manifeste de l'image.

  • logs:CreateLogStream— (Facultatif) Permet à un principal de créer un flux de CloudWatch journaux pour un groupe de journaux spécifié.

  • logs:PutLogEvents— (Facultatif) Permet à un principal de télécharger un lot d'événements de journal dans un flux de journal spécifié.

Rôles liés à un service

Vous pouvez utiliser le rôle lié à un service pour Amazon ECS afin d'autoriser le service Amazon ECS à appeler un autre service en votre APIs nom. Amazon ECS a besoin des autorisations pour créer et supprimer des interfaces réseau, enregistrer et annuler l'enregistrement des cibles auprès d'un groupe cible. Il doit également disposer des autorisations nécessaires pour créer et supprimer des stratégies de mise à l'échelle. Ces autorisations sont octroyées par le biais d'un rôle lié à un service. Ce rôle est créé en votre nom la première fois que vous utilisez le service.

Note

Si vous supprimez par inadvertance le rôle lié à un service, vous pouvez le recréer. Pour obtenir des instructions, veuillez consulter Création du rôle lié à un service.

Recommandations relatives aux rôles

Nous vous recommandons d'effectuer les opérations suivantes lorsque vous configurez les rôles et politiques IAM de votre tâche.

Bloquer l'accès aux EC2 métadonnées Amazon

Lorsque vous exécutez vos tâches sur des EC2 instances Amazon, nous vous recommandons vivement de bloquer l'accès aux EC2 métadonnées Amazon afin d'empêcher vos conteneurs d'hériter du rôle attribué à ces instances. Si vos applications doivent appeler une action d' AWS API, utilisez plutôt les rôles IAM pour les tâches.

Pour empêcher les tâches exécutées en mode pont d'accéder aux EC2 métadonnées Amazon, exécutez la commande suivante ou mettez à jour les données utilisateur de l'instance. Pour plus d'instructions sur la mise à jour des données utilisateur d'une instance, veuillez consulter cet article d'AWS Support. Pour plus d'informations sur le mode pont de définition des tâches, veuillez consulter Mode réseau de définition des tâches (langue française non garantie).

sudo yum install -y iptables-services; sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

Pour que cette modification soit maintenue après un redémarrage, exécutez la commande suivante, spécifique à votre Amazon Machine Image (AMI) :

  • Amazon Linux 2

    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  • Amazon Linux

    sudo service iptables save

Pour les tâches qui utilisent le mode réseau awsvpc, définissez la variable d'environnement ECS_AWSVPC_BLOCK_IMDS sur true dans le fichier /etc/ecs/ecs.config.

Vous devez définir la ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST variable sur false dans le ecs-agent config fichier pour empêcher les conteneurs exécutés sur le host réseau d'accéder aux EC2 métadonnées Amazon.

Utiliser le mode awsvpc réseau

Utilisez le mode réseau awsvpc pour limiter le flux de trafic entre les différentes tâches ou entre vos tâches et les autres services exécutés au sein de votre Amazon VPC. Cela ajoute une couche de sécurité supplémentaire. Le mode awsvpc réseau fournit une isolation réseau au niveau des tâches pour les tâches exécutées sur Amazon. EC2 Il s'agit du mode activé par défaut AWS Fargate. C'est le seul mode réseau que vous pouvez utiliser pour attribuer un groupe de sécurité à des tâches.

Utiliser les dernières informations consultées pour affiner les rôles

Nous vous recommandons de supprimer toutes les actions qui n'ont jamais été utilisées ou qui n'ont pas été utilisées depuis un certain temps. Cela empêche tout accès indésirable. Pour ce faire, passez en revue les dernières informations consultées fournies par IAM, puis supprimez les actions qui n'ont jamais été utilisées ou qui ne l'ont pas été récemment. Les étapes de la section suivantes décrivent comment procéder.

Utilisez la commande suivante pour générer un rapport contenant les dernières informations d'accès pour la stratégie référencée :

aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1

Utilisez le JobId de la sortie pour exécuter la commande suivante. Après cela, vous pouvez consulter les résultats du rapport.

aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9

Pour plus d'informations, voir Affiner les autorisations en AWS utilisant les dernières informations consultées.

Surveillez AWS CloudTrail les activités suspectes

Vous pouvez surveiller AWS CloudTrail toute activité suspecte. La plupart des appels d' AWS API sont enregistrés en AWS CloudTrail tant qu'événements. Ils sont analysés par AWS CloudTrail Insights et vous êtes alerté de tout comportement suspect associé aux appels d'writeAPI. Cela peut inclure un pic du volume d'appels. Ces alertes incluent des informations telles que l'heure à laquelle l'activité inhabituelle s'est produite et le principal ARN d'identité qui a contribué à la APIs.

Vous pouvez identifier les actions effectuées par les tâches ayant un rôle IAM dans AWS CloudTrail examinant la propriété userIdentity de l'événement. Dans l'exemple suivant, l'arn comprend le nom du rôle endossé, s3-write-go-bucket-role, suivi du nom de la tâche, 7e9894e088ad416eb5cab92afExample.

"userIdentity": { "type": "AssumedRole", "principalId": "AROA36C6WWEJ2YEXAMPLE:7e9894e088ad416eb5cab92afExample", "arn": "arn:aws:sts::123456789012:assumed-role/s3-write-go-bucket-role/7e9894e088ad416eb5cab92afExample", ... }
Note

Lorsque des tâches qui assument un rôle sont exécutées sur des instances de EC2 conteneur Amazon, une demande est enregistrée par l'agent de conteneur Amazon ECS dans le journal d'audit de l'agent situé à une adresse au /var/log/ecs/audit.log.YYYY-MM-DD-HH format. Pour plus d'informations, veuillez consulter Journal des rôles IAM pour les tâches et Journalisation des événements Insights pour les journaux de suivi.