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

Exemples de stratégies 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 avec l’opération PutObjectAcl. Pour plus d’informations, consultez PutObjectAcl dans la Référence des API Amazon S3 Amazon Simple Storage Service. Pour en savoir plus sur les listes ACL, consultez Pré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 de l’AWS CLI, vous devez ajouter le chiffrement requis à l’aide du paramètre --server-side-encryption, 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 la demande PUT, quand vous spécifiez un objet source, il s’agit d’une opération de copie (voir CopyObject). 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 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 stratégie 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.

JSON
{ "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/*" } } } ] }
Tester la stratégie avec AWS CLI

Vous pouvez tester l’autorisation en utilisant la commande AWS CLI de copy-object. 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 de l’AWS CLI, consultez Développement avec Amazon S3 à l’aide de l’interface de ligne de commande AWS dans la Référence des API Amazon S3.

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, veuillez consulter GetObject dans la Référence des API Amazon Simple Storage Service.

JSON
{ "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" } } } ] }
Tester la stratégie avec AWS CLI

Vous pouvez tester les autorisations de cette politique en utilisant la commande d’AWS CLI get-object avec le paramètre --version-id identifiant 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 condition 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 pour empêcher des clients de votre VPC d’accéder aux compartiments dont vous n’êtes pas propriétaire.

Cependant, n’oubliez pas que certains services AWS reposent sur l’accès aux compartiments gérés AWS. 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 stratégies 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.

Note

Lorsque les services AWS appellent d’autres AWS en votre nom (appels de service à service), certains contextes d’autorisation spécifiques au réseau sont expurgés, notamment s3:TlsVersion, aws:SecureTransport, aws:SourceIp et aws:VpcSourceIp. Si votre stratégie utilise ces clés de condition avec des instructions Deny, les principaux des services AWS risquent d’être bloqués par inadvertance. Pour permettre aux services AWS de fonctionner correctement tout en respectant vos exigences de sécurité, excluez les principaux des services de vos instructions Deny en ajoutant la clé de condition aws:PrincipalIsAWSService avec une valeur de false. Par exemple :

{ "Effect": "Deny", "Action": "s3:*", "Resource": "*", "Condition": { "Bool": { "aws:SecureTransport": "false", "aws:PrincipalIsAWSService": "false" } } }

Cette stratégie refuse l’accès aux opérations S3 lorsque le protocole HTTPS n’est pas utilisé (aws:SecureTransport est faux), mais uniquement pour les principaux de services non AWS. Ainsi, vos restrictions conditionnelles s’appliquent à tous les principaux, à l’exception de ceux des services AWS.

Cet exemple de stratégie 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.

JSON
{ "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 stratégie 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 :

JSON
{ "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 stratégie 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.

JSON
{ "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 à charger des objets de manière conditionnelle en fonction des noms de clés d’objets ou des balises d’entité

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é d’un objet dans Amazon S3 avant d’écrire un objet.

Pour obtenir des exemples de stratégies de compartiment qui utilisent les conditions d’une stratégie 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 dans cet exemple utilisent la clé aws:SourceIp à l’échelle d’AWS. 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.

JSON
{ "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 clés de condition à l’échelle d’AWS dans des stratégies 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 de nombreuses clés de condition globales AWS, 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 condition s3:prefix pour limiter la réponse de l’API ListObjectsV2 aux noms de clés 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 stratégie 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 d’API ListObjectsV2, consultez 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 accorde l’autorisation s3:ListBucket (voir ListObjectsV2) avec une instruction Condition qui oblige l’utilisateur à spécifier un préfixe dans la demande avec la valeur projects. Pour utiliser cet exemple de politique, remplacez user input placeholders par vos propres informations.

JSON
{ "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 stratégie 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.

Stratégie de compartiment

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

JSON
{ "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" } } } ] }
Tester la stratégie avec AWS CLI

Vous pouvez tester la stratégie en utilisant la commande list-object de la AWS CLI 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 de l’AWS CLI, consultez Développement avec Amazon S3 à l’aide de l’interface de ligne de commande AWS dans la Référence des API Amazon S3.

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 condition s3:max-keys pour définir le nombre maximal de clés qu’un demandeur peut renvoyer dans une demande ListObjectsV2 ou ListObjectVersions. 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.