Exemples de politiques relatives aux compartiments 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 relatives aux compartiments utilisant des clés de condition

Vous pouvez utiliser le langage d'access policy 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 stratégie 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 conditions 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 la section Actions, ressources et clés de condition pour Amazon S3 dans la référence d'autorisation de service.

Exemples - Clés de condition Amazon S3 pour les opérations sur les objets

Cette section fournit des exemples qui vous montrent comment utiliser des clés de condition spécifiques à Amazon S3 pour les opérations sur les 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 la section Actions, ressources et clés de condition pour Amazon S3 dans la référence d'autorisation de service.

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, le propriétaire du compartiment peut définir une condition pour nécessiter des autorisations d'accès spécifiques quand 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 en savoir plus sur les listes ACL, consultez Présentation de la liste de contrôle d'accès (ACL).

Exemple 1 : Octroi de s3 : PutObject autorisation nécessitant des objets stockés à l'aide du 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 télécharger des objets avec comme condition que Jane demande toujours le chiffrement côté serveur afin qu'Amazon S3 enregistre les objets chiffrés. L'administrateur du compte A peut accomplir cela en utilisant la clé de condition s3:x-amz-server-side-encryption comme illustré. La paire de clé-valeur dans le bloc Condition spécifie la clé s3:x-amz-server-side-encryption.

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

Lorsque vous testez l'autorisation à l'aide du AWS CLI, vous devez ajouter le paramètre requis à l'aide du --server-side-encryption paramètre.

aws s3api put-object --bucket example1bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountBadmin

Exemple 2 : Octroi à s3 : PutObject autorisation de copier des objets avec une restriction sur la source de copie

Dans la demande PUT Object, quand vous spécifiez un objet source, il s'agit d'une opération de copie (veuillez consulter PUT Object - Copy). En conséquence, le propriétaire du compartiment peut octroyer une autorisation utilisateur pour copier des objets avec des restrictions sur la source, par exemple :

  • Autoriser la copie d'objets uniquement à partir du compartiment sourcebucket.

  • Autoriser la copie d'objets à partir du compartiment source, et uniquement les objets dont le préfixe de nom de clé commence par public/ f (par exemple, sourcebucket/public/*).

  • Autoriser la copie uniquement d'un objet spécifique à partir du compartiment source (par exemple, sourcebucket/example.jpg).

