Configuración de la AWS CLI para usar AWS Single Sign-On - AWS Command Line Interface

Python 2.7, 3.4 y 3.5 están obsoletas para la versión 1 de AWS CLI. Para obtener más información, consulte la sección de la versión 1 de AWS CLI de Acerca de las versiones de AWS CLI.

Configuración de la AWS CLI para usar AWS Single Sign-On

Esta característica solo está disponible con la versión 2 de la AWS CLI.

La siguiente característica está disponible solo si usa la versión 2 de la AWS CLI. No está disponible si ejecuta la versión 1 de la AWS CLI. Para obtener información sobre cómo instalar la versión 2, consulte Instalación, actualización y desinstalación de la versión 2 de la AWS CLI.

Si su organización utiliza AWS Single Sign-On (AWS SSO), los usuarios pueden iniciar sesión en Active Directory, en un directorio de AWS SSO integrado o en otra iDP conectada a AWS SSO y recibir un rol de AWS Identity and Access Management (IAM) que les permite ejecutar comandos de la AWS CLI. Independientemente del iDP que utilice, AWS SSO abstrae esas distinciones y todas funcionan con la AWS CLI como se describe a continuación. Por ejemplo, puede conectar Microsoft Azure AD como se describe en el artículo del blog The Next Evolution in AWS Single Sign-On

Para obtener más información acerca de AWS SSO, consulte la Guía del usuario de AWS Single Sign-On.

En este tema, se describe cómo se configura la AWS CLI para autenticar al usuario con AWS SSO y obtener credenciales a corto plazo para ejecutar comandos de la AWS CLI. Contiene las secciones siguientes:

Configuración de un perfil con nombre para que utilice AWS SSO

Puede configurar uno o más de sus Perfiles con nombre de AWS CLI para usar un rol de AWS SSO. Puede crear y configurar varios perfiles y configurar cada uno para que utilice un portal de usuario AWS SSO o un rol definido por SSO.

Puede configurar el perfil de las siguientes maneras:

Configuración automática

Puede añadir a la AWS SSO un perfil habilitado para AWS CLI. Para ello, ejecute el siguiente comando y proporcione la URL de inicio de AWS SSO y la región de AWS en que se aloja el directorio de AWS SSO.

$ aws configure sso SSO start URL [None]: [None]: https://my-sso-portal.awsapps.com/start SSO region [None]:us-east-1

La AWS CLI intenta abrir su navegador predeterminado e iniciar el proceso de inicio de sesión de su cuenta de AWS SSO.

SSO authorization page has automatically been opened in your default browser. Follow the instructions in the browser to complete this authorization request.

Si la AWS CLI no puede abrir el navegador, aparece el siguiente mensaje con instrucciones sobre cómo iniciar manualmente el proceso de inicio de sesión.

Using a browser, open the following URL: https://my-sso-portal.awsapps.com/verify and enter the following code: QCFK-N451

AWS SSO utiliza el código para asociar la sesión de AWS SSO con la sesión de la AWS CLI actual. La página del navegador de AWS SSO le pide que inicie sesión con las credenciales de su cuenta de AWS SSO. De este modo, la AWS CLI (a través de los permisos asociados a su cuenta de AWS SSO) puede recuperar y mostrar las cuentas y roles de AWS que tiene permiso para usar con AWS SSO.

A continuación, la AWS CLI muestra las cuentas de AWS disponibles para su uso. Si solo tiene autorización para usar una única cuenta, la AWS CLI selecciona esa cuenta automáticamente y omite el mensaje. Las cuentas de AWS que están disponibles para su uso están determinadas por su configuración de usuario en AWS SSO.

There are 2 AWS accounts available to you. > DeveloperAccount, developer-account-admin@example.com (123456789011) ProductionAccount, production-account-admin@example.com (123456789022)

Utilice las teclas de flecha para seleccionar la cuenta que desea utilizar con este perfil. El carácter «>» de la izquierda apunta a la opción actual. Pulse INTRO para realizar la selección.

A continuación, la AWS CLI confirma la elección de la cuenta y muestra los roles de IAM que están disponibles en la cuenta seleccionada. Si la cuenta seleccionada solo muestra un rol, la AWS CLI selecciona automáticamente ese rol y omite el mensaje. Los roles que están disponibles para su uso están determinados por su configuración de usuario en AWS SSO.

Using the account ID 123456789011 There are 2 roles available to you. > ReadOnly FullAccess

Al igual que antes, utilice las teclas de flecha para seleccionar el rol de IAM que desea utilizar con este perfil. El carácter «>» de la izquierda apunta a la opción actual. Pulse <INTRO> para realizar la selección.

La AWS CLI confirma su selección de rol.

Using the role name "ReadOnly"

