Uso de Tablas de Amazon S3 con servicios de análisis de AWS - Amazon Simple Storage Service

Uso de Tablas de Amazon S3 con servicios de análisis de AWS

Para que los servicios de análisis de AWS puedan acceder a las tablas de su cuenta, integre los buckets de tablas de Amazon S3 con Amazon SageMaker Lakehouse. Esta integración permite que los servicios de análisis de AWS detecten automáticamente los datos de las tablas y accedan a ellos. Puede utilizar esta integración para trabajar con las tablas en estos servicios:

nota

Esta integración utiliza los servicios de AWS Glue y AWS Lake Formation, y puede incurrir en costos de solicitudes y almacenamiento de AWS Glue. Para más información, consulte Precios de AWS Glue.

Se aplican precios adicionales por ejecutar consultas en las tablas de S3. Para obtener más información, consulte la información de precios del motor de consulta que está utilizando.

Cómo funciona la integración

Cuando crea un bucket de tablas en la consola, Amazon S3 inicia las siguientes acciones para integrar los buckets de tablas en la región que ha seleccionado con los servicios de análisis de AWS:

  1. Crea un nuevo rol de servicio de AWS Identity and Access Management (IAM) que le da a Lake Formation acceso a todos los buckets de tablas.

  2. Mediante el rol de servicio, Lake Formation registra los buckets de tablas en la región actual. Esto permite a Lake Formation administrar el acceso, los permisos y la gobernanza de todos los buckets de tablas actuales y futuros en esa región.

  3. Agrega el catálogo s3tablescatalog al AWS Glue Data Catalog en la región actual. Agregar el catálogo de s3tablescatalog permite que todos los buckets de tablas, espacios de nombres y tablas se rellenen en el Catálogo de datos.

nota

Estas acciones se automatizan mediante la consola de Amazon S3. Si realiza esta integración mediante programación, debe realizar todas estas acciones manualmente.

Integre los buckets de tablas una vez por región de AWS. Una vez completada la integración, todos los buckets de tablas, espacios de nombres y tablas actuales y futuros se agregan a AWS Glue Data Catalog en esa región.

La siguiente ilustración muestra cómo el catálogo de s3tablescatalog rellena automáticamente los buckets de tablas, los espacios de nombres y las tablas de la región actual como los objetos correspondientes en el Catálogo de datos. Los buckets de tablas se rellenan como subcatálogos. Los espacios de nombres de un bucket de tablas se rellenan como bases de datos dentro de sus respectivos subcatálogos. Las tablas se rellenan como tablas en las respectivas bases de datos.

Las formas en las que se representan los recursos de tabla en AWS Glue Data Catalog.
Funcionamiento de los permisos

Recomendamos integrar los buckets de tablas con los servicios de análisis de AWS para poder trabajar con datos de tablas en todos los servicios que utilizan el AWS Glue Data Catalog como almacén de metadatos. La integración permite el control de acceso pormenorizado a través de AWS Lake Formation. Este enfoque de seguridad significa que, además de los permisos de AWS Identity and Access Management (IAM), debe conceder a su entidad principal de IAM permisos de Lake Formation en sus tablas antes de poder trabajar con ellas.

Hay dos tipos principales de permisos en AWS Lake Formation:

  • Los permisos de acceso a metadatos controlan la capacidad de crear, leer, actualizar y eliminar bases de datos de metadatos y tablas del Catálogo de datos.

  • Los permisos de acceso a los datos subyacentes controlan la capacidad de leer y escribir datos en las ubicaciones de Amazon S3 subyacentes a las que apuntan los recursos del Catálogo de datos.

Lake Formation utiliza una combinación de su propio modelo de permisos y el modelo de permisos de IAM para controlar el acceso a los recursos del Catálogo de datos y a los datos subyacentes.

  • Para que una solicitud de acceso a los recursos del Catálogo de datos o a los datos subyacentes se atienda correctamente, debe pasar las comprobaciones de permisos tanto de IAM como de Lake Formation.

  • Los permisos de IAM controlan el acceso a las API y recursos de Lake Formation y AWS Glue, mientras que los permisos de Lake Formation controlan el acceso a los recursos del Catálogo de datos, las ubicaciones de Amazon S3 y los datos subyacentes.

