Verificación de la propiedad del bucket con la condición de propietario del bucket - Amazon Simple Storage Service

Verificación de la propiedad del bucket con la condición de propietario del bucket

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.

Cuándo utilizar la condición de propietario del bucket

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.

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.

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

  3. 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 Cuenta de AWS incorrecta.

Verificación del propietario del bucket

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 Encabezado x-amz-expected-bucket-owner Encabezado x-amz-source-expected-bucket-owner Encabezado x-amz-expected-bucket-owner

Los nombres de parámetros necesarios para utilizar la condición de propietario del bucket con los AWS SDK 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.

Ejemplos

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.

Ejemplo: Carga de un objeto

En el siguiente ejemplo, se carga un objeto en el bucket de S3 DOC-EXAMPLE-BUCKET1 con la condición de propietario del bucket para garantizar que DOC-EXAMPLE-BUCKET1 sea propiedad de la Cuenta de AWS 111122223333.

AWS CLI
aws s3api put-object \ --bucket DOC-EXAMPLE-BUCKET1 --key exampleobject --body example_file.txt \ --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void putObjectExample() { S3Client s3Client = S3Client.create();; PutObjectRequest request = PutObjectRequest.builder() .bucket("DOC-EXAMPLE-BUCKET1") .key("exampleobject") .expectedBucketOwner("111122223333") .build(); Path path = Paths.get("example_file.txt"); s3Client.putObject(request, path); }

Ejemplo: Copia de un objeto

En el ejemplo siguiente se copia el objeto object1 del bucket de S3 DOC-EXAMPLE-BUCKET1 al bucket de S3 DOC-EXAMPLE-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
DOC-EXAMPLE-BUCKET1 111122223333
DOC-EXAMPLE-BUCKET2 444455556666
AWS CLI
aws s3api copy-object --copy-source DOC-EXAMPLE-BUCKET1/object1 \ --bucket DOC-EXAMPLE-BUCKET2 --key object1copy \ --expected-source-bucket-owner 111122223333 --expected-bucket-owner 444455556666
AWS SDK for Java 2.x
public void copyObjectExample() { S3Client s3Client = S3Client.create(); CopyObjectRequest request = CopyObjectRequest.builder() .copySource("DOC-EXAMPLE-BUCKET1/object1") .destinationBucket("DOC-EXAMPLE-BUCKET2") .destinationKey("object1copy") .expectedSourceBucketOwner("111122223333") .expectedBucketOwner("444455556666") .build(); s3Client.copyObject(request); }

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 DOC-EXAMPLE-BUCKET1 con la condición de propietario del bucket para garantizar que DOC-EXAMPLE-BUCKET1 sea propiedad de la Cuenta de AWS 111122223333.

AWS CLI
aws s3api get-bucket-policy --bucket DOC-EXAMPLE-BUCKET1 --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void getBucketPolicyExample() { S3Client s3Client = S3Client.create(); GetBucketPolicyRequest request = GetBucketPolicyRequest.builder() .bucket("DOC-EXAMPLE-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

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, ListBuckets, ni ninguna de las operaciones incluidas en AWS S3 Control. 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.