Roles de IAM para Amazon EC2 - Amazon Elastic Compute Cloud

Roles de IAM para Amazon EC2

Las aplicaciones deben firmar sus solicitudes de API con credenciales de AWS. Por lo tanto, si es usted un desarrollador de aplicaciones, necesitará una estrategia para administrar las credenciales de sus aplicaciones que se ejecuten en instancias EC2. Por ejemplo, puede distribuir con seguridad sus credenciales de AWS a las instancias, habilitando las aplicaciones que tiene en dichas instancias para que utilicen sus credenciales para firmar solicitudes y, al mismo tiempo, proteger sus credenciales respecto a otros usuarios. Sin embargo, distribuir las credenciales a cada instancia con seguridad plantea problemas, en especial las credenciales que AWS crea en su nombre, como las instancias de spot de los grupos de Auto Scaling. También debe poder actualizar las credenciales de cada instancia cuando rota sus credenciales de AWS.

Hemos diseñado los roles de IAM, para que sus aplicaciones puedan realizar solicitudes de API con seguridad desde sus instancias, sin que usted tenga que administrar las credenciales de seguridad que la aplicación utiliza. En lugar de crear y distribuir sus credenciales de AWS, puede delegar el permiso para realizar solicitudes de API mediante roles de IAM tal y como se indica a continuación:

  1. Cree de un rol de IAM.

  2. Defina qué cuentas o servicios de AWS pueden asumir el rol.

  3. Defina qué acciones y recursos de la API puede utilizar la aplicación después de asumir el rol.

  4. Especifique el rol cuando lance su instancia, o asocie el rol a una instancia existente.

  5. Haga que la aplicación recupere unas credenciales temporales y las use.

Por ejemplo, puede utilizar roles de IAM para conceder permisos a aplicaciones que se ejecutan en sus instancias y que necesitan utilizar un bucket en Amazon S3. Puede especificar permisos para roles de IAM, creando una política en formato JSON. Son parecidos a las políticas que crea para usuarios de IAM. Si cambia un rol, el cambio se propaga a todas las instancias.

Al crear roles de IAM, asocie las políticas de IAM con privilegios mínimos que restringen el acceso a las llamadas a la API específicas que requiere la aplicación.

No puede asociar varios roles de IAM a una única instancia, pero puede adjuntar un único rol de IAM a varias instancias. Para obtener más información sobre la creación y el uso de roles de IAM, consulte Roles en la Guía del usuario de IAM.

Puede aplicar permisos de nivel de recursos a sus políticas de IAM para controlar la capacidad de los usuarios de asociar, sustituir o desasociar roles de IAM de una instancia. Para obtener más información, consulte Permisos de nivel de recurso admitidos para las acciones de la API de Amazon EC2 y el siguiente ejemplo: Ejemplo: Usar roles de IAM.

Perfiles de instancias

Amazon EC2 utiliza un perfil de instancia como contenedor de un rol de IAM. Cuando se crea un rol de IAM utilizando la consola de IAM, esta crea automáticamente un perfil de instancia y le da el mismo nombre que el rol al que corresponde. Si utiliza la consola de Amazon EC2 para lanzar una instancia con un rol de IAM o para asociar un rol de IAM a una instancia, elija el rol en función de una lista de nombres de perfiles de instancias.

Si utiliza la API de AWS CLI o un AWS SDK para crear un rol, cree el rol y el perfil de instancia de forma independiente, con nombres potencialmente diferentes. Si posteriormente usa la AWS CLI, la API o un SDK de AWS para lanzar una instancia con un rol de IAM o para asociar un rol de IAM a una instancia, especifique el nombre del perfil de instancia.

Un perfil de instancia solo puede contener un rol de IAM. Este límite no se puede aumentar.

Para obtener más información, consulte Instance Profiles en la Guía del usuario de IAM.

Recuperación de las credenciales de seguridad en los metadatos de la instancia

Una aplicación de una instancia recupera las credenciales de seguridad que proporciona el rol en el elemento iam/security-credentials/role-name de los metadatos de la instancia. Se conceden a la aplicación los permisos para las acciones y los recursos que usted ha definido para el rol mediante las credenciales de seguridad asociadas al rol. Estas credenciales de seguridad son temporales y las rotamos automáticamente. Activamos la disponibilidad de las nuevas credenciales al menos cinco minutos antes del vencimiento de las antiguas.

