Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Restreindre l'accès à l'origine de l'URL d'une AWS Lambda fonction

Mode de mise au point
Restreindre l'accès à l'origine de l'URL d'une AWS Lambda fonction - Amazon CloudFront

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.

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.

CloudFront fournit un contrôle d'accès à l'origine (OAC) pour restreindre l'accès à l'origine de l'URL d'une fonction Lambda.

Création d'un nouvel OAC

Suivez les étapes décrites dans les rubriques suivantes pour configurer un nouvel OAC dans CloudFront.

Important

Si vous utilisez POST des méthodes PUT or avec l'URL de votre fonction Lambda, vos utilisateurs doivent calculer le corps SHA256 du corps et inclure la valeur de hachage de la charge utile du corps de la demande dans l'x-amz-content-sha256en-tête lorsqu'ils envoient la demande à. CloudFront Lambda ne prend pas en charge les charges utiles non signées.

Prérequis

Avant de créer et de configurer OAC, vous devez disposer d'une CloudFront distribution avec une URL de fonction Lambda comme origine. Pour utiliser OAC, vous devez spécifier AWS_IAM la valeur du AuthType paramètre. Pour de plus amples informations, veuillez consulter Utiliser l'URL d'une fonction Lambda.

Donnez à l'OAC l'autorisation d'accéder à l'URL de la fonction Lambda

Avant de créer un OAC ou de le configurer dans une CloudFront distribution, assurez-vous que l'OAC est autorisé à accéder à l'URL de la fonction Lambda. Procédez ainsi après avoir créé une CloudFront distribution, mais avant d'ajouter l'OAC à l'URL de la fonction Lambda dans la configuration de distribution.

Note

Pour mettre à jour la politique IAM pour l'URL de la fonction Lambda, vous devez utiliser AWS Command Line Interface le AWS CLI(). La modification de la politique IAM dans la console Lambda n'est pas prise en charge pour le moment.

La AWS CLI commande suivante accorde au CloudFront service principal (cloudfront.amazonaws.com) l'accès à l'URL de votre fonction Lambda. L'Conditionélément de la politique permet d'accéder CloudFront à Lambda uniquement lorsque la demande provient de la CloudFront distribution qui contient l'URL de la fonction Lambda.

Exemple : AWS CLI commande pour mettre à jour une politique afin d'autoriser l'accès en lecture seule à un OAC CloudFront

La AWS CLI commande suivante permet à la CloudFront distribution (E1PDK09ESKHJWT) d'accéder à votre LambdaFUNCTION_URL_NAME.

aws lambda add-permission \ --statement-id "AllowCloudFrontServicePrincipal" \ --action "lambda:InvokeFunctionUrl" \ --principal "cloudfront.amazonaws.com" \ --source-arn "arn:aws:cloudfront::123456789012:distribution/E1PDK09ESKHJWT" \ --function-name FUNCTION_URL_NAME
Note

Si vous créez une distribution et qu'elle n'est pas autorisée à accéder à l'URL de votre fonction Lambda, vous pouvez choisir la commande Copy CLI depuis la CloudFront console, puis entrer cette commande depuis votre terminal de ligne de commande. Pour plus d'informations, consultez la section Accorder l'accès à une fonction Services AWS dans le Guide du AWS Lambda développeur.

Création de l'OAC

Pour créer un OAC, vous pouvez utiliser le AWS Management Console AWS CloudFormation, AWS CLI, ou l' CloudFront API.

Console
Pour créer un OAC
  1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adressehttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Dans le panneau de navigation de gauche, choisissez Accès à l'origine.

  3. Choisissez Créer un paramètre de contrôle.

  4. Dans le formulaire Créer un nouveau OAC, procédez comme suit :

    1. Entrez un nom et (éventuellement) une description pour l'OAC.

    2. Pour le comportement de signature, nous vous recommandons de conserver le paramètre par défaut (Signer les demandes (recommandé)). Pour de plus amples informations, veuillez consulter Paramètres avancés pour le contrôle d'accès à l'origine.

  5. Pour le type d'origine, choisissez Lambda.

  6. Sélectionnez Create (Créer).

    Astuce

    Après avoir créé l'OAC, notez le nom. Vous en aurez besoin au cours de la procédure suivante.

Pour ajouter un contrôle d'accès à l'origine à l'URL d'une fonction Lambda dans une distribution
  1. Ouvrez la CloudFront console à l'adressehttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Choisissez une distribution avec une URL de fonction Lambda à laquelle vous souhaitez ajouter l'OAC, puis choisissez l'onglet Origins.

  3. Sélectionnez l'URL de la fonction Lambda à laquelle vous souhaitez ajouter l'OAC, puis choisissez Modifier.

  4. Sélectionnez HTTPS only (HTTPS uniquement) pour le paramètre Protocol (Protocole) de votre origine.

  5. Dans le menu déroulant du contrôle d'accès Origin, choisissez le nom OAC que vous souhaitez utiliser.

  6. Sélectionnez Enregistrer les modifications.

