Acceso detallado a las bases de datos y las tablas en AWS Glue Data Catalog - Amazon Athena

Acceso detallado a las bases de datos y las tablas en 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

El término “fine-grained access control” (control de acceso detallado) aquí se refiere a la seguridad a nivel de base de datos y tabla. Para obtener información acerca de la seguridad a nivel de celda, fila y columna, consulte Data filtering and cell-level security in Lake Formation (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 identity-based. 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 tema siguiente
Creación de una política de IAM que defina el acceso detallado 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 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 use un control de acceso detallado con AWS Glue Data Catalog y Athena:

  • El acceso solo puede limitarse a bases de datos y tablas. Los controles de acceso detallado se aplican en el nivel de tabla y no puede limitar el acceso a las distintas particiones de una tabla. Para obtener más información, consulte Particiones y versiones de tabla 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 detallados para tablas y bases de datos.

    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 detallados para tablas y bases de datos.

  • 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 detallados para tablas y bases de datos.

  • Cuando limite el acceso a una base de datos específica del catálogo de datos, también debe especificar la política de acceso a la base de datos y al catálogo default para cada Región de AWS para las acciones GetDatabase y CreateDatabase. Si utiliza Athena en más de una región, agregue una línea distinta a la política con el ARN del recurso para cada base de datos y catálogo default de cada región.

    Por ejemplo, para permitir que GetDatabase tenga acceso a example_db en la región us-east-1 (Norte de Virginia), incluya también la base de datos y el catálogo default en la política para esa región para las acciones GetDatabase, GetDatabases y CreateDatabase:

    { "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", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }

Obligatorio: política de acceso a la base de datos y al catálogo Default en cada Región de AWS

Para que Athena funcione con AWS Glue Data Catalog, debe existir la siguiente política de acceso a la base de datos default y a AWS Glue Data Catalog en cada Región de AWS para GetDatabase, GetDatabases y CreateDatabase:

{ "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" ] }

Particiones y versiones de tabla 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.

Para un control de acceso detallado, se aplican los siguientes permisos de acceso:

  • Los controles de acceso detallado se aplican en el 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

    Tener acceso a todas las particiones de una tabla no es suficiente si necesita ejecutar acciones en AWS Glue en particiones. Para ejecutar acciones en particiones, necesita permisos para dichas acciones. Por ejemplo, para ejecutar GetPartitions en la tabla myTable de la base de datos myDB, necesita permisos para la acción glue:GetPartitions en el catálogo de datos, la base de datos myDB y myTable.

  • Los controles de acceso detallado no se aplican a las versiones de tabla. 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 detallados para tablas y bases de datos

La tabla siguiente contiene ejemplos de políticas basadas en identidad de IAM que permiten un acceso detallado a las bases de datos y tablas de 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 la política de acceso para la base de datos y el catálogo default, para las acciones GetDatabase y CreateDatabase. Esta política es necesaria para que Athena y el AWS Glue Data Catalog funcionen juntos. En el caso de trabajar en varias regiones de AWS, incluya esta política para cada una de las bases de datos y catálogos default, con una línea por cada región.

Además, sustituya los nombres de la base de datos example_db y la tabla test por los de sus bases de datos y tablas.

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:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "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/default", "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.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "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:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "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:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "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" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "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:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "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:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "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/*" ] }