Passer au contenu

Comment configurer mon rôle de tâche IAM dans Amazon ECS pour éviter les erreurs "Access Denied" lorsque j'effectue des appels d'API ?

Lecture de 4 minute(s)
0

Je souhaite configurer mon rôle de tâche Gestion des identités et des accès AWS (AWS IAM) dans Amazon Elastic Container Service (Amazon ECS) afin de ne pas recevoir d'erreurs "Access Denied" lorsque j'effectue des appels d'API.

Brève description

Pour éviter l'erreur Access Denied, incluez votre rôle IAM dans votre définition de tâche Amazon ECS.

Vous devez activer le rôle IAM dans le fichier de configuration de votre agent de conteneur ECS. Assurez-vous également que votre rôle IAM dispose de toutes les autorisations nécessaires afin que votre tâche puisse utiliser le rôle pour effectuer les appels d'API.

Remarque : Si une tâche ne trouve pas le rôle de tâche IAM en raison de problèmes de configuration, elle utilise le rôle d'instance Amazon Elastic Compute Cloud (Amazon EC2).

Résolution

Vérifier que l'agent de conteneur ECS est en cours d'exécution

Exécutez la commande docker ps :

docker ps

Remarque : Si vous redémarrez l'instance, les règles relatives à iptables sont réinitialisées à leur valeur par défaut. Pour éviter une réinitialisation, exécutez l'une des commandes suivantes pour enregistrer les règles.

Amazon Linux Amazon Machine Image (AMI) optimisée pour Amazon ECS :

sudo service iptables save

AMI Amazon Linux 2 optimisée pour Amazon ECS :

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

Activer votre rôle IAM dans le fichier de configuration de votre agent de conteneur ECS

Procédez comme suit :

  1. Ouvrez votre fichier /etc/ecs/ecs.config.

  2. Pour activer le rôle IAM pour les tâches dans des conteneurs dotés des modes réseau pont et par défaut, définissez ECS_ENABLE_TASK_IAM_ROLE sur true :

    ECS_ENABLE_TASK_IAM_ROLE=true
  3. Pour activer le rôle IAM pour les tâches dans les conteneurs en mode réseau hôte, définissez ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST sur true :

    ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
  4. Pour mettre à jour le fichier de configuration, exécutez l'une des commandes suivantes pour redémarrer l'agent de conteneur ECS :
    AMI Amazon Linux optimisée pour Amazon ECS :

    sudo stop ecs
    sudo start ecs

    AMI Amazon Linux 2 optimisée pour Amazon ECS :

    sudo systemctl restart ecs

Mettre à jour la politique d’approbation de rôle IAM

Pour attribuer votre rôle IAM à vos tâches Amazon ECS, mettez à jour votre politique d’approbation de rôle IAM :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Mettre à jour les paramètres HTTP_PROXY pour l'agent de conteneur ECS

Si vous utilisez HTTP_PROXY dans la configuration de votre agent de conteneur Amazon ECS, appliquez le paramètre NO_PROXY setting :

NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

Utiliser la dernière version du SDK AWS

L'application qui s'exécute dans votre conteneur doit utiliser une version 2016 ou ultérieure du kit SDK AWS. Pour mettre à jour votre AWS, consultez les sections Prise en charge des versions des kits SDK et des outils AWS et Outils pour développer sur AWS.

Configurer les règles iptables pour une AMI non optimisée pour Amazon ECS

Si vous utilisez une AMI non optimisée pour Amazon ECS, définissez les règles requises pour iptables.

Mettre la variable d'environnement à la disposition des processus non PID 1

La variable d'environnement AWS_CONTAINER_CREDENTIALS_RELATIVE_URI n’est disponible que pour les processus PID 1 au sein d'un conteneur. Si le conteneur exécute plusieurs processus ou des processus d'initialisation, la variable d'environnement n'est pas disponible pour les processus autres que le PID 1.

Pour définir votre variable d'environnement afin qu'elle soit disponible pour les processus non PID 1, exportez-la dans le fichier .profile. Par exemple, exécutez la commande suivante pour exporter la variable d’environnement dans le Dockerfile pour l'image de votre conteneur :

RUN echo 'export $(strings /proc/1/environ | grep AWS_CONTAINER_CREDENTIALS_RELATIVE_URI)' >> /root/.profile

Remarque : Lorsque vous exportez la variable d'environnement, il existe une dépendance vis-à-vis des chaînes et des commandes grep.

Informations connexes

Configuration supplémentaire de l'instance Windows Amazon EC2

AWS OFFICIELA mis à jour il y a 2 ans