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 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 siguiente tema
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:

  • 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. 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.

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

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

    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 en la base de datos myDB, debe conceder permisos para glue:GetPartitions al catálogo, la base de datos myDB y los recursos 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 siguiente tabla 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 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/*" ] }