Utilizzo della funzione di origine ARN per controllare il comportamento di accesso alla funzione - 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 della funzione di origine ARN per controllare il comportamento di accesso alla funzione

È normale che il codice della funzione Lambda effettui richieste API ad altri AWS servizi. 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 la funzione di origine ARN nel contesto delle credenziali se la richiesta è una richiesta AWS API proveniente 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
CloudWatch Registri CreateLogGroup, CreateLogStream, PutLogEvents

Per archiviare i log in un gruppo di CloudWatch log 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)

Le altre chiamate AWS API che Lambda effettua al di fuori dell'ambiente di esecuzione per tuo conto utilizzando lo stesso ruolo di esecuzione non contengono la funzione di origine ARN. Esempi di tali chiamate API al di fuori dell'ambiente di esecuzione includono:

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, utilizza la chiave di lambda:SourceFunctionArn condizione in una policy basata sull'identità IAM o in una policy di controllo dei servizi (SCP).

Nota

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

Con questa chiave di condizione nelle policy basate sull'identità o negli SCP, puoi implementare controlli di sicurezza per le azioni API che il tuo codice funzionale 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 aws:SourceArn condizione si applica solo alle politiche in cui la funzione Lambda è la risorsa di destinazione e aiuta a definire quali altri AWS servizi e risorse possono richiamare quella funzione. La chiave di lambda:SourceFunctionArn condizione può essere applicata a qualsiasi policy o SCP basata sull'identità per definire le funzioni Lambda specifiche che dispongono delle autorizzazioni per effettuare chiamate API specifiche ad altre risorse. AWS

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
{ "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.

È possibile utilizzarla anche in SCP. lambda:SourceFunctionArn 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
{ "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.