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 d'instance doit commencer parecsInstanceRole. La politique s'étend iam:PassRole surarn:aws:iam::*:role/ecsInstanceRole*, de sorte qu'un nom non correspondant provoque une erreur d'autorisation au lancement de la tâche. Cela est courant CloudFormation lorsque vous omettezRoleName, car des noms CloudFormation tels que. MyStack-InstanceRole-ABC123

Si vous utilisez plutôt une politique de rôle d'infrastructure personnalisée, le rôle d'instance peut avoir n'importe quel nom tant que votre politique inclut une iam:PassRole autorisation 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é à l'aide ecsInstanceRole de 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 les autorisations de moindre privilège et de spécifier vos propres autorisations à la place, vous pouvez ajouter les autorisations suivantes pour vous 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 et le profil d'instance. Choisissez l'une des options suivantes selon que vous utilisez la stratégie d'infrastructure AWS gérée ou une stratégie personnalisée.

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

Lorsque vous utilisez la politique d'infrastructure AWS gérée, 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 en ligne à 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 mention ResourceInitializationError indiquant celaiam:PassRole, vérifiez 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 stack. Si le nom ne correspond pas, soit :

  • Ajoutez-le 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é.