Utilizzo del controllo degli accessi basato sugli attributi in Lambda - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo del controllo degli accessi basato sugli attributi in Lambda

Con il controllo degli accessi basato su attributi (ABAC), puoi usare i tag per controllare l'accesso alle funzioni Lambda. Puoi allegare tag a una funzione Lambda, passarli in determinate richieste API o collegarli al principale AWS Identity and Access Management (IAM) che effettua la richiesta. Per ulteriori informazioni su come AWS concedere l'accesso basato sugli attributi, consulta Controlling access to AWS resources using tags nella IAM User Guide.

Puoi utilizzare ABAC per concedere il privilegio minimo senza specificare un nome della risorsa Amazon (ARN) o uno schema ARN nella policy IAM. Per controllare gli accessi puoi invece specificare un tag nell'elemento di condizione di una policy IAM. Il dimensionamento è più facile con ABAC perché non è necessario aggiornare le policy IAM quando si creano nuove funzioni. Invece, per controllare l'accesso aggiungi tag alle nuove funzioni.

In Lambda, i tag funzionano a livello di funzione. I tag non sono supportati per livelli, configurazioni di firma del codice o mappature di origini eventi. Quando aggiungi un tag a una funzione, tali tag si applicano a tutte le versioni e agli alias associati alla funzione. Per ulteriori informazioni su come aggiungere un tag alle funzioni, consulta Uso dei tag sulle funzioni Lambda.

Puoi utilizzare le seguenti chiavi di condizione per controllare le operazioni delle funzioni:

Per l'elenco completo delle operazioni Lambda a supporto di ABAC, consulta Azioni funzionali supportate e controlla la colonna Condition (Condizione) nella tabella.

La seguente procedura mostra un modo per impostare le autorizzazioni tramite ABAC. In questo scenario di esempio, creerai quattro policy di autorizzazione IAM. Quindi, collegherai queste policy a un nuovo ruolo IAM. Infine, creerai un utente IAM e gli assegnerai l'autorizzazione per assumere il nuovo ruolo.

Prerequisiti

Assicurati di avere un ruolo di esecuzione Lambda. Userai questo ruolo quando concedi le autorizzazioni IAM e crei una funzione Lambda.

Fase 1: richiesta di tag sulle nuove funzioni

Quando utilizzi ABAC con Lambda, è consigliabile richiedere che tutte le funzioni abbiano i tag. Questo aiuta a garantire che le policy di autorizzazione ABAC funzionino come previsto.

Crea una policy IAM simile a quella del seguente esempio. Questa policy utilizza le chiavi aws: RequestTag /tag-key, aws: ResourceTag /tag-key e aws: TagKeys condition per richiedere che le nuove funzioni e il principale IAM che crea le funzioni abbiano entrambi il tag. project Il modificatore ForAllValues assicura che project sia l'unico tag consentito. Se non includi il modificatore ForAllValues, gli utenti potranno aggiungere altri tag alla funzione purché passino anche loro project.

Esempio : richiesta di tag sulle nuove funzioni
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:TagResource" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:RequestTag/project": "${aws:PrincipalTag/project}", "aws:ResourceTag/project": "${aws:PrincipalTag/project}" }, "ForAllValues:StringEquals": { "aws:TagKeys": "project" } } } }

Fase 2: Consentire azioni basate su tag collegati a una funzione Lambda e al principale IAM

Crea una seconda policy IAM utilizzando la chiave di condizione aws: ResourceTag /tag-key per richiedere che il tag del principale corrisponda al tag associato alla funzione. La seguente policy di esempio consente ai principali con tag project di richiamare le funzioni con il tag project. Se una funzione ha altri tag, l'azione è negata.

Esempio : Richiesta di tag corrispondenti sulla funzione e sul principale IAM
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" } } } ] }

Fase 3: Concessione delle autorizzazioni di elenco

Crea una policy che consenta al principale di elencare le funzioni Lambda e i ruoli IAM. Ciò consente al principale di vedere tutte le funzioni Lambda e i ruoli IAM sulla console e quando si chiamano le operazioni API.

Esempio : Concessione delle autorizzazioni di elenco per Lambda e IAM
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllResourcesLambdaNoTags", "Effect": "Allow", "Action": [ "lambda:GetAccountSettings", "lambda:ListFunctions", "iam:ListRoles" ], "Resource": "*" } ] }

Fase 4: Concessione delle autorizzazioni IAM

