

# Configurar o acesso entre contas aos catálogos de dados do AWS Glue
<a name="security-iam-cross-account-glue-catalog-access"></a>

Você pode usar o recurso de catálogo do AWS Glue entre contas do Athena para registrar um catálogo do AWS Glue de outra conta sua. Depois de configurar as permissões do IAM necessárias para o AWS Glue e registrar o catálogo como um recurso [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html) do Athena, você poderá usar o Athena para executar consultas entre contas. Para obter informações sobre como usar o console do Athena para registrar um catálogo de outra conta, consulte [Registrar um catálogo de dados de outra conta](data-sources-glue-cross-account.md).

Para obter mais informações sobre o acesso entre contas no AWS Glue, consulte [Concessão de acesso entre contas](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html) no *Guia do desenvolvedor do AWS Glue*.

## Antes de começar
<a name="security-iam-cross-account-glue-catalog-access-before-you-start"></a>

Como esse recurso usa as APIs existentes do recurso `DataCatalog` e as funcionalidades do Athena para habilitar o acesso entre contas, recomendamos ler os seguintes tópicos antes de começar:
+ [Conectar-se à fonte de dados](work-with-data-stores.md): contém tópicos sobre como usar o Athena com as fontes de catálogo de dados AWS Glue, Hive ou Lambda.
+ [Políticas de catálogo de dados de exemplo](datacatalogs-example-policies.md): mostra como escrever políticas que controlam o acesso aos catálogos de dados.
+ [Usar a AWS CLI com metastores do Hive](datastores-hive-cli.md): mostra como usar a AWS CLI com metastores do Hive, mas contém casos de uso aplicáveis a outras origens de dados.

## Considerações e limitações
<a name="security-iam-cross-account-glue-catalog-access-considerations-and-limitations"></a>

No momento, o acesso entre contas ao catálogo do AWS Glue no Athena tem as seguintes limitações:
+ O recurso está disponível apenas nas Regiões da AWS compatíveis com o mecanismo Athena versão 2 ou posterior. Para obter informações sobre as versões do mecanismo do Athena, consulte [Versionamento do mecanismo do Athena](engine-versions.md). Para fazer upgrade da versão do mecanismo para um grupo de trabalho, consulte [Alterar versões do mecanismo do Athena](engine-versions-changing.md).
+ Quando você registra o AWS Glue Data Catalog de outra conta na sua conta, cria um recurso `DataCatalog` regional vinculado aos dados da outra conta somente nessa região específica.
+ No momento, as instruções `CREATE VIEW` que incluem um catálogo do AWS Glue entre contas não são permitidas.
+ Catálogos criptografados usando chaves gerenciadas da AWS não podem ser consultados entre contas. Em vez disso, use chaves gerenciadas pelo cliente (`KMS_CMK`) para os catálogos que você deseja consultar entre contas. Para obter informações sobre as diferenças entre chaves gerenciadas pelo cliente e pela AWS, consulte [Chaves do cliente e chaves da AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt                     ) no *Guia do desenvolvedor do AWS Key Management Service*. 

## Conceitos básicos
<a name="security-iam-cross-account-glue-catalog-getting-started"></a>

No cenário abaixo, a conta do “tomador” (666666666666) deseja executar uma consulta `SELECT` que faz referência ao catálogo do AWS Glue que pertence à conta do “proprietária” (999999999999), como no seguinte exemplo:

```
SELECT * FROM ownerCatalog.tpch1000.customer
```

No procedimento a seguir, as etapas 1a e 1b mostram como conceder à conta do tomador acesso aos recursos do AWS Glue da conta do proprietário, tanto da perspectiva do tomador quanto do proprietário. O exemplo concede acesso ao banco de dados `tpch1000` e à tabela `customer`. Altere esses nomes de exemplo de acordo com as suas necessidades.

### Etapa 1b: criar um perfil de tomador com acesso aos recursos do AWS Glue do proprietário
<a name="security-iam-cross-account-glue-catalog-access-step-1a"></a>

