¿Cómo puedo asumir un rol de IAM mediante la AWS CLI?

8 minutos de lectura
0

Quiero usar la Interfaz de la línea de comandos de AWS (AWS CLI) para asumir un rol de AWS Identity and Access Management (IAM).

Solución

Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Para usar la AWS CLI para asumir un rol de IAM con acceso de solo lectura a las instancias de Amazon Elastic Compute Cloud (Amazon EC2), lleve a cabo las siguientes acciones.

Importante: Sus credenciales, como las contraseñas, aparecen en texto sin formato al ejecutar los comandos de los pasos siguientes. Se recomienda cambiar la contraseña después de asumir el rol de IAM.

Creación de un usuario de IAM con permisos para asumir roles

  1. Cree un usuario de IAM desde la AWS CLI con el siguiente comando:
    Nota: Sustituya Bob por su nombre de usuario de IAM.
  2. Cree la política de IAM que conceda los permisos al usuario Bob. Para ello, utilice un editor de texto de su elección para crear el archivo JSON que defina la política de IAM. Puede usar el siguiente ejemplo de JSON, example-policy.json, como plantilla:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ec2:Describe*",
            "iam:ListRoles",
            "sts:AssumeRole"
          ],
          "Resource": "*"
        }
      ]
    }

Para más información sobre la creación de políticas de IAM, consulte Crear políticas de IAM, Ejemplos de políticas basadas en identidad de IAM y Referencia de políticas JSON de IAM.

Creación de la política de IAM

Para crear su política de IAM, siga estos pasos:

  1. Utilice el comando aws iam create-policy:
    aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
    El comando aws iam create-policy da como resultado varios datos, entre los que se incluye el ARN (nombre de recurso de Amazon) de la política de IAM, como se muestra a continuación:
    arn:aws:iam::123456789012:policy/example-policy
    Nota: Sustituya 123456789012 por el ID de su cuenta.
  2. Anote el ARN de la política de IAM que aparece en el resultado y asocie la política a Bob con el comando attach-user-policy. Luego compruebe la asociación con el comando list-attached-user-policies como se muestra a continuación:
    aws iam attach-user-policy --user-name Bob --policy-arn "arn:aws:iam::123456789012:policy/example-policy"
    aws iam list-attached-user-policies --user-name Bob

Creación del archivo JSON que define la relación de confianza del rol de IAM

Utilice un editor de texto para crear un archivo JSON que defina la relación de confianza. Puede usar la siguiente política de confianza como ejemplo:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "AWS": "123456789012"
    },
    "Action": "sts:AssumeRole"
  }
}

Esta política de confianza permite que los usuarios y los roles de la cuenta 123456789012 asuman este rol si permiten la acción sts:AssumeRole en su política de permisos. También puede restringir la relación de confianza para que solo usuarios de IAM específicos puedan asumir el rol de IAM. Para ello, especifique entidades principales similares a arn:aws:iam::123456789012:user/example-username. Para obtener más información, consulte Elemento de la política de JSON de AWS: Principal.

Creación del rol de IAM y asociación de la política

Cree un rol de IAM que pueda asumir Bob y que tenga acceso de solo lectura a las instancias de Amazon Relational Database Service (Amazon RDS). Para permitir que un usuario de IAM asuma un rol de IAM, debe especificar una entidad principal que permita a los usuarios de IAM asumir ese rol. Por ejemplo, una entidad principal similar a arn:aws:iam::123456789012:root permite que todas las identidades de la cuenta 123456789012 asuman ese rol. Para obtener más información, consulte Creación de un rol para delegar permisos a un usuario de IAM.

  1. Cree un rol de IAM que tenga acceso de solo lectura a las instancias de base de datos de Amazon RDS. Asocie las políticas de IAM a su rol de IAM de acuerdo con sus requisitos de seguridad.

    El comando aws iam create-role crea el rol de IAM y define la relación de confianza que definió en el archivo JSON que ya había creado. El comando aws iam attach-role-policy asocia la política administrada de AWS AmazonRDSReadOnlyAccess al rol. Puede asociar diferentes políticas (políticas administradas y políticas personalizadas) según los requisitos de seguridad. El comando aws iam list-attached-role-policies muestra las políticas de IAM asociadas al rol de IAM example-role. Por ejemplo, ejecute los siguientes comandos:

    aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json
    aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess"
    aws iam list-attached-role-policies --role-name example-role

    Nota: Compruebe que Bob tenga acceso de solo lectura a las instancias de EC2 y que pueda asumir el rol example-role.

  2. Cree claves de acceso para Bob con el siguiente comando:

    aws iam create-access-key --user-name Bob

    **Importante:**Este comando de la AWS CLI muestra un ID de clave de acceso y una clave de acceso secreta. No olvide anotar estas claves.

