View a markdown version of this page

Utilisation de politiques basées sur les ressources dans Lambda - 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 politiques basées sur les ressources dans Lambda

Grâce aux politiques d'autorisations basées sur les ressources, vous pouvez accorder à d'autres utilisateurs Comptes AWS, à des organisations et à Services AWS accéder à vos fonctions Lambda. Une politique basée sur les ressources est un document JSON qui contient une ou plusieurs instructions. Chaque déclaration définit les éléments suivants :

  • Principal: L'entité à laquelle vous souhaitez accorder des autorisations (une autre Service AWS, un rôle ou un utilisateur IAM, ou autre Compte AWS)

  • Action: une liste des actions d'API que vous souhaitez autoriser ou refuser pour le principal spécifié

  • Effect: si vous souhaitez autoriser ou refuser au principal la possibilité d'utiliser les actions d'API choisies

  • Resource: fonction, version ou alias Lambda à laquelle vous souhaitez que l'instruction s'applique (vous pouvez également utiliser un caractère générique pour spécifier toutes les versions et tous les alias de votre fonction)

Vous pouvez également utiliser des éléments facultatifs tels que Sid (un identifiant de déclaration) et Condition (des conditions logiques pour un contrôle d'accès précis). Pour obtenir la liste complète des éléments de stratégie pris en charge, reportez-vous à la référence des éléments de stratégie JSON IAM dans le Guide de l'Gestion des identités et des accès AWS utilisateur.

Ajouter des autorisations basées sur les ressources à une fonction Lambda

Vous pouvez ajouter des autorisations basées sur les ressources à votre fonction Lambda à l'aide de deux méthodes :

  • Politique JSON complète  : utilisez la console Lambda ou l'action d'PutResourcePolicyAPI pour ajouter un document de stratégie JSON complet. AWS CLI Avec une politique JSON complète, vous pouvez utiliser la gamme complète de clés de condition globales IAM, ajouter plusieurs instructions avec plusieurs principes et créer des instructions explicitesDeny. La taille maximale d'une politique basée sur les ressources JSON est de 20 Ko.

  • Autorisations individuelles  : utilisez la console ou l'action de l'AddPermissionAPI pour ajouter Allow des instructions uniques. Les autorisations individuelles ne prennent en charge qu'un ensemble limité de clés de condition (aws:SourceArnaws:SourceAccount, etaws:PrincipalOrgID).

Nous vous recommandons de définir des politiques JSON complètes pour ajouter des autorisations basées sur les ressources à votre fonction. La création d'une politique JSON complète vous donne plus de flexibilité et un contrôle précis de vos autorisations.

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.

Autorisations requises

Pour utiliser les actions d'DeleteResourcePolicyAPI PutResourcePolicyGetResourcePolicy, et, vous devez disposer des autorisations IAM suivantes :

Action d’API Autorisations requises
PutResourcePolicy lambda:PutResourcePolicy, lambda:AddPermission et lambda:RemovePermission
GetResourcePolicy lambda:GetResourcePolicy et lambda:GetPolicy
DeleteResourcePolicy lambda:DeleteResourcePolicy et lambda:RemovePermission
Console
Pour créer une politique complète basée sur les ressources JSON
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Sélectionnez la fonction à laquelle vous souhaitez autoriser l'accès, puis sélectionnez l'onglet Configuration.

  3. Sélectionnez Autorisations.

  4. Dans le volet des déclarations de Resource-based politique, choisissez Modifier. Cette action ouvre l'éditeur de règles JSON.

  5. Ajoutez des déclarations à la politique de votre fonction. Vous pouvez sélectionner des actions d'API, ajouter des principaux de différents types (services, comptes, rôles IAM) et ajouter des clés de condition pour contrôler l'accès.

  6. Choisissez Enregistrer.

Vous pouvez également modifier la politique basée sur les ressources de votre fonction directement dans le volet Stratégie.

AWS CLI
Pour ajouter une politique complète basée sur les ressources JSON

Pour ajouter une politique JSON complète à votre fonction, utilisez la put-resource-policy AWS CLI commande.

L'exemple de commande suivant ajoute une politique basée sur les ressources à votre fonction à l'aide d'une stratégie définie dans un fichier nommé policy.json sur votre machine locale. Exécutez la commande depuis le répertoire contenant le fichier. resource-arnVous pouvez spécifier une version ou un alias de fonction, ou vous pouvez utiliser l'ARN de la fonction non qualifiée pour appliquer la politique à l'ensemble de la fonction.

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

Pour ajouter une politique d'autorisations JSON complète à votre fonction, utilisez l'action PutResourcePolicy API. Vous pouvez également supprimer la politique d'une fonction à l'aide de l'DeleteResourcePolicyaction, ou récupérer la stratégie actuellement attachée à une fonction à l'aide de l'GetResourcePolicyaction.

Pour ajouter des autorisations individuelles à la politique d'une fonction, utilisez l'action AddPermission API.

Afficher la politique basée sur les ressources d'une fonction

Console
Pour afficher la stratégie basée sur les ressources d’une fonction
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez une fonction.

  3. Sélectionnez Configuration (Configuration), puis Permissions (Autorisations).

  4. Faites défiler la page vers le bas jusqu'aux déclarations de Resource-based politique pour voir la politique.

AWS CLI

Pour afficher une stratégie basée sur les ressources d’une fonction, utilisez la commande get-resource-policy. Vous pouvez utiliser l'ARN non qualifié de votre fonction ou spécifier une version ou un alias.

aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

Vous pouvez également utiliser la get-policy commande suivante :

aws lambda get-policy \ --function-name my-function \ --output text
Lambda APIs

Pour récupérer la politique basée sur les ressources d'une fonction, utilisez l'action d'GetResourcePolicyAPI. Vous pouvez utiliser l'ARN non qualifié de votre fonction, ou spécifier une version ou un alias ARN.

Vous pouvez également utiliser l'action d'GetPolicyAPI.

Supprimer la politique basée sur les ressources d'une fonction

Console
Pour supprimer la politique basée sur les ressources d'une fonction
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Sélectionnez la fonction pour laquelle vous souhaitez supprimer la politique d'autorisations.

  3. Sélectionnez l'onglet Configuration, puis Autorisations.

  4. Dans le volet des déclarations de Resource-based politique, choisissez Supprimer.

AWS CLI

Pour supprimer la politique de votre fonction, utilisez la delete-resource-policy commande et spécifiez l'ARN de la fonction, de la version ou de l'alias dont vous souhaitez supprimer la politique.

aws lambda delete-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

Pour supprimer des déclarations individuelles, utilisezremove-permission.

aws lambda remove-permission \ --function-name example \ --statement-id sns
Lambda APIs

Pour supprimer la politique basée sur les ressources associée à une fonction, à une version de fonction ou à un alias de fonction, utilisez l'action d'DeleteResourcePolicyAPI.

Pour supprimer des déclarations individuelles d'une politique, utilisez l'action RemovePermission API.

Mettre à jour les politiques existantes

Lorsque vous mettez à jour les autorisations basées sur les ressources existantes d'une fonction, le comportement dépend de la méthode que vous utilisez :

  • put-resource-policy/PutResourcePolicy— Remplace l'intégralité de la politique existante. Toutes les autorisations individuelles ajoutées précédemment sont remplacées.

  • add-permission/AddPermission— Ajoute une déclaration à la politique existante sans la remplacer. Si vous appelez add-permission afterput-resource-policy, la nouvelle instruction s'ajoute à la politique JSON existante.

Pour éviter de remplacer involontairement les autorisations existantes lors de l'utilisationput-resource-policy, récupérez d'abord la politique existante de votre fonction. La get-resource-policy sortie comprend un RevisionId champ.

aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

Lorsque vous attachez une nouvelle politique, indiquez la RevisionId valeur avec le --revision-id paramètre pour vous assurer que vous mettez à jour la dernière version. Si vous fournissez un ancien ID de révision, Lambda ne met pas à jour la politique de votre fonction.

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json \ --revision-id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
Note

Les politiques basées sur les ressources existantes créées avec AddPermission continuent de fonctionner sans modification. Aucune modification du code de votre fonction n'est requise pour utiliser la nouvelle PutResourcePolicy API.

Bonnes pratiques de sécurité

Grâce aux politiques basées sur les ressources JSON, vous pouvez suivre les modèles d'accès avec le moindre privilège. Vous pouvez également satisfaire aux exigences réglementaires en matière de refus explicites. Avec des politiques JSON complètes, vous pouvez :

  • Créez des Deny déclarations explicites pour bloquer des principes ou des conditions spécifiques.

  • Utilisez les conditions organisationnelles (aws:PrincipalOrgID,aws:PrincipalOrgPaths) pour restreindre l'accès à vos organisations sans énumérer les comptes individuels.

  • Étendez les autorisations à des comptes sources ou à des ARN spécifiques à l'aide de la gamme complète de clés de condition globales IAM.

Exemples de politiques basées sur les ressources

Exemple Octroi d'une autorisation à Amazon S3 avec une instruction de refus

La politique suivante autorise tous les compartiments Amazon S3 d'un compte à invoquer une fonction, à l'exception d'un compartiment explicitement refusé.

{ "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:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } }, { "Sid": "deny-s3-bucket", "Effect": "Deny", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:111122223333:function:my-function", "arn:aws:lambda:us-east-2:111122223333:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket" } } } ] }
Exemple Octroi d'autorisations aux comptes d'une organisation

La politique suivante permet d'invoquer l'accès à tous les membres Comptes AWS d'une organisation.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "org-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5f" } } } ] }
Exemple Octroi d'autorisations à plusieurs rôles IAM sous certaines conditions

La politique suivante autorise deux rôles IAM à utiliser l' CreateAlias action à partir d'une adresse IP spécifiée.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-roles", "Effect": "Allow", "Action": "lambda:CreateAlias", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/role-name", "arn:aws:iam::444455556666:role/role-name2" ] }, "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "IpAddress": { "aws:SourceIp": "192.0.2.0" } } } ] }
Exemple Refuser l'accès sauf si l'appelant fait partie d'une organisation spécifiée
{ "Version": "2012-10-17", "Statement": [ { "Sid": "deny-access", "Effect": "Deny", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAllValues:StringNotLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } }, { "Sid": "allow-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } } ] }

Actions d’API prises en charge

Les actions de l’API Lambda suivantes prennent en charge les politiques basées sur les ressources :