Para criar um perfil de conta do tomador com uma política para acessar os recursos do AWS Glue da conta do proprietário, é possível usar o console do AWS Identity and Access Management (IAM) ou a [API do IAM](https://docs.aws.amazon.com/IAM/latest/APIReference/API_Operations.html). O procedimento a seguir usa o console do IAM.

**Para criar um perfil de tomador e a política para acessar os recursos do AWS Glue da conta do proprietário**

1. Faça login no console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) usando a conta do tomador.

1. No painel de navegação, expanda **Gerenciamento de acesso** e escolha **Políticas**.

1. Escolha **Criar política**.

1. Em **Editor de políticas**, escolha **JSON**.

1. No editor de política, insira a seguinte política e modifique-a de acordo com os seus requisitos:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-east-1:999999999999:catalog",
                   "arn:aws:glue:us-east-1:999999999999:database/tpch1000",
                   "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer"
               ]
           }
       ]
   }
   ```

------

1. Escolha **Próximo**.

1. Na página **Revisar e criar**, insira um nome para a política em **Nome da política** (p. ex., **CrossGluePolicyForBorrowerRole**).

1. Escolha **Create policy**.

1. No painel de navegação, escolha **Perfis**.

1. Escolha **Criar Perfil**.

1. Na página **Selecionar entidade confiável**, escolha **Conta da AWS** e, em seguida, selecione **Avançar**.

1. Na página **Adicionar permissões**, insira na caixa de pesquisa o nome da política que você criou (p. ex., **CrossGluePolicyForBorrowerRole**).

1. Marque a caixa de seleção ao lado do nome da política e escolha **Avançar**.

1. Na página **Name, review, and create** (Nomear, revisar e criar), para **Role name** (Nome da função), digite um nome para a função (por exemplo, **CrossGlueBorrowerRole**).

1. Selecione **Criar perfil**.

### Etapa 1b: criar uma política do proprietário para permitir que o tomador tenha acesso ao AWS Glue
<a name="security-iam-cross-account-glue-catalog-access-step-1b"></a>

Para conceder acesso ao AWS Glue da conta do proprietário (999999999999) para o perfil do tomador, é possível usar o console do AWS Glue ou a operação de API [PutResourcePolicy](https://docs.aws.amazon.com/glue/latest/webapi/API_PutResourcePolicy.html) do AWS Glue. O procedimento a seguir usa o console do AWS Glue.

**Para conceder acesso ao AWS Glue para a conta do mutuário do proprietário**

1. Faça login no console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) usando a conta do proprietário.

1. No painel de navegação, expanda **Data Catalog** e escolha **Configurações do catálogo**.

1. Na caixa **Permissions** (Permissões), insira a política como mostrado a seguir. Em *rolename*, insira o perfil que o tomador criou na etapa 1a (p. ex., **CrossGlueBorrowerRole**). Para aumentar o escopo da permissão, é possível usar o caractere curinga `*` para os dois tipos de recurso: banco de dados e tabela.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::666666666666:user/username",
                       "arn:aws:iam::666666666666:role/rolename"
                   ]
               },
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-east-1:999999999999:catalog",
                   "arn:aws:glue:us-east-1:999999999999:database/tpch1000",
                   "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer"
               ]
           }
       ]
   }
   ```

------

Ao concluir, recomendamos usar a [API do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api.html) para fazer algumas chamadas de teste entre contas a fim de confirmar se as permissões estão configuradas conforme o esperado.

### Etapa 2: o mutuário registra o AWS Glue Data Catalog que pertence à conta de proprietário
<a name="security-iam-cross-account-glue-catalog-access-step-2"></a>