Ahora puede finalizar la configuración de su perfil especificando el formato de salida predeterminado, la región de AWS predeterminada a la que debe enviar comandos y proporcionando un nombre para el perfil para que pueda hacer referencia a este perfil entre todos los definidos en el equipo local. En el ejemplo siguiente, el usuario introduce una región predeterminada, un formato de salida predeterminado y el nombre del perfil. También puede pulsar <ENTER> para seleccionar los valores predeterminados que se muestran entre corchetes. El nombre del perfil sugerido es el número de ID de cuenta seguido de un guion bajo seguido del nombre del rol.

CLI default client Region [None]: us-west-2<ENTER> CLI default output format [None]: json<ENTER> CLI profile name [123456789011_ReadOnly]: my-dev-profile<ENTER>
nota

Si especifica default como nombre de perfil, este perfil será el que se utilice cada vez que se ejecute un comando de la AWS CLI y no se especifique ningún nombre de perfil.

Un mensaje final describe la configuración del perfil completada.

Para utilizar este perfil, especifique el nombre del perfil mediante —perfil, como se muestra:

aws s3 ls --profile my-dev-profile

Las entradas de ejemplo anteriores darían como resultado un perfil con nombre alojado en ~/.aws/config parecido al del siguiente ejemplo:

[profile my-dev-profile] sso_start_url = https://my-sso-portal.awsapps.com/start sso_region = us-east-1 sso_account_id = 123456789011 sso_role_name = readOnly region = us-west-2 output = json

En este punto, tiene un perfil que puede utilizar para solicitar credenciales temporales. Debe utilizar el comando aws sso login para solicitar y recuperar realmente las credenciales temporales necesarias para ejecutar comandos. Para obtener instrucciones, consulte Uso de un perfil con nombre habilitado de AWS SSO.

nota

También puede ejecutar un comando de la AWS CLI utilizando el perfil especificado. Si en estos momentos no ha iniciado sesión en el portal de AWS SSO, este comienza automáticamente el proceso de inicio de sesión, como si hubiera ejecutado manualmente el comando aws sso login.

Configuración manual

Para agregar manualmente compatibilidad con AWS SSO a un perfil con nombre, debe agregar las siguientes claves y valores a la definición del perfil en el archivo ~/.aws/config (Linux o macOS) o %USERPROFILE%/.aws/config (Windows).

sso_start_url

La dirección URL que apunta al portal de usuarios de AWS SSO de la organización.

sso_start_url = https://my-sso-portal.awsapps.com/start
sso_region

La región de AWS que contiene el host del portal de AWS SSO. Esto es independiente (y puede ser una región diferente) del parámetro de region de la CLI predeterminado.

sso_region = us-west-2
sso_account_id

ID de cuenta de AWS que contiene el rol de IAM que desea utilizar con este perfil.

sso_account_id = 123456789011
sso_role_name

El nombre del rol de IAM que define los permisos que tiene el usuario cuando utiliza este perfil.

sso_role_name = ReadAccess

La presencia de estas claves identifica este perfil como uno que utiliza AWS SSO para autenticar al usuario.

También puede incluir otras claves y valores válidos en el archivo .aws/config, como region, output o s3. Sin embargo, no puede incluir ningún valor relacionado con credenciales, como role_arn o aws_secret_access_key. Si lo hace, la AWS CLI produce un error.

Por lo tanto, un perfil típico de AWS SSO en .aws/config podría ser similar al del siguiente ejemplo:

[profile my-dev-profile] sso_start_url = https://my-sso-portal.awsapps.com/start sso_region = us-east-1 sso_account_id = 123456789011 sso_role_name = readOnly region = us-west-2 output = json

En este punto, tiene un perfil que puede utilizar para solicitar credenciales temporales. Sin embargo, aún no puede ejecutar un comando de servicio de la AWS CLI. En primer lugar, debe utilizar el comando aws sso login para solicitar y recuperar realmente las credenciales temporales necesarias para ejecutar comandos. Para obtener instrucciones, consulte la siguiente secció, Uso de un perfil con nombre habilitado de AWS SSO.

Uso de un perfil con nombre habilitado de AWS SSO

En esta sección, se describe cómo se utiliza el perfil de AWS SSO que creó en la sección anterior.

Inicio de sesión y obtención de credenciales temporales

Después de configurar de forma automática o manual un perfil con nombre, puede invocarlo para solicitar credenciales temporales de AWS. Para poder ejecutar un comando de servicio de la AWS CLI, debe recuperar y almacenar en caché un conjunto de credenciales temporales. Para obtener estas credenciales temporales, ejecute el siguiente comando.

$ aws sso login --profile my-dev-profile

La AWS CLI abre el navegador predeterminado y verifica su inicio de sesión de AWS SSO.

