IAMRôle de ECS tâche Amazon - 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.

IAMRôle de ECS tâche Amazon

Vos ECS tâches Amazon peuvent être associées à un IAM rôle. Les autorisations accordées dans le IAM rôle sont prises en charge par les conteneurs exécutés dans la tâche. Ce rôle permet au code de votre application (sur le conteneur) d'utiliser d'autres AWS services. Le rôle de tâche est requis lorsque votre application accède à d'autres AWS services, tels qu'Amazon S3. Pour connaître les IAM autorisations dont Amazon ECS a besoin pour extraire des images de conteneurs et exécuter la tâche, veuillez consulterIAMRôle d'exécution des ECS tâches Amazon.

Voici les avantages de l'utilisation des rôles de tâche :

  • Isolation des informations d'identification : un conteneur ne peut récupérer les informations d'identification que pour le IAM rôle défini dans la définition de tâche à laquelle il appartient ; un conteneur n'a jamais accès aux informations d'identification destinées à un autre conteneur appartenant à une autre tâche.

  • Autorisation : les conteneurs non autorisés ne peuvent pas accéder aux informations d'identification des IAM rôles définies pour d'autres tâches.

  • Contrôle : la journalisation des événements et des accès est disponible via afin CloudTrail de permettre les audits rétrospectifs. Les informations d'identification ont un contexte taskArn qui est lié à la session ; les CloudTrail journaux indiquent donc le rôle utilisé par chaque tâche.

Note

Lorsque vous spécifiez un IAM rôle pour une tâche, l' AWS CLI ou d'autres SDKs conteneurs de cette tâche utilisent les AWS informations d'identification fournies par le rôle de tâche exclusivement et n'héritent plus des IAM autorisations provenant d'Amazon EC2 ou de l'instance externe sur laquelle elles s'exécutent.

Création du IAM rôle de tâche

Lors de la création d'une IAM stratégie que vos tâches utiliseront, la stratégie doit inclure les autorisations que les conteneurs de vos tâches doivent assumer. Vous pouvez utiliser une politique AWS gérée existante ou créer une politique personnalisée à partir de zéro qui répond à vos besoins spécifiques. Pour plus d'informations, consultez la section Création IAM de politiques dans le guide de IAM l'utilisateur.

Important

Pour les ECS tâches Amazon (pour tous les types de lancement), nous vous recommandons d'utiliser la IAM politique et le rôle de vos tâches. Ces informations d'identification permettent à votre tâche d'effectuer des AWS API demandes sans appeler sts:AssumeRole pour assumer le même rôle qui est déjà associé à la tâche. Si votre tâche nécessite qu'un rôle s'assume, vous devez créer une politique de confiance qui autorise explicitement ce rôle à s'assumer. Pour plus d'informations, voir Mettre à jour une politique de confiance dans les rôles dans le Guide de IAM l'utilisateur.

Après la création de la IAM politique, vous pouvez créer un IAM rôle qui inclut la politique que vous référencez dans votre définition de ECS tâche Amazon. Vous pouvez créer le rôle à l'aide du cas d'utilisation d'Elastic Container Service Task (tâche Elastic Container Service) dans la IAM console. Vous pouvez ensuite lier votre IAM politique spécifique au rôle qui attribue aux conteneurs de votre tâche les autorisations que vous souhaitez. Les procédures ci-dessous expliquent comment procéder.

Si vous avez plusieurs définitions de tâche ou services qui requièrent IAM des autorisations, nous vous conseillons de créer un rôle pour chaque définition de tâche ou service en lui affectant les autorisations minimales requises pour les tâches à exécuter, afin de minimiser les accès octroyés à chaque tâche.

Pour plus d'informations sur le point de terminaison de service de votre région, consultez la section Points de terminaison du service dans le Référence générale d'Amazon Web Services Guide.

Le rôle de IAM tâche doit posséder une politique de confiance qui spécifie le ecs-tasks.amazonaws.com service. Cette sts:AssumeRole autorisation permet à vos tâches de prendre un IAM rôle différent de celui utilisé EC2 par votre instance Amazon. De cette façon, votre tâche n'hérite pas du rôle associé à l'EC2instance Amazon. Voici un exemple de politique de confiance. Remplacez l'identificateur de région et spécifiez le numéro de AWS compte que vous utilisez lors du lancement des tâches.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333" } } } ] }
Important

Lors de la création de votre IAM rôle de tâche, il est recommandé d'utiliser les clés de aws:SourceArn condition aws:SourceAccount ou dans la IAM politique associée au rôle pour étendre davantage les autorisations afin d'éviter le problème de sécurité de l'adjoint confus. L'utilisation de la clé de condition aws:SourceArn pour spécifier un cluster spécifique n'est actuellement pas prise en charge, vous devez utiliser le caractère générique pour spécifier tous les clusters. Pour en savoir plus sur le problème de l'adjoint confus et comment protéger votre AWS compte, consultez Le problème de l'adjoint confus dans le Guide de IAM l'utilisateur.

