¿Cómo concedo a mis usuarios de Active Directory acceso a la API o a la AWS CLI 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. Quiero 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 corta

Cuando permites 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), lleva a cabo una de las siguientes acciones:

  • Configurar AWS CLI.
  • Obtener credenciales temporales para que los usuarios federados accedan a AWS CLI.

Antes de poder conceder acceso a un usuario federado, haz lo siguiente:

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

Resolución

Si tu 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), consulta la Solución 1. Si tu IdP está configurado para funcionar con la autenticación basada en formularios (predeterminada para AD FS 3.0 y 4.0), consulta la Solución 2.

Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, comprueba si estás utilizando la versión más reciente de la AWS CLI.

PowerShell para AD FS mediante IWA (PowerShell 2.0)

1.    Importa 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.    Define 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.    Configura 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 especificas ningún valor para el AuthenticationType en el ejemplo anterior del Cmdlet de AWS Tools, entonces AWS Tools usará Kerberos de forma predeterminada.

4.    Utiliza la configuración de punto de conexión almacenada para autenticarte 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:

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

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

Alternativa:

Especifica 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 te pedirá que selecciones el rol que deseas asumir. Introduce el carácter alfabético en tu 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.    Confirma que los usuarios puedan acceder a la AWS CLI mediante las credenciales federadas y el perfil especificado mediante la ejecución de un comando similar al siguiente:

Get-IAMSAMLProviderList -ProfileName SAMLUser

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

1.    Instala los siguientes módulos en Python:

pip install --upgrade boto beautifulsoup4 requests

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

3.    Abre el script y define tu región y formato de salida preferidos. Sustituye adfs.example.com por su URL y, a continuación, introduce el nombre de dominio completo (FQDN) de tu 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 tienes una ruta de archivo diferente para tu archivo de credenciales de AWS, especifica la ruta del archivo.

4.    Guarda los cambios, ejecuta el archivo y, a continuación, rellena 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, ejecuta 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

Habilitación del inicio de sesión único para AWS Managed Microsoft AD