Utilizzo dell'ARN della funzione di origine per controllare il comportamento di accesso alla funzione - AWS Lambda

Utilizzo dell'ARN della funzione di origine per controllare il comportamento di accesso alla funzione

È normale che il codice della funzione Lambda effettui richieste API ad altri Servizi AWS. Per effettuare queste richieste, Lambda genera un insieme effimero di credenziali assumendo il ruolo di esecuzione della tua funzione. Queste credenziali sono disponibili come variabili d'ambiente durante l'invocazione della funzione. Quando si lavora con gli SDK AWS, non è necessario fornire le credenziali per l'SDK direttamente nel codice. Per impostazione predefinita, la catena di fornitori di credenziali controlla in sequenza ogni punto in cui è possibile impostare le credenziali e seleziona la prima disponibile, in genere le variabili d'ambiente (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY e AWS_SESSION_TOKEN).

Lambda inserisce l'ARN della funzione di origine nel contesto delle credenziali solo se la richiesta è una richiesta API AWS che proviene dall'ambiente di esecuzione. Lambda inserisce anche l'ARN della funzione di origine per le seguenti richieste API AWS che Lambda effettua per tuo conto al di fuori dell'ambiente di esecuzione:

Servizio Azione Motivo
File di log CloudWatch CreateLogGroup, CreateLogStream, PutLogEvents

Archiviazione dei log in un gruppo di log di CloudWatch Logs

X-Ray PutTraceSegments

Invio dei dati di traccia a X-Ray

Amazon EFS ClientMount

Connessione di una funzione a un file system Amazon Elastic File System (Amazon EFS)

Altre chiamate API AWS effettuate da Lambda al di fuori del tuo ambiente di esecuzione per tuo conto utilizzando lo stesso ruolo di esecuzione non contengono l'ARN della funzione di origine. Esempi di tali chiamate API al di fuori dell'ambiente di esecuzione includono:

  • Chiamate a AWS Key Management Service (AWS KMS) per crittografare e decrittografare automaticamente le variabili d'ambiente.

  • Chiamate Amazon Elastic Compute Cloud (Amazon EC2) per creare interfacce di rete elastiche (ENI) per una funzione che supporta il VPC.

  • Chiamate a Servizi AWS, come Amazon Simple Queue Service (Amazon SQS), per leggere da un'origine eventi configurata come strumento di mappatura dell'origine degli eventi.

Con l'ARN della funzione di origine nel contesto delle credenziali puoi verificare se una chiamata alla tua risorsa proviene dal codice di una funzione Lambda specifica. Per verificarlo, usa la chiave di condizione lambda:SourceFunctionArn in una policy basata sulle identità IAM o una policy di controllo dei servizi (SCP).

Nota

Non puoi utilizzare la chiave di condizione lambda:SourceFunctionArn nelle policy basate sulle risorse.

Utilizzando questa chiave di condizione nelle policy basate sulle identità o nelle SCP, puoi implementare controlli di sicurezza per le operazioni API che il codice funzione esegue su altri Servizi AWS. Questo ha alcune funzioni di sicurezza chiave, come aiutarti a identificare l'origine di una perdita di credenziali.

Nota

La chiave di condizione lambda:SourceFunctionArn è diversa dalle chiavi di condizione lambda:FunctionArn e aws:SourceArn. La chiave di condizione lambda:FunctionArn si applica solo a mappature di origine eventi e aiuta a definire quali funzioni può richiamare l'origine eventi. La chiave di condizione aws:SourceArn si applica solo alle policy in cui la funzione Lambda è la risorsa di destinazione e aiuta a definire quali altri Servizi AWS e risorse possono invocare tale funzione. La chiave di condizione lambda:SourceFunctionArn può essere applicata a qualsiasi policy basata sulle identità o SCP per definire le funzioni Lambda specifiche che dispongono delle autorizzazioni per effettuare determinate chiamate API AWS ad altre risorse.

Per utilizzare lambda:SourceFunctionArn nella tua policy, includila come condizione con uno qualsiasi degli operatori di condizione ARN. Il valore della chiave deve essere un ARN valido.

Ad esempio, supponiamo che il codice della funzione Lambda effettui una chiamata s3:PutObject che si rivolge a un determinato bucket Amazon S3. Potresti volere che solo una funzione Lambda specifica abbia accesso s3:PutObject a quel bucket. In questo caso, il ruolo di esecuzione della funzione deve avere una policy collegata simile alla seguente:

Esempio policy che concede l'accesso a una funzione Lambda specifica a una risorsa Amazon S3
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ExampleSourceFunctionArn", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::lambda_bucket/*", "Condition": { "ArnEquals": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

Questa policy consente l'accesso s3:PutObject solo se l'origine è la funzione Lambda con ARN arn:aws:lambda:us-east-1:123456789012:function:source_lambda. La policy non consente l'accesso s3:PutObject ad alcun'altra identità chiamante. Ciò è vero anche se una funzione o entità diversa effettua una chiamata s3:PutObject con lo stesso ruolo di esecuzione.

Nota

La chiave di condizione lambda:SourceFunctionARN non supporta gli alias delle funzioni o le versioni delle funzioni Lambda. Se utilizzi l'ARN per una particolare versione o alias di una funzione, la tua funzione non avrà l'autorizzazione per eseguire l'azione specificata. Assicurarsi di utilizzare l'ARN non completo per la funzione senza un suffisso di versione o alias.

È inoltre possibile utilizzare lambda:SourceFunctionArn nelle SCP. Ad esempio, supponiamo di voler limitare l'accesso al bucket al codice di una singola funzione Lambda o a chiamate da un cloud privato virtuale (VPC) Amazon specifico. L'SCP seguente illustra questo scenario.

Esempio politica che nega l'accesso ad Amazon S3 in condizioni specifiche
JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::lambda_bucket/*", "Effect": "Deny", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": [ "vpc-12345678" ] } } }, { "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::lambda_bucket/*", "Effect": "Deny", "Condition": { "ArnNotEqualsIfExists": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

Questa policy nega tutte le azioni S3 a meno che non provengano da una specifica funzione Lambda con ARN arn:aws:lambda:*:123456789012:function:source_lambda o a meno che non provengano dal VPC specificato. L'operatore StringNotEqualsIfExists dice a IAM di elaborare questa condizione solo se la chiave aws:SourceVpc è presente nella richiesta. Allo stesso modo, IAM considera l'operatore ArnNotEqualsIfExists solo se esiste lambda:SourceFunctionArn.