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 de forma segura plantea ciertas dificultades, en especial cuando se trata de aquellas que AWS crea en su nombre, como las instancias de spot o las de los grupos de Auto Scaling. También debe poder actualizar las credenciales de cada instancia cuando rota sus credenciales de AWS.

nota

Para sus cargas de trabajo de Amazon EC2, le recomendamos que recupere las credenciales de sesión mediante el método que se describe a continuación. Estas credenciales deberían permitir a su carga de trabajo realizar solicitudes de API de AWS, sin necesidad de usar sts:AssumeRole para asumir el mismo rol que ya está asociado a la instancia. A menos que necesite pasar etiquetas de sesión para el control de acceso basado en atributos (ABAC) o pasar una política de sesión para restringir aún más los permisos del rol, estas llamadas de asunción de roles no son necesarias, ya que crean un nuevo conjunto de las mismas credenciales temporales de sesión de rol.

Si su carga de trabajo usa un rol para asumirse a sí mismo, debe crear una política de confianza que permita explícitamente que ese rol se asuma a sí mismo. Si no crea la política de confianza, obtiene el error AccessDenied. Para obtener más información, consulte Modificación de una política de confianza de rol en la Guía del usuario de IAM.

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 los roles de IAM, tal 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 . Si cambia un rol, el cambio se propaga a todas las instancias.

nota

Las credenciales del rol de IAM de Amazon EC2 no están sujetas a la duración máxima de sesión configurada en el rol. Para obtener más información, consulte Uso de roles de IAM en la guía del usuario de IAM.

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 iniciar 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 AWS SDK para iniciar una instancia con un rol de IAM o para adjuntar un rol de IAM a una instancia, especifique el nombre del perfil de instancias.

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" 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 las aplicaciones, la AWS CLI y los comandos de las herramientas para Windows PowerShell que se ejecutan en la instancia, no es necesario obtener de forma explícita las credenciales de seguridad temporales, dado que los AWS SDK, la AWS CLI y las herramientas para Windows PowerShell obtienen automáticamente las credenciales del servicio de metadatos de la instancia de 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.

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

Para permitir que un usuario lance una instancia con un rol de IAM o asocie o sustituya un rol de IAM a una instancia existente, debe concederle permiso para utilizar las siguientes acciones de API:

  • iam:PassRole

  • ec2:AssociateIamInstanceProfile

  • ec2:ReplaceIamInstanceProfileAssociation

Por ejemplo, la siguiente política de IAM concede a los usuarios permiso para iniciar instancias con un rol de IAM, o para sustituir o adjuntar un rol de IAM para una instancia existente con la AWS CLI.

nota

Si quiere que la política conceda a los usuarios acceso a todos los roles, especifique el recurso como * en la política. No obstante, tenga en cuenta el principio de privilegios mínimos como práctica recomendada.

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

Para conceder a los usuarios permiso para iniciar instancias con un rol de IAM o para sustituir o asociar un rol de IAM a una instancia ya existente con la consola de Amazon EC2, debe concederles permiso para utilizar iam:ListInstanceProfiles, iam:PassRole, ec2:AssociateIamInstanceProfile y ec2:ReplaceIamInstanceProfileAssociation, además de cualquier otro permiso que puedan necesitar. Para ver ejemplos de políticas, consulte Políticas de ejemplo para trabajar en la consola de Amazon EC2.

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 iniciar una instancia con dicho rol o adjuntarla a una instancia.

Console
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 y, a continuación, Crear rol.

  3. En la página Seleccionar entidad de confianza, elija Servicio de AWS y, a continuación, seleccione el caso de uso de EC2. Elija Siguiente.

  4. En la página Agregar permisos, seleccione las políticas que conceden a sus instancias acceso a los recursos que necesiten. Elija Siguiente.

  5. En la página Asignar nombre, revisar y crear, ingrese un nombre y una descripción para el nuevo rol. De manera opcional, agregue etiquetas al rol. Seleccione Crear rol.

Command line

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 instancias (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

    Ejemplo de respuesta

    { "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

    Ejemplo de respuesta

    { "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 AWS Tools for Windows PowerShell:

Iniciar una instancia con un rol de IAM

Después de crear un rol de IAM, puede iniciar 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 iniciar 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.

New console
Para iniciar una instancia con un rol de IAM (consola)
  1. Siga el procedimiento para Iniciar una instancia.

  2. Expanda Detalles avanzados y en Perfil de instancia de IAM, seleccione el rol de IAM que creó.

    nota

    La lista Perfil de instancia 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 AWS SDK, es posible que le haya dado un nombre distinto a su perfil de instancias.

  3. Configure cualquier otro detalle que necesite para la instancia o acepte los valores predeterminados y, luego, seleccione un par de claves. Para obtener información acerca de los campos del asistente de lanzamiento de instancias, consulte iniciar una instancia mediante parámetros definidos.

  4. En el panel Resumen, revise la configuración de la instancia y, a continuación, elija Iniciar instancia.

  5. Si utiliza las acciones de la 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.

    IMDSv2IMDSv1
    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" 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
Old console
Para iniciar 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 Iniciar instancia.

  3. Seleccione una AMI y un tipo de instancia y, a continuación, elija Siguiente: Configurar detalles de instancia.

  4. En la página Configurar detalles de instancia, en Rol de IAM, seleccione el rol de IAM que ha creado.

    nota

    La lista 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 AWS SDK, es posible que le haya dado un nombre distinto a su perfil de instancias.

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

  6. Revise la configuración y, a continuación, elija Iniciar para seleccionar un par de claves y iniciar la instancia.

  7. Si utiliza las acciones de la 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.

    IMDSv2IMDSv1
    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" 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
Command line

Puede utilizar la AWS CLI para asociar un rol a una instancia durante el lanzamiento. Debe especificar el perfil de instancia en el comando.

Para iniciar una instancia con un rol de IAM (AWS CLI)
  1. Ejecute el comando run-instances para iniciar una instancia usando el perfil de instancia. En el siguiente ejemplo se muestra cómo iniciar 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 Tools for Windows PowerShell.

  2. Si utiliza las acciones de la 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.

Console
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 Instancias.

  3. Seleccione la instancia, elija Acciones, Seguridad, Modificar rol de IAM.

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

Command line
Para adjuntar 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"

    Ejemplo de respuesta

    { "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 Tools for 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.

Console
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 Instancias.

  3. Seleccione la instancia, elija Acciones, Seguridad, Modificar rol de IAM.

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

Command line
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"

    Ejemplo de respuesta

    { "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 Tools for Windows PowerShell:

Separar un rol de IAM

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

Console
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 Instancias.

  3. Seleccione la instancia, elija Acciones, Seguridad, Modificar rol de IAM.

  4. En Rol de IAM, elija Sin rol de IAM. Seleccione Guardar.

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

Command line
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

    Ejemplo de respuesta

    { "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

    Ejemplo de respuesta

    { "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 Tools for 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 su entorno de producción, puede generar una política de IAM que esté basada en la actividad de acceso de un rol de IAM. El analizador de acceso de IAM revisa los registros de AWS CloudTrail y genera una plantilla de política 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.