View a markdown version of this page

Profil d’instance des instances gérées 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.

Profil d’instance des instances gérées Amazon ECS

Un profil d’instance est un conteneur IAM qui contient exactement un rôle IAM et permet aux instances gérées Amazon ECS d’assumer ce rôle en toute sécurité. Le profil d’instance contient un rôle d’instance que l’agent ECS assume pour enregistrer les instances auprès des clusters et communiquer avec le service ECS.

Important

Si vous utilisez des instances gérées Amazon ECS avec la politique AmazonECSInfrastructureRolePolicyForManagedInstances gérée, le nom du rôle de l'instance doit commencer parecsInstanceRole. La politique s'étend iam:PassRole jusqu'àarn:aws:iam::*:role/ecsInstanceRole*, de sorte qu'un nom non compatible entraîne une erreur d'autorisation lors du lancement de la tâche. Cela est courant CloudFormation lorsque vous omettezRoleName, car des noms tels que sont CloudFormation générés automatiquement. MyStack-InstanceRole-ABC123

Si vous utilisez plutôt une politique de rôle d'infrastructure personnalisée, le rôle d'instance peut porter n'importe quel nom tant que votre politique inclut une iam:PassRole subvention ciblant l'ARN du rôle d'instance.

Création d’un rôle avec la stratégie d’approbation

Remplacez tout user input par vos propres informations.

  1. Créez un fichier nommé ecsInstanceRole-trust-policy.json contenant la stratégie d'approbation à utiliser pour le rôle IAM. Le fichier doit contenir ce qui suit :

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. Utilisez la AWS CLI commande suivante pour créer un rôle nommé ecsInstanceRole en utilisant la politique de confiance que vous avez créée à l'étape précédente.

    aws iam create-role \ --role-name ecsInstanceRole \ --assume-role-policy-document file://ecsInstanceRole-trust-policy.json
  3. Associez la AmazonECSInstanceRolePolicyForManagedInstances politique AWS gérée au ecsInstanceRole rôle.

    aws iam attach-role-policy \ --role-name ecsInstanceRole \ --policy-arn arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances
    Note

    Si vous choisissez d'appliquer des autorisations de moindre privilège et de spécifier les vôtres à la place, vous pouvez ajouter les autorisations suivantes pour aider à résoudre les problèmes liés aux tâches avec les instances gérées Amazon ECS :

    • ecs:StartTelemetrySession

    • ecs:PutSystemLogEvents

Vous pouvez également utiliser le flux de travail Stratégie d’approbation personnalisée de la console IAM pour créer le rôle. Pour plus d’informations, reportez-vous à la section Création d’un rôle à l’aide de politiques de confiance personnalisées (console) dans le Guide de l’utilisateur IAM.

Une fois le fichier créé, vous devez autoriser votre utilisateur à transmettre le rôle à Amazon ECS.

Créez le profil d'instance à l'aide du AWS CLI

Après avoir créé le rôle, créez le profil d’instance à l’aide de l’ AWS CLI :

aws iam create-instance-profile --instance-profile-name ecsInstanceRole

Ajoutez le rôle au profil d’instance :

aws iam add-role-to-instance-profile \ --instance-profile-name ecsInstanceRole \ --role-name ecsInstanceRole

Vérifiez que le profil a été créé avec succès :

aws iam get-instance-profile --instance-profile-name ecsInstanceRole

Créez le profil d'instance à l'aide de CloudFormation

Vous pouvez l'utiliser AWS CloudFormation pour créer le rôle d'instance et le profil d'instance. Choisissez l'une des options suivantes selon que vous utilisez la politique d'infrastructure AWS gérée ou une politique personnalisée.

Option 1 : utiliser la convention de ecsInstanceRole dénomination (recommandée)

Lorsque vous utilisez la politique d'infrastructure AWS gérée par -managed, vous devez RoleName définir explicitement une valeur commençant ecsInstanceRole par. Si vous omettezRoleName, un nom qui ne correspond pas à la iam:PassRole condition de la politique gérée est CloudFormation généré automatiquement et les tâches ne sont pas lancées.

Resources: EcsInstanceRole: Type: AWS::IAM::Role Properties: RoleName: ecsInstanceRole AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: ec2.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances EcsInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: InstanceProfileName: ecsInstanceRole Roles: - !Ref EcsInstanceRole

Option 2 : utiliser un nom de rôle personnalisé

Si vous préférez laisser CloudFormation générer le nom du rôle, ou si vous utilisez un nom personnalisé qui ne commence pas parecsInstanceRole, vous devez ajouter une politique intégrée à votre rôle d'infrastructure qui accorde le rôle iam:PassRole d'instance.

Resources: EcsInstanceRole: Type: AWS::IAM::Role Properties: # No RoleName — CFN auto-generates AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: ec2.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances EcsInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Roles: - !Ref EcsInstanceRole EcsInfrastructureRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: ecs.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonECSInfrastructureRolePolicyForManagedInstances Policies: - PolicyName: PassInstanceRoleToEC2 PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: iam:PassRole Resource: !GetAtt EcsInstanceRole.Arn Condition: StringLike: iam:PassedToService: "ec2.*"

Résolution des problèmes

Les tâches échouent avec iam : erreur PassRole d'autorisation

Si vos tâches échouent avec une mentioniam:PassRole, vérifiez ResourceInitializationError que le nom de votre rôle d'instance commence parecsInstanceRole. Vous pouvez vérifier le nom généré automatiquement dans la CloudFormation console sous l'onglet Ressources de votre pile. Si le nom ne correspond pas, soit :

  • Ajoutez RoleName: ecsInstanceRole à votre AWS::IAM::Role ressource.

  • Ajoutez une politique iam:PassRole en ligne explicite à votre rôle d'infrastructure. Pour de plus amples informations, veuillez consulter Option 2 : utiliser un nom de rôle personnalisé.