Los permisos de Lake Formation se aplican solo en la región en la que se concedieron, y la entidad principal debe estar autorizada por un administrador de lago de datos o de otra entidad principal con los permisos necesarios para que se le concedan permisos de Lake Formation.

Para obtener más información, consulte Descripción general de permisos de Lake Formation en la Guía para desarrolladores de AWS Lake Formation.

Asegúrese de seguir los pasos que se indican en Requisitos previos para la integración y Integración de buckets de tablas con servicios de análisis de AWS para disponer de los permisos adecuados para acceder al AWS Glue Data Catalog y a los recursos de tabla, así como para trabajar con los servicios de análisis de AWS.

importante

Si no es el usuario que realizó la integración de los buckets de tablas con los servicios de análisis de AWS de su cuenta, debe concederse los permisos de Lake Formation necesarios sobre la tabla. Para obtener más información, consulte Concesión de permisos sobre una tabla o base de datos.

Requisitos previos para la integración

Se necesitan los siguientes requisitos previos para integrar buckets de tablas con los servicios de análisis de AWS.

importante

Cuando cree tablas, asegúrese de utilizar todas las letras minúsculas en los nombres y las definiciones de las tablas. Por ejemplo, asegúrese de que los nombres de columna estén todos en minúsculas. Si el nombre o la definición de la tabla contiene letras mayúsculas, significa que la tabla no es compatible con AWS Lake Formation ni AWS Glue Data Catalog. En este caso, la tabla no será visible para servicios de análisis de AWS como Amazon Athena, aunque los buckets de tablas estén integrados con servicios de análisis de AWS.

Si la definición de la tabla contiene mayúsculas, recibirá el siguiente mensaje de error al ejecutar una consulta de SELECT en Athena: “GENERIC_INTERNAL_ERROR: Error al obtener la solicitud de tabla: com.amazonaws.services.glue.model.ValidationException: Recurso de federación no compatible: nombres de tabla o columna no válidos”.

Integración de buckets de tablas con servicios de análisis de AWS

Esta integración debe realizarse una vez por región de AWS.

importante

La integración de los servicios de análisis de AWS ahora utiliza la opción WithPrivilegedAccess en la operación registerResource de la API de Lake Formation para registrar buckets de tablas de S3. La integración ahora también crea el catálogo s3tablescatalog en el AWS Glue Data Catalog mediante la opción AllowFullTableExternalDataAccess en la operación CreateCatalog de la API de AWS Glue.

Si configuró la integración con la versión preliminar, podrá seguir utilizando la integración actual. Sin embargo, el proceso de integración actualizado proporciona mejoras en el rendimiento, por lo que recomendamos efectuar la migración. Para migrar a la integración actualizada, consulte Migración al proceso de integración actualizado.

  1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3.

  2. En el panel de navegación izquierdo, elija Buckets de tablas.

  3. Elija Crear bucket de tablas.

    Se abrirá la página Crear bucket de tablas.

  4. Introduzca un Nombre de bucket de tablas y asegúrese de que se ha seleccionado la casilla de verificación Habilitar integración.

  5. Elija Crear bucket de tablas. Amazon S3 intentará integrar automáticamente los buckets de tablas en esa región.

La primera vez que integre buckets de tablas en cualquier región, Amazon S3 creará un nuevo rol de servicio de IAM en su nombre. Este rol permite a Lake Formation acceder a todos los buckets de tablas de la cuenta y federar el acceso a las tablas en AWS Glue Data Catalog.

Integración de buckets de tablas con la AWS CLI

