Utilisation de l'ARN de la fonction source pour contrôler le comportement d'accès aux fonctions - 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.

Utilisation de l'ARN de la fonction source pour contrôler le comportement d'accès aux fonctions

Il est courant que le code de votre fonction Lambda envoie des requêtes d'API à d'autres AWS services. Pour effectuer ces requêtes, Lambda génère un ensemble éphémère d'informations d'identification en assumant le rôle d'exécution de votre fonction. Ces informations d'identification sont disponibles en tant que variables d'environnement lors de l'appel de votre fonction. Lorsque vous travaillez avec des kits SDK AWS , vous n'avez pas besoin de fournir des informations d'identification pour le kit SDK directement dans le code. Par défaut, la chaîne de fournisseurs d'informations d'identification vérifie séquentiellement chaque endroit où vous pouvez définir des informations d'identification et sélectionne le premier disponible, généralement les variables d'environnement (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY et AWS_SESSION_TOKEN).

Lambda injecte l'ARN de la fonction source dans le contexte des informations d'identification si la demande est une demande d' AWS API provenant de votre environnement d'exécution. Lambda injecte également l'ARN de la fonction source pour les demandes d'API AWS suivantes que Lambda effectue en votre nom en dehors de votre environnement d'exécution :

Service Action Raison
CloudWatch Journaux CreateLogGroup, CreateLogStream, PutLogEvents

Pour stocker les journaux dans un groupe de CloudWatch journaux

X-Ray PutTraceSegments

Pour envoyer des données de traçage à X-Ray

Amazon EFS ClientMount

Pour connecter votre fonction à un système de fichiers Amazon Elastic File System (Amazon EFS)

Les autres appels d' AWS API que Lambda effectue en dehors de votre environnement d'exécution en votre nom en utilisant le même rôle d'exécution ne contiennent pas l'ARN de la fonction source. Voici des exemples de tels appels d'API en dehors de l'environnement d'exécution :

  • Appelle to AWS Key Management Service (AWS KMS) pour chiffrer et déchiffrer automatiquement vos variables d'environnement.

  • Les appels à Amazon Elastic Compute Cloud (Amazon EC2) pour créer des interfaces réseau Elastic (ENI) pour une fonction compatible VPC.

  • Appels à AWS des services, tels qu'Amazon Simple Queue Service (Amazon SQS), pour lire à partir d'une source d'événements configurée comme mappage de sources d'événements.

Avec l'ARN de la fonction source dans le contexte des informations d'identification, vous pouvez vérifier si un appel à votre ressource provient du code d'une fonction Lambda spécifique. Pour vérifier cela, utilisez la clé de lambda:SourceFunctionArn condition dans une politique basée sur l'identité IAM ou une politique de contrôle des services (SCP).

Note

Vous ne pouvez pas utiliser l'élément lambda:SourceFunctionArn dans les politiques basées sur les ressources.

Avec cette clé de condition dans vos politiques basées sur l'identité ou SCP, vous pouvez implémenter des contrôles de sécurité pour les actions d'API que votre code de fonction effectue sur d'autres services. AWS Cela comporte quelques applications de sécurité clés, telles que l'identification de la source d'une fuite d'informations d'identification.

Note

La clé de condition lambda:SourceFunctionArn est différente des clés de condition lambda:FunctionArn et aws:SourceArn. Le clé de condition lambda:FunctionArn s'applique uniquement aux Mappages de sources d'événement et aide à définir les fonctions que votre source d'événement peut invoquer. La clé de aws:SourceArn condition s'applique uniquement aux politiques dans lesquelles votre fonction Lambda est la ressource cible et permet de définir quels autres AWS services et ressources peuvent invoquer cette fonction. La clé de lambda:SourceFunctionArn condition peut s'appliquer à n'importe quelle politique basée sur l'identité ou à tout SCP afin de définir les fonctions Lambda spécifiques autorisées à effectuer des appels d' AWS API spécifiques vers d'autres ressources.

Pour utiliser lambda:SourceFunctionArn dans votre stratégie, incluez-la en tant que condition dans l'un des Opérateurs de condition ARN. La valeur de la clé doit être un ARN valide.

Par exemple, supposons que votre code de fonction Lambda émette un appel s3:PutObject qui cible un compartiment Amazon S3 spécifique. Vous pouvez vouloir n'autoriser qu'une fonction Lambda spécifique à avoir un accès s3:PutObject à ce compartiment. Dans ce cas, le rôle d'exécution de votre fonction doit être associé à une stratégie qui ressemble à ceci :

Exemple stratégie accordant à une fonction Lambda spécifique l'accès à une ressource 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" } } } ] }

Cette politique permet uniquement un accès s3:PutObject si la source est la fonction Lambda avec ARN arn:aws:lambda:us-east-1:123456789012:function:source_lambda. Cette politique n'autorise pas un accès s3:PutObject à une autre identité d'appel. C'est le cas même si une fonction ou une entité différente émet un appel s3:PutObject avec le même rôle d'exécution.

Note

La clé de condition lambda:SourceFunctionARN ne prend pas en charge les versions des fonctions Lambda ni les alias de fonction. Si vous utilisez l'ARN pour une version ou un alias de fonction en particulier, votre fonction n'est pas autorisée à effectuer l'action que vous spécifiez. Veillez à utiliser l'ARN non qualifié pour votre fonction sans suffixe de version ou d'alias.

Vous pouvez également l'utiliser lambda:SourceFunctionArn dans les SCP. Supposons, par exemple, que vous souhaitiez limiter l'accès à votre compartiment à un code de fonction Lambda unique ou à des appels issus d'un cloud privé virtuel (VPC) Amazon. Le SCP suivant illustre ce processus.

Exemple politique refusant l'accès à Amazon S3 dans des conditions spécifiques
{ "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" } } } ] }

Cette stratégie refuse toutes les actions S3 sauf si elles proviennent d'une fonction Lambda spécifique avec ARN arn:aws:lambda:*:123456789012:function:source_lambda, ou à moins qu'ils ne proviennent du VPC spécifié. L’opérateur StringNotEqualsIfExists indique à IAM de traiter cette condition uniquement si la clé aws:SourceVpc est présente dans la demande. De la même façon, IAM considère l’opérateur ArnNotEqualsIfExists uniquement si le lambda:SourceFunctionArn existe.