aviso

Si utiliza servicios que utilizan metadatos de las instancias con los roles de IAM, asegúrese de que no revela sus credenciales cuando los servicios realizan llamadas HTTP en su nombre. Los tipos de servicios que pueden llegar a revelar sus credenciales son, entre otros, proxies HTTP, servicios de validador HTML/CSS y procesadores XML que admiten la inclusión de XML.

El comando siguiente recupera las credenciales de seguridad de un rol IAM de s3access denominado .

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
IMDSv1
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

A continuación, se muestra un ejemplo del resultado.

{ "Code" : "Success", "LastUpdated" : "2012-04-26T16:39:16Z", "Type" : "AWS-HMAC", "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE", "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token" : "token", "Expiration" : "2017-05-17T15:09:54Z" }

Para aplicaciones, las AWS CLI y los comandos de Herramientas para Windows PowerShell que se ejecutan en la instancia, no es necesario obtener de forma explícita las credenciales de seguridad temporales — los SDK de AWS, la AWS CLI y las Herramientas para Windows PowerShell obtienen automáticamente las credenciales del servicio de metadatos de la instancia EC2 y las utilizan. Para llamar fuera de la instancia utilizando credenciales de seguridad temporales (por ejemplo, para probar políticas de IAM), debe proporcionar la clave de acceso, la clave secreta y el token de la sesión. Para obtener más información, consulte Uso de credenciales de seguridad temporales para solicitar acceso a los recursos de AWS en la Guía del usuario de IAM

Para obtener más información acerca de los metadatos de instancias, consulte Metadatos de instancia y datos de usuario.

Concesión de permisos a un usuario de IAM para transferir un rol de IAM a una instancia

Para permitir a un usuario de IAM lanzar una instancia con un rol de IAM o sustituir o asociar un rol de IAM a una instancia ya existente, debe conceder al usuario permiso para pasar el rol a la instancia.

La siguiente política de IAM concede a los usuarios permiso para lanzar instancias (ec2:RunInstances) con un rol de IAM, o para sustituir o asociar un rol de IAM a una instancia ya existente (ec2:AssociateIamInstanceProfile y ec2:ReplaceIamInstanceProfileAssociation).

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*" } ] }

Esta política concede a los usuarios de IAM acceso a todos los roles especificando el recurso como "*" en la política. Sin embargo, sopese si debe conceder permisos a los usuarios que lanzan instancias con sus roles (los que existen o los que creará más tarde) y que no los necesitan o no deberían tenerlos.

Uso de roles de IAM

Puede crear un rol de IAM y adjuntarlo a una instancia durante el lanzamiento o después. También puede separar o reemplazar un rol de IAM de una instancia.

Crear un rol de IAM

Debe crear un rol de IAM antes de lanzar una instancia con dicho rol o adjuntarla a una instancia.

Para crear un rol IAM con la consola de IAM

  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación, elija Roles, Create role.

  3. En la página Select role type (Seleccionar un tipo de rol), elija EC2 y el caso de uso EC2. Elija Next: Permissions.

  4. En la página Attach permissions policy (Asociar política de permisos), seleccione una política administrada por AWS que conceda a sus instancias acceso a los recursos que necesiten.

  5. En la página Review (Revisar), escriba el nombre del rol y elija Create role (Crear rol).

También puede utilizar la AWS CLI para crear un rol de IAM. En el ejemplo siguiente se crea un rol de IAM con una política que permite que el rol utilice un bucket de Amazon S3.

