Configuración del acceso a las bases de datos y tablas en el AWS Glue Data Catalog - Amazon Athena

Configuración del acceso a las bases de datos y tablas en el AWS Glue Data Catalog

Si utiliza la opción AWS Glue Data Catalog con Amazon Athena, puede definir políticas de nivel de recursos para la base de datos y los objetos del catálogo de datos que se utilizan en Athena.

nota

En este tema se analiza la seguridad a nivel de bases de datos y tablas. Para obtener información sobre cómo configurar la seguridad a nivel de columna, fila y celda, consulte Filtrado de datos y seguridad a nivel de celda en Lake Formation.

Puede definir los permisos de nivel de recursos en las políticas basadas en identidad de IAM.

importante

En esta sección se analizan los permisos de nivel de recursos en las políticas basadas en identidad de IAM. Son diferentes de las políticas basadas en recursos. Para obtener más información sobre las diferencias, consulte Políticas basadas en identidad y políticas basadas en recursos en la Guía del usuario de IAM.

Consulte los siguientes temas sobre estas tareas:

Para llevar a cabo esta tarea consulte el siguiente tema
Creación de una política de IAM que defina el acceso a los recursos Creación de políticas de IAM en la Guía del usuario de IAM.
Más información acerca de las políticas basadas en identidad de IAM que se utilizan en el AWS Glue Políticas basadas en identidad (políticas de IAM) en la Guía para desarrolladores de AWS Glue.

En esta sección

Limitaciones

Tenga en cuenta las siguientes limitaciones cuando utilice el control de acceso a nivel de base de datos y tabla para AWS Glue Data Catalog y Athena:

  • Los grupos de trabajo de Athena habilitados para IAM Identity Center requieren que Lake Formation esté configurado para utilizar las identidades del IAM Identity Center. Para obtener más información, consulte Integración del IAM Identity Center en la Guía para desarrolladores de AWS Lake Formation.

  • El acceso solo puede limitarse a bases de datos y tablas. Estos controles se aplican a nivel de tabla. No se puede limitar el acceso a particiones individuales dentro de una tabla. Para obtener más información, consulte Acerca del control de acceso para las particiones y versiones de tablas en AWS Glue.

  • El AWS Glue Data Catalog contiene los siguientes recursos: CATALOG, DATABASE, TABLE y FUNCTION.

    nota

    En esta lista, los recursos que son comunes entre Athena y AWS Glue Data Catalog son TABLE, DATABASE y CATALOG para cada cuenta. Function es específico de AWS Glue. Para eliminar acciones en Athena, debe incluir los permisos a las acciones de AWS Glue. Consulte Ejemplos de permisos a nivel de base de datos y tabla.

    La jerarquía es la siguiente: CATALOG es un antecesor de todas las DATABASES de cada cuenta y cada DATABASE es un antecesor de todas sus TABLES y FUNCTIONS. Por ejemplo, en el caso de una tabla denominada table_test que pertenezca a una base de datos db del catálogo de su cuenta, sus antecesores son db y el catálogo de su cuenta. Para la base de datos db, su antecesor es el catálogo de su cuenta y sus descendientes son las tablas y funciones. Para obtener más información acerca de la estructura jerárquica de los recursos, consulte Lista de ARN del catálogo de datos en la Guía para desarrolladores de AWS Glue.

  • Para cualquier acción de Athena en un registro distinta a la operación de eliminación, como CREATE DATABASE, CREATE TABLE, SHOW DATABASE, SHOW TABLE o ALTER TABLE, necesita permisos para llamar a esta acción en el recurso (tabla o base de datos) y en todos los antecesores de ese recurso en el catálogo de datos. Por ejemplo, en el caso de una tabla, sus antecesores son la base de datos a la que pertenece y el catálogo de la cuenta. En el caso de una base de datos, su antecesor es el catálogo de la cuenta. Consulte Ejemplos de permisos a nivel de base de datos y tabla.

  • Para una acción de eliminación en Athena, como DROP DATABASE o DROP TABLE, también necesita permisos para llamar a la acción de eliminación en todos los antecesores y descendientes del recurso en el catálogo de datos. Por ejemplo, para eliminar una base de datos necesita permisos en la base de datos, el catálogo, que es su antecesor, y todas las tablas y funciones definidas por el usuario, que son sus descendientes. Una tabla no tiene descendientes. Para ejecutar DROP TABLE, necesita permisos para esta acción en la tabla, la base de datos a la que pertenece y el catálogo. Consulte Ejemplos de permisos a nivel de base de datos y tabla.

