View a markdown version of this page

Chiffrement au repos pour les fonctions Web - 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.

Chiffrement au repos pour les fonctions Web

AWS Lambda chiffre les données de vos fonctions Web Lambda au repos côté serveur. Cette page explique les options de chiffrement à votre disposition et explique comment configurer une clé gérée par le client.

Options de chiffrement au repos

Le chiffrement au repos est toujours activé. Lambda chiffre votre artefact de code de fonction Web et vos variables d'environnement côté serveur, et vous ne pouvez pas désactiver ce chiffrement. Par défaut, Lambda utilise un. Clé détenue par AWS Vous pouvez plutôt configurer une clé gérée par le client.

Deux options s'offrent à vous pour choisir la AWS KMS clé qui protège vos données :

Clé détenue par AWS (default)

Par défaut, Lambda chiffre vos données à l'aide d'un. Clé détenue par AWS AWS possède et gère cette clé. Vous ne pouvez pas consulter, gérer ou auditer son utilisation. Si ce comportement par défaut répond à vos besoins, aucune configuration supplémentaire n'est requise.

Clé gérée par le client

Vous pouvez éventuellement configurer votre propre clé gérée par AWS KMS le client. Utilisez une clé gérée par le client lorsque vous devez contrôler la rotation des clés, vérifier l'utilisation des clés CloudTrail, gérer l'accès aux clés par le biais d'une politique clé ou répondre aux exigences de conformité de l'organisation. Avec une clé gérée par le client, seuls les principaux que vous autorisez peuvent accéder au code crypté et aux variables d'environnement. Les clés gérées par le client entraînent des AWS KMS frais. Pour en savoir plus, consultez Pricing AWS Key Management Service (Tarification).

Chiffrer les données au repos à l'aide d'une clé gérée par le client

Les sections suivantes expliquent comment les fonctions Web utilisent une clé gérée par le client, comment configurer la clé et ses autorisations, et comment limiter l'accès à celle-ci.

Comment les fonctions Web utilisent une clé gérée par le client

Lorsque vous spécifiez une clé gérée par le client, Lambda utilise le chiffrement d'enveloppe. Cela signifie que Lambda chiffre les données de la révision à l'aide d'une clé de données, et votre clé KMS chiffre cette clé de données. Lambda obtient la clé de données AWS KMS et la déchiffre avec votre clé KMS lorsqu'il a besoin de lire les données. Seuls les principaux ayant accès à la clé KMS peuvent accéder au code et aux variables d'environnement de la révision.

Lambda chiffre les ressources de fonctions Web suivantes à l'aide de votre clé gérée par le client :

Ressource Qu'est-ce qui est crypté
Révision L'artefact de code créé à partir de votre package de déploiement Amazon S3 et les variables d'environnement de la révision.

Lambda n'utilise pas de privilèges pour AWS KMS les fonctions Web. L'accès est autorisé par le biais de la politique des clés et des autorisations IAM du principal appelant.

Lambda appelle AWS KMS lors de la création et du lancement de ressources de révision et peut mettre en cache du matériel déchiffré dans des environnements d'exécution actifs. La révocation de l'accès par clé n'est pas un mécanisme immédiat de limitation du trafic, car les environnements existants peuvent continuer à utiliser du matériel mis en cache pendant une période indéterminée.

Après un changement de politique clé, testez le comportement attendu et surveillez la révision et l'état du terminal. Pour le confinement d'urgence, arrêtez d'acheminer le trafic vers les révisions concernées ou désactivez le point de terminaison au lieu de vous fier uniquement à la révocation des clés.

Lambda définit le contexte de chiffrement suivant pour toutes les AWS KMS opérations relatives aux fonctions Web :

  • aws:lambda:WebFunctionRevisionArn— Le nom de ressource Amazon (ARN) de la révision de la fonction Web.

Vous pouvez utiliser ce contexte de chiffrement dans les politiques clés pour définir l'accès à des fonctions Web ou à des révisions spécifiques. Pour plus d’informations, consultez Délimitation de l'accès à votre clé KMS.

Configuration d'une clé gérée par le client

La AWS KMS clé doit être une clé de chiffrement symétrique (spécification de la cléSYMMETRIC_DEFAULT, utilisation ENCRYPT_DECRYPT de la clé). Vous ne pouvez pas utiliser de touches asymétriques.

