Cómo escribir datos en un bucket de Amazon S3 que no le pertenece - Amazon EMR

Cómo escribir datos en un bucket de Amazon S3 que no le pertenece

Cuando escriba un archivo en un bucket de Amazon Simple Storage Service (Amazon S3), de forma predeterminada, usted es el único capaz de leer dicho archivo. La suposición es que escribirá archivos en sus propios buckets y esta configuración predeterminada protege la privacidad de sus archivos.

Sin embargo, si está ejecutando un clúster y desea que la salida escriba en el bucket de Amazon S3 de otro usuario de AWS y desea que otro usuario de AWS pueda leer la salida, debe hacer dos cosas:

  • Hacer que el otro usuario de AWS le otorgue permisos de escritura para su bucket de Amazon S3. El clúster que lanza se ejecuta con sus credenciales de AWS, por lo que los clústeres que lance también podrán escribir en el bucket del otro usuario de AWS.

  • Establezca los permisos de lectura del otro usuario de AWS en los archivos que usted o el clúster escriben en el bucket de Amazon S3. La forma más sencilla de definir estos permisos de lectura consiste en utilizar listas de control de acceso (ACL) predefinidas, un conjunto de políticas de acceso predefinidas por Amazon S3.

Para obtener información sobre cómo el otro usuario de AWS puede otorgarle permisos para escribir archivos en el bucket de Amazon S3 del otro usuario, consulte Edición de permisos de bucket en la Guía del usuario de Amazon Simple Storage Service.

Para que el clúster utilice las ACL predefinidas cuando escriba archivos en Amazon S3, defina la opción de configuración del clúster fs.s3.canned.acl en la ACL predefinida que desee utilizar. En la siguiente tabla se muestran las ACL predefinidas definidas en la actualidad.

ACL predefinidas Descripción
AuthenticatedRead Especifica que al usuario se le otorga Permission.FullControl y al beneficiario del grupo GroupGrantee.AuthenticatedUsers se le otorga acceso Permission.Read.
BucketOwnerFullControl Especifica que al propietario del bucket se le otorga Permission.FullControl. El propietario del bucket no es necesariamente el mismo que el propietario del objeto.
BucketOwnerRead Especifica que al propietario del bucket se le otorga Permission.Read. El propietario del bucket no es necesariamente el mismo que el propietario del objeto.
LogDeliveryWrite Especifica que al propietario se le otorga Permission.FullControl y al beneficiario del grupo GroupGrantee.LogDelivery se le otorga acceso Permission.Write, de modo que se puedan enviar los registros de acceso.
Private Especifica que al propietario se le otorga Permission.FullControl.
PublicRead Especifica que al usuario se le otorga Permission.FullControl y al beneficiario del grupo GroupGrantee.AllUsers se le otorga acceso Permission.Read.
PublicReadWrite Especifica que al usuario se le otorga Permission.FullControl y al beneficiario del grupo GroupGrantee.AllUsers se le otorga acceso Permission.Read y Permission.Write.

Existen muchas formas de definir las opciones de configuración del clúster, en función del tipo de clúster que esté ejecutando. Los siguientes procedimientos muestran cómo definir la opción para casos comunes.

Para escribir archivos mediante las ACL predefinidas en Hive
  • Desde el mensaje de comando de Hive, establezca la opción de configuración fs.s3.canned.acl en la ACL predefinida que desea que el clúster defina para los archivos que escriba en Amazon S3. Para acceder a la línea de comandos de Hive conéctese al nodo principal mediante SSH y escriba Hive en la línea de comandos de Hadoop. Para obtener más información, consulte Conectarse al nodo principal mediante SSH.

    El ejemplo siguiente establece la opción de configuración fs.s3.canned.acl en BucketOwnerFullControl, que proporciona al propietario del bucket de Amazon S3 un control completo sobre el archivo. Tenga en cuenta que el comando definido distingue entre mayúsculas y minúsculas y no contiene comillas ni espacios.

    hive> set fs.s3.canned.acl=BucketOwnerFullControl; create table acl (n int) location 's3://acltestbucket/acl/'; insert overwrite table acl select count(*) from acl;

    Las dos últimas líneas del ejemplo crean una tabla que se almacena en Amazon S3 y escribe datos en la tabla.

Para escribir archivos mediante las ACL predefinidas en Pig
  • Desde la línea de comandos de Pig, establezca la opción de configuración fs.s3.canned.acl en la ACL predefinida que desea que el clúster defina para los archivos que escriba en Amazon S3. Para acceder a la línea de comandos de Pig conéctese al nodo principal mediante SSH y escriba Pig en la línea de comandos de Hadoop. Para obtener más información, consulte Conectarse al nodo principal mediante SSH.

    El ejemplo siguiente establece la opción de configuración fs.s3.canned.acl en BucketOwnerFullControl, que proporciona al propietario del bucket de Amazon S3 un control completo sobre el archivo. Tenga en cuenta que el comando definido incluye un espacio antes del nombre de ACL predefinido y no contiene comillas.

    pig> set fs.s3.canned.acl BucketOwnerFullControl; store some data into 's3://acltestbucket/pig/acl';
Para escribir archivos mediante las ACL predefinidas en un JAR personalizado
  • Defina la opción de configuración fs.s3.canned.acl utilizando Hadoop con la marca -D. Esto se muestra en el siguiente ejemplo.

    hadoop jar hadoop-examples.jar wordcount -Dfs.s3.canned.acl=BucketOwnerFullControl s3://mybucket/input s3://mybucket/output