View a markdown version of this page

Autoriser l'accès à la fonction Lambda à Services AWS - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Autoriser l'accès à la fonction Lambda à Services AWS

Lorsque vous utilisez un AWS service pour invoquer votre fonction, vous accordez l'autorisation dans une instruction relative à une politique basée sur les ressources. Vous pouvez appliquer la déclaration à l’ensemble de la fonction, ou limiter la déclaration à une seule version ou un seul alias.

Note

Lorsque vous ajoutez un déclencheur à la fonction à l’aide de la console Lambda, celle-ci met à jour la stratégie basée sur une ressource de la fonction afin d’autoriser le service à l’invoquer. Pour accorder des autorisations à d’autres comptes ou services non disponibles dans la console Lambda, vous pouvez utiliser l’ AWS CLI.

Nous vous recommandons put-resource-policy de l'utiliser pour définir une politique JSON complète. Avecput-resource-policy, vous pouvez ajouter des instructions de refus, utiliser la gamme complète des clés de condition IAM et gérer toutes les autorisations dans un seul document. Vous pouvez également add-permission ajouter des instructions individuelles pour des cas d'utilisation simples.

Important

L'utilisation put-resource-policy remplace toute politique basée sur les ressources existante sur la ressource. Si la ressource possède déjà des autorisations définies paradd-permission, les put-resource-policy remplace. get-resource-policyUtilisez-le pour récupérer la politique existante avant d'apporter des modifications.

Utiliser une politique JSON complète (recommandé)

L'exemple de politique suivant autorise Amazon Simple Notification Service à invoquer une fonction nomméemy-function, mais uniquement pour un sujet spécifique. Il refuse également les invocations relatives à un sujet particulier.

{ "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" } } } ] }

Enregistrez la politique dans un fichier nommé policy.json et appliquez-la avec put-resource-policy :

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

Pour Amazon S3, la source est un compartiment dont l'ARN n'inclut pas d'identifiant de compte. Il est possible que vous supprimiez un compartiment et qu'un autre compte crée un compartiment portant le même nom. Utilisez la touche de aws:SourceAccount condition pour vous assurer que seules les ressources de votre compte peuvent invoquer la fonction :

{ "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" } } } ] }

Utilisation de l'autorisation d'ajout

Pour des cas d'utilisation simples, vous pouvez add-permission ajouter des instructions individuelles. La commande suivante autorise Amazon Simple Notification Service à invoquer une fonction nommée my-function :

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

Vous devriez voir la sortie suivante :

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

Si vous appelez add-permission afterput-resource-policy, la nouvelle instruction s'ajoute à la politique JSON existante.

Pour limiter les appels à une ressource spécifique, utilisez l'source-arnoption suivante :

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

Pour Amazon S3, utilisez l'source-accountoption avec votre identifiant de compte :

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