SSO authorization page has automatically been opened in your default browser. Follow the instructions in the browser to complete this authorization request. Successully logged into Start URL: https://my-sso-portal.awsapps.com/start

Si no hay ninguna sesión iniciada en su cuenta de AWS SSO en esos momentos, deberá proporcionar el nombre de usuario y la contraseña de AWS SSO.

Si la AWS CLI no puede abrir el navegador, se le pedirá que lo abra usted y que introduzca el código especificado.

$ aws sso login --profile my-dev-profile Using a browser, open the following URL: https://my-sso-portal.awsapps.com/verify and enter the following code: QCFK-N451

La AWS CLI abre el navegador predeterminado (o usted abre manualmente el navegador de su elección) en la página especificada e introduce el código proporcionado. A continuación, la página web le pedirá sus credenciales de AWS SSO.

Las credenciales de sesión de AWS SSO se almacenan en caché y contienen una marca temporal de vencimiento. Cuando las credenciales caduquen, la AWS CLI solicitará que inicie sesión de nuevo en AWS SSO.

Si sus credenciales de AWS SSO son válidas, la AWS CLI las utiliza para recuperar de forma segura las credenciales temporales de AWS para el rol de IAM especificado en el perfil.

Welcome, you have successfully signed-in to the AWS-CLI.

Ejecución de un comando con su perfil habilitado de AWS SSO

Puede utilizar estas credenciales temporales para invocar un comando de la AWS CLI con el perfil con nombre asociado. En el ejemplo siguiente se muestra que el comando se ejecutó bajo un rol asumido que forma parte de la cuenta especificada.

$ aws sts get-caller-identity --profile my-dev-profile { "UserId": "AROA12345678901234567:test-user@example.com", "Account": "123456789011", "Arn": "arn:aws:sts::123456789011:assumed-role/AWSPeregrine_readOnly_12321abc454d123/test-user@example.com" }

Siempre que haya iniciado sesión en AWS SSO y las credenciales almacenadas en caché no hayan caducado, la AWS CLI renueva automáticamente las credenciales temporales caducadas de AWS cuando sea necesario. Sin embargo, si sus credenciales de AWS SSO caducan, debe renovarlas explícitamente iniciando sesión de nuevo en la cuenta de AWS SSO.

$ aws s3 ls --profile my-sso-profile Your short-term credentials have expired. Please sign-in to renew your credentials SSO authorization page has automatically been opened in your default browser. Follow the instructions in the browser to complete this authorization request.

Puede crear varios perfiles con nombre habilitados de AWS SSO que apunten a una cuenta o rol de AWS diferente. También puede utilizar el comando aws sso login en más de un perfil a la vez. Si alguno de ellos comparte la misma cuenta de usuario de AWS SSO, debe iniciar sesión en esa cuenta de usuario de AWS SSO una sola vez y así todos compartirán un único conjunto de credenciales de AWS SSO que se almacenarán en la caché.

# The following command retrieves temporary credentials for the AWS account and role # specified in one named profile. If you are not yet signed in to AWS SSO or your # cached credentials have expired, it opens your browser and prompts you for your # AWS SSO user name and password. It then retrieves AWS temporary credentials for # the IAM role associated with this profile. $ aws sso login --profile my-first-sso-profile # The next command retrieves a different set of temporary credentials for the AWS # account and role specified in the second named profile. It does not overwrite or # in any way compromise the first profile's credentials. If this profile specifies the # same AWS SSO portal, then it uses the SSO credentials that you retrieved in the # previous command. The AWS CLI then retrieves AWS temporary credentials for the # IAM role associated with the second profile. You don't have to sign in to # AWS SSO again. $ aws sso login --profile my-second-sso-profile # The following command lists the Amazon EC2 instances accessible to the role # identified in the first profile. $ aws ec2 describe-instances --profile my-first-sso-profile # The following command lists the Amazon EC2 instances accessible to the role # identified in the second profile. $ aws ec2 describe-instances --profile my-second-sso-profile

Cierre de sesiones de AWS SSO

Cuando haya terminado de usar sus perfiles habilitados de AWS SSO, puede elegir no hacer nada y dejar que caduquen las credenciales temporales de AWS y las credenciales de AWS SSO. Sin embargo, también puede optar por ejecutar el siguiente comando para eliminar inmediatamente todas las credenciales almacenadas en la carpeta de la caché de credenciales de SSO, así como todas las credenciales temporales de AWS basadas en las credenciales de AWS SSO. Esto hará que esas credenciales no estén disponibles para ser utilizadas en un comando futuro.

$ aws sso logout Successfully signed out of all SSO profiles.

Si más adelante desea ejecutar comandos con uno de sus perfiles habilitados de AWS SSO, deberá volver a ejecutar el comando aws sso login (consulte la sección anterior) y especificar el perfil que desea utilizar.