Les procédures suivantes décrivent comment créer une politique pour récupérer des objets depuis Amazon S3 avec un exemple de politique. Replace Access user input avec vos propres valeurs.

AWS Management Console
Pour utiliser l'éditeur JSON de stratégie afin de créer une stratégie
  1. Connectez-vous à la IAM console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/iam/.

  2. Dans le panneau de navigation de gauche, sélectionnez Policies (Politiques).

    Si vous sélectionnez Politiques pour la première fois, la page Bienvenue dans les politiques gérées s'affiche. Sélectionnez Mise en route.

  3. En haut de la page, sélectionnez Créer une politique.

  4. Dans la section Éditeur de politiques, choisissez l'JSONoption.

  5. Entrez le document JSON de politique suivant :

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  6. Choisissez Suivant.

    Note

    Vous pouvez basculer à tout moment entre les options visuel et JSONéditeur. Toutefois, si vous apportez des modifications ou si vous choisissez Suivant dans l'éditeur visuel, IAM peut restructurer votre politique afin de l'optimiser pour l'éditeur visuel. Pour plus d'informations, consultez la section Restructuration des politiques dans le guide de IAM l'utilisateur.

  7. Sur la page Vérifier et créer, tapez un Nom de politique et une Description (facultative) pour la politique que vous créez. Vérifiez les Autorisations définies dans cette politique pour voir les autorisations accordées par votre politique.

  8. Choisissez Create policy (Créer une politique) pour enregistrer votre nouvelle politique.

AWS CLI

Replace Access user input avec vos propres valeurs.

  1. Créez un fichier nommé s3-policy.json avec le contenu suivant.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  2. Utilisez la commande suivante pour créer la IAM stratégie à l'aide du fichier de JSON stratégie.

    aws iam create-policy \ --policy-name taskRolePolicy \ --policy-document file://s3-policy.json

Les procédures suivantes décrivent comment créer un IAM rôle de tâche en joignant une IAM stratégie que vous créez.

AWS Management Console
Pour créer un rôle pour un service Elastic Container Service (IAMconsole)
  1. Connectez-vous à la IAM console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/iam/.

  2. Dans le volet de navigation de la IAM console, sélectionnez Rôles, puis sélectionnez Créer un rôle.

  3. Pour Trusted entity (Entité de confiance), choisissez Service AWS.

  4. Pour Service ou cas d'utilisation, choisissez Elastic Container Service, puis choisissez le cas d'utilisation d'Elastic Container Service Task.

  5. Choisissez Suivant.

  6. Pour Ajouter des autorisations, recherchez et choisissez la politique que vous avez créée.

  7. Choisissez Suivant.

  8. Dans le champ Role name (Nom de rôle), saisissez un nom pour votre rôle. Pour cet exemple, tapez AmazonECSTaskS3BucketRole comme nom du rôle.

  9. Passez en revue les informations du rôle, puis choisissez Create role (Créer un rôle).

AWS CLI

Replace Access user input avec vos propres valeurs.

  1. Créez un fichier nommé ecs-tasks-trust-policy.json contenant la stratégie d'approbation à utiliser pour le IAM rôle de tâche. Le fichier doit contenir les lignes suivantes : Remplacez l'identificateur de région et spécifiez le numéro de AWS compte que vous utilisez lors du lancement des tâches.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333" } } } ] }
  2. Créez un IAM rôle nommé ecsTaskRole à l'aide de la stratégie d'approbation créée à l'étape précédente.

    aws iam create-role \ --role-name ecsTaskRole \ --assume-role-policy-document file://ecs-tasks-trust-policy.json
  3. Récupérez ARN la IAM politique que vous avez créée à l'aide de la commande suivante. Remplacez taskRolePolicy avec le nom de la politique que vous avez créée.

    aws iam list-policies --scope Local --query 'Policies[?PolicyName==`taskRolePolicy`].Arn'
  4. Associez la IAM politique que vous avez créée au ecsTaskRole rôle. Remplacez le policy-arn par celui ARN de la politique que vous avez créée.

    aws iam attach-role-policy \ --role-name ecsTaskRole \ --policy-arn arn:aws:iam:111122223333:aws:policy/taskRolePolicy

Après avoir créé le rôle, ajoutez-y des autorisations supplémentaires pour les fonctionnalités suivantes.

Fonctionnalité Autorisations supplémentaires

Utiliser ECS Exec

ECSAutorisations d'exécution

Utiliser EC2 des instances (Windows et Linux)

Configuration supplémentaire des EC2 instances Amazon

Utiliser des instances externes

Configuration supplémentaire de l'instance externe

