Configurazione di ruoli e autorizzazioni IAM per Lambda@Edge - Amazon CloudFront

Configurazione di ruoli e autorizzazioni IAM per Lambda@Edge

Per configurare Lambda@Edge, devi disporre delle seguenti autorizzazioni e ruoli IAM per AWS Lambda:

Autorizzazioni IAM necessarie per associare le funzioni Lambda alle distribuzioni CloudFront

Oltre alle autorizzazioni IAM richieste per Lambda, sono necessarie le seguenti autorizzazioni per associare le funzioni Lambda alle distribuzioni CloudFront:

  • lambda:GetFunction: concede l’autorizzazione per ottenere informazioni di configurazione relative alla funzione Lambda e un URL pre-firmato per scaricare un file .zip contenente la funzione.

  • lambda:EnableReplication*: concede l’autorizzazione alla policy delle risorse in modo che il servizio di replica Lambda possa ottenere il codice e la configurazione della funzione.

  • lambda:DisableReplication*: concede l’autorizzazione alla policy delle risorse in modo che il servizio di replica Lambda possa eliminare la funzione.

    Importante

    È necessario aggiungere l’asterisco (*) alla fine delle azioni lambda:EnableReplication* e lambda:DisableReplication*.

  • Per la risorsa, specificare l’ARN della versione della funzione da eseguire quando si verifica un evento CloudFront, come nell’esempio seguente:

    arn:aws:lambda:us-east-1:123456789012:function:TestFunction:2

  • iam:CreateServiceLinkedRole: concede l’autorizzazione a creare un ruolo collegato al servizio utilizzato da Lambda@Edge per replicare le funzioni Lambda in CloudFront. Dopo aver configurato Lambda@Edge per la prima volta, il ruolo collegato al servizio viene creato automaticamente. Non è necessario aggiungere questa autorizzazione ad altre distribuzioni che utilizzano Lambda@Edge.

  • cloudfront:UpdateDistribution o cloudfront:CreateDistribution: concede l’autorizzazione per aggiornare o creare una distribuzione.

Per ulteriori informazioni, consulta i seguenti argomenti:

Ruolo di esecuzione della funzione per i principali del servizio

È necessario creare un ruolo IAM che può essere assunto dai principali servizi lambda.amazonaws.com e edgelambda.amazonaws.com quando eseguono la funzione.

Suggerimento

Quando crei la funzione nella console Lambda, puoi scegliere di creare un nuovo ruolo di esecuzione utilizzando un modello di policy AWS. Questa fase aggiunge automaticamente le autorizzazioni Lambda@Edge richieste per eseguire la funzione. Consulta Fase 5 del tutorial: creazione di una semplice funzione Lambda@Edge.

Per ulteriori informazioni sulla creazione manuale di un ruolo IAM, consulta Creazione di ruoli e collegamento di policy (console) nella Guida per l’utente IAM.

Esempio: policy di attendibilità del ruolo

Puoi aggiungere questo ruolo nella scheda Relazioni di attendibilità nella console IAM. Non aggiungere questa policy nella scheda Autorizzazioni.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "edgelambda.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

Per ulteriori informazioni sulle autorizzazioni da concedere al ruolo di esecuzione, consulta Autorizzazioni di accesso alle risorse Lambda nella Guida per gli sviluppatori di AWS Lambda.

Note
  • Per impostazione predefinita, ogni volta che un evento CloudFront attiva una funzione Lambda, i dati vengono scritti in CloudWatch Logs. Per utilizzare questi log, il ruolo di esecuzione deve disporre dell'autorizzazione a scrivere dati in CloudWatch Logs. Puoi utilizzare il ruolo AWSLambdaBasicExecutionRole predefinito per concedere l’autorizzazione al ruolo di esecuzione.

    Per ulteriori informazioni sui log CloudWatch, consulta Registri delle funzioni Edge.

  • Se il codice della funzione Lambda accede ad altre risorse AWS, ad esempio per la lettura di un oggetto da un bucket S3, il ruolo di esecuzione deve disporre dell’autorizzazione a eseguire tale azione.

Ruoli collegati ai servizi per Lambda@Edge