Crea una policy che consenta iam:. PassRole Questa autorizzazione è necessaria quando si assegna un ruolo di esecuzione a una funzione. Nella seguente policy di esempio, sostituisci l'ARN di esempio con l'ARN del tuo ruolo di esecuzione Lambda.

Nota

Non utilizzare la chiave di condizione ResourceTag in una policy con l'operazione iam:PassRole. Non puoi utilizzare il tag su un ruolo IAM per controllare l'accesso a chi può passare tale ruolo. Per ulteriori informazioni sulle autorizzazioni necessarie per passare un ruolo a un servizio, vedere Concessione a un utente delle autorizzazioni per passare un ruolo a un servizio. AWS

Esempio : Concessione dell'autorizzazione per inviare il ruolo di esecuzione
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::111122223333:role/lambda-ex" } ] }

Fase 5: Creazione del ruolo IAM

Una best practice consiste nell'utilizzare i ruoli per delegare le autorizzazioni. Crea un ruolo IAM chiamato abac-project-role:

  • In Fase 1: Selezione dell'entità attendibile, scegli Account AWS , quindi Questo account.

  • In Fase 2: Aggiunta delle autorizzazioni, collega le quattro policy IAM create nei passaggi precedenti.

  • In Fase 3: Assegnazione di un nome, revisione e creazione, scegli Add tag (Aggiungi tag). In Chiave, inserire project. Non immettere un valore.

Fase 6: Creazione dell'utente IAM

Crea un utente IAM chiamato abac-test-user. Nella sezione Set permissions (Imposta autorizzazioni), seleziona Attach existing policies directly (Collega direttamente le policy esistenti), quindi Create policy (Crea policy). Immetti la seguente definizione di policy. Sostituisci 111122223333 con il tuo ID account AWS. Questa policy consente a abac-test-user di assumere il ruolo abac-project-role.

Esempio : Consentire all'utente IAM di assumere il ruolo ABAC
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/abac-project-role" } }

Fase 7: Test delle autorizzazioni

  1. Accedi alla console come. AWS abac-test-user Per ulteriori informazioni, consulta Accesso come utente IAM.

  2. Passare al ruolo abac-project-role. Per ulteriori informazioni, consulta Cambio di un ruolo (console).

  3. Crea una funzione Lambda:

    • In Permissions (Autorizzazioni), scegli Change default execution role (Modifica ruolo di esecuzione predefinito), quindi per Execution role (Ruolo di esecuzione), scegli Use an existing role (Utilizza un ruolo esistente). Scegli lo stesso ruolo di esecuzione che hai usato in Fase 4: Concessione delle autorizzazioni IAM.

    • In Advanced settings (Impostazioni avanzate), seleziona Enable tags (Abilita tag) quindi scegli Add new tag (Aggiungi nuovo tag). In Chiave, inserire project. Non immettere un valore.

  4. Esegui il test della funzione.

  5. Crea una seconda funzione Lambda e aggiungi un tag diverso, ad esempio environment. Questa operazione dovrebbe non riuscire perché la policy ABAC creata in Fase 1: richiesta di tag sulle nuove funzioni consente al principale di creare solo funzioni con tag project.

  6. Crea una terza funzione senza tag. Questa operazione dovrebbe non riuscire perché la policy ABAC creata in Fase 1: richiesta di tag sulle nuove funzioni non consente al principale di creare funzioni senza tag.

Questa strategia di autorizzazione consente di controllare l'accesso senza creare nuove policy per ogni nuovo utente. Per concedere l'accesso a nuovi utenti, è sufficiente concedere loro l'autorizzazione per assumere il ruolo che corrisponde al progetto assegnato.

Passaggio 8: Pulisci le tue risorse

Per eliminare il ruolo IAM
  1. Aprire la pagina Ruoli della console IAM.

  2. Seleziona il ruolo che hai creato nel passaggio 5.

  3. Scegli Elimina.

  4. Per confermare l'eliminazione, inserisci il nome del ruolo nel campo di immissione del testo.

  5. Scegli Elimina.

Per eliminare l'utente IAM
  1. Apri la pagina Utenti della console IAM.

  2. Seleziona l'utente IAM che hai creato nel passaggio 6.

  3. Scegli Elimina.

  4. Per confermare l'eliminazione, inserisci il nome utente nel campo di immissione del testo.

  5. Scegli Elimina utente.

Per eliminare la funzione Lambda
  1. Aprire la pagina Functions (Funzioni) della console Lambda.

  2. Selezionare la funzione creata.

  3. Scegliere Operazioni, Elimina.

  4. Digita delete nel campo di immissione testo e scegli Delete (Elimina).