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

9 minutos de lectura
0

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

Solución

Para asumir un rol de IAM mediante la AWS CLI y tener acceso de solo lectura a las instancias de Amazon Elastic Compute Cloud (Amazon EC2), haga lo siguiente:

Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, confirme si está ejecutando una versión reciente de la AWS CLI.

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

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

1.    Cree un usuario de IAM mediante la AWS CLI con el siguiente comando:

Nota: Sustituya Bob por su nombre de usuario de IAM.

aws iam create-user --user-name Bob

2.    Cree una política de IAM que conceda los permisos a Bob con la AWS CLI. Cree el archivo JSON que defina la política de IAM con el editor de texto que prefiera. Por ejemplo, puede usar vim, un editor de texto que se usa habitualmente en Linux, como se muestra a continuación:

Nota: Sustituya example por su propio nombre de política, nombre de usuario, rol, nombre de archivo JSON, nombre de perfil y claves.

vim example-policy.json

3.    El contenido del archivo example-policy.json es similar al siguiente:

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

1.    Utilice el siguiente 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 su propia 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

1.    Cree un archivo JSON que defina la relación de confianza como se muestra a continuación:

vim example-role-trust-policy.json

2.    El contenido del archivo example-role-trust-policy.json es similar al siguiente:

{
  "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, puede especificar 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). Como este rol de IAM lo asume un usuario de IAM, debe especificar una entidad principal que permita a los usuarios de IAM asumir dicho rol. Por ejemplo, una entidad principal similar a arn:aws:iam::123456789012:root permite que todas las identidades de IAM de la cuenta 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 según el archivo JSON creado en la sección anterior. 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. Observe los siguientes comandos de ejemplo:

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

El 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

1.    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 example_-_profile-name. 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

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

aws sts get-caller-identity

El comando aws sts get-caller-identity da como resultado tres datos, entre los que se incluye el ARN. El resultado muestra algo similar a arn:aws:iam::123456789012:user/Bob para comprobar que los comandos de la AWS CLI se invocan como 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 utilizar un rol de IAM. Para obtener más información, consulte Usar un rol de IAM de la AWS CLI.

Alternativa:

Siga estos pasos para asumir el rol de IAM:

1.    Ejecute el siguiente comando para obtener 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

El comando de la AWS CLI da como resultado varios datos. Dentro del 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 se completan con 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

El comando de la AWS CLI debería dar como resultado el ARN como arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session en lugar de arn:aws:iam::123456789012:user/Bob para confirmar que ha asumido el rol example-role.

3.    Compruebe 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, con los siguientes comandos:

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 debe generar un mensaje de error de acceso denegado. El comando aws rds describe-db-instances debe devolver 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