View a markdown version of this page

Accorder l'accès à la fonction événementielle 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.

Accorder l'accès à la fonction événementielle Services AWS

Lorsque vous utilisez un AWS service pour appeler votre fonction, vous accordez l'autorisation dans une déclaration 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. Vous pouvez ainsi ajouter des déclarations de refus, utiliser la gamme complète des clés de condition IAM et gérer toutes les autorisations dans un seul document. put-resource-policy 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 avecadd-permission, les put-resource-policy remplace. get-resource-policyÀ utiliser pour récupérer la politique existante avant d'apporter des modifications.

Utiliser une politique JSON complète (recommandé)

L'exemple de politique suivant accorde à Amazon Simple Notification Service l'autorisation d'appeler une fonction nomméemy-function, mais uniquement pour un sujet spécifique. Il refuse également les invocations liées à 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'ID de compte. Il est possible que vous supprimiez un bucket et qu'un autre compte crée un bucket portant le même nom. Utilisez la clé 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 les cas d'utilisation simples, vous pouvez add-permission ajouter des instructions individuelles. La commande suivante autorise Amazon Simple Notification Service à appeler 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 aprèsput-resource-policy, la nouvelle instruction s'ajoute à la politique JSON existante.

Pour limiter les invocations à 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