Para crear un rol de IAM y un perfil de instancia (AWS CLI)

  1. Cree la siguiente política de confianza y guárdela en un archivo de texto denominado ec2-role-trust-policy.json.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. Cree el rol s3access y especifique la política de confianza que creó mediante el comando create-role.

    aws iam create-role --role-name s3access --assume-role-policy-document file://ec2-role-trust-policy.json { "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] }, "RoleId": "AROAIIZKPBKS2LEXAMPLE", "CreateDate": "2013-12-12T23:46:37.247Z", "RoleName": "s3access", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/s3access" } }
  3. Cree una política de acceso y guárdela en un archivo de texto denominado ec2-role-access-policy.json. Por ejemplo, esta política concede permisos administrativos para Amazon S3 a aplicaciones que se ejecutan en la instancia.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ] }
  4. Asocie la política de acceso al rol mediante el comando put-role-policy.

    aws iam put-role-policy --role-name s3access --policy-name S3-Permissions --policy-document file://ec2-role-access-policy.json
  5. Cree un perfil de instancia denominado s3access-profile mediante el comando create-instance-profile.

    aws iam create-instance-profile --instance-profile-name s3access-profile { "InstanceProfile": { "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE", "Roles": [], "CreateDate": "2013-12-12T23:53:34.093Z", "InstanceProfileName": "s3access-profile", "Path": "/", "Arn": "arn:aws:iam::123456789012:instance-profile/s3access-profile" } }
  6. Añada el rol s3access al perfil de instancia s3access-profile.

    aws iam add-role-to-instance-profile --instance-profile-name s3access-profile --role-name s3access

También puede usar los siguientes comandos de Herramientas de AWS para Windows PowerShell:

Lanzamiento de una instancia con un rol de IAM

Después de crear un rol de IAM, puede lanzar una instancia y asociar dicho rol a la instancia durante el lanzamiento.

importante

Después de crear un rol de IAM, puede que los permisos tarden varios segundos en propagarse. Si su primer intento de lanzar una instancia con un rol da un error, espere unos cuantos segundos antes de volverlo a intentar. Para obtener más información, consulte Solución de problemas de roles de IAM en la Guía del usuario de IAM.

Para lanzar una instancia con un rol de IAM (consola)

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel, elija Launch Instance (Lanzar instancia).

  3. Seleccione una AMI y un tipo de instancia y, a continuación, elija Next: Configure Instance Details (Siguiente: Configurar detalles de instancia).

  4. En la página Configure Instance Details (Configurar detalles de instancia), en IAM role (Rol de IAM), seleccione el rol de IAM que ha creado.

    nota

    La lista IAM role (Rol de IAM) muestra el nombre del perfil de instancia que creó al crear el rol de IAM. Si creó su rol de IAM con la consola, el perfil de instancia se creó en su nombre y se le dio el mismo nombre que el rol. Si creó el rol de IAM con la AWS CLI, la API o un SDK de AWS, puede que le haya dado un nombre distinto al de su perfil de instancia.

  5. Configure todos los demás detalles y, a continuación, siga las instrucciones del resto del asistente o elija Review and Launch (Revisar y lanzar) para aceptar la configuración predeterminada e ir directamente a la página Review Instance Launch (Revisar lanzamiento de instancia).

  6. Revise la configuración y, a continuación, elija Launch (Lanzar) para seleccionar un par de claves y lanzar la instancia.

  7. Si utiliza las acciones de API de Amazon EC2 en su aplicación, recupere las credenciales de seguridad de AWS que están disponibles en la instancia y úselas para firmar las solicitudes. El SDK de AWS se encarga de ello por usted.

    IMDSv2
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" –v http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name
    IMDSv1
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

Como alternativa, puede utilizar AWS CLI para asociar un rol a una instancia durante el lanzamiento. Debe especificar el perfil de instancia en el comando.

Para lanzar una instancia con un rol de IAM (AWS CLI)

  1. Ejecute el comando run-instances para lanzar una instancia usando el perfil de instancia. En el siguiente ejemplo se muestra cómo lanzar una instancia con el perfil de instancia.

    aws ec2 run-instances --image-id ami-11aa22bb --iam-instance-profile Name="s3access-profile" --key-name my-key-pair --security-groups my-security-group --subnet-id subnet-1a2b3c4d

    También puede utilizar el comando New-EC2Instance de Herramientas para Windows PowerShell.

  2. Si utiliza las acciones de API de Amazon EC2 en su aplicación, recupere las credenciales de seguridad de AWS que están disponibles en la instancia y úselas para firmar las solicitudes. El SDK de AWS se encarga de ello por usted.

    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

Asociar un rol de IAM a una instancia

Para asociar un rol de IAM a una instancia que no tiene ningún rol, la instancia puede estar en el estado stopped o running.

Para asociar un rol de IAM a una instancia (consola)

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, seleccione Instances (Instancias).

  3. Seleccione la instancia y elija Actions (Acciones), Instance Settings (Configuración de la instancia), Attach/Replace IAM role (Asociar o reemplazar rol de IAM).

  4. Seleccione el rol de IAM, que desea asociar a la instancia y elija Apply (Aplicar).

