

# Verificación de la propiedad del bucket con la condición de propietario del bucket
<a name="bucket-owner-condition"></a>

La condición de propietario del bucket de Amazon S3 garantiza que los buckets que utiliza en las operaciones de S3 pertenezcan a las Cuentas de AWS que espera.

La mayoría de las operaciones de S3 se leen o escriben en buckets específicos de S3. Estas operaciones incluyen cargar, copiar y descargar objetos, recuperar o modificar configuraciones del bucket y recuperar o modificar configuraciones de objetos. Al realizar estas operaciones, especifique el bucket que desee utilizar incluyendo su nombre con la solicitud. Por ejemplo, para recuperar un objeto de S3, realice una solicitud que especifique el nombre de un bucket y la clave de objeto a partir de la que recuperar ese bucket.

Puesto que Amazon S3 identifica los buckets en función de sus nombres, una aplicación que utilice un nombre de bucket incorrecto en una solicitud podría realizar operaciones involuntarias en un bucket diferente al esperado. Para ayudar a evitar interacciones involuntarias del bucket en situaciones como esta, puede usar la *condición de propietario del bucket*. La condición de propietario del bucket le permite verificar que el bucket de destino sea propiedad de la Cuenta de AWS esperada, lo que proporciona una capa adicional de seguridad de que sus operaciones de S3 tienen los efectos que desea.

**Topics**
+ [Cuándo utilizar la condición de propietario del bucket](#bucket-owner-condition-when-to-use)
+ [Verificación del propietario del bucket](#bucket-owner-condition-use)
+ [Ejemplos](#bucket-owner-condition-examples)
+ [Restricciones y limitaciones](#bucket-owner-condition-restrictions-limitations)

## Cuándo utilizar la condición de propietario del bucket
<a name="bucket-owner-condition-when-to-use"></a>

Recomendamos usar la condición de propietario del bucket siempre que realice una operación de S3 compatible y conozca el ID de cuenta del propietario del bucket esperado. La condición de propietario del bucket está disponible para todas las operaciones de objetos de S3 y la mayoría de las operaciones del bucket de S3. Para obtener una lista de las operaciones de S3 que no admiten la condición de propietario del bucket, consulte [Restricciones y limitaciones](#bucket-owner-condition-restrictions-limitations).

Para ver los beneficios de usar la condición de propietario del bucket, considere el siguiente escenario en el que se involucra a la clienta de AWS Bea:

1. Bea desarrolla una aplicación que utiliza Amazon S3. Durante el desarrollo, Bea utiliza su Cuenta de AWS destinada a pruebas solamente para crear un bucket denominado `bea-data-test` y configura su aplicación de manera que realice solicitudes a `bea-data-test`.

1. Bea implementa su aplicación, pero olvida volver a configurar la aplicación para utilizar un bucket en su de producción Cuenta de AWS.

1. En producción, la aplicación de Bea realiza solicitudes en `bea-data-test`, que se producen correctamente. Esto da como resultado que los datos de producción se escriban en el bucket en la cuenta de prueba de Bea.

Bea puede servir de protección frente a situaciones como esta mediante el uso de la condición de propietario del bucket. Con la condición de propietario del bucket, Bea puede incluir el ID de la Cuenta de AWS del propietario del bucket esperado en sus solicitudes. A continuación, Amazon S3 comprueba el ID de cuenta de propietario del bucket antes de procesar cada solicitud. Si el propietario real del bucket no coincide con el propietario del bucket esperado, se produce un error en la solicitud.

Si Bea utiliza la condición de propietario del bucket, el escenario descrito anteriormente no dará como resultado que la aplicación de Bea escriba involuntariamente en un bucket de prueba. En su lugar, se producirá un error de `Access Denied` en las solicitudes que realice su aplicación en el paso 3. Gracias al uso de la condición de propietario del bucket, Bea ayuda a eliminar el riesgo de interactuar de forma accidental con los buckets en una incorrecta Cuenta de AWS.

## Verificación del propietario del bucket
<a name="bucket-owner-condition-use"></a>

Para utilizar la condición de propietario del bucket, incluye un parámetro con la solicitud que especifica el propietario del bucket esperado. La mayoría de las operaciones de S3 implican un solo bucket, y solo requieren este parámetro único para usar la condición de propietario del bucket. Para las operaciones de `CopyObject`, este primer parámetro especifica el propietario esperado del bucket de destino e incluye un segundo parámetro para especificar el propietario esperado del bucket de origen.

Cuando realice una solicitud que incluya un parámetro de condición de propietario del bucket, S3 comprobará el ID de cuenta del propietario del bucket con el parámetro especificado antes de procesar la solicitud. Si el parámetro coincide con el ID de cuenta del propietario del bucket, S3 procesará la solicitud. Si el parámetro no coincide con el ID de cuenta del propietario del bucket, se producirá un error de `Access Denied` en la solicitud.

Puede utilizar la condición de propietario del bucket con AWS Command Line Interface (AWS CLI), los SDK de AWS y las API de REST de Amazon S3. Cuando utilice la condición de propietario del bucket con la AWS CLI y las API de REST de Amazon S3, utilice los siguientes nombres de parámetros.


****  

| Método de acceso | Parámetro para operaciones que no son de copia | Parámetro de origen para operaciones de copia | Parámetro de destino para operaciones de copia | 
| --- | --- | --- | --- | 
| AWS CLI | --expected-bucket-owner | --expected-source-bucket-owner | --expected-bucket-owner | 
| API de REST de Amazon S3 | x-amz-expected-bucket-ownerEncabezado  | x-amz-source-expected-bucket-ownerEncabezado  | x-amz-expected-bucket-ownerEncabezado  | 

Los nombres de parámetros necesarios para utilizar la condición de propietario del bucket con los SDK de AWS varían según el idioma. Para determinar los parámetros requeridos, consulte la documentación del SDK para el idioma deseado. Puede encontrar la documentación del SDK en [Herramientas para crear en AWS](https://aws.amazon.com/tools/).

## Ejemplos
<a name="bucket-owner-condition-examples"></a>

En los siguientes ejemplos, se muestra cómo puede implementar la condición de propietario del bucket en Amazon S3 mediante la AWS CLI o AWS SDK for Java 2.x.

**Example**  
***Ejemplo: carga de un objeto***  
En el siguiente ejemplo, se carga un objeto en el bucket de S3 `amzn-s3-demo-bucket1` con la condición de propietario del bucket para garantizar que `amzn-s3-demo-bucket1` sea propiedad de la Cuenta de AWS `111122223333`.  

```
aws s3api put-object \
                 --bucket amzn-s3-demo-bucket1 --key exampleobject --body example_file.txt \
                 --expected-bucket-owner 111122223333
```

```
public void putObjectExample() {
    S3Client s3Client = S3Client.create();;
    PutObjectRequest request = PutObjectRequest.builder()
            .bucket("amzn-s3-demo-bucket1")
            .key("exampleobject")
            .expectedBucketOwner("111122223333")
            .build();
    Path path = Paths.get("example_file.txt");
    s3Client.putObject(request, path);
}
```

**Example**  
***Ejemplo: copia de un objeto***  
En el ejemplo siguiente se copia el objeto `object1` del bucket de S3 `amzn-s3-demo-bucket1` al bucket de S3 `amzn-s3-demo-bucket2`. Utiliza la condición de propietario del bucket para garantizar que los buckets son propiedad de las cuentas esperadas de acuerdo con la tabla siguiente.   


****  

| Bucket | Propietario esperado | 
| --- | --- | 
| amzn-s3-demo-bucket1 | 111122223333 | 
| amzn-s3-demo-bucket2 | 444455556666 | 

```
aws s3api copy-object --copy-source amzn-s3-demo-bucket1/object1 \
                            --bucket amzn-s3-demo-bucket2 --key object1copy \
                            --expected-source-bucket-owner 111122223333 --expected-bucket-owner 444455556666
```

```
public void copyObjectExample() {
        S3Client s3Client = S3Client.create();
        CopyObjectRequest request = CopyObjectRequest.builder()
                .copySource("amzn-s3-demo-bucket1/object1")
                .destinationBucket("amzn-s3-demo-bucket2")
                .destinationKey("object1copy")
                .expectedSourceBucketOwner("111122223333")
                .expectedBucketOwner("444455556666")
                .build();
        s3Client.copyObject(request);
    }
```

**Example**  
***Ejemplo: recuperación de una política del bucket***  
En el siguiente ejemplo, se recupera la política de acceso para el bucket de S3 `amzn-s3-demo-bucket1` con la condición de propietario del bucket para garantizar que `amzn-s3-demo-bucket1` sea propiedad de la Cuenta de AWS `111122223333`.  

```
aws s3api get-bucket-policy --bucket amzn-s3-demo-bucket1 --expected-bucket-owner 111122223333
```

```
public void getBucketPolicyExample() {
    S3Client s3Client = S3Client.create();
    GetBucketPolicyRequest request = GetBucketPolicyRequest.builder()
            .bucket("amzn-s3-demo-bucket1")
            .expectedBucketOwner("111122223333")
            .build();
    try {
        GetBucketPolicyResponse response = s3Client.getBucketPolicy(request);
    }
    catch (S3Exception e) {
        // The call was transmitted successfully, but Amazon S3 couldn't process 
        // it, so it returned an error response.
        e.printStackTrace();
    }
}
```

## Restricciones y limitaciones
<a name="bucket-owner-condition-restrictions-limitations"></a>

La condición de propietario del bucket de Amazon S3 tiene las siguientes restricciones y limitaciones:
+ El valor del parámetro de condición de propietario del bucket debe ser el ID de una Cuenta de AWS (valor numérico de 12 dígitos). No se admiten entidades de servicio. 
+ La condición de propietario del bucket no está disponible para [CreateBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html), [ListBuckets](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html), ni ninguna de las operaciones incluidas en [AWS S3 Control](https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations_AWS_S3_Control.html). Amazon S3 ignora los parámetros de condición de propietario del bucket incluidos en las solicitudes a estas operaciones. 
+ La condición de propietario del bucket solo comprueba que la cuenta especificada en el parámetro de verificación sea propietaria del bucket. La condición de propietario del bucket no comprueba la configuración del bucket. Tampoco garantiza que la configuración del bucket cumpla condiciones específicas o coincida con cualquier estado pasado. 