Les fonctions Web prennent en charge les touches multirégionales. Le type de clé dont vous avez besoin dépend de la configuration de votre terminal :

  • HomeRegion point de terminaison : vous pouvez utiliser une clé à région unique ou une clé multirégionale.

  • MultiRegion ou PerRegion point de terminaison : vous devez utiliser une clé multirégionale avec des répliques dans chaque Région AWS point desservi par le point de terminaison. Si une région ne possède pas de réplique de la clé, la réplication vers cette région échoue.

Pour plus d'informations sur la création de clés multirégionales, voir Création de clés primaires multirégionales dans le guide du AWS Key Management Service développeur.

Comme il AWS KMS ne copie ni ne synchronise les politiques clés entre les clés multirégionales associées, vous devez configurer chaque stratégie clé séparément. Configurez la politique des clés sur la clé primaire et sur chaque clé de réplique. Au minimum, la politique de chaque clé de réplique doit autoriser le principal du service Lambda à appeler. kms:Decrypt Cette autorisation permet à Lambda de déchiffrer la clé de données dans cette région. Pour plus d'informations, consultez la section Autorisation de l'utilisation de clés multirégionales dans le Guide du AWS Key Management Service développeur.

Note

Lorsque vous créez des répliques de clés multirégionales, leur disponibilité dans toutes les régions peut prendre de quelques secondes à quelques minutes. Vérifiez que la clé de réplique est disponible dans chaque région cible avant de créer la révision ou le point de terminaison.

Configuration des autorisations pour utiliser une clé gérée par le client

Pour créer une révision à l'aide d'une clé gérée par le client, vous devez disposer des autorisations suivantes sur la AWS KMS clé :

  • kms:DescribeKey— Obligatoire lorsque vous créez une fonction Web ou une révision à l'aide de la clé.

  • kms:GenerateDataKey— Lambda appelle cette opération pour générer la clé de données qui chiffre l'artefact de code et les variables d'environnement de la révision.

  • kms:Decrypt— Lambda appelle cette opération pour valider que la clé est utilisable lorsque vous créez la révision. Les directeurs qui lisent une révision doivent GetWebFunctionRevision également avoir kms:Decrypt la clé pour voir ses variables d'environnement.

La demande de création échoue si la clé est manquante, désactivée, s'il ne s'agit pas d'une clé de chiffrement symétrique ou si elle n'est pas accessible avec les autorisations requises.

Note

Vous n'avez pas besoin d'kms:Encryptautorisation. Lambda utilise le chiffrement d'enveloppe avecGenerateDataKey, qui renvoie à la fois un texte brut et une copie cryptée de la clé de données sans nécessiter un appel de chiffrement distinct.

La politique AWS KMS des clés doit également autoriser le principal du service Lambda (lambda.amazonaws.com) à appeler. kms:Decrypt Lambda utilise cette autorisation pour déchiffrer la clé de données lorsqu'il lance des environnements d'exécution pour la révision. Le directeur du service n'en a pas besoinkms:DescribeKey. Le principal qui crée la fonction Web ou la révision a besoin de cette autorisation.

Exemple de politique de clé

La politique clé suivante contient les trois instructions requises par les fonctions Web, chacune étant limitée aux conditions décrites dansDélimitation de l'accès à votre clé KMS. La première instruction accorde au principal du service Lambda les autorisations dont il a besoin lorsqu'il lance des environnements d'exécution. Les deuxième et troisième accordent au directeur qui crée les révisions les autorisations dont il a besoin au moment de la création.

kms:DescribeKeyfigure dans une instruction séparée car il s'agit d'une opération de métadonnées qui ne comporte aucun contexte de chiffrement. Une condition de contexte de chiffrement ne correspondrait jamais à une DescribeKey demande, de sorte que cette condition ne s'applique qu'à l'instruction qui accorde kms:GenerateDataKey etkms:Decrypt.

Cet exemple montre uniquement les instructions dont Lambda a besoin pour les fonctions Web. Ajoutez ces instructions à votre politique clé existante plutôt que de la remplacer, et conservez les instructions qui accordent à vos administrateurs l'accès à la gestion de la clé.

Exemple Politique clé pour le chiffrement des fonctions Web
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Lambda to decrypt the data key for Web Function revisions", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:lambda:WebFunctionRevisionArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*", "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" } } }, { "Sid": "Allow the revision creator to generate and validate data keys", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyWebFunctionDeployRole" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:lambda:WebFunctionRevisionArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" }, "StringEquals": { "kms:ViaService": "lambda.us-east-1.amazonaws.com" } } }, { "Sid": "Allow the revision creator to describe the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyWebFunctionDeployRole" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "lambda.us-east-1.amazonaws.com" } } } ] }

Pour plus d'informations sur les politiques AWS KMS clés, consultez la section Politiques clés du Guide du AWS Key Management Service développeur. AWS KMS

Création d'une révision de fonction Web à l'aide d'une clé gérée par le client

Pour chiffrer une révision à l'aide d'une clé gérée par le client, spécifiez l'ARN de la clé dans le kmsKeyArn paramètre de configuration de révision. Vous pouvez définir ce paramètre lorsque vous appelez CreateWebFunctionou CreateWebFunctionRevision. Si vous omettezkmsKeyArn, Lambda chiffre la révision à l'aide du. Clé détenue par AWS

Pour créer une fonction Web avec une clé gérée par le client (AWS CLI)
  • Exécutez la commande suivante pour créer une fonction Web avec une clé gérée par le client.

    aws lambda-web create-web-function \ --function-name my-web-app \ --revision-config '{ "kmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/key-id", "buildConfig": { "codeConfig": { "s3Object": { "bucket": "amzn-s3-demo-bucket", "key": "my-app.zip" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }, "serviceConfig": { "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" } }' \ --endpoint-config '{ "endpointName": "my-endpoint", "endpointType": "HomeRegion", "authType": "ApplicationManaged" }'

Modification de la configuration de chiffrement d'une fonction Web existante

Le kmsKeyArn paramètre est fixe pendant toute la durée de vie d'une révision. Les révisions étant immuables, vous ne pouvez pas modifier la clé qui protège une révision existante. Pour modifier la configuration du chiffrement, créez une nouvelle révision qui spécifie la nouvelle clé, puis acheminez le trafic vers cette révision.

Les fonctions Web prennent en charge les transitions clés suivantes :

  • Clé détenue par AWS à la clé gérée par le client — Créez une nouvelle révision qui spécifiekmsKeyArn.

  • Une clé gérée par le client vers une autre clé gérée par le client : créez une nouvelle révision qui spécifie le nouvel ARN de la clé.

  • Clé gérée par le client pour Clé détenue par AWS — Créer une nouvelle révision sanskmsKeyArn. Lambda protège ensuite cette révision avec le Clé détenue par AWS, qui est la valeur par défaut.

Lambda ne rechiffre pas les révisions existantes lorsque vous créez une nouvelle révision avec une clé différente. Chaque révision reste cryptée avec la clé que vous avez spécifiée lors de sa création. Cela signifie que tant qu'une version antérieure peut encore recevoir du trafic, sa clé d'origine doit rester activée et accessible au principal du service Lambda. Avant de désactiver ou de supprimer une clé, vérifiez qu'aucune révision chiffrée avec cette clé n'est toujours référencée par les poids de révision d'un point de terminaison.

Pour créer une nouvelle révision avec une autre clé gérée par le client (AWS CLI)
  1. Exécutez la commande suivante pour créer une révision utilisant une clé différente.

    aws lambda-web create-web-function-revision \ --function-name my-web-app \ --kms-key-arn arn:aws:kms:us-east-1:111122223333:key/new-key-id \ --build-config '{ "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app-v2.zip" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }' \ --service-config '{ "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" }'
  2. Mettez à jour les poids de révision du point de terminaison pour acheminer le trafic vers la nouvelle révision. Pour plus d’informations, consultez Modèles de déploiement.

Délimitation de l'accès à votre clé KMS

La politique clé de Exemple de politique de clé restreint l'accès avec les clés de condition suivantes. Chacune limite la manière dont la clé peut être utilisée, de sorte que l'accès à la clé ne soit pas plus large que ce dont la fonction Web a besoin.

Contexte de chiffrement

Lambda définit le contexte aws:lambda:WebFunctionRevisionArn de chiffrement pour chaque AWS KMS demande de révision. Utilisez une StringLike condition activée kms:EncryptionContext:aws:lambda:WebFunctionRevisionArn pour limiter la clé aux révisions d'une fonction Web spécifique. Appliquez cette condition à la fois à la déclaration du créateur et à la déclaration principale du service Lambda.

N'appliquez pas cette condition à une déclaration qui accordekms:DescribeKey. Cette opération ne comporte aucun contexte de chiffrement, de sorte que la condition la refuserait.

L'exemple suivant montre l'instruction creator avec la condition de contexte de chiffrement.

{ "Sid": "Allow the revision creator to generate and validate data keys", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyWebFunctionDeployRole" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:lambda:WebFunctionRevisionArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" } } }

km : ViaService état

La kms:ViaService condition restreint la clé afin que seules les demandes que Lambda fait en votre nom puissent l'utiliser. La valeur est Region-specific :lambda.us-east-1.amazonaws.com.

Avec cette condition, AWS KMS refuse les appels directs effectués avec les mêmes informations d'identification (par exemple, s'exécuter aws kms generate-data-key vous-même), mais la création d'une fonction Web aboutit car Lambda passe AWS KMS les appels pour vous.

AWS KMS ne partage pas les politiques clés entre les clés multirégionales associées. Chaque clé de réplique possède sa propre politique. Lorsque vous utilisez la kms:ViaService condition avec une clé multirégionale, utilisez le nom du service régional qui correspond à la région de chaque clé (par exemple, lambda.us-east-1.amazonaws.com dans la politique de clé us-east-1 et lambda.us-west-2.amazonaws.com dans la politique de clé de réplique us-west-2). Vous pouvez également répertorier plusieurs valeurs régionales dans une seule condition, car elle StringEquals accepte un tableau de valeurs.

L'exemple suivant montre l'instruction creator avec à la fois la kms:ViaService condition et la condition de contexte de chiffrement.

{ "Sid": "Allow the revision creator to generate and validate data keys", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyWebFunctionDeployRole" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:lambda:WebFunctionRevisionArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" }, "StringEquals": { "kms:ViaService": "lambda.us-east-1.amazonaws.com" } } }

Protection adjointe confuse

Le problème des adjoints confus se produit lorsqu'une entité non autorisée à effectuer une action contraint une entité plus privilégiée à l'exécuter. Étant donné que le responsable du service Lambda peut utiliser votre clé gérée par le client, limitez cet accès aux révisions des fonctions Web dont vous êtes propriétaire. Pour de plus amples informations, veuillez consulter Le problème du député confus dans le Guide de l’utilisateur IAM.

Lorsque Lambda appelle AWS KMS avec ses propres informations d'identification de service pour lancer un environnement d'exécution, il envoie l'ARN de révision en tant qu'ARN source et votre Compte AWS identifiant en tant que compte source. Utilisez la clé aws : SourceArn condition sur l'instruction principale du service Lambda pour restreindre la clé aux révisions d'une fonction Web spécifique.

