Acesso granular a bancos de dados e tabelas no AWS Glue Data Catalog - Amazon Athena

Acesso granular a bancos de dados e tabelas no AWS Glue Data Catalog

Se você usar o AWS Glue Data Catalog com o Amazon Athena, poderá definir políticas no nível do recurso para os objetos bancos de dados e tabelas do Catálogo de dados, que são usados no Athena.

nota

O termo “controle de acesso refinado” usado aqui se refere à segurança do banco de dados e da tabela. Para obter informações sobre segurança da coluna, da linha e da célula, consulte Data filtering and cell-level security in Lake Formation (Filtragem de dados e segurança da célula no Lake Formation).

Você define as permissões no nível do recurso nas políticas baseadas em identidade do IAM.

Importante

Esta seção aborda as permissões no nível do recurso nas políticas baseadas em identidade do IAM. Elas são diferentes das políticas com base em recursos. Para obter mais informações sobre as diferenças, consulte Políticas baseadas em identidade e em recurso no Guia do usuário do IAM.

Consulte os seguintes tópicos para essas tarefas:

Para executar essa tarefa Consulte o tópico a seguir
Criar uma política do IAM que define acesso granular a recursos Criação de políticas do IAM no Guia do usuário do IAM.
Saiba mais sobre as políticas baseadas em identidade do IAM usadas no AWS Glue Políticas baseadas em identidades (políticas do IAM) no Guia do desenvolvedor do AWS Glue.

Nesta seção

Limitações

Considere as seguintes limitações ao usar um controle de acesso granular com o AWS Glue Data Catalog e o Athena:

  • Os grupos de trabalho do Athena habilitados para o Centro de Identidade do IAM requerem que o Lake Formation seja configurado para usar as identidades do Centro de Identidade do IAM. Para obter mais informações, consulte Integrating IAM Identity Center no Guia do desenvolvedor do AWS Lake Formation.

  • Você pode limitar o acesso apenas a bancos de dados e tabelas. Controles de acesso granulares se aplicam no nível de tabela e não é possível limitar o acesso a partições individuais dentro de uma tabela. Para ter mais informações, consulte Versões e partições de tabela no AWS Glue.

  • O AWS Glue Data Catalog contém os seguintes recursos: CATALOG, DATABASE, TABLE e FUNCTION.

    nota

    Nessa lista, os recursos em comum entre o Athena e o AWS Glue Data Catalog são TABLE, DATABASE e CATALOG para cada conta. Function é específico de AWS Glue. Para as ações de exclusão no Athena, você deve incluir permissões para as ações do AWS Glue. Consulte Exemplos de permissões granulares para tabelas e bancos de dados.

    A hierarquia é a seguinte: CATALOG é um ancestral de todos os DATABASES em cada conta, e cada DATABASE é um ancestral para todas as suas TABLES e FUNCTIONS. Por exemplo, para uma tabela chamada table_test que pertence a um banco de dados db no catálogo em sua conta, seus ancestrais são db e catálogo na sua conta. Para o banco de dados db, seu ancestral é o catálogo em sua conta e seus descendentes são tabelas e funções. Para obter mais informações sobre a estrutura hierárquica de recursos, consulte Lista de ARNs no catálogo de dados no Guia do desenvolvedor do AWS Glue.

  • Para qualquer ação do Athena que não seja de exclusão em um recurso, como CREATE DATABASE, CREATE TABLE, SHOW DATABASE, SHOW TABLE ou ALTER TABLE, você precisa de permissões para chamar essa ação no recurso (tabela ou banco de dados) e em todos os ancestrais do recurso no Catálogo de dados. Por exemplo, para uma tabela, seus ancestrais são o banco de dados ao qual ela pertence e o catálogo da conta. Para um banco de dados, seu ancestral é o catálogo da conta. Consulte Exemplos de permissões granulares para tabelas e bancos de dados.

  • Para uma ação de exclusão no Athena, como DROP DATABASE ou DROP TABLE, você também precisa de permissões para chamar a ação em todos os ancestrais e descendentes do recurso no catálogo de dados. Por exemplo, para excluir um banco de dados, você precisa de permissões no banco de dados, no catálogo, que é seu ancestral, e em todas as tabelas e funções definidas pelo usuário, que são seus descendentes. Uma tabela não tem descendentes. Para executar DROP TABLE, você precisa de permissões para essa ação na tabela, no banco de dados ao qual ela pertence e no catálogo. Consulte Exemplos de permissões granulares para tabelas e bancos de dados.

