View a markdown version of this page

Perfil de instancia de instancias administradas de Amazon ECS - Amazon Elastic Container Service

Perfil de instancia de instancias administradas de Amazon ECS

Un perfil de instancia es un contenedor de IAM que ocupa exactamente un rol de IAM y permite que las instancias de instancias administradas de Amazon ECS asuman ese rol de forma segura. El perfil de instancia contiene un rol de instancia que el agente de ECS asume para registrar las instancias con los clústeres y comunicarse con el servicio de ECS.

importante

Si utiliza instancias administradas de Amazon ECS con la política administrada AmazonECSInfrastructureRolePolicyForManagedInstances, el nombre de rol de instancia debe empezar por ecsInstanceRole. La política define el alcance de iam:PassRole en arn:aws:iam::*:role/ecsInstanceRole*, por lo que un nombre que no coincida provoca un error de autorización al iniciar la tarea. Esto es común con CloudFormation cuando se omite RoleName, porque CloudFormation genera automáticamente nombres como MyStack-InstanceRole-ABC123.

Si, en su lugar, utiliza una política de roles de infraestructura personalizada, el rol de instancia puede tener cualquier nombre siempre que la política incluya una concesión iam:PassRole dirigida al ARN del rol de instancia.

Creación de un rol con la política de confianza

Sustituya cada entrada del usuario por información propia.

  1. Cree un archivo con el nombre ecsInstanceRole-trust-policy.json, que contenga la política de confianza que se va a utilizar para el rol de IAM. El archivo debe contener lo siguiente:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. Utilice el siguiente comando de la AWS CLI para crear un rol con el nombre ecsInstanceRole mediante la política de confianza que creó en el paso anterior.

    aws iam create-role \ --role-name ecsInstanceRole \ --assume-role-policy-document file://ecsInstanceRole-trust-policy.json
  3. Asocie la política AmazonECSInstanceRolePolicyForManagedInstances administrada por AWS al rol ecsInstanceRole.

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

    Si opta por aplicar permisos con privilegios mínimos y especificar sus propios permisos en su lugar, puede agregar los siguientes permisos para solucionar problemas relacionados con las tareas con instancias administradas de Amazon ECS:

    • ecs:StartTelemetrySession

    • ecs:PutSystemLogEvents

También puede usar el flujo de trabajo de Política de confianza personalizada de la consola de IAM para crear el rol. Para obtener instrucciones, consulte Creating a role using custom trust policies (console) en la Guía del usuario de IAM.

Después de crear el archivo, debe conceder a su usuario permiso para transferir el rol a Amazon ECS.

Creación del perfil de instancia con la AWS CLI

Tras crear el rol, cree el perfil de instancia con la AWS CLI:

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

Agregue el rol al perfil de instancia:

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

Compruebe que el perfil se haya creado correctamente:

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

Creación del perfil de instancia con CloudFormation

Puede usar AWS CloudFormation para crear el rol de instancia y el perfil de instancia. Elija una de las siguientes opciones en función de si utiliza la política AWS de infraestructura administrada de o una política personalizada.

Opción 1: uso de la convención de nomenclatura ecsInstanceRole (recomendado)

Al usar la política de infraestructura administrada de AWS, debe establecer explícitamente RoleName en un valor que comience por ecsInstanceRole. Si omite RoleName, CloudFormation generará automáticamente un nombre que no coincida con la condición iam:PassRole de la política administrada y las tareas no se iniciarán.

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

Opción 2: uso de un nombre de rol personalizado

Si prefiere dejar que CloudFormation genere el nombre del rol o utiliza un nombre personalizado que no comience por ecsInstanceRole, debe agregar una política integrada al rol de infraestructura que conceda iam:PassRole al rol de instancia.

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.*"

Solución de problemas

Se produce el error de autorización iam:PassRole en las tareas

Si las tareas fallan con un error ResourceInitializationError que menciona iam:PassRole, compruebe que el nombre del rol de la instancia comience por ecsInstanceRole. Puede comprobar el nombre generado automáticamente en la consola de CloudFormation, en la pestaña Recursos de la pila. Si el nombre no coincide, siga estos pasos: