

# Exemplos de políticas de bucket usando chaves de condição
<a name="amazon-s3-policy-keys"></a>

Você pode usar a linguagem de políticas de acesso para especificar condições ao conceder permissões. É possível usar o elemento `Condition` opcional ou o bloco `Condition` para especificar condições referentes a quando uma política está em vigor. 

Para obter políticas que usam chaves de condição do Amazon S3 para operações de objeto e bucket, consulte os exemplos a seguir. Para obter mais informações sobre essas chaves de condição, consulte [Chaves de condição de política para o Amazon S3](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys). Consulte uma lista completa de ações, chaves de condição e recursos do Amazon S3 que você pode especificar em políticas em [Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) na *Referência de autorização do serviço*.

Para ter mais informações sobre as permissões referentes a operações de API do S3 de acordo com os tipos de recurso do S3, consulte [Permissões obrigatórias para operações de API do Amazon S3](using-with-s3-policy-actions.md).

## Exemplos: chaves de condição do Amazon S3 para operações de objeto
<a name="object-keys-in-amazon-s3-policies"></a>

Os exemplos a seguir mostram como usar chaves de condição específicas do Amazon S3 para operações de objeto. Consulte uma lista completa de ações, chaves de condição e recursos do Amazon S3 que você pode especificar em políticas em [Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) na *Referência de autorização do serviço*.

Para ter mais informações sobre as permissões referentes a operações de API do S3 de acordo com os tipos de recurso do S3, consulte [Permissões obrigatórias para operações de API do Amazon S3](using-with-s3-policy-actions.md).

Várias das políticas de exemplo mostram como você pode usar chaves de condições com operações de [objeto PUT](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html). As operações de objeto PUT permitem cabeçalhos específicos baseados em lista de controle de acesso (ACL) usados para conceder permissões baseadas em ACL. Usando essas chaves de condição, é possível definir uma condição para exigir permissões de acesso específicas quando o usuário faz upload de um objeto. Você também pode conceder permissões baseadas em ACL com a operação PutoObjectAcl. Para obter mais informações, consulte [PutObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html) na *Referência da API do Amazon S3 Amazon Simple Storage Service*. Para obter mais informações sobre ACLs, consulte [Visão geral da lista de controle de acesso (ACL)](acl-overview.md).

