AWS Lambda Function URLs: AWS IAM Auth Type

AWS Lambda Function URLs: AWS IAM Auth Type

Nel precedente articolo a tema AWS ti ho introdotto come creare una Lambda Function Urls impostando la voce Auth Type a None per rendere il tutto più semplice.

Dopo averlo pubblicato su Linkedin ho ricevuto questo commento in risposta:

vogliamo la demo con AWS_IAM authentication 😜

🔒 Ora vogliamo provare a “complicare” il tutto inserendo l’autenticazione ai nostri endpoints?

Prima di cominciare ci tengo a dirti che l’articolo ed il procedimento può sembrarti lungo in quanto ho cercato di dettagliare il più possibile inserendo moltissime immagini.

Quello che andremo a fare oggi consiste nel fornire un livello di sicurezza alla nostra AWS Lambda Function URLs. Non supportando le Authorization API Key come nell’API Gateway andremo a proteggerle in maniera diversa. Come? Ripartiamo dall’inizio e … leggi sotto!

Disclamer: quanto segue non è una bibbia di sicurezza informatica, ma solo la sequenza di step per raggiungere la soluzione dato il problema di partenza. L’applicazione dei passaggi nel vostro progetto è a vostro rischio/ pericolo.

IAM - Auth Type

Durante la fase di creazione della AWS Lambda URLs oggi dovrai concentrarti sulla sezione Auth Type e selezionare l’opzione AWS_IAM come indicato in figura

AWS Lambda URLs - Create Function Advanced Setting

Una volta conclusa la creazione della Lambda URL ti troverai davanti a questa schermata a conferma dell’operazione svolta.

AWS Lambda URLs - Setting - Auth Type

Se non sei convinto di quello che leggi, ti consigli di farti dire la verità da Postman (intanto aprilo in quanto ti servirà in seguito):

AWS Lambda URLs - Auth Type AWS IAM - Postman Failed

Ed ora? Come facciamo?

IAM - Users

Il primo passaggio da fare e’ quello di aprire un nuovo tab del browser ed andare nella sezione IAM del portale AWS. Una volta arrivato nella pagina in questione dovrai avviare la creazione di un nuovo utente:

AWS - IAM - Create User

In primo luogo, dovrai mettere i dettagli legati la nuova utenza. Di cosa si tratta? In questo caso dovrai solamente indicare il valore username. Per quanto riguarda invece la parte opzionale “Provide user access to the AWS Management Console - optional” non devi fare nulla.

AWS - IAM - Create User - Details

ed in seguito aggiungerlo ad un gruppo (nel mio caso ho un group dedicato allo sviluppo). Per farlo dovremmo selezionare:

  • Add user to group (Add user to an existing group, or create a new group. We recommend using groups to manage user permissions by job function.

tra le opzioni proposte.

AWS - IAM - Create User - Group

ed infine dovrai confermare il tutto nella fase di Review and Create

AWS - IAM - Create User - Review and Create

☕ Vado un attimo a prendermi un caffè, torno subito!

IAM User - Access Key

Dopo avere creato l’utenza con la quale vorrai invocare la AWS Lambda URL dovrai fornirle delle credenziali di accesso. Eccoti come fare passo dopo passo.

Aprendo il tab Security Credential dovrai scendere sino a quando non troverai la sezione:

  • Access Keys: Use access keys to send programmatic calls to AWS from the AWS CLI, AWS Tools for PowerShell, AWS SDKs, or direct AWS API calls. You can have a maximum of two access keys (active or inactive) at a time.

Per poi cliccare sul pulsante Create access key come indicato in immagine:

AWS - IAM - Create Access Key

Impostare la voce

  • Application running on an AWS compute service: You plan to use this access key to enable application code running on an AWS compute service like Amazon EC2, Amazon ECS, or AWS Lambda to access your AWS account.

come Uses Case per l’utilizzo specifico e confermate inserendo la spunta I understand the above recommendation and want to proceed to create an access key. prima di proseguire.

AWS - IAM - Create Access Key - Uses Case

Prima di arrivare alla review finale, ti ritroverai nella sezione “Set description tag - optional” dove potrai associare dei tag a piacere.

AWS - IAM - Create Access Key - Review

ed in questo caso ti consiglio caldamente di svolgere le seguenti operazione:

  • Salvare il valore di Access Key
  • Salvare il valore di Secret Access Key in quanto non avrai più modo di recuperarlo
  • Effettuare il download del CSV e salvarlo in un luogo sicuro

💡 Sapevi che questa Access Key può venire disattivate/ cancellata al bisogno?

Se per sbaglio stai pensando di potere finalmente usare la tua AWS Lambda URL ti devo smentire. Manca solo un ultimo passaggio e poi avrai carta bianca al divertimento.

☕ Nel mentre procedo con un altro caffè. Torno subito ;)

IAM - Users - Inline Policy

Ora -come ultimo passaggio- bisogna assegnare all’utente appena creato la Policy per potere utilizzare la nostra AWS Lambda. Come?

Tornando nel tab delle Permission dovrai selezionare la voce Add Permissions > Create Inline Policy

AWS - IAM -  Inline Policy - Create

Ora non dovremmo fare altro che selezionare il servizio Lambda e cercare nelle Action allowed il termine InvokeFunction per poi selezionare le seguenti due voci:

  • InvokeFunction
  • InvokeFunctionUrl

AWS - IAM -  Inline Policy - Permission

ed infine associare l’utenza/ permission alla AWS Lambda URL creata all’inizio e per farlo ci servirà l’ARN che troverete nella pagina della Lambda.

AWS - IAM -  Inline Policy - Permission ARN

Salvate il tutto e reggiti forte!

Postman - Result 200

Ora puoi tornare ad aprire tranquillamente Postman per effettuare la chiamata alla tua AWS Lambda URL. Prima di farlo, ti consiglio di leggere come configurare il tutto altrimenti avrai ancora un 403 in risposta.

Cosa dovrai fare?

  • Aprire l’area relativa alle Authorization
  • Impostare AWS Signature come Auth Type
  • Inserire Access Key & Secret Key copiati in precedenza (o recuperarle dal CSV)
  • Riportare nella voce AWS Region la region dove e’ stata creata la lambda
  • Inserire lambda nella voce Service Name

🥁 Rullo di tamburi … premendo Send dovrebbe tornarti un bellissimo 200!

AWS Lambda URLs - Auth Type AWS IAM - Postman 200

Attenzione: Potresti ricevere ancora un 403 per qualche minuti. Lascia il tempo ai permessi di propagarsi e/o postman di accorgersi che qualcosa è cambiato.

🍕 Secondo te non mi merito una pizza per via di questo contenuto?