Los siguientes pasos muestran cómo utilizar la AWS CLI para integrar buckets de tablas. Para realizar estos comandos, reemplace user input placeholders con su propia información.

  1. Cree un bucket de tablas.

    aws s3tables create-table-bucket \ --region us-east-1 \ --name amzn-s3-demo-table-bucket
  2. Cree un rol de servicio de IAM que permita a Lake Formation acceder a los recursos de tabla.

    1. Cree un archivo llamado Role-Trust-Policy.json que contenga la siguiente política de confianza:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationDataAccessPolicy", "Effect": "Allow", "Principal": { "Service": "lakeformation.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:SetContext", "sts:SetSourceIdentity" ], "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } } ] }

      Cree el rol de servicio de IAM con el siguiente comando:

      aws iam create-role \ --role-name S3TablesRoleForLakeFormation \ --assume-role-policy-document file://Role-Trust-Policy.json
    2. Cree un archivo llamado LF-GluePolicy.json que contenga la siguiente política:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationPermissionsForS3ListTableBucket", "Effect": "Allow", "Action": [ "s3tables:ListTableBuckets" ], "Resource": [ "*" ] }, { "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket", "Effect": "Allow", "Action": [ "s3tables:CreateTableBucket", "s3tables:GetTableBucket", "s3tables:CreateNamespace", "s3tables:GetNamespace", "s3tables:ListNamespaces", "s3tables:DeleteNamespace", "s3tables:DeleteTableBucket", "s3tables:CreateTable", "s3tables:DeleteTable", "s3tables:GetTable", "s3tables:ListTables", "s3tables:RenameTable", "s3tables:UpdateTableMetadataLocation", "s3tables:GetTableMetadataLocation", "s3tables:GetTableData", "s3tables:PutTableData" ], "Resource": [ "arn:aws:s3tables:us-east-1:111122223333:bucket/*" ] } ] }

      Asocie la política al rol con el siguiente comando:

      aws iam put-role-policy \ --role-name S3TablesRoleForLakeFormation \ --policy-name LakeFormationDataAccessPermissionsForS3TableBucket \ --policy-document file://LF-GluePolicy.json
  3. Cree un archivo llamado input.json que contenga lo siguiente:

    { "ResourceArn": "arn:aws:s3tables:us-east-1:111122223333:bucket/*", "WithFederation": true, "RoleArn": "arn:aws:iam::111122223333:role/S3TablesRoleForLakeFormation" }

    Registre los buckets de tablas con Lake Formation utilizando el siguiente comando:

    aws lakeformation register-resource \ --region us-east-1 \ --with-privileged-access \ --cli-input-json file://input.json
  4. Cree un archivo llamado catalog.json que contenga el siguiente catálogo:

    { "Name": "s3tablescatalog", "CatalogInput": { "FederatedCatalog": { "Identifier": "arn:aws:s3tables:us-east-1:111122223333:bucket/*", "ConnectionName": "aws:s3tables" }, "CreateDatabaseDefaultPermissions":[], "CreateTableDefaultPermissions":[], "AllowFullTableExternalDataAccess": "True" } }

    Cree el catálogo s3tablescatalog utilizando el siguiente comando. La creación del catálogo hace que el AWS Glue Data Catalog se rellene con objetos correspondientes a buckets de tablas, espacios de nombres y tablas.

    aws glue create-catalog \ --region us-east-1 \ --cli-input-json file://catalog.json
  5. Verifique que se ha agregado el catálogo s3tablescatalog en AWS Glue mediante el siguiente comando:

    aws glue get-catalog --catalog-id s3tablescatalog

Se ha actualizado el proceso de integración de los servicios de análisis de AWS. Si ha configurado la integración con la versión preliminar, podrá seguir utilizando la integración actual. Sin embargo, el proceso de integración actualizado proporciona mejoras en el rendimiento, por lo que recomendamos efectuar la migración siguiendo estos pasos. Para obtener más información sobre el proceso de migración o integración, consulte Creating an Amazon S3 Tables catalog in the AWS Glue Data Catalog en la Guía para desarrolladores de AWS Lake Formation.

  1. Abra la consola de AWS Lake Formation en https://console.aws.amazon.com/lakeformation/ e inicie sesión como administrador del lago de datos. Para obtener más información sobre cómo crear un administrador de lago de datos, consulte Creación de un administrador de lago de datos en la Guía para desarrolladores de AWS Lake Formation.

  2. Elimine el catálogo de s3tablescatalog haciendo lo siguiente:

    • En el panel de navegación izquierdo, elija Catálogos.

    • Seleccione el botón de opción situado junto al catálogo s3tablescatalog en la lista Catálogos. En el menú Acciones, elija Eliminar.

  3. Para anular el registro de la ubicación de datos del catálogo s3tablescatalog, haga lo siguiente:

    • En el panel de navegación izquierdo, vaya a la sección Administración y seleccione Ubicaciones de los lagos de datos.

    • Seleccione el botón de opción situado junto a la ubicación del lago de datos de s3tablescatalog; por ejemplo, s3://tables:region:account-id:bucket/*.

    • En el menú Acciones, seleccione Eliminar.

    • En el cuadro de diálogo de confirmación que aparece, seleccione Eliminar.

  4. Ahora que ha eliminado el catálogo de s3tablescatalog y la ubicación del lago de datos, puede seguir los pasos para integrar sus buckets de tablas con los servicios de análisis de AWS mediante el proceso de integración actualizado.

nota

Si desea trabajar con tablas cifradas de SSE-KMS en servicios de análisis de AWS integrados, el rol que utilice debe tener permiso para usar la clave de AWS KMS para las operaciones de cifrado. Para obtener más información, consulte Concesión de permisos a las entidades principales de IAM para trabajar con tablas cifradas en servicios de análisis integrados de AWS.

Para acceder a sus tablas, Amazon Data Firehose necesita un enlace de recursos que apunte al espacio de nombres de tabla. Un enlace de recursos es un objeto de Catálogo de datos que actúa como un alias o puntero a otro recurso de Catálogo de datos, como una base de datos o una tabla. El enlace se almacena en el catálogo de datos de la cuenta o región donde se crea. Para obtener más información, consulte Cómo funcionan los enlaces de recursos en la AWS Lake FormationGuía para desarrolladores de .

Una vez que haya integrado los buckets de tablas con los servicios de análisis de AWS, puede crear enlaces de recursos para trabajar con las tablas en Amazon Data Firehose. Para obtener más información sobre la creación de estos enlaces, consulte Transmisión de datos a tablas con Amazon Data Firehose.

Concesión de permisos de Lake Formation a recursos de tabla

Una vez que los buckets de tablas están integrados con los servicios de análisis de AWS, Lake Formation administra el acceso a los recursos de tabla. Lake Formation utiliza un modelo propio de permisos (permisos de Lake Formation) que permite un control de acceso pormenorizado a los recursos del Catálogo de datos. Lake Formation requiere que cada entidad principal (usuario o rol) de IAM esté autorizada para ejecutar acciones sobre los recursos administrados por Lake Formation. Para obtener más información, consulte Descripción general de permisos de Lake Formation en la Guía para desarrolladores de AWS Lake Formation. Para obtener información acerca del uso compartido de datos entre cuentas, consulte Uso compartido de datos entre cuentas en Lake Formation en la Guía para desarrolladores de AWS Lake Formation.

Para que las entidades principales de IAM puedan acceder a las tablas en los servicios de análisis de AWS, debe concederles permisos de Lake Formation sobre esos recursos.

nota

Si es el usuario que realizó la integración de los buckets de tabla, ya dispone de permisos de Lake Formation sobre las tablas. Si es la única entidad principal que va a acceder a las tablas, puede omitir este paso. Solo necesita conceder permisos de Lake Formation sobre las tablas a otras entidades principales de IAM. Esto permite que otras entidades principales accedan a la tabla al ejecutar consultas. Para obtener más información, consulte Concesión de permisos sobre una tabla o base de datos.

Debe conceder a las otras entidades principales de IAM permisos de Lake Formation sobre los recursos de tabla para trabajar con ellos en los siguientes servicios:

  • Amazon Redshift

  • Amazon Data Firehose

  • Amazon QuickSight

  • Amazon Athena

Concesión de permisos sobre una tabla o base de datos

Puede conceder a una entidad principal permisos de Lake Formation sobre una tabla o base de datos de un bucket de tablas, ya sea a través de la consola de Lake Formation o de la AWS CLI.

nota

Al conceder permisos de Lake Formation sobre un recurso del Catálogo de datos a una cuenta externa o directamente a una entidad principal de IAM de otra cuenta, Lake Formation utiliza el servicio AWS Resource Access Manager (AWS RAM) para compartir el recurso. Si la cuenta del beneficiario está en la misma organización que la cuenta del concedente, el recurso compartido estará disponible inmediatamente para el beneficiario. Si la cuenta del beneficiario no pertenece a la misma organización, AWS RAM envía una invitación a la cuenta del beneficiario para que acepte o rechace la concesión del recurso. Luego, para que el recurso compartido esté disponible, el administrador del lago de datos de la cuenta del beneficiario debe usar la consola de AWS RAM o la AWS CLI para aceptar la invitación. Para obtener más información acerca del uso compartido de datos entre cuentas, consulte Uso compartido de datos entre cuentas en Lake Formation en la Guía para desarrolladores de AWS Lake Formation.

Console
  1. Abra la consola de AWS Lake Formation en https://console.aws.amazon.com/lakeformation/ e inicie sesión como administrador del lago de datos. Para obtener más información sobre cómo crear un administrador de lago de datos, consulte Creación de un administrador de lago de datos en la Guía para desarrolladores de AWS Lake Formation.

  2. En el panel de navegación, elija Permisos de datos y, a continuación, seleccione Conceder.

  3. En la página Conceder permisos, en Entidades principales, realice una de las siguientes acciones:

    • En el caso de Amazon Athena o Amazon Redshift, elija Usuarios y roles de IAM y, a continuación, seleccione la entidad principal de IAM que utilice para consultas.

    • En el caso de Amazon Data Firehose, elija Usuarios y roles de IAM y seleccione el rol de servicio que creó para el streaming a tablas.

    • En el caso de QuickSight, elija Usuarios y grupos de SAML e ingrese el nombre de recurso de Amazon (ARN) del usuario administrador de QuickSight.

  4. En Etiquetas LF o recursos de catálogo, elija Recursos de catálogo de datos con nombre.

  5. En Catálogos, elija el subcatálogo que creó al integrar el bucket de tablas; por ejemplo, account-id:s3tablescatalog/amzn-s3-demo-bucket.

  6. En Bases de datos, elija el espacio de nombres del bucket de tablas de S3 que creó.

  7. (Opcional) En Tablas, elija la tabla de S3 que creó en el bucket de tablas.

    nota

    Si va a crear una tabla nueva en el editor de consultas de Athena, no seleccione ninguna tabla.

  8. Realice una de las siguientes acciones:

    • Si especificó una tabla en el paso anterior, en Permisos de tabla, elija Super.

    • Si no especificó una tabla en el paso anterior, vaya a Permisos de base de datos. Para compartir datos entre cuentas, no puede elegir Super para conceder a la otra entidad principal todos los permisos sobre la base de datos. En su lugar, elija permisos más detallados, como Describir.

  9. Elija Conceder.

CLI
  1. Asegúrese de que ejecuta el siguiente comando de la AWS CLI como administrador del lago de datos. Para obtener más información, consulte Creación de un administrador de lago de datos en la Guía para desarrolladores de AWS Lake Formation.

  2. Ejecute el siguiente comando para conceder permisos de Lake Formation en la tabla del bucket de tablas de S3 a una entidad principal de IAM para acceder a la tabla. Para utilizar este ejemplo, reemplace los user input placeholders con su propia información.

    aws lakeformation grant-permissions \ --region us-east-1 \ --cli-input-json \ '{ "Principal": { "DataLakePrincipalIdentifier": "user or role ARN, for example, arn:aws:iam::account-id:role/example-role" }, "Resource": { "Table": { "CatalogId": "account-id:s3tablescatalog/amzn-s3-demo-bucket", "DatabaseName": "S3 table bucket namespace, for example, test_namespace", "Name": "S3 table bucket table name, for example test_table" } }, "Permissions": [ "ALL" ] }'