

# Configurar o acesso a bancos de dados e tabelas no AWS Glue Data Catalog
<a name="fine-grained-access-to-glue-resources"></a>

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**  
Este tópico aborda segurança no nível de bancos de dados e tabelas. Para obter informações sobre a configuração de segurança no nível de colunas, linhas e células, consulte [Data filtering and cell-level security in Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/data-filtering.html). 

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html) 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 defina o acesso aos recursos | [Criação de políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) 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)](https://docs.aws.amazon.com/glue/latest/dg/using-identity-based-policies.html) no Guia do desenvolvedor do AWS Glue.  | 

 **Nesta seção** 
+  [Limitações](#access-to-glue-resources-limitations) 
+  [Configurar o acesso do AWS Glue ao catálogo e ao banco de dados por Região da AWS](#full-access-to-default-db-per-region) 
+  [Sobre o controle de acesso para partições e versões de tabela no AWS Glue](#access-to-glue-resources-table-partitions-and-versions) 
+  [Exemplos de permissões no nível de bancos de dados e tabelas](#examples-fine-grained-table-database-policies) 

## Limitações
<a name="access-to-glue-resources-limitations"></a>

Leve em conta as seguintes limitações quando usar o controle de acesso no nível de bancos de dados e tabelas para 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](https://docs.aws.amazon.com/lake-formation/latest/dg/identity-center-integration.html) no *Guia do desenvolvedor do AWS Lake Formation*. 
+ Você pode limitar o acesso apenas a bancos de dados e tabelas. Esses controles são aplicados no nível de tabelas. Você não pode limitar o acesso a partições individuais em uma tabela. Para obter mais informações, consulte [Sobre o controle de acesso para partições e versões de tabela no AWS Glue](#access-to-glue-resources-table-partitions-and-versions).
+ 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 no nível de bancos de dados e tabelas](#examples-fine-grained-table-database-policies).

  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](https://docs.aws.amazon.com/glue/latest/dg/glue-specifying-resource-arns.html#data-catalog-resource-arns) 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 no nível de bancos de dados e tabelas](#examples-fine-grained-table-database-policies). 
+ 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 no nível de bancos de dados e tabelas](#examples-fine-grained-table-database-policies).

## Configurar o acesso do AWS Glue ao catálogo e ao banco de dados por Região da AWS
<a name="full-access-to-default-db-per-region"></a>

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

## Sobre o controle de acesso para partições e versões de tabela no AWS Glue
<a name="access-to-glue-resources-table-partitions-and-versions"></a>

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 os fins de controle de acesso, as seguintes permissões de acesso se aplicam:
+ Os controles são aplicados no nível de tabelas. 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` no catálogo, no banco de dados `myDB` e nos recursos de `myTable`. 
+ Os controles de acesso não são aplicados às versões de tabelas. 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](https://docs.aws.amazon.com/glue/latest/dg/api-permissions-reference.html) no *Guia do desenvolvedor do AWS Glue*. 

## Exemplos de permissões no nível de bancos de dados e tabelas
<a name="examples-fine-grained-table-database-policies"></a>

A tabela a seguir lista exemplos das políticas baseadas em identidade do IAM que permitem acesso aos bancos de dados e às tabelas do 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\$1db.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase", <br />      "glue:UpdateDatabase"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db"<br />   ]<br />}</pre> | 
| CREATE DATABASE | Permite que você crie o banco de dados chamado example\$1db.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase", <br />      "glue:CreateDatabase"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db"<br />   ]<br />}<br /></pre> | 
| CRIAR TABELA | Permite que você crie uma tabela chamada test no banco de dados do example\$1db.<pre>{<br />   "Sid": "DatabasePermissions",<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase", <br />      "glue:GetDatabases"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db"<br />   ]<br />},<br />{<br />   "Sid": "TablePermissions",<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetTables",<br />      "glue:GetTable",<br />      "glue:GetPartitions",<br />      "glue:CreateTable"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db",<br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/test"<br />   ]<br />}</pre> | 
| DROP DATABASE | Permite que você elimine o banco de dados do example\$1db incluindo todas as suas tabelas.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:DeleteDatabase",<br />      "glue:GetTables", <br />      "glue:GetTable", <br />      "glue:DeleteTable" <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db", <br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/*", <br />     "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/example_db/*"<br />   ]<br /> }</pre> | 
| DESCARTAR TABELA | Permite que você elimine uma tabela particionada chamada test no banco de dados do example\$1db. Se a tabela não tiver partições, não inclua ações de partição.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:GetTable",<br />      "glue:DeleteTable", <br />      "glue:GetPartitions",<br />      "glue:GetPartition",<br />      "glue:DeletePartition" <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db", <br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/test"<br />   ]<br /> }</pre> | 
| 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\$1db.<pre>{<br />    "Effect": "Allow",<br />    "Action": [<br />        "glue:GetDatabase",<br />        "glue:CreateDatabase",<br />        "glue:GetTable",<br />        "glue:GetPartitions",<br />        "glue:GetPartition",<br />        "glue:BatchCreatePartition"<br />    ],<br />    "Resource": [<br />      "arn:aws:glue:us-east-1:123456789012:catalog",<br />      "arn:aws:glue:us-east-1:123456789012:database/example_db", <br />      "arn:aws:glue:us-east-1:123456789012:table/example_db/test"<br />    ]<br />}</pre> | 
| SHOW DATABASES | Permite que você liste todos os bancos de dados no AWS Glue Data Catalog.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:GetDatabases" <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/*"<br />   ]<br /> }</pre> | 
| SHOW TABLES | Permite que você liste todas as tabelas no banco de dados do example\$1db.<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:GetTables"    <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db",  <br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/*"<br />   ]<br />}</pre> | 