Come posso concedere agli utenti Active Directory l'accesso all'API o all'interfaccia della linea di comando AWS (AWS CLI) con AD FS?

5 minuti di lettura
0

Ho configurato l'accesso alla Console di gestione AWS per gli utenti Active Directory tramite federazione. Come posso offrire agli utenti lo stesso accesso all’interfaccia della linea di comando (AWS CLI) utilizzando Active Directory Federation Services (AD FS)?

Breve descrizione

Quando consenti agli utenti federati SAML 2.0 di accedere alla Console di gestione AWS, gli utenti che richiedono un accesso programmatico devono comunque disporre di una chiave di accesso e di una chiave segreta.

Per ottenere l'ID della chiave di accesso e la chiave di accesso segreta per un utente AWS Identity and Access Management (IAM), è possibile:

Configurare l'interfaccia della linea di comando AWS (AWS CLI).

-oppure-

Ottenere credenziali temporanee per consentire agli utenti federati di accedere all'interfaccia della linea di comando AWS (AWS CLI).

Prima di poter concedere l'accesso a un utente federato, è necessario:

Nota: questa soluzione non è compatibile se l'autenticazione a più fattori (MFA) è attivata per gli utenti della directory.

Soluzione

Se il gestore dell’identità digitale (IdP) è configurato per l’uso di Integrated Windows Authentication (IWA), NTLM o Kerberos (impostazione predefinita per AD FS 2.0), consulta la Soluzione 1. Se l’IdP è configurato per l’uso con l'autenticazione basata su moduli (impostazione predefinita per AD FS 3.0 e 4.0), consulta la Soluzione 2.

Nota: se si verificano errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Soluzione 1: PowerShell per AD FS con IWA (PowerShell 2.0)

1.    Importa il modulo Windows PowerShell eseguendo il comando seguente:

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

2.    Imposta una variabile per l’endpoint AD FS eseguendo un comando simile al seguente:

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

Nota: il comando include l'URL completo della pagina di accesso a AD FS e il nome di risorsa uniforme di accesso (URN) per AWS. 3.    Imposta l'endpoint SAML eseguendo un comando simile al seguente:

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

Nota: per impostazione predefinita, AD FS 2.0 AuthenticationType è impostato su NTLM. Se non specifichi alcun valore per AuthenticationType nell'esempio precedente, Strumenti AWS utilizzerà Kerberos per impostazione predefinita.

4.    Utilizza le impostazioni dell'endpoint archiviate per eseguire l'autenticazione con l'IdP AD FS e ottenere un elenco di ruoli che l'utente potrà assumere utilizzando uno dei seguenti metodi:

Utilizza le credenziali dell'utente attualmente connesso alla workstation.

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

-oppure-

Specifica le credenziali di un utente Active Directory.

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

5.    Se sono disponibili più ruoli, verrà chiesto di selezionare il ruolo che desideri assumere. Inserisci il carattere alfabetico nella sessione del terminale in modo simile al seguente:

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

6.    Esegui un comando simile al seguente per verificare che gli utenti possano accedere all'interfaccia della linea di comando AWS (AWS CLI) utilizzando le credenziali federate e il profilo specificato:

Get-IAMSAMLProviderList -ProfileName SAMLUser

Soluzione 2: Python per AD FS con autenticazione basata su moduli (impostazione predefinita per AD FS 3.0 e 4.0)

1.    Installa i seguenti moduli in Python:

pip install --upgrade boto beautifulsoup4 requests

2.    Implementa una soluzione generale per l'accesso federato alle API/CLI utilizzando SAML 2.0, quindi scarica lo script dal passaggio 4 di questo post di blog collegato.

3.    Apri lo script e imposta la Regione preferita e il formato di output. Sostituisci adfs.example.com con l’URL, quindi inserisci il nome di dominio completo (FQDN) del server 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: se il percorso del file di credenziali AWS è diverso, specifica il percorso del file.

4.    Salva le modifiche, esegui il file e compila i seguenti campi man mano che appaiono:

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.    Una volta completata correttamente la federazione, esegui i comandi con il profilo SAML appena configurato utilizzando il parametro --profile nei comandi.

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"
    }
  ]
}

Informazioni correlate

Configurazione dell'identità federata con gli Strumenti AWS per PowerShell

Single sign-on