

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
<a name="amazon-s3-policy-keys"></a>

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](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys). 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](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) 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](using-with-s3-policy-actions.md).

## Exemples : clés de condition Amazon S3 pour les opérations d’objet
<a name="object-keys-in-amazon-s3-policies"></a>

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](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) 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](using-with-s3-policy-actions.md).

Plusieurs exemples de stratégies montrent comment vous pouvez utiliser des clés de condition avec des opérations [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html). 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 [PutObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html)le manuel *Amazon S3 Amazon Simple Storage Service API Reference*. Pour plus d'informations sur ACLs, voir[Présentation de la liste de contrôle d’accès (ACL)](acl-overview.md).

**Topics**
+ [Exemple 1 : Octroyer l’autorisation `s3:PutObject` exigeant que les objets soient stockés en utilisant le chiffrement côté serveur](#putobject-require-sse-2)
+ [Exemple 2 : Octroyer l’autorisation `s3:PutObject` pour copier des objets avec une restriction sur la source de copie](#putobject-limit-copy-source-3)
+ [Exemple 3 : Octroyer l’accès à une version spécifique d’un objet](#getobjectversion-limit-access-to-specific-version-3)
+ [Exemple 4 : Octroi d’autorisations basées sur des balises d’objets](#example-object-tagging-access-control)
+ [Exemple 5 : restriction de l'accès en fonction de l' Compte AWS ID du propriétaire du compartiment](#example-object-resource-account)
+ [Exemple 6 : Exiger une version minimale de TLS](#example-object-tls-version)
+ [Exemple 7 : Exclure certains principaux d’une instruction `Deny`](#example-exclude-principal-from-deny-statement)
+ [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](#example-conditional-writes-enforce)

### Exemple 1 : Octroyer l’autorisation `s3:PutObject` exigeant que les objets soient stockés en utilisant le chiffrement côté serveur
<a name="putobject-require-sse-2"></a>

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
<a name="putobject-limit-copy-source-3"></a>

Dans la demande `PUT`, quand vous spécifiez un objet source, il s’agit d’une opération de copie (voir [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)). 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/*"
                }
            }
        }
    ]
}
```

------

**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, consultez la section [Développement avec Amazon S3 à l'aide de la AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) 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
<a name="getobjectversion-limit-access-to-specific-version-3"></a>

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 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) dans la *Référence d’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"
                }
            }
        }
    ]
}
```

------

**Testez la politique à l'aide du 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
<a name="example-object-tagging-access-control"></a>

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](tagging-and-policies.md).

### Exemple 5 : restriction de l'accès en fonction de l' Compte AWS ID du propriétaire du compartiment
<a name="example-object-resource-account"></a>

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 :
+ [Restreindre l’accès aux compartiments dans un Compte AWS spécifié](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#bucket-policies-s3) dans le *Guide AWS PrivateLink *
+ [Restreindre l’accès aux compartiments utilisés par Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-minimum-s3-perms) dans le *Guide de l’utilisateur Amazon ECR*
+ [Fournissez l'accès requis à Systems Manager pour les buckets Amazon S3 AWS gérés](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-minimum-s3-permissions.html) *dans le Guide AWS Systems Manager *

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](https://aws.amazon.com/blogs/storage/limit-access-to-amazon-s3-buckets-owned-by-specific-aws-accounts/) dans le *blog AWS Storage*.

### Exemple 6 : Exiger une version minimale de TLS
<a name="example-object-tls-version"></a>

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. 

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

```
{
  "Effect": "Deny",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false",
      "aws:PrincipalIsAWSService": "false"
    }
  }
}
```
Cette politique refuse l'accès aux opérations S3 lorsque le protocole HTTPS n'est pas utilisé (`aws:SecureTransport`c'est faux), mais uniquement pour les opérateurs non AWS liés au service. Cela garantit que vos restrictions conditionnelles s'appliquent à tous les principaux, à l'exception des principaux AWS de service.

**Example**  
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.    
****  

```
{
    "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
                }
            }
        }
    ]
}
```

**Example**  
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 :    
****  

```
{
    "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`
<a name="example-exclude-principal-from-deny-statement"></a>

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 à télécharger des objets de manière conditionnelle en fonction des noms de clés des objets ou ETags
<a name="example-conditional-writes-enforce"></a>

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 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](conditional-writes-enforce.md).

## Exemples : clés de condition Amazon S3 pour les opérations sur les compartiments
<a name="bucket-keys-in-amazon-s3-policies"></a>

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.

**Topics**
+ [Exemple 1 : Accorder une autorisation `s3:GetObject` assortie d’une condition au niveau d’une adresse IP](#AvailableKeys-iamV2)
+ [Exemple 2 : Obtention d’une liste d’objets dans un compartiment avec un préfixe spécifique](#condition-key-bucket-ops-2)
+ [Exemple 3 : Définition du nombre maximal de clés](#example-numeric-condition-operators)

### Exemple 1 : Accorder une autorisation `s3:GetObject` assortie d’une condition au niveau d’une adresse IP
<a name="AvailableKeys-iamV2"></a>

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. Dans cet exemple, les deux paires clé-valeur 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/rfc](http://www.rfc-editor.org/rfc/rfc4632.txt)4632.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 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](example-bucket-policies-vpc-endpoint.md).

**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](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) 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](using-with-s3-policy-actions.md).

### Exemple 2 : Obtention d’une liste d’objets dans un compartiment avec un préfixe spécifique
<a name="condition-key-bucket-ops-2"></a>

Vous pouvez utiliser la clé de condition `s3:prefix` pour limiter la réponse de l’API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) 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](walkthrough1.md). 

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 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html).

**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 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)) 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. 

**Politique 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"  
             }
          } 
       }         
    ]
}
```

------

**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, consultez la section [Développement avec Amazon S3 à l'aide de la AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) 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
<a name="example-numeric-condition-operators"></a>

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 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) ou [https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html). 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Numeric) dans le *Guide de l’utilisateur IAM*.