Restriction de l’accès au contenu Amazon S3 à l’aide d’une identité d’accès à l’origine (OAI) - Amazon CloudFront

Restriction de l’accès au contenu Amazon S3 à l’aide d’une identité d’accès à l’origine (OAI)

Pour restreindre l’accès au contenu que vous diffusez à partir de compartiments Amazon S3, procédez comme suit :

  1. Créez un utilisateur CloudFront spécial appelé identité d’accès à l’origine (OAI) et associez-le à votre distribution.

  2. Configurez vos autorisations de compartiment S3 pour permettre à CloudFront d’utiliser l’identité d’accès à l’origine (OAI) afin d’accéder aux fichiers de votre compartiment et de les diffuser auprès de vos utilisateurs. Assurez-vous que les utilisateurs ne peuvent pas utiliser une URL directe vers le compartiment S3 pour y accéder à un fichier.

Après avoir suivi ces étapes, les utilisateurs peuvent uniquement accéder à vos fichiers via CloudFront, et non directement à partir du compartiment S3.

Note

Si vous restreignez l’accès aux fichiers à l’aide des URL signées ou des cookies signés CloudFront, les utilisateurs ne doivent pas être en mesure de consulter les fichiers uniquement à l’aide de l’URL Amazon S3 qui leur est associée. Pour que la protection fonctionne, ils doivent accéder aux fichiers à l’aide de l’URL CloudFront. Pour de plus amples informations sur l’utilisation des URL et des cookies signés, veuillez consulter Offre de contenu privé avec des URL et des cookies signés.

Cette rubrique explique en détail comment configurer l’OAI et accorder des autorisations pour maintenir un accès sécurisé aux fichiers S3.

Important

Si vous utilisez un compartiment Amazon S3 configuré comme point de terminaison de site web, vous devez le configurer avec CloudFront comme origine personnalisée. Vous ne pouvez pas utiliser la fonctionnalité d’identité d’accès à l’origine décrite dans cette rubrique. Toutefois, vous pouvez limiter l’accès au contenu d’une origine personnalisée en configurant des en-têtes personnalisés et en configurant votre origine pour les exiger. Pour de plus amples informations, veuillez consulter Restriction de l’accès à des fichiers d’origines personnalisées.

Présentation de la configuration de l’OAI

Lorsque vous configurez un compartiment Amazon S3 comme origine d’une distribution CloudFront pour la première fois, vous accordez à tous l’autorisation de lire les fichiers de ce compartiment. Quiconque peut accéder à vos fichiers via CloudFront ou à l’aide de l’URL Amazon S3. CloudFront n’expose pas les URL Amazon S3, mais vos utilisateurs peuvent avoir connaissance de ces URL si votre application sert des fichiers directement depuis Amazon S3 ou si quelqu’un fournit des liens directs vers des fichiers spécifiques dans Amazon S3.

Si vous utilisez des URL ou des cookies signés CloudFront pour restreindre l’accès aux fichiers de votre compartiment Amazon S3, vous voudrez probablement empêcher également les utilisateurs d’accéder à vos fichiers Amazon S3 à l’aide des URL Amazon S3. Si les utilisateurs accèdent directement à vos fichiers dans Amazon S3, ils contournent les contrôles fournis par les URL ou les cookies signés CloudFront. Cela inclut le contrôle de la date et de l’heure auxquelles un utilisateur ne peut plus accéder à votre contenu, et le contrôle des adresses IP qui peuvent être utilisées pour accéder au contenu. En outre, si les utilisateurs accèdent à des fichiers via CloudFront et directement à l’aide d’URL Amazon S3, les journaux d’accès CloudFront sont moins utiles, car ils sont incomplets.

