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 :
Votre tâche est hébergée sur l'une AWS Fargate ou l'autre EC2 instance Amazon et :
|
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. |
|
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_URI
environnement lors des appels AWS d'API. Pour plus d'informations sur le renouvellement des informations d'identification, voir Renouveler les AWS informations d'identification
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
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 clusterdefault
, 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 actionsSubmitAttachmentStateChanges
SubmitContainerStateChange
, etSubmitTaskStateChange
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'SubmitContainerStateChange
autorisation 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
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'write
API. 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.