La distribution commence à se déployer sur tous les emplacements CloudFront périphériques. Lorsqu'un emplacement périphérique reçoit la nouvelle configuration, il signe toutes les demandes qu'il envoie à l'URL de la fonction Lambda.

CloudFormation

Pour créer un OAC avec AWS CloudFormation, utilisez le type de AWS::CloudFront::OriginAccessControl ressource. L'exemple suivant montre la syntaxe du AWS CloudFormation modèle, au format YAML, pour créer un OAC.

Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: ExampleOAC OriginAccessControlOriginType: lambda SigningBehavior: always SigningProtocol: sigv4

Pour plus d'informations, consultez la section AWS::CloudFront::OriginAccessContrôle dans le guide de AWS CloudFormation l'utilisateur.

CLI

Pour créer un contrôle d'accès à l'origine avec le AWS Command Line Interface (AWS CLI), utilisez la aws cloudfront create-origin-access-control commande. Vous pouvez utiliser un fichier d'entrée pour fournir les paramètres d'entrée de la commande, plutôt que de spécifier chaque paramètre individuel comme entrée de ligne de commande.

Pour créer un contrôle d'accès à l'origine (CLI avec un fichier d'entrée)
  1. Utilisez la commande suivante pour créer un fichier nommé origin-access-control.yaml. Ce fichier contient tous les paramètres d’entrée de la commande create-origin-access-control.

    aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
  2. Ouvrez le fichier origin-access-control.yaml que vous venez de créer. Modifiez le fichier pour ajouter un nom à l'OAC, une description (facultative) et remplacez SigningBehavior par always. Ensuite, enregistrez le fichier.

    Pour plus d'informations sur paramètres OAC, consultez Paramètres avancés pour le contrôle d'accès à l'origine.

  3. Utilisez la commande suivante pour créer le contrôle d'accès à l'origine à l'aide des paramètres d'entrée du fichier origin-access-control.yaml.

    aws cloudfront create-origin-access-control --cli-input-yaml file://origin-access-control.yaml

    Notez la valeur de Id dans la sortie de la commande. Vous en avez besoin pour ajouter l'OAC à l'URL d'une fonction Lambda dans CloudFront une distribution.

Pour associer un OAC à l'URL d'une fonction Lambda dans une distribution existante (CLI avec fichier d'entrée)
  1. Utilisez la commande suivante pour enregistrer la configuration de distribution pour la CloudFront distribution à laquelle vous souhaitez ajouter l'OAC. La distribution doit avoir une URL de fonction Lambda comme origine.

    aws cloudfront get-distribution-config --id <CloudFront distribution ID> --output yaml > dist-config.yaml
  2. Ouvrez le fichier nommé dist-config.yaml que vous venez de créer. Modifiez le fichier en apportant les modifications suivantes :

    • Dans l'objet Origins, ajoutez l'ID de l'OAC au champ nommé OriginAccessControlId.

    • Supprimez la valeur du champ nommé OriginAccessIdentity, le cas échéant.

    • Renommez le champ ETag en IfMatch, mais ne modifiez pas la valeur du champ.

    Enregistrez le fichier lorsque vous avez terminé.

  3. Utilisez la commande suivante pour mettre à jour la distribution afin d'utiliser le contrôle d'accès à l'origine.

    aws cloudfront update-distribution --id <CloudFront distribution ID> --cli-input-yaml file://dist-config.yaml

La distribution commence à se déployer sur tous les emplacements CloudFront périphériques. Lorsqu'un emplacement périphérique reçoit la nouvelle configuration, il signe toutes les demandes qu'il envoie à l'URL de la fonction Lambda.

API

Pour créer un OAC avec l' CloudFront API, utilisez CreateOriginAccessControl. Pour plus d'informations sur les champs que vous spécifiez dans cet appel d'API, consultez la documentation de référence de l'API pour votre AWS SDK ou un autre client d'API.

Après avoir créé un OAC, vous pouvez l'associer à l'URL d'une fonction Lambda dans une distribution, à l'aide de l'un des appels d'API suivants :

Pour ces deux appels d'API, fournissez l'ID OAC dans le OriginAccessControlId champ, dans une origine. Pour plus d'informations sur les autres champs que vous spécifiez dans ces appels d'API, consultez la documentation de référence de l'API pour votre AWS SDK ou autre client d'API.

Pour créer un OAC
  1. Connectez-vous à la CloudFront console AWS Management Console et ouvrez-la à l'adressehttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Dans le panneau de navigation de gauche, choisissez Accès à l'origine.

  3. Choisissez Créer un paramètre de contrôle.

  4. Dans le formulaire Créer un nouveau OAC, procédez comme suit :

    1. Entrez un nom et (éventuellement) une description pour l'OAC.

    2. Pour le comportement de signature, nous vous recommandons de conserver le paramètre par défaut (Signer les demandes (recommandé)). Pour de plus amples informations, veuillez consulter Paramètres avancés pour le contrôle d'accès à l'origine.

  5. Pour le type d'origine, choisissez Lambda.

  6. Sélectionnez Create (Créer).

    Astuce

    Après avoir créé l'OAC, notez le nom. Vous en aurez besoin au cours de la procédure suivante.

Pour ajouter un contrôle d'accès à l'origine à l'URL d'une fonction Lambda dans une distribution
  1. Ouvrez la CloudFront console à l'adressehttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Choisissez une distribution avec une URL de fonction Lambda à laquelle vous souhaitez ajouter l'OAC, puis choisissez l'onglet Origins.

  3. Sélectionnez l'URL de la fonction Lambda à laquelle vous souhaitez ajouter l'OAC, puis choisissez Modifier.

  4. Sélectionnez HTTPS only (HTTPS uniquement) pour le paramètre Protocol (Protocole) de votre origine.

  5. Dans le menu déroulant du contrôle d'accès Origin, choisissez le nom OAC que vous souhaitez utiliser.

  6. Sélectionnez Enregistrer les modifications.

La distribution commence à se déployer sur tous les emplacements CloudFront périphériques. Lorsqu'un emplacement périphérique reçoit la nouvelle configuration, il signe toutes les demandes qu'il envoie à l'URL de la fonction Lambda.

Paramètres avancés pour le contrôle d'accès à l'origine

La fonctionnalité CloudFront OAC inclut des paramètres avancés destinés uniquement à des cas d'utilisation spécifiques. Utilisez les paramètres recommandés, sauf si vous avez des besoins spécifiques en matière de paramètres avancés.

L'OAC contient un paramètre nommé Comportement de signature (dans la console) ou SigningBehavior (dans l'API, la CLI et AWS CloudFormation). Ce paramètre fournit les options suivantes :

Toujours signer les demandes d'origine (paramètre recommandé)

Nous vous recommandons d'utiliser ce paramètre, nommé Signer les demandes (recommandé) dans la console ou always dans l'API, la CLI et AWS CloudFormation. Avec ce paramètre, il signe CloudFront toujours toutes les demandes envoyées à l'URL de la fonction Lambda.

Ne jamais signer les demandes d'origine

Ce paramètre est nommé Ne pas signer les demandes dans la console ou never dans l'API, la CLI et AWS CloudFormation. Utilisez ce paramètre pour désactiver l'OAC pour toutes les origines dans toutes les distributions qui utilisent cet OAC. Cela permet d'économiser du temps et des efforts par rapport à la suppression d'un OAC de toutes les origines et distributions qui l'utilisent, une par une. Avec ce paramètre, CloudFront ne signe aucune demande envoyée à l'URL de la fonction Lambda.

Avertissement

Pour utiliser ce paramètre, l'URL de la fonction Lambda doit être accessible au public. Si vous utilisez ce paramètre avec une URL de fonction Lambda qui n'est pas accessible au public, CloudFront vous ne pouvez pas accéder à l'origine. L'URL de la fonction Lambda renvoie des erreurs CloudFront et les CloudFront transmet aux utilisateurs. Pour plus d'informations, consultez la section Modèle de sécurité et d'authentification pour la URLs fonction Lambda dans AWS Lambda le guide de l'utilisateur.

Ne remplacez pas l'en-tête Authorization de l'utilisateur (client)

Ce paramètre est nommé Ne pas remplacer l'en-tête d'autorisation dans la console ou no-override dans l'API, la CLI et AWS CloudFormation. Utilisez ce paramètre lorsque vous CloudFront souhaitez signer des demandes d'origine uniquement lorsque la demande d'affichage correspondante ne contient pas d'Authorizationen-tête. Avec ce paramètre, CloudFront transmet l'Authorizationen-tête de la demande du visualiseur lorsqu'il y en a un, mais signe la demande d'origine (en ajoutant son propre Authorization en-tête) lorsque la demande du visualiseur n'inclut pas d'Authorizationen-tête.

Avertissement
  • Si vous utilisez ce paramètre, vous devez spécifier la signature Signature Version 4 pour l'URL de la fonction Lambda au lieu du nom ou du CloudFront CNAME de votre distribution. Lorsque l' CloudFront Authorizationen-tête de la demande du visualiseur est transféré à l'URL de la fonction Lambda, Lambda valide la signature par rapport à l'hôte du domaine URL Lambda. Si la signature n'est pas basée sur le domaine de l'URL Lambda, l'hôte figurant dans la signature ne correspondra pas à l'hôte utilisé par l'origine de l'URL Lambda. Cela signifie que la demande échouera, ce qui entraînera une erreur de validation de signature.

  • Pour transmettre l'Authorizationen-tête de la demande du lecteur, vous devez l'Authorizationajouter à une politique de cache pour tous les comportements de cache qui utilisent la fonction Lambda URLs associée à ce contrôle d'accès à l'origine.

Exemple de code de modèle

Si votre CloudFront origine est une URL de fonction Lambda associée à un OAC, vous pouvez utiliser le script Python suivant pour télécharger des fichiers vers la fonction Lambda avec la méthode. POST

Ce code suppose que vous avez configuré l'OAC avec le comportement de signature par défaut défini sur Toujours signer les demandes d'origine et que vous n'avez pas sélectionné le paramètre d'en-tête d'autorisation Ne pas annuler.

Cette configuration permet à l'OAC de gérer correctement l'autorisation Sigv4 avec Lambda en utilisant le nom d'hôte Lambda. La charge utile est signée à l'aide de SigV4 à partir de l'identité IAM autorisée pour l'URL de la fonction Lambda, désignée comme le type. IAM_AUTH

Le modèle montre comment gérer les valeurs de hachage de charge utile signées dans x-amz-content-sha256 en-tête pour les POST demandes du côté client. Plus précisément, ce modèle est conçu pour gérer les charges utiles des données de formulaire. Le modèle permet le téléchargement sécurisé de fichiers vers l'URL CloudFront d'une fonction Lambda et AWS utilise des mécanismes d'authentification pour garantir que seules les demandes autorisées peuvent accéder à la fonction Lambda.

Le code inclut les fonctionnalités suivantes :
  • Répond à l'exigence d'inclusion du hachage de la charge utile dans x-amz-content-sha256 header

  • Utilise l'authentification SigV4 pour un accès sécurisé Service AWS

  • Prend en charge le téléchargement de fichiers en utilisant des données de formulaire en plusieurs parties

  • Inclut la gestion des erreurs pour les exceptions de demande

import boto3 from botocore.auth import SigV4Auth from botocore.awsrequest import AWSRequest import requests import hashlib import os def calculate_body_hash(body): return hashlib.sha256(body).hexdigest() def sign_request(request, credentials, region, service): sigv4 = SigV4Auth(credentials, service, region) sigv4.add_auth(request) def upload_file_to_lambda(cloudfront_url, file_path, region): # AWS credentials session = boto3.Session() credentials = session.get_credentials() # Prepare the multipart form-data boundary = "------------------------boundary" # Read file content with open(file_path, 'rb') as file: file_content = file.read() # Get the filename from the path filename = os.path.basename(file_path) # Prepare the multipart body body = ( f'--{boundary}\r\n' f'Content-Disposition: form-data; name="file"; filename="{filename}"\r\n' f'Content-Type: application/octet-stream\r\n\r\n' ).encode('utf-8') body += file_content body += f'\r\n--{boundary}--\r\n'.encode('utf-8') # Calculate SHA256 hash of the entire body body_hash = calculate_body_hash(body) # Prepare headers headers = { 'Content-Type': f'multipart/form-data; boundary={boundary}', 'x-amz-content-sha256': body_hash } # Create the request request = AWSRequest( method='POST', url=cloudfront_url, data=body, headers=headers ) # Sign the request sign_request(request, credentials, region, 'lambda') # Get the signed headers signed_headers = dict(request.headers) # Print request headers before sending print("Request Headers:") for header, value in signed_headers.items(): print(f"{header}: {value}") try: # Send POST request with signed headers response = requests.post( cloudfront_url, data=body, headers=signed_headers ) # Print response status and content print(f"\nStatus code: {response.status_code}") print("Response:", response.text) # Print response headers print("\nResponse Headers:") for header, value in response.headers.items(): print(f"{header}: {value}") except requests.exceptions.RequestException as e: print(f"An error occurred: {e}") # Usage cloudfront_url = "https://d111111abcdef8.cloudfront.net" file_path = r"filepath" region = "us-east-1" # example: "us-west-2" upload_file_to_lambda(cloudfront_url, file_path, region)
ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.