I sistemi di autenticazione ed autorizzazione sui servizi AWS (Amazon Web Services ) sono completi, sicuri e facili da usare, però ci sono alcuni scenari in cui è comodo centralizzarli o federarli, in modo da avere un single sign-on (SSO), ovvero un singolo punto di autenticazione per diversi sistemi.
In questa guida utilizzeremo un approccio SSO federato con SAML (Security Assertion Markup Language), uno standard XML che consente ai domini web protetti di scambiare dati relativi all’autenticazione e all’autorizzazione dell’utente.
Per esempio dare accesso ad un gruppo di utenti appartenenti al reparto amministrativo, al servizio AWS Billing o ad alcuni report relativi al Cost Explorer.
Occorre fare una premessa, la nostra azienda utilizza alcuni servizi G Suite di Google, come Gmail, quindi l’idea di fondo è quella di concedere l’accesso ai suddetti servizi federando G Suite con IAM (Identity Access Management) di AWS.
Questo ci evita il dover fornire nuove credenziali (a figure spesso non tecniche) per accedere ai servizi AWS, ma di poter utilizzare quelle di Gmail.
Di seguito uno schema del tipo di federazione che abbiamo utilizzato:
In rete sono disponibili molte guide e modalità di configurazioni diverse, ma abbiamo trovato difficoltà a trovarne una completa e sintetica, questo ci ha spinto a scrivere questa guida, che speriamo sia utile per utilizzare questi strumenti in modo più facile.
L’obiettivo di questo articolo non è spiegare le differenze tra i diversi standard o metodologie disponibili, ma di fornire una guida facile ed intuitiva su come configurare SAML 2.0 in pochi minuti.
Riportiamo per completezza d’informazione una tabella riassuntiva dove sono descritti alcuni dei maggiori standard utilizzati per lo scopo che dovevamo raggiungere:
La scelta è ricaduta su SAML 2.0, perchè facilmente integrabile tra Gmail e AWS e perchè rispondeva precisamente alle nostre esigenze di federare 2 sistemi enterprise diversi tra loro.
Una importante precisazione, per poter eseguire le configurazioni successive, è necessario disporre di un account Super administrator per G Suite ed un account con permessi amministrativi per AWS.
Ora passiamo alla configurazione dei 2 ambienti.
Il primo passo da effettuare è accedere alla console di G Suite: https://admin.google.com/
Cliccare su Utenti e poi su “Gestisci attributi personalizzati”:
Procediamo cliccando su “Aggiungi attributo personalizzato”:
Verrà aperta la seguente form che dovremo popolare con gli stessi valori dell’immagine sottostante e poi cliccare su “Aggiungi”:
In questo modo abbiamo definito degli attributi generali che assegneremo successivamente agli utenti gmail a cui dovremo dare l’accesso al pannello AWS.
Ora torniamo alla home della console admin di G Suite: https://admin.google.com/
Entriamo nella sezione “Applicazioni” e poi App SAML:
A questo punto in basso a destra cliccare su “Abilita SSO per un’applicazione SAML”, in modo da poter definire il servizio SAML che servirà per federarsi con il provider di identità di AWS.
Nella schermata che si aprirà, cliccare su “Configura applicazione personalizzata”:
nella pagina successiva scaricare il file Metadati IDP in xml, ci servirà più avanti nella configurazione:
una volta scaricato il file, cliccare su avanti e impostare il nome ed un logo a vostro piacimento (questo logo comparirà in gmail per identificare l’accesso al servizio AWS che avete scelto):
cliccare su avanti e completare la successiva form con i seguenti valori:
ACS URL: https://signin.aws.amazon.com/saml
Entity ID: urn:amazon:webservices
Nella pagina successiva è necessario configurare la mappatura tra i due servizi di identity provider e service provider:
https://aws.amazon.com/SAML/Attributes/RoleSessionName – Basic Information – Primary Email
https://aws.amazon.com/SAML/Attributes/Role – AWS SAML – IAM_ROLE
https://aws.amazon.com/SAML/Attributes/SessionDuration – AWS SAML – SessionDuration
I 3 attributi, che abbiamo definito, permettono di memorizzare i dettagli tra Google e la nostra sessione AWS.
L’email principale è il valore che ci permette di mappare la nostra utenza Gmail con il ruolo che assegneremo in AWS.
RoleSessionName permette di identificare l’utente ed il ruolo ad esso assegnato su AWS.
SessionDuration è la durata di validità della sessione di un singolo utente prima di richiedere nuovamente l’accesso.
Cliccare quindi su fine.
A questo punto è necessario passare sul pannello AWS per le configurazioni del provider di identità su IAM.
Clicchiamo Crea provider:
Popolare la form nel modo indicato di seguito, facendo attenzione ad effettuare l’upload del file Metadati IDP in xml, precedentemente scaricato.
Andiamo Avanti e clicchiamo su Crea:
Una volta creato il provider è necessario cliccarci sopra, comparirà l’ARN che dovremo copiarci, sarà necessario nei passi successivi:
A questo punto dobbiamo definire quali permessi avranno gli utenti che si connetteranno con SAML e provenienti da Gmail.
Andiamo sulla console IAM, Ruoli, Crea ruolo:
Selezioniamo Federazion SAML 2.0, popolare la form come riportato di seguito:
Associamo al ruolo che stiamo creando le policy che desideriamo concedere:
Andiamo avanti fino all’ultima schermata dove possiamo definire il nome del ruolo e cliccare su Crea ruolo.
Anche in questo caso è necessario cliccare sul ruolo appena creato e copiare l’ARN che ci servirà in seguito.
Ora torniamo alla console admin di G Suite: https://admin.google.com/
Clicchiamo su Utenti e poi sull’utente che vogliamo abilitare:
Clicchiamo su Informazioni Utente:
Nella pagina che si apre, andiamo fino alla sezione AWS SAML:
Clicchiamo sul pulsante modifica e popoliamo la form nel seguente modo (possiamo copiare lo IAM_role da un altro utente, precedentemente creato, oppure prelevare i 2 valori ARN nel pannello AWS, come descritto nei punti precedenti di questa guida):
Abbiamo deciso di avere una sessione di massimo 3 ore, prima che venga richiesta la password nuovamente.
Abbiamo quasi terminato!
Ultimo passaggio da eseguire, torniamo alla home di G Suite: https://admin.google.com/
Clicchiamo su Applicazioni -> App SAML , clicchiamo su Billing AWS e su Modifica Servizio:
Infine clicchiamo su attiva per tutti e salva:
In questo esempio abbiamo una sola organizzazione su G Suite, quindi abilitiamo il servizio per tutti, ma è possibile anche configurarlo in modo granulare per singolo gruppo (billing, devops, backend, frontend, BU, etc…). Comunque anche se il servizio è visibile a tutti, se non si effettua l’abilitazione del singolo utente, non sarà possibile accedere al pannello AWS.
Ora se andiamo nella casella gmail dell’utente, precedentemente scelto, troveremo l’icona per accedere direttamente al pannello AWS, federando la nostra richiesta con SAML 2.0!
Dopo la configurazione del servizio, è necessario attendere qualche decina di minuti prima che il servizio sia visibile su gmail. Se non lo si vede dopo 10/20 minuti, provare ad effettuare prima un logout e poi un nuovo login da gmail.