O procedimento a seguir mostra como usar o console do Athena para configurar um AWS Glue Data Catalog na conta da Amazon Web Services do proprietário da fonte de dados. Para obter informações sobre como usar operações de API em vez do console para registrar o catálogo, consulte [(Opcional) Usar a API para registrar um catálogo de dados do Athena que pertence à conta do proprietário](#security-iam-cross-account-glue-catalog-access-step-2-api).

**Para registrar um AWS Glue Data Catalog pertencente a outra conta**

1. Abra o console do Athena em [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Se o painel de navegação do console não estiver visível, escolha o menu de expansão à esquerda.  
![\[Escolha o menu de expansão.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/nav-pane-expansion.png)

1. Expanda **Administração** e escolha **Fontes de dados**.

1. No canto superior direito do console, escolha **Create data source** (Criar fonte de dados).

1. Na página **Escolher uma fonte de dados**, em **Fontes de dados**, escolha **S3 - AWS Glue Data Catalog** e depois **Próximo**.

1. Na página **Inserir detalhes da fonte de dados**, na seção **AWS Glue Data Catalog**, para **Escolher um AWS Glue Data Catalog**, escolha **AWS Glue Data Catalog em outra conta**.

1. Em **Data source details** (Detalhes da origemdos dados), forneça as seguintes informações:
   + **Data source name** (Nome da origem dos dados): insira o nome que você deseja usar em suas consultas SQL para fazer referência ao catálogo de dados na outra conta.
   + **Description** (Descrição): insira uma descrição do catálogo de dados na outra conta (opcional).
   + **Catalog ID** (ID do catálogo): insira o ID de 12 dígitos da conta da Amazon Web Services à qual o catálogo de dados pertence. O ID da conta da Amazon Web Services é o ID do catálogo.

1. (Opcional) Expanda **Etiquetas** e adicione pares de chave-valor que você queira associar com a fonte de dados. Para obter mais informações sobre tags, consulte [Marcar recursos do Athena com tags](tags.md).

1. Escolha **Próximo**.

1. Na página **Review and create** (Revisar e criar), analise as informações fornecidas e selecione **Create data source** (Criar fonte de dados). A página **Data source details** (Detalhes da fonte de dados) lista os bancos de dados e etiquetas do catálogo de dados que você registrou.

1. Escolha **Fontes de dados e catálogos**. O catálogo de dados que você registrou está listado na coluna **Data source name** (Nome da fonte de dados).

1. Para visualizar ou editar as informações do catálogo de dados, escolha o catálogo e selecione **Actions** (Ações), **Edit** (Editar).

1. Para excluir o novo catálogo de dados, escolha o catálogo e selecione **Actions** (Ações) **Delete** (Excluir).

### Etapa 3: O mutuário envia uma consulta
<a name="security-iam-cross-account-glue-catalog-access-step-4"></a>

O tomador envia uma consulta que faz referência ao catálogo usando a sintaxe *catálogo*.*banco de dados*.*tabela*, conforme o seguinte exemplo:

```
SELECT * FROM ownerCatalog.tpch1000.customer
```

Em vez de usar a sintaxe totalmente qualificada, o tomador também pode especificar o catálogo contextualmente, passando o valor por [QueryExecutionContext](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionContext.html).

## (Opcional) Configurar permissões adicionais do Amazon S3
<a name="security-iam-cross-account-glue-catalog-access-additional-s3-permissions"></a>
+ Se a conta do tomador usar uma consulta do Athena para gravar novos dados em uma tabela na conta do proprietário, o proprietário não terá acesso automaticamente a esses dados no Amazon S3, mesmo que a tabela exista na conta do proprietário. Isso ocorre porque, a menos que seja configurado de outra forma, o tomador é o proprietário do objeto das informações no Amazon S3. Para permitir que o proprietário tenha acesso aos dados, defina as permissões nos objetos adequadamente em uma etapa adicional.
+ Determinadas operações DDL entre contas, como [MSCK REPAIR TABLE](msck-repair-table.md), exigem permissões do Amazon S3. Por exemplo, se a conta do tomador estiver executando uma operação `MSCK REPAIR` entre contas em uma tabela na conta do proprietário que tenha os dados em um bucket do S3 da conta do proprietário, esse bucket deverá conceder permissões ao perfil assumido pelo tomador para que a consulta ocorra com êxito.

Para informações sobre como conceder permissões de bucket, consulte [Como definir permissões de bucket de ACL?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/set-bucket-permissions.html) no *Guia do usuário do console do Amazon Simple Storage Service*.

## (Opcional) Usar um catálogo dinamicamente
<a name="security-iam-cross-account-glue-catalog-access-dynamic-catalogs"></a>

Em alguns casos, você pode querer executar testes rápidos em um catálogo do AWS Glue entre contas sem a etapa de pré-requisito de registro. Você poderá executar dinamicamente consultas entre contas sem criar o objeto de recurso `DataCatalog` se as permissões necessárias do IAM e do Amazon S3 estiverem configuradas corretamente, conforme já foi descrito neste documento.

Para referenciar claramente um catálogo sem registro, use a sintaxe no seguinte exemplo:

```
SELECT * FROM "glue:arn:aws:glue:us-east-1:999999999999:catalog".tpch1000.customer
```

Use o formato “`glue:<arn>`”, em que `<arn>` é o [ARN do AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/glue-specifying-resource-arns.html#data-catalog-resource-arns) que você deseja usar. No exemplo, o Athena usa essa sintaxe para apontar dinamicamente para o catálogo de dados do AWS Glue da conta 999999999999 como se você tivesse criado um objeto `DataCatalog` separado para ele.

### Observações sobre o uso de catálogos dinâmicos
<a name="security-iam-cross-account-glue-catalog-access-notes-dynamic-catalogs"></a>

Ao usar catálogos dinâmicos, lembre-se dos pontos a seguir.
+ O uso de um catálogo dinâmico requer as permissões do IAM que você normalmente usa para as operações de API do Catálogo de dados do Athena. A principal diferença é que o nome do recurso Catálogo de dados segue a convenção de nomenclatura `glue:*`.
+ O ARN do catálogo deve pertencer à mesma região onde a consulta está sendo executada.
+ Ao usar um catálogo dinâmico em uma consulta DML ou visualização, coloque-o entre aspas duplas escapadas (`\"`). Ao usar um catálogo dinâmico em uma consulta DDL, coloque-o entre caracteres de aceto grave (```).

## (Opcional) Usar a API para registrar um catálogo de dados do Athena que pertence à conta do proprietário
<a name="security-iam-cross-account-glue-catalog-access-step-2-api"></a>

Em vez de usar o console do Athena conforme descrito na Etapa 2, é possível usar operações de API para registrar o catálogo de dados pertencente à conta do proprietário.

O criador do recurso [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html) do Athena deve ter as permissões necessárias para executar a operação de API [CreateDataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateDataCatalog.html) do Athena. Dependendo dos seus requisitos, o acesso às operações adicionais de API pode ser necessário. Para obter mais informações, consulte [Políticas de catálogo de dados de exemplo](datacatalogs-example-policies.md).

O corpo da seguinte solicitação `CreateDataCatalog` registra um catálogo do AWS Glue para acesso entre contas:

```
# Example CreateDataCatalog request to register a cross-account Glue catalog:
{
    "Description": "Cross-account Glue catalog",
    "Name": "ownerCatalog",
    "Parameters": {"catalog-id" : "999999999999"  # Owner's account ID
    },
    "Type": "GLUE"
}
```

O código de exemplo a seguir usa um cliente Java para criar o objeto `DataCatalog`.

```
# Sample code to create the DataCatalog through Java client
CreateDataCatalogRequest request = new CreateDataCatalogRequest()
    .withName("ownerCatalog")
    .withType(DataCatalogType.GLUE)
    .withParameters(ImmutableMap.of("catalog-id", "999999999999"));

athenaClient.createDataCatalog(request);
```

Após essas etapas, o mutuário deverá ver `ownerCatalog` quando chamar a operação de API [ListDataCatalogs](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDataCatalogs.html).

## Recursos adicionais
<a name="security-iam-cross-account-glue-catalog-access-additional-resources"></a>
+ [Registrar um catálogo de dados de outra conta](data-sources-glue-cross-account.md)
+ [Configure o acesso entre contas para um AWS Glue Data Catalog compartilhado usando o Amazon Athena](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena.html) no guia *Padrões de orientação prescritiva AWS*.
+ [Consultar AWS Glue Data Catalog entre contas usando o Amazon Athena](https://aws.amazon.com/blogs/big-data/query-cross-account-aws-glue-data-catalogs-using-amazon-athena/) no *AWSBlog de Big Data*
+ [Conceder acesso entre contas](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html) no *AWS GlueGuia do desenvolvedor* 