Lambda@Edge usa un ruolo collegato al servizio IAM. Un ruolo collegato ai servizi è un tipo univoco di ruolo IAM collegato direttamente a un servizio. I ruoli collegati ai servizi sono definiti automaticamente dal servizio stesso e includono tutte le autorizzazioni richieste dal servizio per eseguire chiamate agli altri servizi AWS per tuo conto.

Lambda@Edge usa i seguenti ruoli collegati al servizio IAM:

  • AWSServiceRoleForLambdaReplicator – Lambda@Edge utilizza questo ruolo per consentire a Lambda@Edge di replicare funzioni su Regioni AWS.

    Quando si aggiunge un trigger Lambda@Edge in CloudFront, viene automaticamente creato un ruolo denominato AWSServiceRoleForLambdaReplicator per permettere a Lambda@Edge di replicare le funzioni su Regioni AWS. Tale ruolo è obbligatorio per utilizzare le funzioni Lambda@Edge. L’aspetto dell’ARN per il ruolo AWSServiceRoleForLambdaReplicator è simile a quello dell’esempio seguente:

    arn:aws:iam::123456789012:role/aws-service-role/replicator.lambda.amazonaws.com/AWSServiceRoleForLambdaReplicator

  • AWSServiceRoleForCloudFrontLogger: CloudFront utilizza questo ruolo per eseguire il push dei file di log in CloudWatch. Puoi utilizzare i file di log per eseguire il debug degli errori di convalida di Lambda@Edge.

    Il ruolo AWSServiceRoleForCloudFrontLogger viene creato automaticamente quando si aggiunge l’associazione alla funzione Lambda@Edge per consentire a CloudFront di eseguire il push dei file di log di errore di Lambda@Edge in CloudWatch. L'ARN per il ruolo AWSServiceRoleForCloudFrontLogger avrà il seguente aspetto:

    arn:aws:iam::account_number:role/aws-service-role/logger.cloudfront.amazonaws.com/AWSServiceRoleForCloudFrontLogger

Un ruolo collegato ai servizi semplifica la configurazione e l'utilizzo di Lambda@Edge perché non dovrai più aggiungere manualmente le autorizzazioni necessarie. Lambda@Edge definisce le autorizzazioni dei relativi ruoli associati ai servizi e solo Lambda@Edge potrà assumere i propri ruoli. Le autorizzazioni definite includono policy di trust e di autorizzazioni. Le policy di autorizzazioni non possono essere attribuite a nessun'altra entità IAM.

È necessario rimuovere qualsiasi risorsa associata a CloudFront o a Lambda@Edge prima di eliminare il ruolo collegato ai servizi. Questo aiuta a proteggere le risorse Lambda@Edge in modo da non rimuovere un ruolo collegato al servizio che è ancora necessario per accedere alle risorse attive.

Per ulteriori informazioni sui ruoli collegati al servizio, consulta Ruoli collegati al servizio per CloudFront.

Autorizzazioni del ruolo collegato ai servizi per Lambda@Edge

Lambda@Edge usa due ruoli collegati ai servizi denominati AWSServiceRoleForLambdaReplicator e AWSServiceRoleForCloudFrontLogger. Nelle sezioni seguenti vengono descritte le autorizzazioni per ognuno di questi ruoli.

Autorizzazioni del ruolo collegato ai servizi per Lambda Replicator

Questo ruolo collegato al servizio consente a Lambda di replicare le funzioni Lambda@Edge su Regioni AWS.

Ai fini dell'assunzione del ruolo AWSServiceRoleForLambdaReplicator, il ruolo collegato ai servizi replicator---lambda.amazonaws.com.rproxy.govskope.caconsidera attendibile il servizio.

La policy delle autorizzazioni del ruolo consente a Lambda@Edge di eseguire le seguenti operazioni sulle risorse specificate:

  • lambda:CreateFunction su arn:aws:lambda:*:*:function:*

  • lambda:DeleteFunction su arn:aws:lambda:*:*:function:*

  • lambda:DisableReplication su arn:aws:lambda:*:*:function:*

  • iam:PassRole su all AWS resources

  • cloudfront:ListDistributionsByLambdaFunction su all AWS resources

Autorizzazioni del ruolo collegato ai servizi per CloudFront Logger