Pour garantir que les utilisateurs accèdent à vos fichiers uniquement à l’aide des URL CloudFront, que celles-ci soient signées ou non, procédez comme suit :

  1. Créez une identité d’accès à l’origine, qui est un utilisateur CloudFront particulier, et associez l’identité d’accès à l’origine à votre distribution. Vous associez l’identité d’accès à l’origine de sorte que vous puissiez sécuriser tout ou partie de votre contenu Amazon S3. Vous pouvez également créer une identité d’accès à l’origine et l’ajoutez à votre distribution quand vous créez la distribution. Pour plus d'informations, consultez Création d’une OAI CloudFront et ajout à votre distribution.

  2. Modifiez les autorisations de votre compartiment Amazon S3 ou des fichiers de votre compartiment afin que seule l’identité d’accès à l’origine ait l’autorisation en lecture. Lorsque vos utilisateurs accèdent à vos fichiers Amazon S3 via CloudFront, l’identité d’accès à l’origine CloudFront obtient les fichiers en leur nom. Si les utilisateurs demandent directement des fichiers à l’aide d’URL Amazon S3, l’accès leur est refusé. L’identité d’accès à l’origine a l’autorisation d’accéder aux fichiers de votre compartiment Amazon S3, mais pas les utilisateurs. Pour plus d'informations, consultez Accorder à l’OAI l’autorisation de lire des fichiers dans votre compartiment Amazon S3.

Création d’une OAI CloudFront et ajout à votre distribution

Un compte AWS peut avoir jusqu’à 100 identités d’accès à l’origine (OAI) CloudFront. Cependant, vous pouvez ajouter une OAI à autant de distributions que vous souhaitez, donc une OAI est généralement suffisante.

Si vous n’avez pas créé d’OAI et que vous ne l’avez pas ajoutée à votre distribution lors de la création de cette dernière, vous pouvez en créer et en ajouter une maintenant à l’aide de la console ou de l’API CloudFront :

Création d’une OAI et ajout à votre distribution

Si vous n’avez pas créé d’OAI lors de la création de votre distribution, procédez comme suit.

Pour créer une OAI CloudFront à l’aide de la console CloudFront

  1. Connectez-vous à AWS Management Console et ouvrez la console CloudFront à l’adresse https://console.aws.amazon.com/cloudfront/v3/home.

  2. Choisissez l’ID d’une distribution ayant une origine S3.

  3. Choisissez l’onglet Origines.

  4. Sélectionnez l’origine Amazon S3, puis choisissez Edit (Modifier).

  5. Pour S3 bucket access (accès au compartiment S3), choisissez Yes use OAI (Oui, utiliser OAI).

  6. Si vous avez déjà une OAI que vous souhaitez utiliser, sélectionnez celle dans la liste déroulante. Si vous possédez déjà une OAI, nous vous recommandons de la réutiliser pour simplifier la maintenance.

    Si vous souhaitez créer une OAI, choisissez Create new OAI (Créer une nouvelle OAI). Vous pouvez remplacer le nom OAI généré automatiquement par un nom personnalisé si vous le souhaitez.

  7. Si vous souhaitez que CloudFront mette automatiquement à jour la politique de compartiment Amazon S3 pour autoriser l’accès en lecture à l’OAI, choisissez Yes, update the bucket policy (Oui, mettre à jour la politique de compartiment).

    Important

    Si vous choisissez Yes, Update Bucket Policy (Oui, mettre à jour la politique de compartiment), CloudFront met à jour les autorisations du compartiment pour accorder à l’OAI spécifiée l’autorisation de lire les fichiers de votre compartiment. Toutefois, CloudFront ne supprime pas les autorisations existantes. Si les utilisateurs disposent de l’autorisation d’accéder aux fichiers de votre compartiment à l’aide des URL Amazon S3, ils continueront à l’avoir après que CloudFront a mis à jour vos autorisations de compartiment. Pour afficher ou supprimer les autorisations de compartiment existantes, utilisez une méthode fournie par Amazon S3.

    Pour mettre manuellement à jour les autorisations sur votre compartiment Amazon S3, choisissez No, I will update the bucket policy (Non, je mettrai à jour la politique de compartiment). Pour plus d'informations, consultez Accorder à l’OAI l’autorisation de lire des fichiers dans votre compartiment Amazon S3.

  8. Choisissez Save changes (Enregistrer les modifications) en bas de la page.

  9. Si vous avez plusieurs origines Amazon S3, répétez les étapes pour ajouter une OAI à chacune d’entre elles.

Création d’une OAI à l’aide de l’API CloudFront

Si vous disposez déjà d’une identité d’accès à l’origine et que vous voulez la réutiliser au lieu d’en créer une nouvelle, passez à Ajout d’une OAI à votre distribution à l’aide de l’API CloudFront.

