¿Cómo concedo a mis usuarios de Active Directory acceso a la API o a la CLI de AWS con AD FS?

5 minutos de lectura
0

He configurado el acceso a la consola de administración de AWS para mis usuarios de Active Directory mediante la federación. ¿Cómo puedo conceder a los usuarios el mismo acceso a la interfaz de la línea de comandos de AWS (AWS CLI) mediante los Servicios de Federación de Active Directory (AD FS)?

Descripción breve

Cuando usted permitir que los usuarios federados de SAML 2.0 accedan a la consola de administración de AWS, los usuarios que requieren acceso programático deben seguir teniendo una clave de acceso y una clave secreta.

Para obtener el ID de la clave de acceso y la clave de acceso secreta para un usuario de AWS Identity and Access Management (IAM), puede:

Configurar la CLI de AWS.

-o-

Obtener credenciales temporales para que los usuarios federados accedan a la CLI de AWS.

Antes de poder dar acceso a un usuario federado, debe:

Nota: Esta solución no es compatible si tiene activada la autenticación multifactor (MFA) para los usuarios de su directorio.

Resolución

Si su proveedor de identidades (IdP) está configurado para funcionar con la autenticación integrada de Windows (IWA), NTLM o Kerberos (opción predeterminada para AD FS 2.0), consulte la Solución 1. Si su IdP está configurado para funcionar con la autenticación basada en formularios (predeterminada para AD FS 3.0 y 4.0), consulte la Solución 2.

Nota: Si recibe errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la versión más reciente de AWS CLI.

Solución 1: PowerShell para AD FS mediante IWA (PowerShell 2.0)

1.    Importe el módulo de Windows PowerShell mediante la ejecución del siguiente comando:

> Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"

2.    Defina una variable para el punto de conexión de AD FS mediante la ejecución de un comando similar al siguiente:

> $Endpoint = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

Nota: Esto incluye la URL completa de la página de inicio de sesión de AD FS y el nombre de recurso uniforme (URN) de inicio de sesión para AWS. 3.    Configure el punto de conexión de SAML mediante la ejecución de un comando similar al siguiente:

> $EndpointName = Set-AWSSamlEndpoint -Endpoint "$Endpoint" -StoreAs 'ADFS-Login' -AuthenticationType NTLM

Nota: De forma predeterminada, el tipo de autenticación de AD FS 2.0 está configurado en NTLM. Si no especifica ningún valor para el AuthenticationType en el ejemplo anterior del Cmdlet de AWS Tools, entonces AWS Tools usará Kerberos de forma predeterminada.

4.    Utilice la configuración de punto de conexión almacenada para autenticarse con el IdP de AD FS y obtener una lista de las funciones que el usuario puede asumir mediante uno de los siguientes métodos:

Utilice las credenciales del usuario que está conectado actualmente a la estación de trabajo.

> Set-AWSSamlRoleProfile -StoreAs 'SAMLUser' -EndpointName $EndpointName

-o-

Especifique las credenciales de un usuario de Active Directory.

> $Credential = Get-Credential -Message "Enter the domain credentials for the endpoint"
> Set-AWSSamlRoleProfile -EndpointName $EndpointName -NetworkCredential $credential -StoreAs 'SAMLUser'

5.    Si hay varios roles disponibles, se le pedirá que seleccione el rol que desea asumir. Introduzca el carácter alfabético en su sesión de terminal de forma similar a la siguiente:

SAMLUser[A] A - 123456789012:role/ADFS-DevAdmin [B] B - 123456789012:role/ADFS-DevReadOnly [?] Help (default is "A"): A

6.    Confirme que los usuarios puedan acceder a la CLI de AWS mediante las credenciales federadas y el perfil especificado mediante la ejecución de un comando similar al siguiente:

Get-IAMSAMLProviderList -ProfileName SAMLUser

Solución 2: Python para AD FS usando la autenticación basada en formularios (predeterminado para AD FS 3.0 y 4.0)

1.    Instale los siguientes módulos en Python:

pip install --upgrade boto beautifulsoup4 requests

2.    Implemente una solución general para el acceso a la API/CLI federada mediante SAML 2.0 y, a continuación, descargue el script del paso 4 de esta entrada de blog vinculada.

3.    Abra el script y defina su región y formato de salida preferidos. Sustituya adfs.example.com por su URL y, a continuación, introduzca el nombre de dominio completo (FQDN) de su servidor de AD FS.

region = 'eu-west-1'
    outputformat = 'json'
    awsconfigfile = '/.aws/credentials'
    idpentryurl = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

Nota: Si tiene una ruta de archivo diferente para su archivo de credenciales de AWS, especifique la ruta del archivo.

4.    Guarde los cambios, ejecute el archivo y, a continuación, rellene los siguientes campos tal como aparecen:

bob@Ubuntu64:~$ ./working_samlapi.py
   Username: bob@example.com
   Password: ***********

   Please choose the role you would like to assume:
   [ 0 ]:  arn:aws:iam::123456789012:role/ADFS-DevAdmin
   [ 1 ]:  arn:aws:iam::123456789012:role/ADFS-DevReadOnly

   Selection:  0

   ----------------------------------------------------------------
   Your new access key pair has been stored in the AWS configuration file /home/ec2-user/.aws/credentials under the saml profile.
   Note that it will expire at 2018-03-14T14:57:45Z.
   After this time, you may safely rerun this script to refresh your access key pair.
   To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances).
   ----------------------------------------------------------------

5.    Después de federar correctamente, ejecute los comandos con el perfil SAML recién configurado mediante el parámetro --profile de los comandos.

bob@Ubuntu64:~$ aws iam list-saml-providers --profile saml

{
  "SAMLProviderList": [
    {
      "CreateDate": "2018-03-14T13:28:24Z",
      "ValidUntil": "2118-03-14T13:28:23Z",
      "Arn": "arn:aws:iam::123456789012:saml-provider/adfs"
    }
  ]
}

Información relacionada

Configuración de la identidad federada con AWS Tools para PowerShell

Inicio de sesión único