Exemples de politiques de compartiment utilisant des clés de condition - Amazon Simple Storage Service

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.

Exemples de politiques de compartiment utilisant des clés de condition

Vous pouvez utiliser le langage de la politique d’accès pour spécifier des conditions lorsque vous accordez des autorisations. Vous pouvez utiliser l’élément Condition facultatif ou le bloc Condition pour spécifier des conditions lorsqu’une politique est appliquée.

Pour les stratégies qui utilisent des clés de condition Amazon S3 pour les opérations d’objet et de compartiment, consultez les exemples suivants. Pour plus d’informations sur les clés de condition, consultez Clés de condition de politique pour Amazon S3. Pour obtenir la liste complète des actions, des clés de condition et des ressources Amazon S3 que vous pouvez spécifier dans les politiques, consultez Actions, ressources et clés de condition pour Amazon S3 dans la Référence de l’autorisation de service.

Pour plus d’informations sur les autorisations relatives aux opérations d’API S3 par type de ressource S3, consultez Autorisations requises pour les opérations d’API Amazon S3.

Exemples : clés de condition Amazon S3 pour les opérations d’objet

Les exemples suivants montrent comment utiliser des clés de condition spécifiques à Amazon S3 pour les opérations au niveau des objets. Pour obtenir la liste complète des actions, des clés de condition et des ressources Amazon S3 que vous pouvez spécifier dans les politiques, consultez Actions, ressources et clés de condition pour Amazon S3 dans la Référence de l’autorisation de service.

Pour plus d’informations sur les autorisations relatives aux opérations d’API S3 par type de ressource S3, consultez Autorisations requises pour les opérations d’API Amazon S3.

Plusieurs exemples de stratégies montrent comment vous pouvez utiliser des clés de condition avec des opérations PUT Object. Les opérations PUT Object autorisent les entêtes spécifiques à la liste de contrôle d’accès (ACL) que vous pouvez utiliser pour accorder des autorisations basées sur les listes ACL. En utilisant ces clés de condition, vous pouvez définir une condition pour exiger des autorisations d’accès spécifiques lorsque l’utilisateur charge un objet. Vous pouvez également accorder des autorisations basées sur l'ACL lors de l'opération. PutObjectAcl Pour plus d'informations, consultez PutObjectAclle manuel Amazon S3 Amazon Simple Storage Service API Reference. Pour plus d'informations sur ACLs, voirPrésentation de la liste de contrôle d’accès (ACL).

Exemple 1 : Octroyer l’autorisation s3:PutObject exigeant que les objets soient stockés en utilisant le chiffrement côté serveur

Supposons que le Compte A possède un compartiment. L’administrateur du compte souhaite accorder à Jane, une utilisatrice du compte A, l’autorisation de charger des objets avec cette condition : Jane doit toujours demander le chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3). L’administrateur du compte A peut utiliser la clé de condition s3:x-amz-server-side-encryption pour spécifier cette exigence, comme illustré. La paire clé-valeur du bloc Condition suivant spécifie la clé de condition s3:x-amz-server-side-encryption et SSE-S3 (AES256) comme type de chiffrement :

"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }}

Lorsque vous testez cette autorisation à l'aide du AWS CLI, vous devez ajouter le chiffrement requis à l'aide du --server-side-encryption paramètre, comme indiqué dans l'exemple suivant. Pour utiliser cet exemple de commande, remplacez user input placeholders par vos propres informations.

aws s3api put-object --bucket amzn-s3-demo-bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountAadmin

Exemple 2 : Octroyer l’autorisation s3:PutObject pour copier des objets avec une restriction sur la source de copie