Acesso do AWS Glue ao catálogo e banco de dados por Região da AWS

Para que o Athena funcione com o AWS Glue, é necessária uma política que conceda acesso ao banco de dados e ao AWS Glue Data Catalog em sua Região da AWS conta. Para criar bancos de dados, a permissão CreateDatabase também é necessária. No exemplo de política a seguir, substitua a Região da AWS, o ID da Conta da AWS e o nome do banco de dados por seus próprios dados.

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

Versões e partições de tabela no AWS Glue

No AWS Glue, tabelas podem ter partições e versões. As versões e partições de tabelas não são consideradas recursos independentes no AWS Glue. O acesso a versões e partições de tabela é garantido concedendo acesso na tabela e em recursos ancestrais da tabela.

Para fins de um controle de acesso detalhado, as seguintes permissões de acesso se aplicam:

  • Controles de acesso granulares se aplicam no nível de tabela. Você pode limitar o acesso apenas a bancos de dados e tabelas. Por exemplo, se você permitir acesso a uma tabela particionada, esse acesso se aplicará a todas as partições na tabela. Você não pode limitar o acesso a partições individuais em uma tabela.

    Importante

    Para executar as ações do AWS Glue em partições, são necessárias permissões para ações de partição nos níveis do catálogo, do banco de dados e da tabela. Ter acesso às partições em uma tabela não é suficiente. Por exemplo, para executar GetPartitions em uma tabela myTable no banco de dados myDB, você deve conceder permissões de glue:GetPartitions ao catálogo, ao banco de dados myDB e aos recursos de myTable.

  • Controles de acesso granulares não se aplicam a versões da tabela. Assim como ocorre com as partições, o acesso a versões anteriores de uma tabela é concedido por meio de acesso às APIs da versão da tabela do AWS Glue na tabela e aos ancestrais da tabela.

Para obter informações sobre permissões para as ações do AWS Glue, consulte Permissões da API do AWS Glue: referência de ações e recursos no Guia do desenvolvedor do AWS Glue.

Exemplos de permissões granulares para tabelas e bancos de dados

A tabela a seguir lista exemplos de políticas baseadas em identidade do IAM que permitem acesso granular a bancos de dados e tabelas no Athena. Recomendamos começar com esses exemplos e, de acordo com as suas necessidades, ajustá-los para permitir ou negar ações específicas a determinados bancos de dados e tabelas.

Esses exemplos incluem acesso a bancos de dados e catálogos para que Athena e o AWS Glue possam funcionar juntos. Para várias regiões da AWS, inclua políticas similares para cada um dos catálogos e bancos de dados, sendo uma linha para cada região.

Nesses exemplos, substitua o banco de dados example_db e os nomes das tabelas test pelos nomes dos seus próprios bancos de dados e tabelas.

Instrução DDL Exemplo de uma política de acesso do IAM que concede acesso ao recurso
ALTER DATABASE Permite que você modifique as propriedades do banco de dados do 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 que você crie o banco de dados chamado 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" ] }
CRIAR TABELA Permite que você crie uma tabela chamada test no banco de dados do 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 que você elimine o banco de dados do example_db incluindo todas as suas tabelas.
{ "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/*" ] }
DESCARTAR TABELA Permite que você elimine uma tabela particionada chamada test no banco de dados do example_db. Se a tabela não tiver partições, não inclua ações de partição.
{ "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 que você atualize os metadados do catálogo depois de adicionar partições compatíveis com o Hive à tabela chamada test no banco de dados 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 que você liste todos os bancos de dados no 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 que você liste todas as tabelas no banco de dados do 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/*" ] }