**Topics**
+ [Exemplo 1: conceder a permissão `s3:PutObject` que exige que os objetos sejam armazenados usando criptografia do lado do servidor](#putobject-require-sse-2)
+ [Exemplo 2: conceder a permissão `s3:PutObject` para copiar objetos com uma restrição na origem da cópia](#putobject-limit-copy-source-3)
+ [Exemplo 3: conceder acesso a uma versão específica de um objeto](#getobjectversion-limit-access-to-specific-version-3)
+ [Exemplo 4: conceder permissões com base em tags de objetos](#example-object-tagging-access-control)
+ [Exemplo 5: restringir o acesso pelo ID da Conta da AWS do proprietário do bucket](#example-object-resource-account)
+ [Exemplo 6: exigir uma versão mínima do TLS](#example-object-tls-version)
+ [Exemplo 7: excluir determinadas entidades principais de uma declaração `Deny`](#example-exclude-principal-from-deny-statement)
+ [Exemplo 8: forçar os clientes a fazer upload de objetos condicionalmente com base nos nomes de chave de objeto ou nas ETags](#example-conditional-writes-enforce)

### Exemplo 1: conceder a permissão `s3:PutObject` que exige que os objetos sejam armazenados usando criptografia do lado do servidor
<a name="putobject-require-sse-2"></a>

Vamos supor que a conta A é proprietária de um bucket. O administrador da conta deseja conceder a Jane, uma usuária na conta A, permissão para fazer upload de objetos com a condição de que Jane sempre solicite a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3). O administrador da conta A pode especificar esse requisito usando a chave de condição `s3:x-amz-server-side-encryption`, conforme exibido. O par de chave-valor no bloco `Condition` a seguir especifica a chave de condição `s3:x-amz-server-side-encryption` e SSE-S3 (`AES256`) como o tipo de criptografia:

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

Ao testar essa permissão por meio da AWS CLI, você deve adicionar a criptografia necessária usando o parâmetro `--server-side-encryption`, conforme mostrado no exemplo a seguir. Para usar esse exemplo de comando, substitua os `{{user input placeholders}}` por suas próprias informações. 

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

### Exemplo 2: conceder a permissão `s3:PutObject` para copiar objetos com uma restrição na origem da cópia
<a name="putobject-limit-copy-source-3"></a>

Em uma solicitação de objeto `PUT`, quando se especifica o objeto de origem, a solicitação é uma operação de cópia (consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)). De acordo com isso, o proprietário do bucket pode conceder ao usuário permissão para copiar objetos com restrições na origem; por exemplo:
+ Permite copiar objetos somente do bucket de origem especificado (por exemplo, `{{amzn-s3-demo-source-bucket}}`).
+ Permite copiar objetos do bucket de origem especificado e somente os objetos cujo nome de chave comece com um prefixo específico, como {{`public/`}} (por exemplo, `{{amzn-s3-demo-source-bucket}}{{/public/*}}`).
+ Permite copiar somente um objeto específico do bucket de origem (por exemplo, `{{amzn-s3-demo-source-bucket}}{{/example.jpg}}`).

A política de bucket a seguir concede a um usuário (`{{Dave}}`) a permissão `s3:PutObject`. Essa política permite que ele copie objetos apenas com a condição de que a solicitação inclua o cabeçalho `s3:x-amz-copy-source` e o valor do cabeçalho especifique o prefixo de nome de chave `/{{amzn-s3-demo-source-bucket}}{{/public/*}}`. Para usar esse exemplo de política, substitua os `{{user input placeholders}}` por suas próprias informações.

------
#### [ 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/*}}"
                }
            }
        }
    ]
}
```

------

**Testar a política com a AWS CLI**  
Você pode testar a permissão usando o comando da AWS CLI `copy-object`. Você especifica a origem adicionando o parâmetro `--copy-source`; o prefixo de nome de chave que deve coincidir com o prefixo permitido na política. Você precisa inserir as credenciais do usuário de Dave usando o parâmetro `--profile`. Consulte mais informações sobre como configurar a AWS CLI em [Developing with Amazon S3 using the AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) na *Referência de API do 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}}
```

**Conceder permissão para copiar somente um objeto específico**  
A política anterior usa a condição `StringNotLike`. Para conceder a permissão para copiar apenas um objeto específico, é necessário alterar a condição de `StringNotLike` para `StringNotEquals` e, depois, especificar a chave de objeto exata, conforme exibido no exemplo a seguir. Para usar esse exemplo de comando, substitua os `{{user input placeholders}}` por suas próprias informações.

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

### Exemplo 3: conceder acesso a uma versão específica de um objeto
<a name="getobjectversion-limit-access-to-specific-version-3"></a>

Vamos supor que a conta A seja proprietária de um bucket habilitado para versionamento. O bucket tem várias versões do objeto `{{HappyFace.jpg}}`. O administrador da conta A agora deseja conceder ao usuário `{{Dave}}` permissão para receber apenas uma versão específica do objeto. O administrador da conta pode fazer isso concedendo ao usuário `{{Dave}}` a permissão `s3:GetObjectVersion` de modo condicional, conforme mostrado no exemplo a seguir. O par de chave-valor no bloco `Condition` especifica a chave de condição `s3:VersionId`. Neste caso, para recuperar o objeto do bucket específico habilitado para versionamento, `{{Dave}}` precisa conhecer o ID de versão do objeto exato. Para usar esse exemplo de política, substitua os `{{user input placeholders}}` por suas próprias informações.

Para obter mais informações, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) na *Referência da API do 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}}"
                }
            }
        }
    ]
}
```

------

**Testar a política com a AWS CLI**  
É possível testar as permissões nessa política usando o comando `get-object` da AWS CLI com o parâmetro `--version-id` para identificar a versão específica do objeto a ser recuperada. O comando recupera a versão especificada do objeto e a salva no arquivo `{{OutputFile.jpg}}`.

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

### Exemplo 4: conceder permissões com base em tags de objetos
<a name="example-object-tagging-access-control"></a>

Para ver exemplos de como usar chaves de condição de marcação de objetos com operações do Amazon S3, consulte [Marcação e políticas de controle de acesso](tagging-and-policies.md).

### Exemplo 5: restringir o acesso pelo ID da Conta da AWS do proprietário do bucket
<a name="example-object-resource-account"></a>

É possível usar a chave de condição `aws:ResourceAccount` ou `s3:ResourceAccount` para gravar políticas de endpoint da nuvem privada virtual (VPC) ou do IAM que restrinjam o acesso de usuários, perfis ou aplicações aos buckets do Amazon S3 pertencentes a um ID de Conta da AWS específico. É possível usar essas chaves de condição para restringir o acesso dos clientes dentro da VPC aos buckets que você não possui.

No entanto, saiba que os serviços da AWS dependem do acesso a buckets gerenciados pela AWS. Portanto, usar a chave `aws:ResourceAccount` ou `s3:ResourceAccount` em sua política do IAM também pode afetar o acesso a esses recursos. Para saber mais, consulte os seguintes recursos:
+ [Restringir o acesso a buckets em uma Conta da AWS especificada](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#bucket-policies-s3) no *Guia do usuário do AWS PrivateLink*
+ [Restringir o acesso aos buckets que o Amazon ECR usa](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-minimum-s3-perms) no *Guia do Amazon ECR*
+ [Fornecer acesso necessário ao Systems Manager para buckets do Amazon S3 gerenciados pela AWS](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-minimum-s3-permissions.html) no *Guia do AWS Systems Manager*

Para ter mais informações sobre as chaves de condição `aws:ResourceAccount` e `s3:ResourceAccount` e exemplos que mostram como usá-las, consulte [Limit access to Amazon S3 buckets owned by specific Contas da AWS](https://aws.amazon.com/blogs/storage/limit-access-to-amazon-s3-buckets-owned-by-specific-aws-accounts/) no *Blog do AWS Storage*.

### Exemplo 6: exigir uma versão mínima do TLS
<a name="example-object-tls-version"></a>

É possível usar a chave de condição `s3:TlsVersion` para gravar políticas do IAM, de endpoint de nuvem privada virtual (VPCE) ou de bucket que restrinjam o acesso de usuários ou de aplicações aos buckets do Amazon S3 com base na versão de TLS usada pelo cliente. Você pode usar essa chave de condição para gravar políticas que exigem uma versão mínima do TLS. 

**nota**  
Quando os serviços da AWS fazem chamadas para outros serviços da AWS em seu nome (chamadas de serviço para serviço), determinado contexto de autorização específico da rede é editado, incluindo `s3:TlsVersion`, `aws:SecureTransport`, `aws:SourceIp` e `aws:VpcSourceIp`. Se sua política usar essas chaves de condição com instruções `Deny`, as entidades principais do serviço da AWS poderão ser bloqueadas acidentalmente. Para permitir que os serviços da AWS funcionem adequadamente, mantendo seus requisitos de segurança, exclua as entidades principais do serviço de suas instruções `Deny` adicionando a chave de condição `aws:PrincipalIsAWSService` com um valor `false`. Por exemplo:  

```
{
  "Effect": "Deny",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false",
      "aws:PrincipalIsAWSService": "false"
    }
  }
}
```
Essa política nega acesso às operações do S3 quando o HTTPS não é usado (`aws:SecureTransport` é falso), mas somente para entidades principais que não são de serviços da AWS. Isso garante que suas restrições condicionais se apliquem a todas as entidades principais, exceto às entidades principais de serviços da AWS.

**Example**  
O exemplo de política de bucket a seguir *nega* solicitações `PutObject` de clientes que tenham uma versão de TLS inferior a 1.2; por exemplo, 1.1 ou 1.0. Para usar esse exemplo de política, substitua os `{{user input placeholders}}` por suas próprias informações.    
****  

```
{
    "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**  
O exemplo de política de bucket a seguir *permite* solicitações `PutObject` de clientes que têm uma versão de TLS posterior a 1.1; por exemplo, 1.2, 1.3 ou posterior:    
****  

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

### Exemplo 7: excluir determinadas entidades principais de uma declaração `Deny`
<a name="example-exclude-principal-from-deny-statement"></a>

A política de bucket a seguir nega acesso `s3:GetObject` ao `{{amzn-s3-demo-bucket}}`, exceto às entidades principais com o número de conta {{`123456789012`}}. Para usar esse exemplo de política, substitua os `{{user input placeholders}}` por suas próprias informações.

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

------

### Exemplo 8: forçar os clientes a fazer upload de objetos condicionalmente com base nos nomes de chave de objeto ou nas ETags
<a name="example-conditional-writes-enforce"></a>

Com gravações condicionais, é possível adicionar outro cabeçalho às solicitações `WRITE` a fim de especificar condições prévias para a operação do S3. Esse cabeçalho especifica uma condição que, se não for atendida, provocará uma falha na operação do S3. Por exemplo, você pode evitar a substituição de dados existentes ao confirmar que não há nenhum objeto com o mesmo nome de chave no bucket durante o upload do objeto. Você também pode verificar a tag de entidade (ETag) de um objeto no Amazon S3 antes de gravar um objeto.

Para conferir exemplos de políticas de bucket que usam condições para impor gravações condicionais, consulte [Impor gravações condicionais em buckets do Amazon S3](conditional-writes-enforce.md).

## Exemplos: chaves de condição do Amazon S3 para operações de bucket
<a name="bucket-keys-in-amazon-s3-policies"></a>

As políticas de exemplo a seguir mostram como usar chaves de condição específicas do Amazon S3 para operações de bucket.

**Topics**
+ [Exemplo 1: conceder a permissão `s3:GetObject` com uma condição em um endereço IP](#AvailableKeys-iamV2)
+ [Exemplo 2: obter uma lista de objetos em um bucket com um prefixo específico](#condition-key-bucket-ops-2)
+ [Exemplo 3: definir o número máximo de chaves](#example-numeric-condition-operators)

### Exemplo 1: conceder a permissão `s3:GetObject` com uma condição em um endereço IP
<a name="AvailableKeys-iamV2"></a>

Será possível conceder a usuários autenticados permissão para usar a ação `s3:GetObject`, se a solicitação for proveniente de um intervalo específico de endereços IP (por exemplo, `{{192.0.2.*}}`), a menos que o endereço IP seja um dos que você queira excluir (por exemplo, `{{192.0.2.188}}`). No bloco `Condition`, `IpAddress` e `NotIpAddress` são condições, e cada uma recebe um par de chave-valor para avaliação. Os dois pares de chave-valor neste exemplo usam a chave `aws:SourceIp` em toda a AWS. Para usar esse exemplo de política, substitua os `{{user input placeholders}}` por suas próprias informações.

**nota**  
Os valores de chave `IPAddress` e `NotIpAddress` especificados no bloco `Condition` usam notação CIDR conforme descrito na RFC 4632. Para obter mais informações,consulte [http://www.rfc-editor.org/rfc/rfc4632.txt](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}}" 
                } 
            } 
        } 
    ]
}
```

------

Você também pode usar outras chaves de condição de toda a AWS nas políticas do Amazon S3. Por exemplo, você pode especificar o `aws:SourceVpce` e as chaves de condição `aws:SourceVpc` em políticas de bucket para VPC endpoints. Para obter exemplos específicos, consulte [Controlar o acesso a partir de VPC endpoints com políticas de bucket](example-bucket-policies-vpc-endpoint.md).

**nota**  
Em relação a algumas chaves de condição globais da AWS, somente certos tipos de recurso são compatíveis. Portanto, confira se o Amazon S3 é compatível com a chave de condição global e o tipo de recurso que você deseja usar ou se você precisará usar uma chave de condição específica do Amazon S3. Consulte uma lista completa de chaves de condição e tipos de recurso compatíveis com o Amazon S3 em [Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) na *Referência de autorização do serviço*.  
Para ter mais informações sobre as permissões referentes a operações de API do S3 de acordo com os tipos de recurso do S3, consulte [Permissões obrigatórias para operações de API do Amazon S3](using-with-s3-policy-actions.md).

### Exemplo 2: obter uma lista de objetos em um bucket com um prefixo específico
<a name="condition-key-bucket-ops-2"></a>

É possível usar a chave de condição `s3:prefix` para limitar a resposta da operação de API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) a nomes de chave com um prefixo específico. Se o bucket pertencer a você, será possível usar essa chave de condição para impedir que um usuário liste o conteúdo de um prefixo específico no bucket. A chave de condição `s3:prefix` será útil se os objetos no bucket forem organizados por prefixos de nome de chave. 

O console do Amazon S3 usa prefixos de nomes de chaves para mostrar um conceito de pasta. Somente o console suporta o conceito de pastas; a API do Amazon S3 suporta somente buckets e objetos. Por exemplo, se você tiver dois objetos com nomes de chave {{`public/object1.jpg`}} e {{`public/object2.jpg`}}, o console mostrará os objetos na pasta {{`public`}}. Na API do Amazon S3, esses são objetos com prefixos, não objetos em pastas. Para obter mais informações sobre como usar prefixos e delimitadores para filtrar permissões de acesso, consulte [Controlar o acesso a um bucket com políticas de usuário](walkthrough1.md). 

No caso a seguir, o proprietário do bucket e a conta principal à qual o usuário pertence são os mesmos. Assim, o proprietário do bucket pode usar uma política de bucket ou uma política de usuário para conceder acesso. Para ter mais informações sobre outras chaves de condição que você pode usar para chamar a operação de API `ListObjectsV2`, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html).

**nota**  
Se o bucket tiver o versionamento habilitado, para listar os objetos no bucket, você deverá conceder a permissão `s3:ListBucketVersions` nas políticas a seguir, em vez da permissão `s3:ListBucket`. A permissão `s3:ListBucketVersions` também comporta a chave de condição `s3:prefix`. 

**Política de usuário**  
A política de usuário a seguir concede a permissão `s3:ListBucket` (consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)) com uma declaração `Condition` que exige que o usuário especifique um prefixo na solicitação com um valor de `{{projects}}`. Para usar esse exemplo de política, substitua os `{{user input placeholders}}` por suas próprias informações.

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

------

A declaração `Condition` determina que o usuário liste apenas as chaves de objeto com o prefixo `{{projects}}`. A declaração `Deny` explícita adicionada nega ao usuário a listagem de chaves com qualquer outro prefixo, independentemente de outras permissões que ele possa ter. Por exemplo, é possível que o usuário receba a permissão para listar chaves de objeto sem nenhuma restrição, tanto por meio de atualizações na política de usuário anterior quanto por meio de uma política de bucket. Como as declarações `Deny` explícitas sempre substituem as declarações `Allow`, se o usuário tentar indicar chaves que não tenham o prefixo `{{projects}}`, a solicitação será negada. 

**Política de bucket**  
Se você adicionar o elemento `Principal` à política de usuário acima, identificando o usuário, terá uma política de bucket conforme exibido no exemplo a seguir. Para usar esse exemplo de política, substitua os `{{user input placeholders}}` por suas próprias informações.

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

------

**Testar a política com a AWS CLI**  
Você pode testar a política usando o seguinte comando `list-object` da AWS CLI. No comando, você fornece as credenciais do usuário usando o parâmetro `--profile`. Consulte mais informações sobre como configurar e usar a AWS CLI em [Developing with Amazon S3 using the AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) na *Referência de API do Amazon S3*.

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

### Exemplo 3: definir o número máximo de chaves
<a name="example-numeric-condition-operators"></a>

É possível usar a chave de condição `s3:max-keys` para definir o número máximo de chaves que um solicitante pode exibir em uma solicitação [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). Por padrão, essas operações de API exibem até mil chaves. Para obter uma lista de operadores de condição numérica que você pode usar com `s3:max-keys` e exemplos associados, consulte [Operadores de condição numérica](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Numeric) no *Guia do usuário do IAM*.