Configuración del acceso de AWS Glue a su catálogo y base de datos por Región de AWS

Para que Athena pueda trabajar con AWS Glue, se requiere una política que conceda el acceso a su base de datos y al AWS Glue Data Catalog en su cuenta por Región de AWS. Para crear bases de datos, también se requiere el permiso CreateDatabase. En el siguiente ejemplo de política, sustituya la Región de AWS, el ID de la Cuenta de AWS y el nombre de la base de datos por los suyos.

{ "Sid": "DatabasePermissions", "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }

Acerca del control de acceso para las particiones y versiones de tablas en AWS Glue

En AWS Glue, las tablas pueden tener particiones y versiones. Las versiones y particiones de tabla no se consideran recursos independientes en AWS Glue. El acceso a las versiones y particiones de tabla se otorga concediendo acceso a la tabla y a los recursos antecesores de la tabla.

A efectos de control de acceso, se aplican los siguientes permisos de acceso:

  • Los controles se aplican a nivel de tabla. El acceso solo puede limitarse a bases de datos y tablas. Por ejemplo, si permite el acceso a una tabla particionada, este acceso se aplica a todas las particiones de la tabla. No se puede limitar el acceso a particiones individuales dentro de una tabla.

    importante

    A fin de ejecutar acciones de AWS Glue en las particiones, se requieren permisos para las acciones de partición en los niveles de catálogo, base de datos y tabla. No basta con tener acceso a las particiones de una tabla. Por ejemplo, para ejecutar GetPartitions en la tabla myTable de la base de datos myDB, debe otorgar permisos de glue:GetPartitions en el catálogo, la base de datos myDB y los recursos de la tabla myTable.

  • Los controles de acceso no se aplican a las versiones de las tablas. Al igual que ocurre con las particiones, el acceso a las versiones anteriores de una tabla se concede mediante el acceso a las API de versión de tabla de AWS Glue en la tabla y en los antecesores de la tabla.

Para obtener información sobre los permisos para las acciones de AWS Glue, consulte Permisos de API de AWS Glue: referencia de recursos y acciones en la Guía para desarrolladores de AWS Glue.

Ejemplos de permisos a nivel de base de datos y tabla

La siguiente tabla enumera ejemplos de políticas basadas en identidad de IAM que permiten el acceso a bases de datos y tablas en Athena. Le sugerimos que comience con estos ejemplos y, en función de sus necesidades, los ajuste para permitir o denegar acciones específicas con bases de datos y tablas determinadas.

Estos ejemplos incluyen el acceso a bases de datos y catálogos para que Athena y AWS Glue pueden trabajar juntos. En el caso de trabajar en varias regiones de AWS, incluya políticas similares para cada una de las bases de datos y catálogos, con una línea por cada región.

En los ejemplos, sustituya la base de datos example_db y la tabla test por sus propios nombres de base de datos y tabla.

Instrucción DDL Ejemplo de una política de acceso de IAM que concede acceso al recurso
ALTER DATABASE Permite modificar las propiedades de la base de datos example_db.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:UpdateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }
CREATE DATABASE Permite crear la base de datos con el nombre example_db.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }
CREATE TABLE Permite crear una tabla con el nombre test en la base de datos example_db.
{ "Sid": "DatabasePermissions", "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }, { "Sid": "TablePermissions", "Effect": "Allow", "Action": [ "glue:GetTables", "glue:GetTable", "glue:GetPartitions", "glue:CreateTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
DROP DATABASE Permite borrar la base de datos example_db, incluidas todas las tablas que contiene.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:DeleteDatabase", "glue:GetTables", "glue:GetTable", "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*", "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/example_db/*" ] }
DROP TABLE Permite borrar una tabla particionada llamada test en la base de datos example_db. Si la tabla no tiene particiones, no incluya acciones de partición.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:DeleteTable", "glue:GetPartitions", "glue:GetPartition", "glue:DeletePartition" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
MSCK REPAIR TABLE Permite actualizar los metadatos del catálogo después de agregar particiones compatibles con Hive a la tabla denominada test en la base de datos example_db.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetTable", "glue:GetPartitions", "glue:GetPartition", "glue:BatchCreatePartition" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
SHOW DATABASES Permite enumerar todas las bases de datos en AWS Glue Data Catalog.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/*" ] }
SHOW TABLES Permite enumerar todas las tablas de la base de datos example_db.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*" ] }