Come posso consentire alla mia funzione Lambda di accedere al mio bucket Amazon S3?

4 minuti di lettura
0

Voglio che la mia funzione AWS Lambda possa accedere al mio bucket Amazon Simple Storage Service (Amazon S3).

Breve descrizione

Per dare alla funzione Lambda l'accesso a un bucket Amazon S3 nello stesso account AWS, completa i seguenti passaggi:

  1. Crea un ruolo AWS Identity and Access Management (IAM) per la funzione Lambda che conceda anche l'accesso al bucket S3.
  2. Configura il ruolo IAM come ruolo di esecuzione della funzione Lambda.
  3. Verifica che la policy del bucket S3 non neghi esplicitamente l'accesso alla tua funzione Lambda o al suo ruolo di esecuzione.

Importante: se il bucket S3 e il ruolo IAM della funzione appartengono ad account diversi, concedi i permessi necessari anche nella policy del bucket S3. Per ulteriori informazioni, consulta Come posso fornire l'accesso multi-account agli oggetti presenti nei bucket Amazon S3?

Soluzione

Crea un ruolo IAM per la funzione Lambda che conceda anche l'accesso al bucket S3

Per creare un ruolo IAM per la funzione Lambda che conceda anche l'accesso al bucket S3, completa i seguenti passaggi:

  1. Crea un ruolo di esecuzione nella console IAM.

  2. Dall'elenco dei ruoli IAM, scegli il ruolo che hai creato.

  3. Affinché la policy di attendibilità consenta a Lambda di assumere il ruolo di esecuzione, aggiungi lambda.amazonaws.com come servizio attendibile. Scegli la scheda Relazioni di attendibilità, quindi scegli Modifica policy di attendibilità.

  4. Sostituisci le variabili nella policy con le seguenti variabili:

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

  6. Nella scheda Autorizzazioni, scegli Aggiungi policy inline.

  7. Scegli la scheda JSON.

  8. Inserisci una policy IAM basata sulle risorse che garantisca l'accesso al tuo bucket S3. Per ulteriori informazioni, consulta Using resource-based policies for Lambda. Il seguente esempio di policy IAM concede l'accesso a uno specifico bucket Amazon S3 con autorizzazioni Get. Per accedere agli oggetti nel bucket Amazon S3, specifica il percorso corretto o utilizza un carattere jolly ("*"). Per ulteriori informazioni, consulta Writing IAM Policies: how to grant access to an Amazon S3 bucket.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ExampleStmt",
          "Action": [
            "s3:GetObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::EXAMPLE-BUCKET/*"
          ]
        }
      ]
    }

    Nota: sostituisci "arn:aws:s3:::EXAMPLE-BUCKET" con l’ARN del tuo bucket S3. Se l'oggetto è crittografato con una chiave del servizio AWS di gestione delle chiavi (AWS KMS), devi fornire autorizzazioni aggiuntive. Per istruzioni, consulta Il mio bucket Amazon S3 dispone di una crittografia predefinita che utilizza una chiave AWS KMS personalizzata. Come posso consentire agli utenti di scaricare e caricare contenuti nel bucket?

  9. Scegli Verifica policy.

  10. In Nome, inserisci un nome per la policy.

  11. Scegli Crea policy.

Configura il ruolo IAM come ruolo di esecuzione delle funzioni Lambda

Per configurare il ruolo IAM come ruolo di esecuzione della funzione Lambda, completa i seguenti passaggi:

  1. Apri la console Lambda.
  2. Scegli la tua funzione Lambda.
  3. In Ruolo di esecuzione, in Ruolo esistente, seleziona il ruolo IAM che hai creato.
  4. Scegli Salva.

Verifica che la policy del bucket S3 non neghi esplicitamente l'accesso alla tua funzione Lambda o al suo ruolo di esecuzione

Per rivedere o modificare la policy del bucket S3, segui le istruzioni in Adding a bucket policy by using the Amazon S3 console.

La seguente policy IAM S3 di esempio concede a un ruolo di esecuzione Lambda l'accesso multi-account a un bucket S3:

{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::EXAMPLE-BUCKET/*"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
        ]
      }
    }
  ]
}

Nota: sostituisci "arn:aws:s3:::EXAMPLE-BUCKET" con l’ARMN del tuo bucket S3 e "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012" con l’ARN del tuo ruolo di esecuzione Lambda.

Informazioni correlate

Generatore di policy AWS

AWS UFFICIALE
AWS UFFICIALEAggiornata 9 mesi fa