{ "Sid": "Allow Lambda to decrypt the data key for Web Function revisions", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" } } }

Pour restreindre la clé à votre compte plutôt qu'à une fonction Web spécifique, utilisez la clé de SourceAccount condition aws : avec votre Compte AWS identifiant.

Appliquez cette condition à la déclaration principale du service Lambda. La kms:ViaService condition décrite dans km : ViaService état limite le service autorisé à utiliser la clé, mais elle ne crée pas de confusion quant à la protection des adjoints.

Comportement d'erreur

Lambda valide la AWS KMS clé lorsque vous créez une révision. Les erreurs suivantes peuvent se produire au moment de la création :

  • Erreur de validation — L'ARN de la clé n'est pas valide, la clé n'existe pas, la clé est désactivée ou la clé n'est pas une clé de chiffrement symétrique.

  • Erreur d'accès refusé — Le principal appelant ou le principal du service Lambda ne dispose pas des AWS KMS autorisations requises sur la clé.

Ne pas désactiver ou révoquer l'accès à la clé d'une révision active

Si vous désactivez la AWS KMS clé ou révoquez l'accès du principal du service Lambda après une révisionActive, Lambda ne peut plus déchiffrer la clé de données. Cela empêche Lambda de lancer de nouveaux environnements d'exécution pour cette révision, ce qui interrompt les invocations. Ne supprimez pas non plus les clés de réplique dans les régions où la révision est toujours déployée. Cela a le même effet (Lambda ne peut pas lancer de nouveaux environnements d'exécution dans cette région). Pour rétablir le service, créez une nouvelle révision avec une clé accessible, ou réactivez la clé d'origine et restaurez la politique de clé.

Chiffrement avec MultiRegion et points de PerRegion terminaison

Pour les fonctions Web avec MultiRegion ou PerRegion points de terminaison, Lambda vérifie la disponibilité des clés dans chaque région lors de la réplication. Si la réplique clé multirégionale est manquante ou inaccessible dans une région cible, la réplication échoue uniquement pour cette région. Les autres régions continuent de fonctionner normalement.

Vous pouvez consulter l'état de chaque région et le mettre à jour en appelantGetWebFunctionEndpoint. L'entrée de chaque région regionalEndpoints contient state et stateReason (l'état de déploiement de la région) updateStatus et updateStatusReason (le résultat de la dernière mise à jour). Le comportement varie selon que le point de terminaison est créé ou mis à jour :

  • Lors de la création du point de terminaison : l'entrée de la région regionalEndpoints indique un state de Failed avec un stateReason qui décrit le problème clé. Le point de terminaison global Failed s'affiche state également et vous stateReason dirige vers les entrées régionales.

  • Lors d'une mise à jour d'un terminal, la région updateStatusReason s'updateStatusaffiche Failed avec un message décrivant le principal problème. Le point de terminaison global Failed s'affiche updateStatus également et vous updateStatusReason dirige vers les entrées régionales.

Pour résoudre une région défaillante, créez une réplique clé dans cette région ou restaurez l'accès à la réplique existante, puis mettez à jour le point de terminaison pour réessayer la réplication.

Surveillance de l'interaction des fonctions Web avec AWS KMS

Vous pouvez l'utiliser CloudTrail pour suivre les AWS KMS demandes que Lambda fait en votre nom lorsque vous utilisez une clé gérée par le client avec une fonction Web. Pour plus d'informations sur la recherche d' AWS KMS événements dans vos CloudTrail journaux, consultez la section Rechercher CloudTrail des appels AWS KMS d'API dans les journaux du guide du AWS Key Management Service développeur.

Le tableau suivant répertorie les AWS KMS événements générés par les fonctions Web et les valeurs que vous pouvez auditer pour chaque événement.

eventName Quand cela se produit Valeurs à auditer
DescribeKey Lorsque vous créez une fonction Web ou une révision à l'aide d'une clé gérée par le client. userIdentityest le principal IAM qui a créé la révision. Cet événement n'a aucun contexte de chiffrement, car il DescribeKey s'agit d'une opération de métadonnées.
GenerateDataKey Lorsque vous créez une fonction Web ou une révision. Lambda génère la clé de données qui chiffre l'artefact de code et les variables d'environnement de la révision. userIdentityest le principal IAM qui a créé la révision. encryptionContextcontientaws:lambda:WebFunctionRevisionArn.
Decrypt Lorsque vous créez une fonction Web ou une révision, Lambda valide l'accès par clé. Lambda appelle également cette opération lorsqu'il déploie la révision dans une région de réplique, lorsqu'il lance un nouvel environnement d'exécution et lorsqu'un appelant lit les variables d'environnement de la révision avec. GetWebFunctionRevision Pour les appels au moment de la création, userIdentity c'est le principal IAM qui a créé la révision. Lambda effectue également un Decrypt appel à sec lambda.amazonaws.com pour confirmer que le directeur du service peut utiliser la clé. Pour les appels d'exécution, userIdentity c'est le principal du service Lambda ()lambda.amazonaws.com. En effetGetWebFunctionRevision, Lambda appelle Decrypt avec les informations d'identification de l'appelant. encryptionContextcontientaws:lambda:WebFunctionRevisionArn.

Les Decrypt événements GenerateDataKey et incluent le contexte de chiffrement aws:lambda:WebFunctionRevisionArn avec l'ARN de révision. Utilisez cette valeur pour identifier les AWS KMS demandes de révision d'une fonction Web spécifique.