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, lo que habilita las aplicaciones que tiene en dichas instancias para que utilicen sus credenciales a fin de 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.

Solo puede adjuntar un rol de IAM a una instancia, pero puede adjuntar el mismo rol a muchas 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: Trabajar con 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 AWS CLI, la API o un SDK de AWS 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.

Recuperar credenciales de seguridad de 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. Para obtener información sobre la dirección IP de metadatos de instancia, consulte Recuperar metadatos de instancia.

Conceder un permiso 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.

Trabajar con 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:

Lanzar 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, los permisos pueden tardar unos 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 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.

Nueva consola

Para asociar un rol de IAM con una instancia

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

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

  3. Seleccione la instancia, elija Actions (Acciones), Security (Seguridad), Modify IAM role (Modificar rol de IAM).

  4. Seleccione el rol de IAM que desea asociar con la instancia y elija Save (Guardar).

Consola antigua

Para asociar un rol de IAM con una instancia

  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:

Reemplazar 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.

Nueva consola

Para reemplazar un rol de IAM de una instancia

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

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

  3. Seleccione la instancia, elija Actions (Acciones), Security (Seguridad), Modify IAM role (Modificar rol de IAM).

  4. Seleccione el rol de IAM que desea asociar con la instancia y elija Save (Guardar).

Consola antigua

Para reemplazar un rol de IAM de una instancia

  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:

Separar un rol de IAM

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

Nueva consola

Para separar un rol de IAM de una instancia

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

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

  3. Seleccione la instancia, elija Actions (Acciones), Security (Seguridad), Modify IAM role (Modificar rol de IAM).

  4. En IAM role (Rol de IAM), elija No IAM Role (Sin rol de IAM). Seleccione Save (Guardar).

  5. En el cuadro de diálogo de confirmación, escriba Detach (Desasociar) y, a continuación, elija Detach (Desasociar).

Consola antigua

Para separar un rol de IAM de una instancia

  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:

Generar una política para su rol de IAM basada en la actividad de acceso

Cuando crea por primera vez un rol de IAM para las aplicaciones, a veces puede conceder permisos más allá de lo necesario. Antes de iniciar la aplicación en el entorno de producción, puede generar una política de IAM basada en la actividad de acceso de un rol de IAM. IAM Access Analyzer revisa los registros AWS CloudTrail y genera una plantilla de políticas que contiene los permisos que ha utilizado el rol en el intervalo de fechas especificado. Puede utilizar la plantilla para crear una política administrada con permisos detallados y, a continuación, adjuntarla al rol de IAM. De esta forma, solo concede los permisos que el rol necesita para interactuar con los recursos de AWS para su caso de uso específico. Esto le ayuda a cumplir con la mejor práctica de otorgar privilegios mínimos. Para obtener más información, consulte Generar políticas basadas en la actividad de acceso en la Guía del usuario de IAM.