Utiliser des EC2 instances Windows

Configuration supplémentaire de l'instance Amazon EC2 Windows

ECSAutorisations d'exécution

La fonction ECSExec nécessite un IAM rôle de tâche pour accorder aux conteneurs les autorisations nécessaires à la communication entre l'SSMagent géré (execute-commandagent) et le SSM service. Vous devez ajouter les autorisations suivantes à un IAM rôle de tâche et inclure le IAM rôle de tâche dans votre définition de tâche. Pour plus d'informations, consultez la section Ajout et suppression de IAM politiques dans le guide de IAM l'utilisateur.

Utilisez la stratégie suivante pour votre IAM rôle de tâche afin d'ajouter les SSM autorisations requises.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

Configuration supplémentaire des EC2 instances Amazon

Nous vous recommandons de limiter les autorisations dans votre rôle d'instance de conteneur à la liste minimale des autorisations utilisées dans la IAM politique AmazonEC2ContainerServiceforEC2Role gérée.

Pour utiliser le rôle de tâche, vos EC2 instances Amazon doivent au moins disposer 1.11.0 de la version de l'agent de conteneur ; nous vous conseillons cependant d'utiliser la dernière version de l'agent de conteneur. Pour plus d'informations sur la vérification de la version de votre agent et la mise à jour à la dernière version, consultez Mise à jour de l'agent de ECS conteneur Amazon. Si vous utilisez un package ECS optimisé pour AmazonAMI, votre instance a besoin d'au moins une 1.11.0-1 partie du ecs-init package. Si vos instances utilisent la dernière ECS optimisée pour AmazonAMI, elles contiennent les versions requises de l'agent de conteneur etecs-init. Pour de plus amples informations, veuillez consulter Linux ECS optimisé pour Amazon AMIs.

Si vous n'utilisez pas Amazon ECS -optimized AMI pour vos instances de conteneur, ajoutez à votre docker run commande l'--net=hostoption qui lance l'agent, ainsi que les variables de configuration de l'agent suivantes pour la configuration souhaitée (pour plus d'informations, veuillez consulterConfiguration de l'agent de ECS conteneur Amazon) :

ECS_ENABLE_TASK_IAM_ROLE=true

Utilise IAM des rôles pour les tâches relatives aux conteneurs dotés des modes default réseau bridge et.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Utilise IAM des rôles pour les tâches des conteneurs associés au mode host réseau. Cette variable est uniquement prise en charge sur les versions d'agent 1.12.0 et ultérieures.

Pour obtenir un exemple de commande d'exécution, consultez Mise à jour manuelle de l'agent de ECS conteneur Amazon (pour des applications non optimisées pour AmazonECS) AMIs. Vous devrez également définir les commandes de mise en réseau suivantes sur votre instance de conteneur afin que les conteneurs dans vos tâches puissent récupérer leurs AWS informations d'identification :

sudo sysctl -w net.ipv4.conf.all.route_localnet=1 sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679

Pour garantir le maintien de ces règles iptables après un redémarrage, vous devez les enregistrer sur votre instance de conteneur. Vous pouvez utiliser les commandes iptables-save et iptables-restore pour enregistrer vos règles iptables et les restaurer au démarrage. Pour plus d'informations, consultez la documentation de votre système d'exploitation.

Pour empêcher les conteneurs exécutés par des tâches utilisant le mode awsvpc réseau d'accéder aux informations d'identification fournies par le profil d'EC2instance Amazon, tout en accordant les autorisations fournies par le rôle de la tâche, définissez la variable de configuration de l'ECS_AWSVPC_BLOCK_IMDSagent sur true dans le fichier de configuration de l'agent et redémarrez l'agent. Pour de plus amples informations, veuillez consulter Configuration de l'agent de ECS conteneur Amazon.

Pour empêcher les conteneurs exécutés par des tâches utilisant le mode bridge réseau d'accéder aux informations d'identification fournies par le profil d'EC2instance Amazon, tout en accordant les autorisations fournies par le rôle de la tâche, exécutez la iptables commande suivante sur vos EC2 instances Amazon. Cette commande n'a pas d'incidence sur les conteneurs dans les tâches utilisant le mode réseau host ou awsvpc. Pour de plus amples informations, veuillez consulter Mode réseau.

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

    Pour garantir le maintien de la iptables règle après un redémarrage, vous devez l'enregistrer sur votre EC2 instance Amazon. Lors de l'utilisation d'Amazon ECS -optimizedAMI, vous pouvez utiliser la commande qui suit. Pour les autres systèmes d'exploitation, consultez la documentation correspondante.

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

Configuration supplémentaire de l'instance externe

