Exemples de stratégie de compartiment - Amazon Simple Storage Service

Ce guide ne fait plus l'objet de mises à jour. Pour obtenir des informations et des instructions actuelles, reportez-vous au nouveau Guide de l'utilisateur Amazon S3.

Exemples de stratégie de compartiment

Cette section présente quelques exemples de cas d'utilisation standard de stratégies de compartiment. Les stratégies utilisent les chaînes bucket et examplebucket dans la valeur de ressource. Pour tester ces stratégies, vous devez remplacer ces chaînes par le nom de votre compartiment. Pour en savoir plus sur le langage d'access policy, consultez Stratégies et autorisations dans Amazon S3.

Note

Les stratégies de compartiment sont limitées à une taille de 20 Ko.

Vous pouvez utiliser l'outil Générateur de stratégies AWS pour créer une stratégie de compartiment pour votre compartiment Amazon S3. Vous pouvez ensuite utiliser les documents générés pour définir votre stratégie de compartiment à l'aide de la console Amazon S3, différents outils tiers ou votre application.

Important

Lors du test des autorisations à l'aide de la console Amazon S3, vous devrez accorder des autorisations supplémentaires requises par la console (autorisations s3:ListAllMyBuckets, s3:GetBucketLocation et s3:ListBucket). Pour afficher un exemple qui octroie les autorisations aux utilisateurs et qui les teste en utilisant la console, consultez Procédure détaillée : Contrôle de l'accès à un compartiment avec des stratégies utilisateur.

Octroi d'autorisations à plusieurs comptes avec des conditions supplémentaires