Para asociar un rol de IAM a una instancia (AWS CLI)

  1. Si es preciso, describa sus instancias para obtener el ID de la instancia a la que quiere adjuntar el rol.

    aws ec2 describe-instances
  2. Ejecute el comando associate-iam-instance-profile para asociar el rol de IAM a la instancia, especificando el perfil de instancia. Puede utilizar el nombre de recurso de Amazon (ARN) del perfil de instancia o bien puede usar su nombre.

    aws ec2 associate-iam-instance-profile --instance-id i-1234567890abcdef0 --iam-instance-profile Name="TestRole-1" { "IamInstanceProfileAssociation": { "InstanceId": "i-1234567890abcdef0", "State": "associating", "AssociationId": "iip-assoc-0dbd8529a48294120", "IamInstanceProfile": { "Id": "AIPAJLNLDX3AMYZNWYYAY", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-1" } } }

También puede usar los siguientes comandos de las Herramientas para Windows PowerShell:

Reemplazo de un rol de IAM

Para reemplazar el rol de IAM en una instancia que ya tiene un rol de IAM asociado, la instancia debe estar en el estado running. Puede hacerlo si desea cambiar el rol de IAM de una instancia sin disociar primero el existente. Por ejemplo, puede hacer esto para asegurarse de que no se interrumpan las acciones de API realizadas por las aplicaciones que se ejecutan en la instancia.

Para reemplazar un rol de IAM de una instancia (consola)

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, seleccione Instances (Instancias).

  3. Seleccione la instancia y elija Actions (Acciones), Instance Settings (Configuración de la instancia), Attach/Replace IAM role (Asociar o reemplazar rol de IAM).

  4. Seleccione el rol de IAM, que desea asociar a la instancia y elija Apply (Aplicar).

Para reemplazar un rol de IAM de una instancia (AWS CLI)

  1. Si es necesario, describa sus asociaciones de perfil de instancia de IAM para obtener el ID de asociación del perfil de instancia de IAM que quiere reemplazar.

    aws ec2 describe-iam-instance-profile-associations
  2. Utilice el comando replace-iam-instance-profile-association para sustituir el perfil de instancia de IAM especificando el ID de asociación del perfil de instancia ya existente y el ARN o el nombre del perfil de instancia que debe sustituirlo.

    aws ec2 replace-iam-instance-profile-association --association-id iip-assoc-0044d817db6c0a4ba --iam-instance-profile Name="TestRole-2" { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "associating", "AssociationId": "iip-assoc-09654be48e33b91e0", "IamInstanceProfile": { "Id": "AIPAJCJEDKX7QYHWYK7GS", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

También puede usar los siguientes comandos de las Herramientas para Windows PowerShell:

Separación de un rol de IAM

Puede separar un rol de IAM de una instancia en ejecución o detenida.

Para desconectar un rol de IAM de una instancia (consola)

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, seleccione Instances (Instancias).

  3. Seleccione la instancia y elija Actions (Acciones), Instance Settings (Configuración de la instancia), Attach/Replace IAM role (Asociar o reemplazar rol de IAM).

  4. En IAM role (Rol de IAM), elija No Role (Sin rol). Elija Apply (Aplicar).

  5. En el cuadro de diálogo de confirmación, elija Yes, Detach (Sí, desconectar) (Sí, desconectar).

Para desconectar un rol de IAM de una instancia (AWS CLI)

  1. Si es necesario, utilice describe-iam-instance-profile-associations para describir sus asociaciones de perfil de instancia de IAM y obtener el ID de asociación del perfil de instancia de IAM que va a desasociar.

    aws ec2 describe-iam-instance-profile-associations { "IamInstanceProfileAssociations": [ { "InstanceId": "i-088ce778fbfeb4361", "State": "associated", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } ] }
  2. Utilice el comando disassociate-iam-instance-profile para desasociar el perfil de instancia de IAM utilizando su ID de asociación.

    aws ec2 disassociate-iam-instance-profile --association-id iip-assoc-0044d817db6c0a4ba { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "disassociating", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

También puede usar los siguientes comandos de las Herramientas para Windows PowerShell: