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.
-
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: -
Utilice el siguiente comando de la AWS CLI para crear un rol con el nombre
ecsInstanceRolemediante 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 -
Asocie la política
AmazonECSInstanceRolePolicyForManagedInstancesadministrada por AWS al rolecsInstanceRole.aws iam attach-role-policy \ --role-name ecsInstanceRole \ --policy-arn arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstancesnota
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:StartTelemetrySessionecs: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:
-
Agregue
RoleName: ecsInstanceRoleal recurso deAWS::IAM::Role. -
Agregue una política integrada
iam:PassRoleexplícita al rol de infraestructura. Para obtener más información, consulte Opción 2: uso de un nombre de rol personalizado.