Configuración de las claves de acceso

Para configurar las claves de acceso, utilice el perfil predeterminado o un perfil específico. Para configurar el perfil predeterminado, ejecute aws configure. Para crear un nuevo perfil específico, ejecute aws configure --profile _-_nombre-del-perfil. En este ejemplo, el perfil predeterminado se configura como se muestra a continuación:

aws configure
AWS Access Key ID [None]: ExampleAccessKeyID1
AWS Secret Access Key [None]: ExampleSecretKey1
Default region name [None]: eu-west-1
Default output format [None]: json

Nota: En Default region name, especifique su región de AWS.

Comprobación de la invocación de los comandos de la AWS CLI y el acceso del usuario de IAM

Siga estos pasos:

  1. Ejecute el comando aws sts get-caller-identity como se muestra a continuación:

    aws sts get-caller-identity

    El resultado del comando aws sts get-caller-identity incluye el ARN. Para comprobar que los comandos de la CLI de AWS se invocan como Bob, compruebe que el resultado incluya algo similar a arn:aws:iam::123456789012:user/Bob.

  2. Ejecute los siguientes comandos para confirmar que el usuario de IAM tenga acceso de solo lectura a las instancias de EC2 y no tenga acceso a las instancias de base de datos de Amazon RDS:

    aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
    aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

    El comando aws ec2 describe-instances debería mostrar todas las instancias de EC2 en la región eu-west-1. El comando aws rds describe-db-instances debe generar un mensaje de error de acceso denegado porque Bob no tiene acceso a Amazon RDS.

Cómo asumir el rol de IAM

Elija una de las siguientes opciones:

Cree un perfil en el archivo ~/.aws/config para usar un rol de IAM. Para obtener más información, consulte Uso de un rol de IAM de la AWS CLI.

-o-

Ejecute los siguientes comandos para asumir el rol de IAM:

  1. Use el siguiente comando para ver el ARN del rol:

    aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"
  2. El comando genera una lista de los roles de IAM, pero filtra el resultado por nombre de rol. Para asumir el rol de IAM, ejecute el siguiente comando:

    aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session

Estos comandos generan varios datos. En el bloque de credenciales, necesita AccessKeyId, SecretAccessKey y SessionToken. En este ejemplo se utilizan las variables de entorno RoleAccessKeyID, RoleSecretKey y RoleSessionToken. Tenga en cuenta que la marca de tiempo del campo de vencimiento corresponde a la zona horaria UTC. La marca de tiempo indica cuándo vencen las credenciales temporales del rol de IAM. Si las credenciales temporales han vencido, debe invocar de nuevo la llamada a la API sts:AssumeRole.

Nota: Puede hacer que aumente la duración máxima del vencimiento de la sesión para las credenciales temporales de los roles de IAM con el parámetro DurationSeconds.

Creación de variables de entorno para asumir el rol de IAM y comprobación del acceso

  1. Cree tres variables de entorno para asumir el rol de IAM. Estas variables de entorno contienen el siguiente resultado:

    export AWS_ACCESS_KEY_ID=RoleAccessKeyID
    export AWS_SECRET_ACCESS_KEY=RoleSecretKey
    export AWS_SESSION_TOKEN=RoleSessionToken

    Nota: En los sistemas Windows, sustituya export por set en este comando.

  2. Ejecute el siguiente comando para comprobar si ha asumido el rol de IAM:

    aws sts get-caller-identity

    Si asume el rol example-role, este comando de la AWS CLI generará el ARN como ** arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session** en lugar de arn:aws:iam::123456789012:user/Bob.

  3. Ejecute los siguientes comandos para comprobar si ha creado un rol de IAM con acceso de solo lectura a las instancias de base de datos de Amazon RDS, pero sin acceso a las instancias de EC2:

    aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
    aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

    El comando aws ec2 describe-instances genera un mensaje de error de acceso denegado. El comando aws rds describe-db-instances devuelve las instancias de base de datos de Amazon RDS. Esto confirma que los permisos asignados al rol de IAM funcionan correctamente.

  4. Para volver al usuario de IAM, elimine las variables de entorno como se muestra a continuación:

    unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
    aws sts get-caller-identity

    El comando unset elimina las variables de entorno y el comando aws sts get-caller-identity comprueba que se le haya devuelto como el usuario de IAM Bob.

    Nota: En los sistemas Windows, defina las variables de entorno como cadenas vacías para borrar su contenido como se muestra a continuación:

    SET AWS_ACCESS_KEY_ID=
    SET AWS_SECRET_ACCESS_KEY=
    SET AWS_SESSION_TOKEN=

Información relacionada

Términos y conceptos de roles

create-role

Creación de un rol para delegar permisos a un servicio de AWS