Pour créer une OAI CloudFront à l’aide de l’API CloudFront, utilisez l’action d’API CreateCloudFrontOriginAccessIdentity. La réponse comprend une Id et une S3CanonicalUserId pour la nouvelle OAI. Notez ces valeurs, car vous les utiliserez ultérieurement dans le processus. Pour plus d’informations, consultez CreateCloudFrontoriginAccessidentity dans la référence de l’API Amazon CloudFront.

Ajout d’une OAI à votre distribution à l’aide de l’API CloudFront

Vous pouvez utiliser l’API CloudFront pour ajouter une OAI CloudFront à une distribution existante ou pour créer une distribution qui inclut une OAI. Dans les deux cas, incluez un élément OriginAccessIdentity. Cet élément contient la valeur de l’élément Id que l’action d’API CreateCloudFrontOriginAccessIdentity a retourné lorsque vous avez créé l’OAI. Vous pouvez ajouter l’élément OriginAccessIdentity à une ou plusieurs origines.

Consultez les rubriques suivantes dans la référence de l’API Amazon CloudFront :

Accorder à l’OAI l’autorisation de lire des fichiers dans votre compartiment Amazon S3

Lorsque vous créez un OAI ou que vous en ajoutez un à une distribution avec la console CloudFront, vous pouvez mettre à jour automatiquement la politique de compartiment Amazon S3 pour attribuer à l’OAI l’autorisation d’accéder à votre compartiment. Vous pouvez également choisir de créer ou de mettre à jour manuellement la politique de compartiment. Quelle que soit la méthode que vous utilisez, vous devez toujours vérifier les autorisations pour vous assurer que :

  • Votre identité d’accès à l’origine CloudFront peut accéder aux fichiers du compartiment pour le compte des utilisateurs qui les demandent via CloudFront.

  • Les utilisateurs ne peuvent pas utiliser les URL Amazon S3 pour accéder à vos fichiers en dehors de CloudFront.

Important

Si vous configurez CloudFront pour qu’il accepte et transmette toutes les méthodes HTTP prises en charge par CloudFront, assurez-vous d’accorder à votre OAI CloudFront les autorisations souhaitées. Par exemple, si vous configurez CloudFront pour accepter et transférer les demandes qui utilisent la méthode DELETE, configurez votre politique de compartiment pour traiter les demandes DELETE de manière appropriée, afin que les utilisateurs puissent uniquement supprimer les fichiers souhaités.

Utilisation de politiques de compartiment Amazon S3

Vous pouvez donner à une identité d’accès à l’origine CloudFront l’accès à des fichiers figurant dans un compartiment Amazon S3 en créant ou en mettant à jour la politique de compartiment d’une des façons suivantes :

  • Utilisation de l’onglet Autorisations du compartiment Amazon S3 dans la console Amazon S3.

  • Utilisation de PutBucketPolicy dans l’API Amazon S3.

  • Utilisation de la console CloudFront. Lorsque vous ajoutez une OAI à vos paramètres d’origine dans la console CloudFront, vous pouvez choisir Yes, Update Bucket Policy (Oui, mettre à jour la politique de compartiment) pour indiquer à CloudFront de mettre à jour la politique de compartiment en votre nom.

Si vous mettez à jour manuellement la politique de compartiment, assurez-vous que vous :

  • Spécifiez l’identité d’accès à l’origine correcte comme Principal dans la politique.

  • Accordez à l’identité d’accès à l’origine les autorisations dont elle a besoin pour accéder aux objets pour le compte des utilisateurs.

Pour plus d’informations, consultez les sections suivantes.

Spécification d’une OAI comme Principal dans une politique de compartiment

Pour spécifier une OAI comme Principal dans une politique de compartiment Amazon S3, utilisez l’Amazon Resource Name (ARN) qui inclut son ID. Exemples :

"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }

Pour utiliser l’exemple précédent, remplacez EH1HDMB1FH2TC par l’ID de l’identité d’accès à l’origine. Pour rechercher l’ID de l’OAI, consultez la page des identités d’accès à l’origine dans la console CloudFront ou utilisez ListCloudFrontOriginAccessIdentities dans l’API CloudFront.

Octroi d’autorisations à une OAI

Pour donner à l’identité d’accès à l’origine les autorisations pour accéder aux objets de votre compartiment Amazon S3, utilisez des mots-clés dans la politique qui se rapportent à des opérations d’API Amazon S3 spécifiques. Par exemple, l’autorisation s3:GetObject permet à l’identité d’accès à l’origine de lire des objets dans le compartiment. Pour plus d’informations, consultez les exemples de la section suivante ou la section Actions Amazon S3 du Guide de l’utilisateur Amazon Simple Storage Service.

Exemples de politique de compartiment Amazon S3

Les exemples suivants illustrent les politiques de compartiment Amazon S3 qui accordent l’accès à une OAI CloudFront. Pour utiliser ces exemples :

Exemple Politique de compartiment Amazon S3 qui donne à l’identité d’accès à l’origine un accès en lecture

L’exemple suivant permet à l’identité d’accès à l’origine de lire des objets dans le compartiment spécifié (s3:GetObject).

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Exemple Politique de compartiment Amazon S3 qui donne à l’identité d’accès à l’origine un accès en lecture et en écriture

L’exemple suivant permet à l’identité d’accès à l’origine de lire et d’écrire des objets dans le compartiment spécifié (s3:GetObject et s3:PutObject). Cela permet aux utilisateurs de charger des fichiers dans votre compartiment Amazon S3 via CloudFront.

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Utilisation des listes ACL d’objet Amazon S3 (non recommandée)

Important

Il est recommandé d’utiliser les politiques du compartiment Amazon S3 pour attribuer à une OAI l’accès à un compartiment S3. Vous pouvez utiliser des listes ACL comme décrit dans cette section, mais nous le déconseillons.

Amazon S3 recommande de définir S3 Object Ownership (Propriété de l’objet S3) sur bucket owner enforced (appliqué par le propriétaire du compartiment), ce qui signifie que les listes ACL sont désactivées pour le compartiment et les objets à l’intérieur. Lorsque vous appliquez ce paramètre à Object Ownership (Propriété de l’objet), vous devez utiliser des politiques du compartiment pour donner l’accès à l’OAI (consultez la section précédente).

La section suivante concerne uniquement les cas d’utilisation hérités nécessitant des listes ACL.

Vous pouvez donner à une identité d’accès à l’origine CloudFront l’accès aux fichiers d’un compartiment Amazon S3 en créant ou en mettant à jour la liste ACL du fichier d’une des façons suivantes :

Lorsque vous accordez l’accès à une identité d’accès à l’origine à l’aide d’une liste ACL, vous devez spécifier l’identité d’accès à l’origine à l’aide de son ID d’utilisateur canonique Amazon S3. Il s’agit de la valeur du paramètre Amazon S3 canonical user ID (ID d’utilisateur canonique Amazon S3) sur la page des identités d’accès à l’origine de la console CloudFront. Si vous utilisez l’API CloudFront, utilisez la valeur de l’élément S3CanonicalUserId qui a été renvoyé lorsque vous avez créé l’identité d’accès à l’origine, ou appelez ListCloudFrontOriginAccessIdentities dans l’API CloudFront.

Utilisation d’une OAI dans les régions Amazon S3 qui prennent uniquement en charge l’authentification Signature version 4

Les régions Amazon S3 plus récentes requièrent que vous utilisiez Signature version 4 pour les demandes authentifiées. (Pour connaître les versions de signatures prises en charge dans chaque région Amazon S3, consultez la section Points de terminaison et quotas Amazon Simple Storage Service de la Référence générale AWS.) Si vous utilisez une identité d’accès à l’origine et que votre compartiment se trouve dans l’une des régions qui nécessitent Signature version 4, notez les points suivants :

  • Les demandes DELETE, GET, HEAD, OPTIONS etPATCH sont prises en charge sans qualifications.

  • Si vous voulez envoyer les demandes PUT à CloudFront pour charger les fichiers sur votre compartiment Amazon S3, vous devez ajouter un en-tête x-amz-content-sha256 à la demande. La valeur de l’en-tête doit contenir un hachage SHA-256 du corps de la demande. Pour plus d’informations, consultez la documentation relative à l’en-tête x-amz-content-sha256 sur la page En-têtes de requête communs dans la référence de l’API Amazon Simple Storage Service.

  • POSTLes demandes ne sont pas prises en charge.