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.
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.
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 |
|
Utiliser EC2 des instances (Windows et Linux) | |
Utiliser des instances externes | |
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-command
agent) 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=host
option 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éseaubridge
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_IMDS
agent 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=host
option 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éseaubridge
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.EnableTaskIAMRole
Active 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