La stratégie de compartiment suivante accorde à l'utilisateur (Dave) l'autorisation s3:PutObject. Celle-ci 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é /awsexamplebucket1/public/*.

{ "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:::awsexamplebucket1/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/folder", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "awsexamplebucket1/public/*" } } } ] }
Testez la politique à l'aide du 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, consultezDéveloppement avec Amazon S3 à l'aide de la AWS CLI.

aws s3api copy-object --bucket awsexamplebucket1 --key HappyFace.jpg --copy-source examplebucket/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 octroyer l'autorisation de copier uniquement un objet spécifique, vous devez changer la condition de StringNotLike à StringNotEquals, puis spécifier la clé d'objet exacte comme indiqué.

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

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

Supposons que le Compte A possède un compartiment activé pour la version. Le compartiment a plusieurs versions de l'objet HappyFace.jpg. L'administrateur de compte souhaite maintenant octroyer à son utilisateur Dave l'autorisation d'obtenir uniquement une version spécifique de l'objet. L'administrateur de compte peut accomplir cela en octroyant à Dave l'autorisation s3:GetObjectVersion de manière conditionnelle comme indiqué. La paire de clé-valeur dans le bloc Condition spécifie la clé de condition s3:VersionId. Dans ce cas, Dave doit connaître l'ID exact de la version de l'objet pour récupérer l'objet.

Pour plus d'informations, consultez GetObjectle 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:::examplebucketversionenabled/HappyFace.jpg" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e" } } } ] }
Testez la politique à l'aide du AWS CLI

Vous pouvez tester les autorisations à l'aide de la AWS CLI get-object commande avec le --version-id paramètre identifiant la version spécifique de l'objet. La commande récupère l'objet et l'enregistre dans le fichier OutputFile.jpg.

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

Exemple 4 : Octroi d'autorisations en fonction 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, veuillez consulter Stratégies de balisage et de contrôle d'accès.

Exemple 5 : restriction de l'accès en fonction de l' Compte AWS ID du propriétaire du compartiment

Vous pouvez utiliser la clé aws:ResourceAccount ou s3:ResourceAccount pour écrire des politiques IAM ou des politiques de point de terminaison du cloud privé virtuel (VPC) qui restreignent l'accès des utilisateurs, des rôles ou des applications aux compartiments Amazon S3 appartenant à un ID de Compte AWS spécifique. Vous pouvez utiliser cette clé de condition si vous souhaitez empêcher les clients de votre VPC d'accéder aux compartiments dont vous n'êtes pas le 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 et d'exemples, veuillez consulter les ressources suivantes :

Exemple 6 : Exiger une version minimale de TLS

Vous pouvez utiliser la clé de TlsVersion condition s3 : pour écrire des politiques IAM, Virtual Private Cloud Endpoint (VPCE) ou de bucket qui limitent 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 PutObject demandes des clients dont la version TLS est inférieure à 1.2, par exemple 1.1 ou 1.0.

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

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

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

Exemples - Clés de condition Amazon S3 pour les opérations sur les compartiments

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

Exemple 1 : Octroi d'une GetObject autorisation s3 : assortie d'une condition sur une adresse IP

Vous pouvez autoriser les utilisateurs authentifiés à utiliser l's3:GetObjectaction si la demande provient d'une plage d'adresses IP spécifique (192.0.2.*), sauf si l'adresse IP est 192.0.2.188. Dans le bloc de condition, les éléments IpAddress et NotIpAddress sont des conditions, chacune disposant d'une paire clé-valeur pour évaluation. Dans cet exemple, les deux paires clé-valeur utilisent la clé aws:SourceIp AWS‐wide.

Note

Les valeurs de clé IPAddress et NotIpAddress spécifiées dans la 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:::awsexamplebucket1/*", "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 pris en charge pour Amazon S3, consultez la section Actions, ressources et clés de condition pour Amazon S3 dans la référence d'autorisation de service.

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 de l'API GET Bucket (ListObjects) aux noms de clés dotés d'un préfixe spécifique. Si vous êtes le propriétaire du compartiment, vous pouvez limiter un utilisateur pour répertorier le contenu d'un préfixe spécifique dans le compartiment. Cette clé de condition 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. 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.

Par exemple, si vous avez deux objets avec les noms de clés public/object1.jpg et public/object2.jpg, la console affiche les 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. Cependant, dans l'API Amazon S3, si vous organisez vos clés d'objet en utilisant de tels préfixes, vous pouvez octroyer l'autorisation s3:ListBucket avec la condition s3:prefix, ce qui permet à l'utilisateur d'obtenir une liste des noms de clés avec ces préfixes spécifiques.

Dans cet exemple, le propriétaire du compartiment et le compte parent auquel appartient l'utilisateur sont identiques. Ainsi, le propriétaire du compartiment peut utiliser une stratégie de compartiment ou une stratégie d'utilisateur. Pour plus d'informations sur les autres clés de condition que vous pouvez utiliser avec l'API GET Bucket (ListObjects), consultez ListObjects.

Stratégie utilisateur

La stratégie d'utilisateur suivante octroie l'autorisation s3:ListBucket (veuillez consulter GET Bucket (List Objects)) avec une condition qui nécessite que l'utilisateur spécifie le préfixe prefix dans la demande avec la valeur projects.

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

La condition restreint l'utilisateur à répertorier les clés d'objets avec le préfixe projects. Le refus explicite ajouté refuse la demande de l'utilisateur de répertorier les clés avec un autre préfixe, peu importe les autres autorisations dont dispose l'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 stratégie d'utilisateur précédente ou via une stratégie de compartiment. Dans la mesure où le refus explicite a toujours priorité, la demande de l'utilisateur de répertorier des clés autres que le préfixe projects est refusée.

Stratégie de compartiment

Si vous ajoutez l'élément Principal à la stratégie utilisateur ci-dessus, identifiant l'utilisateur, vous avez maintenant une stratégie de compartiment comme indiqué.

{ "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:::awsexamplebucket1", "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:::awsexamplebucket1", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }
Testez la politique à l'aide du 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, consultezDéveloppement avec Amazon S3 à l'aide de la AWS CLI.

aws s3api list-objects --bucket awsexamplebucket1 --prefix examplefolder --profile AccountADave

Si le compartiment est activé pour la version, pour répertorier les objets dans le compartiment, vous devez accorder l'autorisation s3:ListBucketVersions dans la stratégie précédente, au lieu de l'autorisation s3:ListBucket. Cette autorisation prend également en charge la clé de condition s3:prefix.

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 que le demandeur peut renvoyer dans un bucket (ListObjects) ou une ListObjectVersionsdemande GET. Par défaut, l'API retourne 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, veuillez consulter Opérateurs de conditions numériques dans le Guide de l'utilisateur IAM.