Questo ruolo collegato al servizio consente a CloudFront di eseguire il push dei file di log in CloudWatch, in modo da poter eseguire il debug degli errori di convalida di Lambda@Edge.

Ai fini dell'assunzione del ruolo AWSServiceRoleForCloudFrontLogger, il ruolo collegato ai servizi logger---cloudfront.amazonaws.com.rproxy.govskope.caconsidera attendibile il servizio.

La policy delle autorizzazioni del ruolo consente a Lambda@Edge di eseguire le seguenti azioni sulla risorsa arn:aws:logs:*:*:log-group:/aws/cloudfront/* specificata:

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

Per consentire a un'entità IAM (ad esempio un utente, un gruppo o un ruolo) di eliminare ruoli Lambda@Edge collegati ai servizi, devi configurare le autorizzazioni. Per ulteriori informazioni, consulta Autorizzazioni del ruolo collegato ai servizi nella Guida per l'utente di IAM.

Creazione di ruoli collegati ai servizi per Lambda@Edge

In genere non si creano manualmente i ruoli collegati ai servizi per Lambda@Edge. Il servizio crea i ruoli automaticamente nei seguenti casi:

  • Quando si crea un trigger per la prima volta, il servizio crea il ruolo AWSServiceRoleForLambdaReplicator (se non esiste già). Questo ruolo consente a Lambda di replicare le funzioni Lambda@Edge su Regioni AWS.

    Se lo elimini, il ruolo collegato ai servizi verrà creato nuovamente quando aggiungi un nuovo trigger per Lambda@Edge in una distribuzione.

  • Quando si aggiorna o si crea una distribuzione CloudFront associata a Lambda@Edge, il servizio crea il ruolo AWSServiceRoleForCloudFrontLogger (se non esiste già). Questo ruolo consente a CloudFront di eseguire il push dei file di log in CloudWatch.

    Se lo elimini, il ruolo collegato ai servizi verrà creato nuovamente quando aggiorni o crei una distribuzione CloudFront che ha un'associazione Lambda@Edge.

Per creare manualmente questi ruoli collegati al servizio, puoi eseguire i seguenti comandi AWS Command Line Interface (AWS CLI):

Per creare il ruolo AWSServiceRoleForLambdaReplicator
  • Esegui il comando seguente.

    aws iam create-service-linked-role --aws-service-name replicator.lambda.amazonaws.com
Per creare il ruolo AWSServiceRoleForCloudFrontLogger
  • Esegui il comando seguente.

    aws iam create-service-linked-role --aws-service-name logger.cloudfront.amazonaws.com

Modifica dei ruoli Lambda@Edge collegati ai servizi

Lambda@Edge non consente di modificare i ruoli collegati al servizio AWSServiceRoleForLambdaReplicator o AWSServiceRoleForCloudFrontLogger. Dopo che è stato creato un ruolo collegato al servizio, non puoi modificare il nome del ruolo perché varie entità possono farvi riferimento. Puoi tuttavia utilizzare IAM per modificare la descrizione del ruolo. Per ulteriori informazioni, consulta Modifica di un ruolo collegato ai servizi nella Guida per l'utente di IAM.

Regioni AWS supportate per ruoli collegati al servizio per Lambda@Edge

CloudFront supporta l'utilizzo di ruoli collegati ai servizi per Lambda@Edge nelle seguenti Regioni AWS:

  • Stati Uniti orientali (Virginia settentrionale) – us-east-1

  • Stati Uniti orientali (Ohio): | | ) – us-east-2

  • Stati Uniti occidentali (California settentrionale) – us-west-1

  • Stati Uniti occidentali (Oregon) – us-west-2

  • Asia Pacific (Mumbai) – ap-south-1

  • Asia Pacific (Seoul) – ap-northeast-2

  • Asia Pacifico (Singapore) – ap-southeast-1

  • Asia Pacifico (Sydney) – ap-southeast-2

  • Asia Pacifico (Tokyo) – ap-northeast-1

  • Europe (Frankfurt) – eu-central-1

  • Europa (Irlanda) – eu-west-1

  • Europe (London) – eu-west-2

  • Sud America (San Paolo) – sa-east-1