

# Ejemplos de políticas de bucket que utilizan claves de condición
<a name="amazon-s3-policy-keys"></a>

Puede utilizar el lenguaje de la política de acceso para especificar condiciones al conceder permisos. Puede utilizar el elemento opcional `Condition` o el bloque de `Condition` para especificar condiciones para cuando una política está en vigor. 

Para obtener información sobre las políticas que utilizan claves de condición de Amazon S3 para operaciones de objetos y bucket, consulte los siguientes ejemplos. Para obtener más información acerca de las claves de condición, consulte [Claves de condición de políticas para Amazon S3](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys). Para obtener una lista completa de las acciones, claves de condición y recursos de Amazon S3 que puede especificar en las políticas, consulte [Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) en la *Referencia de autorización de servicios*.

Para obtener más información sobre los permisos para las operaciones de la API de S3 por tipos de recursos de S3, consulte [Permisos necesarios para las operaciones de la API de Amazon S3](using-with-s3-policy-actions.md).

## Ejemplos: claves de condición de Amazon S3 para operaciones con objetos
<a name="object-keys-in-amazon-s3-policies"></a>

Los siguientes ejemplos muestran cómo puede utilizar claves de condición específicas de Amazon S3 para operaciones con objetos. Para obtener una lista completa de las acciones, claves de condición y recursos de Amazon S3 que puede especificar en las políticas, consulte [Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) en la *Referencia de autorización de servicios*.

Para obtener más información sobre los permisos para las operaciones de la API de S3 por tipos de recursos de S3, consulte [Permisos necesarios para las operaciones de la API de Amazon S3](using-with-s3-policy-actions.md).

Varias de las políticas de ejemplo muestran cómo se pueden utilizar las claves de condiciones con las operaciones [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html). La operación PUT Object permite encabezados específicos para la lista de control de acceso (ACL) que puede utilizar para conceder permisos basados en la ACL. Mediante el uso de estas claves de condición, puede configurar una condición para solicitar permisos de acceso específicos cuando el usuario carga un objeto. También puede conceder permisos basados en ACL con la operación PutObjectAcl. Para obtener más información, consulte [PutObjectAcl](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html) en la *referencia de la API de Amazon Simple Storage Service de Amazon S3*. Para obtener más información acerca de las ACL, consulte [Información general de las Listas de control de acceso (ACL)](acl-overview.md).

**Topics**
+ [Ejemplo 1: Concesión de permisos `s3:PutObject` que requieren que los objetos se almacenen con cifrado del servidor](#putobject-require-sse-2)
+ [Ejemplo 2: Concesión de permisos `s3:PutObject` para copiar objetos con una restricción en el origen de la copia](#putobject-limit-copy-source-3)
+ [Ejemplo 3: Concesión de acceso a una versión específica de un objeto](#getobjectversion-limit-access-to-specific-version-3)
+ [Ejemplo 4: Concesión de permisos basados en etiquetas de objeto](#example-object-tagging-access-control)
+ [Ejemplo 5: Restricción del acceso mediante el ID de Cuenta de AWS del propietario del bucket](#example-object-resource-account)
+ [Ejemplo 6: Necesidad de una versión mínima de TLS](#example-object-tls-version)
+ [Ejemplo 7: Exclusión de determinadas entidades principales de una instrucción `Deny`](#example-exclude-principal-from-deny-statement)
+ [Ejemplo 8: exigencia a los clientes para cargar objetos de forma condicional en función de los nombres de clave de objeto o ETag](#example-conditional-writes-enforce)

### Ejemplo 1: Concesión de permisos `s3:PutObject` que requieren que los objetos se almacenen con cifrado del servidor
<a name="putobject-require-sse-2"></a>

Supongamos que la cuenta A tiene un bucket. El administrador de la cuenta desea conceder permisos para cargar objetos a Jane, usuario en la cuenta A, con la condición de que Jane siempre solicite el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3). El administrador de la cuenta A puede especificar este requisito mediante la clave de condición `s3:x-amz-server-side-encryption`, tal como se muestra. El par clave-valor del siguiente bloque de `Condition` especifica la clave de condición `s3:x-amz-server-side-encryption` y SSE-S3 (`AES256`) como tipo de cifrado:

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

Al probar este permiso mediante la AWS CLI, debe agregar el cifrado necesario mediante el parámetro `--server-side-encryption`, como se muestra en el siguiente ejemplo. Para utilizar este comando de ejemplo, sustituya `user input placeholders` por su propia información. 

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

### Ejemplo 2: Concesión de permisos `s3:PutObject` para copiar objetos con una restricción en el origen de la copia
<a name="putobject-limit-copy-source-3"></a>

En una solicitud de objetos `PUT`, cuando especifica un objeto de origen, la solicitud es una operación de copia (consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)). Por lo tanto, el propietario del bucket puede conceder un permiso al usuario para copiar objetos con restricciones en el origen, por ejemplo:
+ Permita copiar objetos solo desde el bucket de origen especificado (por ejemplo, `amzn-s3-demo-source-bucket`).
+ Permita copiar objetos del bucket de origen especificado y solo los objetos cuyo prefijo de nombre de clave comienza como prefijo específico, como *`public/`* (por ejemplo, `amzn-s3-demo-source-bucket/public/*`).
+ Permita copiar solo un objeto específico desde el bucket de origen (por ejemplo, `amzn-s3-demo-source-bucket/example.jpg`).

La siguiente política de bucket concede a un usuario (`Dave`) el permiso `s3:PutObject`. Esta política le permite copiar solo los objetos con la condición de que la solicitud incluya el encabezado `s3:x-amz-copy-source` y el valor del encabezado especifique el prefijo de nombre de clave `/amzn-s3-demo-source-bucket/public/*`. Para utilizar esta política de ejemplo, sustituya `user input placeholders` por su propia información.

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

------

**Prueba de la política con la AWS CLI**  
Puede usar el comando AWS CLI de la `copy-object` para probar el permiso. Para especificar el origen, debe añadir el parámetro `--copy-source` y el prefijo de nombre de clave debe coincidir con el prefijo permitido en la política. Tiene que proporcionar las credenciales al usuario Dave utilizando el parámetro `--profile`. Para obtener más información sobre la configuración de la AWS CLI, consulte [Developing with Amazon S3 using the AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) en la *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
```

**Conceder permiso para copiar solo un objeto específico**  
La política anterior utiliza la condición `StringNotLike`. Para conceder el permiso para copiar solo un objeto específico, debe cambiar la condición de `StringNotLike` a `StringNotEquals` y, a continuación, especificar la clave exacta del objeto, como se muestra en el ejemplo siguiente. Para utilizar este comando de ejemplo, sustituya `user input placeholders` por su propia información.

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

### Ejemplo 3: Concesión de acceso a una versión específica de un objeto
<a name="getobjectversion-limit-access-to-specific-version-3"></a>

Supongamos que la cuenta A tiene un bucket con control de versiones habilitado. El bucket tiene varias versiones del objeto `HappyFace.jpg`. El administrador de la cuenta A desea ahora conceder al usuario `Dave` permiso para obtener solo una versión específica del objeto. Para ello, el administrador de la cuenta debe conceder al usuario `Dave` el permiso `s3:GetObjectVersion` de forma condicional, como se muestra en el siguiente ejemplo. El par clave-valor en el bloque `Condition` especifica la clave de condición `s3:VersionId`. En este caso, para recuperar el objeto del bucket habilitado para el control de versiones especificado, `Dave` tiene que saber el ID de versión exacta del objeto. Para utilizar esta política de ejemplo, sustituya `user input placeholders` por su propia información.

Para obtener más información, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) en la *Referencia de la API de 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"
                }
            }
        }
    ]
}
```

------

**Prueba de la política con la AWS CLI**  
Puede probar los permisos en esta política con el comando `get-object` de la AWS CLI con el parámetro `--version-id` para identificar la versión específica del objeto a recuperar. El comando recupera la versión especificada del objeto y lo guarda en el archivo `OutputFile.jpg`.

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

### Ejemplo 4: Concesión de permisos basados en etiquetas de objeto
<a name="example-object-tagging-access-control"></a>

Para obtener ejemplos de cómo utilizar claves de condición de etiquetado de objetos con operaciones de Amazon S3, consulte [Etiquetado y políticas de control de acceso](tagging-and-policies.md).

### Ejemplo 5: Restricción del acceso mediante el ID de Cuenta de AWS del propietario del bucket
<a name="example-object-resource-account"></a>

Puede utilizar la clave de condición `aws:ResourceAccount` o `s3:ResourceAccount` para escribir políticas de punto de conexión de IAM o nube privada virtual (VPC) que restrinjan el acceso de usuarios, roles o aplicaciones a los buckets de Amazon S3 que pertenecen a un ID de Cuenta de AWS específico. Puede usar estas claves de condición para restringir que los clientes dentro de la VPC accedan a los buckets que no posee.

Sin embargo, debe tener en cuenta que algunos servicios de AWS dependen del acceso a buckets administrados de AWS. Por lo tanto, es posible que el uso de la clave `aws:ResourceAccount` o `s3:ResourceAccount` de la política de IAM también afecte al acceso a estos recursos. Para obtener más información, consulte los siguientes recursos:
+ [Restringir el acceso a los buckets de una Cuenta de AWS específica](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#bucket-policies-s3) en la *Guía de AWS PrivateLink*
+ [Restringir el acceso a los buckets que utiliza Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-minimum-s3-perms) en la *Guía de Amazon ECR*
+ [Proporcionar el acceso necesario a Systems Manager para buckets de Amazon S3 administrados por AWS](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-minimum-s3-permissions.html) en la *Guía de AWS Systems Manager*

Para obtener más información sobre las claves de condición `aws:ResourceAccount` y `s3:ResourceAccount` y los ejemplos que muestran cómo usarlas, consulte [Limitar el acceso a los buckets de Amazon S3 propiedad de unas Cuentas de AWS específicas](https://aws.amazon.com/blogs/storage/limit-access-to-amazon-s3-buckets-owned-by-specific-aws-accounts/) en el *blog sobre almacenamiento de AWS*.

### Ejemplo 6: Necesidad de una versión mínima de TLS
<a name="example-object-tls-version"></a>

Puede utilizar la clave de condición `s3:TlsVersion` para escribir políticas de bucket, de punto de conexión de nube privada virtual (VPCE) o de IAM que restrinjan el acceso de aplicaciones o usuarios a buckets de Amazon S3 en función de la versión de TLS que utilice el cliente. Puede utilizar esta clave de condición para escribir políticas que requieran una versión mínima de TLS. 

**nota**  
Cuando los servicios de AWS realizan llamadas a otros servicios de AWS en su nombre (llamadas de servicio a servicio), se suprime cierto contexto de autorización específico de la red, incluidos `s3:TlsVersion`, `aws:SecureTransport`, `aws:SourceIp` y `aws:VpcSourceIp`. Si la política utiliza estas claves de condición con instrucciones `Deny`, las entidades principales de servicio de AWS podrían bloquearse involuntariamente. Para permitir que los servicios de AWS funcionen correctamente a la vez que mantiene los requisitos de seguridad, excluya las entidades principales de servicio de las instrucciones `Deny`; para ello, agregue la clave de condición `aws:PrincipalIsAWSService` con un valor de `false`. Por ejemplo:  

```
{
  "Effect": "Deny",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false",
      "aws:PrincipalIsAWSService": "false"
    }
  }
}
```
Esta política deniega el acceso a las operaciones de S3 cuando no se utiliza HTTPS (`aws:SecureTransport` es false), pero solo para entidades principales de servicio que no son de AWS. Esto asegura que las restricciones condicionales se aplican a todas las entidades principales excepto a las entidades principales de servicio de AWS.

**Example**  
La política de bucket de ejemplo siguiente *deniega* las solicitudes de `PutObject` de clientes que tienen una versión TLS inferior a 1.2, por ejemplo, 1.1 o 1.0. Para utilizar esta política de ejemplo, sustituya `user input placeholders` por su propia información.    
****  

```
{
    "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**  
La política de bucket de ejemplo siguiente *permite* las solicitudes de `PutObject` de clientes que tienen una versión TLS posterior a 1.1, por ejemplo, 1.2, 1.3 o posteriores:    
****  

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

### Ejemplo 7: Exclusión de determinadas entidades principales de una instrucción `Deny`
<a name="example-exclude-principal-from-deny-statement"></a>

La siguiente política de bucket deniega el acceso `s3:GetObject` a `amzn-s3-demo-bucket`, excepto a las entidades principales con el número de cuenta *`123456789012`*. Para utilizar esta política de ejemplo, sustituya `user input placeholders` por su propia información.

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

------

### Ejemplo 8: exigencia a los clientes para cargar objetos de forma condicional en función de los nombres de clave de objeto o ETag
<a name="example-conditional-writes-enforce"></a>

Con las escrituras condicionales, puede agregar un encabezado adicional a las solicitudes `WRITE` para especificar condiciones previas a la operación de S3. Este encabezado especifica una condición que, si no se cumple, provocará un error en la operación de S3. Por ejemplo, puede evitar que se sobrescriban datos existentes al validar que no haya ningún objeto con el mismo nombre de clave en el bucket durante la carga de objetos. De forma alternativa, puede comprobar la etiqueta de entidad (ETag) de un objeto en Amazon S3 antes de escribir un objeto.

Para ver ejemplos de políticas de bucket que utilizan condiciones en una política de bucket para aplicar escrituras condicionales, consulte [Aplicación de escrituras condicionales en buckets de Amazon S3](conditional-writes-enforce.md).

## Ejemplos: claves de condición de Amazon S3 para operaciones de buckets
<a name="bucket-keys-in-amazon-s3-policies"></a>

Las políticas de ejemplo siguientes muestran cómo puede utilizar claves de condición específicas de Amazon S3 para operaciones de buckets.

**Topics**
+ [Ejemplo 1: Concesión de permiso `s3:GetObject` con una condición en una dirección IP](#AvailableKeys-iamV2)
+ [Ejemplo 2: obtener una lista de objetos en un bucket con un prefijo específico](#condition-key-bucket-ops-2)
+ [Ejemplo 3: establecer el número máximo de claves](#example-numeric-condition-operators)

### Ejemplo 1: Concesión de permiso `s3:GetObject` con una condición en una dirección IP
<a name="AvailableKeys-iamV2"></a>

Puede conceder permiso a los usuarios autenticados para usar la acción `s3:GetObject` si la solicitud se genera a partir de un intervalo específico de direcciones IP (por ejemplo, `192.0.2.*`), a menos que la dirección IP sea una que desee excluir (por ejemplo, `192.0.2.188`). En el bloque de `Condition`, `IpAddress` y `NotIpAddress` son condiciones y cada una recibe un par clave-valor para evaluación. En este ejemplo, los pares de clave-valor usan la clave general `aws:SourceIp` de AWS. Para utilizar esta política de ejemplo, sustituya `user input placeholders` por su propia información.

**nota**  
Los valores de clave `IPAddress` y `NotIpAddress` especificados en el bloque `Condition` usan la notación CIDR, como se describe en RFC 4632. Para obtener más información, 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" 
                } 
            } 
        } 
    ]
}
```

------

También puede utilizar otras claves de condición generales de AWS en las políticas de Amazon S3. Por ejemplo, puede especificar las claves de condición `aws:SourceVpce` y `aws:SourceVpc` en las políticas de bucket para los puntos de enlace de la VPC. Para ver ejemplos específicos, consulte [Control del acceso desde puntos de enlace de la VPC con políticas de bucket](example-bucket-policies-vpc-endpoint.md).

**nota**  
Para alguna claves de condición globales de AWS, solo se admiten determinados tipos de recursos. Por lo tanto, compruebe si Amazon S3 admite la clave de condición global y el tipo de recurso que desea usar o si necesitará usar una clave de condición específica de Amazon S3 en su lugar. Para obtener una lista completa de los tipos de recursos y claves de condición admitidos para Amazon S3, consulte [Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html) en la *Referencia de autorización de servicios*.  
Para obtener más información sobre los permisos para las operaciones de la API de S3 por tipos de recursos de S3, consulte [Permisos necesarios para las operaciones de la API de Amazon S3](using-with-s3-policy-actions.md).

### Ejemplo 2: obtener una lista de objetos en un bucket con un prefijo específico
<a name="condition-key-bucket-ops-2"></a>

Puede utilizar la clave de condición `s3:prefix` para limitar la respuesta de la operación de la API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) a nombres de clave con un prefijo específico. Si es el propietario del bucket, puede usar esta clave de condición para restringir que un usuario pueda mostrar el contenido de un prefijo específico en el bucket. Esta clave de condición `s3:prefix` resulta útil si los objetos en el bucket están organizados por prefijos de nombre de clave. 

La consola de Amazon S3 utiliza prefijos de nombre de clave para mostrar un concepto de carpeta. Solo la consola admite el concepto de carpetas; la API de Amazon S3 solo admite buckets y objetos. Por ejemplo, si tiene dos objetos con nombres de clave *`public/object1.jpg`* y *`public/object2.jpg`*, la consola muestra los objetos en la carpeta *`public`*. En la API de Amazon S3, estos son objetos con prefijos, no objetos en carpetas. Para obtener más información sobre el uso de prefijos y delimitadores para filtrar permisos de acceso, consulte [Controlar el acceso a un bucket con las políticas de usuario](walkthrough1.md). 

En el siguiente escenario, la cuenta del propietario del bucket y la cuenta principal, a la que pertenece el usuario, son las mismas. Por lo tanto, el propietario del bucket puede usar una política de bucket o una política de usuario para conceder acceso. Para obtener más información sobre otras claves de condición que puede utilizar con la operación de la 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**  
Si el bucket tiene el control de versiones habilitado, para mostrar los objetos en el bucket, debe conceder el permiso `s3:ListBucketVersions` en las siguientes políticas, en lugar del permiso `s3:ListBucket`. El permiso `s3:ListBucketVersions` también admite la clave de condición `s3:prefix`. 

**Política de usuario**  
La siguiente política de usuario concede el permiso `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)) con una instrucción `Condition` que exige que el usuario especifique un prefijo en la solicitud con un valor de `projects`. Para utilizar esta política de ejemplo, sustituya `user input placeholders` por su propia información.

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

------

La instrucción `Condition` restringe al usuario a mostrar solo las claves de objeto que tengan el prefijo `projects`. La instrucción `Deny` explícita agregada impide que el usuario muestre las claves con cualquier otro prefijo, independientemente de los demás permisos que tenga el usuario. Por ejemplo, es posible que el usuario pueda obtener el permiso para crear una lista de claves de objetos sin ninguna restricción mediante actualizaciones de políticas de usuario anteriores o mediante una política de bucket. Como las instrucciones `Deny` explícitas siempre invalidan las instrucciones `Allow`, si el usuario intenta mostrar claves distintas de las que tienen el prefijo `projects`, se deniega la solicitud. 

**Política de bucket**  
Si agrega el elemento `Principal` a la política de usuario anterior, que identifica al usuario, tendrá una política de bucket, como se muestra en el siguiente ejemplo. Para utilizar esta política de ejemplo, sustituya `user input placeholders` por su propia información.

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

------

**Prueba de la política con la AWS CLI**  
Puede usar el siguiente comando `list-object` de la AWS CLI para probar la política. En el comando, usa el parámetro `--profile` para proporcionar las credenciales de usuario. Para obtener más información sobre la configuración y el uso de la AWS CLI, consulte [Developing with Amazon S3 using the AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html) en la *Amazon S3 API Reference*.

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

### Ejemplo 3: establecer el número máximo de claves
<a name="example-numeric-condition-operators"></a>

Puede usar la clave de condición `s3:max-keys` para establecer el número máximo de claves que un solicitante puede devolver en una solicitud de [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) o [https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html). De forma predeterminada, estas operaciones de la API devuelven hasta 1000 claves. Para obtener una lista de los operadores de condición numéricos que se pueden utilizar con `s3:max-keys` y los ejemplos adjuntos, consulte [Operadores de condición numérica](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Numeric) en la *guía del usuario de IAM*.