Pour utiliser les IAM rôles de tâche, vos instances externes doivent au moins disposer 1.11.0 de la version de l'agent de conteneur ; nous vous conseillons cependant d'utiliser la dernière version de l'agent de conteneur. Pour plus d'informations sur la vérification de la version de votre agent et la mise à jour à la dernière version, consultez Mise à jour de l'agent de ECS conteneur Amazon. Si vous utilisez un package ECS optimisé pour AmazonAMI, votre instance a besoin d'au moins 1.11.0-1 une partie du ecs-init package. Si vos instances utilisent la dernière version ECS optimisée pour AmazonAMI, elles contiennent les versions requises de l'agent de conteneur etecs-init. Pour de plus amples informations, veuillez consulter Linux ECS optimisé pour Amazon AMIs.

Si vous n'utilisez pas Amazon ECS -optimized AMI pour vos instances de conteneur, ajoutez à votre docker run commande l'--net=hostoption qui lance l'agent, ainsi que les variables de configuration de l'agent suivantes pour la configuration souhaitée (pour plus d'informations, veuillez consulterConfiguration de l'agent de ECS conteneur Amazon) :

ECS_ENABLE_TASK_IAM_ROLE=true

Utilise IAM des rôles pour les tâches relatives aux conteneurs dotés des modes default réseau bridge et.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Utilise les IAM rôles pour les tâches des conteneurs associés au mode host réseau. Cette variable est uniquement prise en charge sur les versions d'agent 1.12.0 et ultérieures.

Pour obtenir un exemple de commande d'exécution, consultez Mise à jour manuelle de l'agent de ECS conteneur Amazon (pour des applications non optimisées pour AmazonECS) AMIs. Vous devrez également définir les commandes de mise en réseau suivantes sur votre instance de conteneur afin que les conteneurs dans vos tâches puissent récupérer leurs AWS informations d'identification :

sudo sysctl -w net.ipv4.conf.all.route_localnet=1 sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679

Pour garantir le maintien de ces règles iptables après un redémarrage, vous devez les enregistrer sur votre instance de conteneur. Vous pouvez utiliser les commandes iptables-save et iptables-restore pour enregistrer vos règles iptables et les restaurer au démarrage. Pour plus d'informations, consultez la documentation de votre système d'exploitation.

Configuration supplémentaire de l'instance Amazon EC2 Windows

Important

Cela s'applique uniquement aux conteneurs Windows EC2 qui utilisent des rôles de tâche.

Le rôle de tâche associé aux fonctionnalités Windows nécessite une configuration supplémentaire activéeEC2.

  • Lorsque vous lancez vos instances de conteneur, vous devez définir l'option -EnableTaskIAMRole dans le script de données utilisateur des instances de conteneur. EnableTaskIAMRoleActive la fonction IAM Rôles de tâche pour les tâches. Par exemple :

    <powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole </powershell>
  • Vous devez amorcer votre conteneur avec les commandes de mise en réseau fournies dans Script Bootstrap du ECS conteneur Amazon.

  • Vous devez créer un IAM rôle et une stratégie pour vos tâches. Pour de plus amples informations, veuillez consulter Création du IAM rôle de tâche.

  • Les IAM rôles du fournisseur d'informations d'identification de tâche utilisent le port 80 sur l'instance de conteneur. Par conséquent, si vous configurez IAM des rôles pour les tâches sur votre instance de conteneur, vos conteneurs ne peuvent pas utiliser le port 80 pour le port hôte des mappages de ports. Pour exposer vos conteneurs sur le port 80, nous vous recommandons de configurer un service pour ceux qui utilisent l'équilibrage de charge. Vous pouvez utiliser le port 80 sur l'équilibreur de charge. Ce faisant, le trafic peut être acheminé vers un autre port hôte sur vos instances de conteneur. Pour de plus amples informations, veuillez consulter Utiliser l'équilibrage de charge pour répartir le trafic des ECS services Amazon.

  • Si votre instance Windows est redémarrée, vous devez supprimer l'interface proxy et initialiser à nouveau l'agent ECS conteneur Amazon pour rétablir la sauvegarde du proxy d'informations d'identification.

Script Bootstrap du ECS conteneur Amazon

Avant que les conteneurs puissent accéder au proxy d'informations d'identification sur l'instance de conteneur afin d'obtenir des informations d'identification, le conteneur doit être amorcé avec les commandes de mise en réseau requises. L'exemple de script de code suivant doit être exécuté sur vos conteneurs lorsqu'ils démarrent.

Note

Vous n'avez pas besoin d'exécuter ce script lorsque vous utilisez le mode réseau awsvpc sur Windows.

Si vous exécutez des conteneurs Windows qui incluent Powershell, utilisez le script suivant :

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. $gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop $ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API

Si vous exécutez des conteneurs Windows qui n'ont que le shell Command, utilisez le script suivant :

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. for /f "tokens=1" %i in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i for /f "tokens=3" %i in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API