Dans une demande d'PUTobjet, lorsque vous spécifiez un objet source, la demande est une opération de copie (voir CopyObject). Par conséquent, le propriétaire du compartiment peut accorder à un utilisateur l'autorisation de copier des objets avec des restrictions sur la source, par exemple :

  • Autoriser la copie des objets uniquement à partir du compartiment source spécifié (par exemple, amzn-s3-demo-source-bucket)

  • Autoriser la copie d’objets à partir du compartiment source spécifié et uniquement les objets dont le préfixe de nom de clé commence par public/ (par exemple, amzn-s3-demo-source-bucket/public/*)

  • Autoriser la copie d’un objet spécifique uniquement à partir du compartiment source (par exemple, amzn-s3-demo-source-bucket/example.jpg)

La politique de compartiment suivante accorde à l’utilisateur (Dave) l’autorisation s3:PutObject. Cette politique lui permet de copier des objets uniquement à la condition que la demande inclue l’en-tête s3:x-amz-copy-source et que la valeur de l’en-tête spécifie le préfixe de nom de clé /amzn-s3-demo-source-bucket/public/*. Pour utiliser cet exemple de politique, remplacez user input placeholders par vos propres informations.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "cross-account permission to user in your own account", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/*" } } } ] }
Testez la politique avec le AWS CLI

Vous pouvez tester l'autorisation à l'aide de la AWS CLI copy-object commande. Vous spécifiez la source en ajoutant le paramètre --copy-source, le préfixe du nom de clé doit correspondre au préfixe autorisé dans la stratégie. Vous devez fournir à l’utilisateur Dave les informations d’identification en utilisant le paramètre --profile. Pour plus d'informations sur la configuration du AWS CLI, consultez la section Développement avec Amazon S3 à l'aide de la AWS CLI dans le manuel Amazon S3 API Reference.

aws s3api copy-object --bucket amzn-s3-demo-source-bucket --key HappyFace.jpg --copy-source amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg --profile AccountADave
Octroyer une autorisation pour copier uniquement un objet spécifique

La stratégie précédente utilise la condition StringNotLike. Pour accorder l’autorisation de copier uniquement un objet spécifique, vous devez remplacer la condition StringNotLike par StringNotEquals, puis spécifier la clé d’objet exacte, comme indiqué dans l’exemple suivant. Pour utiliser cet exemple de commande, remplacez user input placeholders par vos propres informations.

"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg" } }

Exemple 3 : Octroyer l’accès à une version spécifique d’un objet

Supposons que le compte A possède un compartiment pour lequel la gestion des versions est activée. Le compartiment a plusieurs versions de l’objet HappyFace.jpg. L’administrateur du compte A souhaite maintenant octroyer à l’utilisateur Dave l’autorisation d’obtenir uniquement une version spécifique de l’objet. Pour ce faire, l’administrateur du compte octroie à Dave l’autorisation s3:GetObjectVersion de manière conditionnelle, comme indiqué dans l’exemple suivant. La paire de clé-valeur dans le bloc Condition spécifie la clé de condition s3:VersionId. Dans ce cas, pour récupérer l’objet à partir du compartiment spécifié pour lequel la gestion des versions est activée, Dave doit connaître l’ID exact de la version de l’objet. Pour utiliser cet exemple de politique, remplacez user input placeholders par vos propres informations.

Pour plus d’informations, consultez .GetObjectdans le manuel Amazon Simple Storage Service API Reference.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e" } } } ] }
Testez la politique avec le AWS CLI

Vous pouvez tester les autorisations définies dans cette politique en utilisant la AWS CLI get-object commande associée au --version-id paramètre pour identifier la version d'objet spécifique à récupérer. Cette commande récupère la version spécifiée de l’objet et l’enregistre dans le fichier OutputFile.jpg.

aws s3api get-object --bucket amzn-s3-demo-bucket --key HappyFace.jpg OutputFile.jpg --version-id AaaHbAQitwiL_h47_44lRO2DDfLlBO5e --profile AccountADave

Exemple 4 : Octroi d’autorisations basées sur des balises d’objets

Pour obtenir des exemples sur l’utilisation des clés de condition de balisage d’objet avec des opérations Amazon S3, consultez Stratégies de balisage et de contrôle d’accès.

Exemple 5 : Restriction de l’accès par l’ID de Compte AWS du propriétaire du compartiment

Vous pouvez utiliser la clé de s3:ResourceAccount condition aws:ResourceAccount ou pour écrire des politiques de point de terminaison IAM ou de cloud privé virtuel (VPC) qui limitent l'accès des utilisateurs, des rôles ou des applications aux compartiments Amazon S3 détenus par un identifiant spécifique. Compte AWS Vous pouvez utiliser cette clé de condition pour empêcher des clients de votre VPC d’accéder aux compartiments dont vous n’êtes pas propriétaire.

Sachez toutefois que certains AWS services dépendent de l'accès à des buckets AWS gérés. Par conséquent, l’utilisation de la clé aws:ResourceAccount ou s3:ResourceAccount dans votre politique IAM risque également d’avoir un impact sur l’accès à ces ressources. Pour plus d’informations, consultez les ressources suivantes :

Pour plus d’informations sur les clés de condition aws:ResourceAccount et s3:ResourceAccount, et pour obtenir des exemples illustrant leur utilisation, consultez Limiter l’accès aux compartiments Amazon S3 détenus par des Comptes AWS spécifiques dans le blog AWS Storage.

Exemple 6 : Exiger une version minimale de TLS

Vous pouvez utiliser la clé de condition s3:TlsVersion afin d’écrire des politiques IAM, des politiques de point de terminaison de cloud privé virtuel (VPC) ou des politiques de compartiment pour restreindre l’accès des utilisateurs ou des applications aux compartiments Amazon S3 en fonction de la version TLS utilisée par le client. Vous pouvez utiliser cette clé de condition pour écrire des stratégies qui nécessitent une version TLS minimale.

Cet exemple de politique de compartiment refuse les demandes PutObject des clients dont la version TLS est inférieure à 1.2, par exemple 1.1 ou 1.0. Pour utiliser cet exemple de politique, remplacez user input placeholders par vos propres informations.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }

Cet exemple de politique de compartiment autorise les demandes PutObject des clients dont la version TLS est supérieure à 1.1, par exemple 1.2, 1.3 ou plus :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }

Exemple 7 : Exclure certains principaux d’une instruction Deny

La politique de compartiment suivante refuse l’accès s3:GetObject au compartiment amzn-s3-demo-bucket, à l’exception des principaux possédant le numéro de compte 123456789012. Pour utiliser cet exemple de politique, remplacez user input placeholders par vos propres informations.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessFromPrincipalNotInSpecificAccount", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": [ "123456789012" ] } } } ] }

Exemple 8 : obliger les clients à télécharger des objets de manière conditionnelle en fonction des noms de clés des objets ou ETags

Avec les écritures conditionnelles, vous pouvez ajouter un en-tête supplémentaire à vos demandes WRITE afin de spécifier les conditions préalables à une opération S3. Cet en-tête spécifie une condition qui, si elle n’est pas remplie, entraînera l’échec de l’opération S3. Par exemple, vous pouvez empêcher le remplacement de données existantes en confirmant qu’aucun objet portant le même nom de clé ne se trouve déjà dans votre compartiment lors du chargement de l’objet. Vous pouvez également vérifier la balise d'entité (ETag) d'un objet dans Amazon S3 avant d'écrire un objet.

Pour obtenir des exemples de politiques de compartiment qui utilisent les conditions d’une politique de compartiment pour appliquer les écritures conditionnelles, consultez Application d’écritures conditionnelles sur des compartiments Amazon S3.

Exemples : clés de condition Amazon S3 pour les opérations sur les compartiments

Cette section fournit des exemples de politiques qui vous montrent comment utiliser des clés de condition spécifiques à Amazon S3 pour les opérations au niveau des compartiments.

Exemple 1 : Accorder une autorisation s3:GetObject assortie d’une condition au niveau d’une adresse IP

Vous pouvez autoriser les utilisateurs authentifiés à utiliser l’action s3:GetObject si la demande émane d’une plage d’adresses IP spécifique (par exemple, 192.0.2.*), à l’exception de l’adresse IP que vous souhaitez exclure (par exemple, 192.0.2.188). Dans le bloc Condition, les éléments IpAddress et NotIpAddress sont des conditions. Chacune est associée à une paire clé-valeur pour évaluation. Les deux paires clé-valeur de cet exemple utilisent la touche aws:SourceIp AWS large. Pour utiliser cet exemple de politique, remplacez user input placeholders par vos propres informations.

Note

Les valeurs de clé IPAddress et NotIpAddress spécifiées dans le bloc Condition utilisent la notation CIDR comme décrit dans RFC 4632. Pour plus d'informations, consultez http://www.rfc-editor. org/rfc/rfc4632.txt.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "192.0.2.0/24" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32" } } } ] }

Vous pouvez également utiliser d'autres AWS clés de condition générales dans les politiques Amazon S3. Par exemple, vous pouvez spécifier les clés de condition aws:SourceVpce et aws:SourceVpc dans les stratégies de compartiment pour les points de terminaison de VPC. Pour plus d’exemples, consultez Contrôle de l’accès à partir des points de terminaison d’un VPC avec des stratégies de compartiment.

Note

Pour certaines clés de condition AWS globales, seuls certains types de ressources sont pris en charge. Par conséquent, vérifiez si Amazon S3 prend en charge la clé de condition globale et le type de ressource que vous souhaitez utiliser, ou si vous devez utiliser une clé de condition spécifique à Amazon S3 à la place. Pour obtenir la liste complète des types de ressources et des clés de condition prises en charge pour Amazon S3, consultez Actions, ressources et clés de condition pour Amazon S3 dans la Référence de l’autorisation de service.

Pour plus d’informations sur les autorisations relatives aux opérations d’API S3 par type de ressource S3, consultez Autorisations requises pour les opérations d’API Amazon S3.

Exemple 2 : Obtention d’une liste d’objets dans un compartiment avec un préfixe spécifique

Vous pouvez utiliser la clé de s3:prefix condition pour limiter la réponse du ListObjectsV2Opération d'API permettant de saisir des noms avec un préfixe spécifique. Si vous êtes le propriétaire du compartiment, vous pouvez utiliser cette clé de condition pour restreindre un utilisateur afin qu’il ne puisse répertorier que le contenu d’un préfixe spécifique dans le compartiment. La clé de condition s3:prefix est utile si les objets du compartiment sont organisés par préfixe de nom de clé.

La console Amazon S3 utilise des préfixes de nom de clé pour afficher un concept de dossier. Seule la console prend en charge le concept de dossiers ; l’API Amazon S3 ne prend en charge que les compartiments et les objets. Par exemple, si vous avez deux objets avec les noms de clés public/object1.jpg et public/object2.jpg, la console affiche ces objets dans le dossier public. Dans l’API Amazon S3, il s’agit d’objets avec des préfixes, pas d’objets dans des dossiers. Pour plus d’informations sur l’utilisation de préfixes et de délimiteurs pour filtrer les autorisations d’accès, consultez Contrôle de l’accès à un compartiment avec des stratégies d’utilisateur.

Dans le scénario suivant, le propriétaire du compartiment et le compte parent auquel appartient l’utilisateur sont identiques. Ainsi, le propriétaire du compartiment peut utiliser une politique de compartiment ou une politique utilisateur. Pour plus d'informations sur les autres clés de condition que vous pouvez utiliser avec l'opération ListObjectsV2 d'API, voir ListObjectsV2.

Note

Si la gestion des versions est activée pour le compartiment et si vous souhaitez répertorier les objets dans ce compartiment, vous devez accorder l’autorisation s3:ListBucketVersions dans les politiques suivantes, au lieu de l’autorisation s3:ListBucket. L’autorisation s3:ListBucketVersions prend également en charge la clé de condition s3:prefix.

Stratégie utilisateur

La politique utilisateur suivante octroie l's3:ListBucketautorisation (voir ListObjectsV2) avec une Condition instruction qui demande à l'utilisateur de spécifier un préfixe dans la demande avec une valeur deprojects. Pour utiliser cet exemple de politique, remplacez user input placeholders par vos propres informations.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }

L’instruction Condition restreint l’utilisateur pour qu’il ne puisse répertorier que les clés d’objet comportant le préfixe projects. L’instruction Deny explicite ajoutée refuse la demande de l’utilisateur de répertorier les clés avec un autre préfixe, quelles que soient les autres autorisations dont dispose cet utilisateur. Par exemple, il est possible que l’utilisateur obtienne l’autorisation de répertorier les clés d’objets sans aucune restriction, grâce aux mises à jour de la politique utilisateur précédente ou via une politique de compartiment. Comme les instructions Deny explicites ont toujours la priorité sur les instructions Allow, si l’utilisateur essaie de répertorier des clés autres que celles qui ont le préfixe projects, la demande sera refusée.

Politique de compartiment

Si vous ajoutez l’élément Principal à la politique utilisateur ci-dessus, identifiant l’utilisateur, vous avez maintenant une politique de compartiment comme indiqué dans l’exemple suivant. Pour utiliser cet exemple de politique, remplacez user input placeholders par vos propres informations.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }
Testez la politique avec le AWS CLI

Vous pouvez tester la politique à l'aide de la list-object AWS CLI commande suivante. Dans la commande, vous fournissez les informations d’identification utilisateur en utilisant le paramètre --profile. Pour plus d'informations sur la configuration et l'utilisation du AWS CLI, consultez la section Développement avec Amazon S3 à l'aide de la AWS CLI dans le manuel Amazon S3 API Reference.

aws s3api list-objects --bucket amzn-s3-demo-bucket --prefix projects --profile AccountA

Exemple 3 : Définition du nombre maximal de clés

Vous pouvez utiliser la clé de s3:max-keys condition pour définir le nombre maximum de clés qu'un demandeur peut renvoyer dans un ListObjectsV2 ou ListObjectVersions de la demande. Par défaut, les opérations d’API renvoient jusqu’à 1 000 clés. Pour obtenir la liste des opérateurs de conditions numériques que vous pouvez utiliser avec s3:max-keys et les exemples qui les accompagnent, consultez Opérateurs de conditions numériques dans le Guide de l’utilisateur IAM.