L'exemple suivant de stratégie octroie les autorisations s3:PutObject et s3:PutObjectAcl à plusieurs comptes AWS, et exige que toute demande de telles opérations inclue la liste ACL prédéfinie public-read. Pour plus d'informations, consultez Actions Amazon S3 et Clés de condition Amazon S3.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": {"AWS": ["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"]}, "Action":["s3:PutObject","s3:PutObjectAcl"], "Resource":"arn:aws:s3:::awsexamplebucket1/*", "Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}} } ] }

Octroi de l'autorisation en lecture seule à un utilisateur anonyme

L'exemple suivant de stratégie octroie l'autorisation s3:GetObject à tous les utilisateurs anonymes publics. (Pour obtenir la liste des autorisations et des opérations qu'elles autorisent, consultez Actions Amazon S3.) Cette autorisation permet à quiconque de lire les données d'objet, ce qui est utile quand vous configurez un compartiment en tant que site Web et voulez que chacun soit en mesure de lire les objets figurant dans ce compartiment. Avant d'utiliser une stratégie de compartiment pour accorder l'autorisation en lecture seule à un utilisateur anonyme, vous devez désactiver les paramètres de blocage de l'accès public pour votre compartiment. Pour de plus amples informations, veuillez consulter Définition des autorisations pour l'accès au site web.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PublicRead", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":["arn:aws:s3:::awsexamplebucket1/*"] } ] }
Avertissement

Soyez vigilant lors de l'octroi de l'accès anonyme à votre compartiment Amazon S3 ou de la désactivation des paramètres du blocage de l'accès public. Lorsque vous accordez un accès anonyme, tout le monde peut accéder à votre compartiment. Il est recommandé de ne jamais autoriser un accès anonyme à votre compartiment Amazon S3 à moins que vous n'en ayez spécifiquement besoin, comme dans le cas de l'hébergement de site web statique.

Limitation de l'accès à des adresses IP spécifiques

Dans l'exemple suivant, les autorisations nécessaires pour effectuer des opérations Amazon S3 sur des objets dans le compartiment S3 spécifié sont refusées, sauf si la demande provient de la plage d'adresses IP spécifiée dans la condition.

Cette instruction identifie la plage 54.240.143.0/24.* en tant que plage d'adresses Internet Protocol version 4 (IPv4) autorisées.

Le bloc Condition utilise la condition NotIpAddress et la clé de condition aws:SourceIp, qui est une clé de condition à l’échelle d’AWS. Pour de plus amples informations sur l'utilisation de ces clés de condition, consultez la section Clés de condition Amazon S3. Les valeurs IPv4 aws:SourceIp font appel à la notation CIDR standard. Pour de plus amples informations, veuillez consulter Références des éléments de stratégie JSON IAM dans le Guide de l'utilisateur IAM.

Important

Remplacez la plage d'adresses IP dans cet exemple par une valeur appropriée pour votre cas d'utilisation avant d’employer cette stratégie. Dans le cas contraire, vous perdrez la possibilité d'accéder à votre compartiment.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::awsexamplebucket1", "arn:aws:s3:::awsexamplebucket1/*" ], "Condition": { "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"} } } ] }

Autorisation des adresses IPv4 et IPv6

Lorsque vous commencez à utiliser des adresses IPv6, nous vous recommandons de mettre à jour toutes les stratégies de votre organisation en y incluant des plages d'adresses IPv6, en plus des plages IPv4 existantes, afin de garantir le bon fonctionnement des stratégies lors de la transition vers IPv6.

L'exemple de stratégie de compartiment ci-dessous montre comment combiner des plages d'adresses IPv4 et IPv6 pour couvrir la totalité des adresses IP valides de l'organisation. Dans cet exemple, la stratégie autoriserait l'accès aux adresses IP 54.240.143.1 et 2001:DB8:1234:5678::1 et le refuserait aux adresses 54.240.143.129 et 2001:DB8:1234:5678:ABCD::1.

Les valeurs IPv6 pour aws:SourceIp doivent être au format CIDR standard. Pour IPv6, nous prenons en charge l'utilisation de :: pour représenter une plage de zéros (par exemple : 2032001:DB8:1234:5678::/64). Pour de plus amples informations, veuillez consulter Opérateurs de condition d'adresse IP dans le Guide de l'utilisateur IAM.

Important

Remplacez les plages d'adresses IP de cet exemple par des valeurs appropriées pour votre cas d'utilisation avant d’employer cette stratégie. Dans le cas contraire, vous pourriez perdre la possibilité d'accéder à votre compartiment.

{ "Id":"PolicyId2", "Version":"2012-10-17", "Statement":[ { "Sid":"AllowIPmix", "Effect":"Allow", "Principal":"*", "Action":"s3:*", "Resource":"arn:aws:s3:::awsexamplebucket1/*", "Condition": { "IpAddress": { "aws:SourceIp": [ "54.240.143.0/24", "2001:DB8:1234:5678::/64" ] }, "NotIpAddress": { "aws:SourceIp": [ "54.240.143.128/30", "2001:DB8:1234:5678:ABCD::/80" ] } } } ] }

Restriction de l'accès à un référent HTTP spécifique

Supposez que vous possédiez un site web avec un nom de domaine (www.example.com ou example.com) avec des liens vers des photos et des vidéos stockées dans votre compartiment Amazon S3 awsexamplebucket1. Par défaut, toutes les ressources Amazon S3 sont privées, si bien que seul le compte AWS qui a créé les ressources peut y accéder. Pour autoriser un accès en lecture à ces objets à partir de votre site Web, vous pouvez ajouter une stratégie de compartiment qui accorde l'autorisation s3:GetObject à condition (à l'aide de la clé aws:Referer) que la demande Get provienne initialement de pages Web spécifiques. La stratégie suivante spécifie la condition StringLike à l'aide de la clé de condition aws:Referer.

{ "Version":"2012-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests originating from www.example.com and example.com.", "Effect":"Allow", "Principal":"*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":"arn:aws:s3:::awsexamplebucket1/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }

Assurez-vous que les navigateurs que vous utilisez incluent l'en-tête HTTP referer dans la demande.

Octroi d'autorisations à une OAI Amazon CloudFront

L'exemple de stratégie de compartiment suivant autorise une identité d'accès à l'origine (OAI) CloudFront pour obtenir (lire) tous les objets de votre compartiment Amazon S3. Vous pouvez utiliser une OAI CloudFront pour permettre aux utilisateurs d'accéder aux objets de votre compartiment via CloudFront, mais pas directement via Amazon S3. Pour de plus amples informations, veuillez consulter Restriction de l'accès au contenu Amazon S3 à l'aide d'une identité d'accès à l'origine dans le Manuel du développeur Amazon CloudFront.

La stratégie suivante utilise l'ID de l'OAI comme stratégie de Principal. Pour de plus amples informations sur l'utilisation des stratégies de compartiment S3 pour autoriser l'accès à un OAI CloudFront, veuillez consulter Utilisation de stratégies de compartiment Amazon S3 dans le Manuel du développeur Amazon CloudFront.

Pour utiliser cet exemple :

{ "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:::awsexamplebucket1/*" } ] }

Ajout d'une stratégie de compartiment pour exiger une authentification MFA

Amazon S3 prend en charge l'accès aux API protégé par MFA, une fonction qui peut appliquer l'authentification multi-facteur (MFA) pour l'accès à vos ressources Amazon S3. La Multi-Factor Authentication fournit un niveau de sécurité supplémentaire que vous pouvez appliquer à votre environnement AWS. Il s'agit d'une fonctionnalité de sécurité qui exige des utilisateurs qu'ils prouvent qu'ils détiennent physiquement un appareil MFA en fournissant un code MFA valide. Pour de plus amples informations, veuillez consulter AWS Multi-Factor Authentication. Vous pouvez exiger l'authentification MFA pour toutes les demandes d'accès à vos ressources Amazon S3.

Vous pouvez appliquer l'exigence d'authentification MFA en utilisant la clé aws:MultiFactorAuthAge dans une stratégie de compartiment. Les utilisateurs d'AWS Identity and Access Management (IAM) peuvent accéder aux ressources Amazon S3 en utilisant des informations d'identification temporaires émises par AWS Security Token Service (AWS STS). Vous fournissez le code MFA au moment de la demande AWS STS.

Quand Amazon S3 reçoit une demande avec authentification MFA, la clé aws:MultiFactorAuthAge fournit une valeur numérique indiquant le temps écoulé (en secondes) depuis la création des informations d'identification temporaires. Si les informations d'identification temporaires fournies dans la demande n'ont pas été créées à l'aide d'un appareil MFA, la valeur de cette clé est null (absente). Dans une stratégie de compartiment, vous pouvez ajouter une condition pour vérifier cette valeur, comme illustré dans l'exemple suivant de stratégie de compartiment. La stratégie refuse toute opération Amazon S3 sur le dossier /taxdocuments dans le compartiment awsexamplebucket1 si la demande n'est pas authentifiée par MFA. Pour en savoir plus sur MFA, veuillez consulter Utilisation de l'authentification multi-facteur (MFA) dans AWS dans le Guide de l'utilisateur IAM.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::awsexamplebucket1/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }

La condition Null figurant dans le bloc Condition équivaut à true si la valeur de la clé aws:MultiFactorAuthAge est null, indiquant que les informations d'identification de sécurité temporaires figurant dans la demande ont été créées sans la clé MFA.

La stratégie de compartiment suivante est une extension de la stratégie de compartiment précédente. Elle inclut deux déclarations de stratégie. Une déclaration accorde l'autorisation s3:GetObject sur un compartiment (awsexamplebucket1) à tous. Une autre déclaration limite encore plus l'accès au dossier awsexamplebucket1/taxdocuments du compartiment en requérant l'authentification MFA.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::awsexamplebucket1/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }

Vous pouvez éventuellement utiliser une condition numérique pour limiter la durée pendant laquelle la clé aws:MultiFactorAuthAge est valide, indépendamment de la durée de vie des informations d'identification de sécurité temporaires utilisées pour l'authentification de la demande. Par exemple, la stratégie de compartiment suivante, non seulement exige l'authentification MFA, mais vérifie également le temps écoulé depuis la création de la session temporaire. Cette stratégie refuse toute opération si la valeur de la clé aws:MultiFactorAuthAge indique que la session temporaire a été créée depuis plus d'une heure (3 600 secondes).

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::awsexamplebucket1/taxdocuments/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::awsexamplebucket1/taxdocuments/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }

Octroi d'autorisations entre comptes pour charger des objets tout en garantissant que le propriétaire du compartiment dispose d'un contrôle total

L'exemple suivant montre comment autoriser un autre compte AWS à charger des objets dans votre compartiment tout en prenant le contrôle total des objets téléchargés. Cette stratégie impose qu'un compte AWS spécifique (123456789012) ait la possibilité de télécharger des objets uniquement s’il inclut la liste ACL prête à l’emploi de contrôle total du propriétaire du compartiment lors du chargement. La condition StringEquals figurant dans la stratégie spécifie la clé de condition s3:x-amz-acl pour exprimer cette exigence (veuillez consulter Clés de condition Amazon S3).

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"123456789012"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"} } } ] }

Octroi d'autorisations pour l'inventaire Amazon S3 et l'analyse Amazon S3

L'inventaire Amazon S3 crée des listes d'objets se trouvant dans le compartiment Amazon S3 et l'exportation analytique Amazon S3 crée des fichiers de sortie contenant les données utilisées dans l'analyse. Le compartiment pour lequel l'inventaire répertorie les objets est appelé compartiment source. Le compartiment dans lequel le fichier d'inventaire est écrit et celui dans lequel le fichier d'exportation analytique est écrit est appelé compartiment de destination. Vous devez créer une stratégie de compartiment pour le compartiment de destination lorsque vous configurez l'inventaire d'un compartiment Amazon S3 et lorsque vous configurez l'exportation analytique. Pour plus d'informations, consultez Inventaire Amazon S3 et Analyses Amazon S3 - Analyse de classe de stockage.

L'exemple de stratégie de compartiment suivante accorde à Amazon S3 l'autorisation d'écrire des objets (PUT) depuis le compte pour le compartiment source vers le compartiment de destination. Vous utilisez une stratégie de compartiment comme celle-ci sur le compartiment de destination lorsque vous configurez l'inventaire Amazon S3 et l'exportation analytique Amazon S3.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"InventoryAndAnalyticsExamplePolicy", "Effect":"Allow", "Principal": {"Service": "s3.amazonaws.com"}, "Action":"s3:PutObject", "Resource":["arn:aws:s3:::destinationbucket/*"], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::sourcebucket" }, "StringEquals": { "aws:SourceAccount": "1234567890", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }