View a markdown version of this page

Concessione dell'accesso alla funzione Lambda a Servizi AWS - 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à.

Concessione dell'accesso alla funzione Lambda a Servizi AWS

Quando utilizzi un AWS servizio per richiamare la tua funzione, concedi l'autorizzazione in una dichiarazione su una politica basata sulle risorse. È possibile applicare l'istruzione all'intera funzione oppure limitare l'istruzione a una singola versione o alias.

Nota

Quando si aggiunge un trigger a una funzione con la console Lambda, la console aggiorna la policy basata sulle risorse della funzione per consentire al servizio di invocarla. Per concedere le autorizzazioni ad altri account o servizi che non sono disponibili nella console Lambda, puoi utilizzare l'interfaccia a riga di comando di AWS CLI.

Si consiglia di put-resource-policy utilizzarlo per definire una policy JSON completa. Conput-resource-policy, puoi aggiungere dichiarazioni di rifiuto, utilizzare l'intera gamma di chiavi di condizione IAM e gestire tutte le autorizzazioni in un unico documento. Puoi anche utilizzare add-permission per aggiungere singole dichiarazioni per semplici casi d'uso.

Importante

L'utilizzo put-resource-policy sostituisce qualsiasi politica basata sulle risorse esistente sulla risorsa. Se la risorsa dispone già delle autorizzazioni definite con, le sovrascrive. add-permission put-resource-policy get-resource-policyDa utilizzare per recuperare la policy esistente prima di apportare modifiche.

Utilizzo di una policy JSON completa (consigliata)

La seguente politica di esempio concede ad Amazon Simple Notification Service l'autorizzazione a richiamare una funzione denominatamy-function, ma solo per un argomento specifico. Inoltre, nega le invocazioni da un argomento particolare.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-sns-my-topic", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:my-topic" } } }, { "Sid": "deny-sns-other-topic", "Effect": "Deny", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:123456789012:function:my-function", "arn:aws:lambda:us-east-2:123456789012:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:restricted-topic" } } } ] }

Salva la policy in un file denominato policy.json e applicala con: put-resource-policy

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json

Per Amazon S3, l'origine è un bucket il cui ARN non include un ID di account. È possibile che tu possa eliminare un bucket e che un altro account possa creare un bucket con lo stesso nome. Usa la chiave aws:SourceAccount condizionale per assicurarti che solo le risorse del tuo account possano richiamare la funzione:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-s3", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::my-bucket" } } } ] }

Utilizzo di add-permission

Per casi d'uso semplici, è possibile utilizzare add-permission per aggiungere singole dichiarazioni. Il comando seguente concede ad Amazon Simple Notification Service il permesso di richiamare una funzione denominata: my-function

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns \ --principal sns.amazonaws.com \ --output text

Verrà visualizzato l’output seguente:

{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}
Nota

Se chiami add-permission dopoput-resource-policy, la nuova dichiarazione viene aggiunta alla policy JSON esistente.

Per limitare le invocazioni a una risorsa specifica, usa l'opzione: source-arn

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns-my-topic \ --principal sns.amazonaws.com \ --source-arn arn:aws:sns:us-east-2:123456789012:my-topic

Per Amazon S3, utilizza l'source-accountopzione con l'ID del tuo account:

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id s3-account \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::amzn-s3-demo-bucket \ --source-account 123456789012