

# Especificação de ARNs de recursos do AWS Glue
<a name="glue-specifying-resource-arns"></a>

No AWS Glue, você pode controlar o acesso a recursos usando uma política do AWS Identity and Access Management (IAM). Em uma política, você usa um Nome de recurso da Amazon (ARN) para identificar o recurso a que a política se aplica. Nem todos os recursos do AWS Glue oferecem suporte a ARNs.

**Topics**
+ [ARNs do Data Catalog](#data-catalog-resource-arns)
+ [ARNs de objetos fora do catálogo no AWS Glue](#non-catalog-resource-arns)
+ [Controle de acesso para operações singulares da API fora do catálogo do AWS Glue](#non-catalog-singular-apis)
+ [Controle de acesso para operações da API fora do catálogo do AWS Glue que recuperam vários itens](#non-catalog-plural-apis)
+ [Controle de acesso para operações da API BatchGet fora do catálogo do AWS Glue](#non-catalog-batch-get-apis)

## ARNs do Data Catalog
<a name="data-catalog-resource-arns"></a>

Os recursos do Data Catalog têm uma estrutura hierárquica, com `catalog` como a raiz.

```
arn:aws:glue:{{region}}:{{account-id}}:catalog
```

Cada conta da AWS tem um único Data Catalog em uma região da AWS com o ID da conta de 12 dígitos como o ID do catálogo. Os recursos têm ARNs exclusivos associados a eles, como exibido na tabela a seguir.


| **Tipo de recurso**  |  **Formato ARN**  | 
| --- | --- | 
| Catálogo | `arn:aws:glue:{{region}}:{{account-id}}:catalog`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:catalog` | 
| Banco de dados | `arn:aws:glue:{{region}}:{{account-id}}:database/{{database name}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:database/db1` | 
| Tabela | `arn:aws:glue:{{region}}:{{account-id}}:table/{{database name}}/{{table name}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:table/db1/tbl1` | 
| Catálogo de tabelas federadas do S3 (todos os buckets de tabela) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/s3tablescatalog` <br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog` | 
| Catálogo de buckets de tabelas federadas do S3 (catálogo filho) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/s3tablescatalog/{{bucket name}}` <br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog/amzn-s3-demo-bucket1` | 
| Banco de dados de tabelas federadas do S3 |  `arn:aws:glue:{{region}}:{{account-id}}:database/s3tablescatalog/{{child catalog name}}/{{database name}}` <br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:database/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1` | 
| Tabela federada do S3 |  `arn:aws:glue:{{region}}:{{account-id}}:table/s3tablescatalog/{{child catalog name}}/{{database name}}/{{table name}}` <br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:table/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1/s3tbl1` | 
| Catálogo de tabelas federadas do S3 (um único bucket de tabela registrado no Lake Formation) | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nome do catálogo}} <br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:catalog/amzn-s3-demo-bucket1`  | 
| Banco de dados de tabelas federadas do S3  | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nome do catálogo}}/{{nome do banco de dados}}<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:database/amzn-s3-demo-bucket1/nsdb1` | 
| Tabela federada do S3 | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nome do catálogo}}/{{nome do banco de dados}}/{{nome da tabela}}<br /> Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:table/amzn-s3-demo-bucket1/{{nsdb1}}/s3tbl1`  | 
| Catálogo federado ou gerenciado (catálogo de nível superior em um vários catálogos) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/{{top-level catalog name}}` <br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:catalog/nscatalog`<br />O formato ARN para um catálogo gerenciado segue a mesma estrutura. | 
| Catálogo federado multinível (catálogo filho em um catálogo multinível) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/{{top-level catalog name}}/{{child catalog name}}` <br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:catalog/nscatalog/dbcatalog` | 
| Banco de dados federado |  `arn:aws:glue:{{region}}:{{account-id}}:database/{{name space catalog name}}/{{child catalog name}}/{{database name}}` <br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:database/nscatalog/dbcatalog/schemadb` | 
| Tabela federada |  `arn:aws:glue:{{region}}:{{account-id}}:table/{{name space catalog name}}/{{child catalog name}}/{{database name}}/{{table name}}` <br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:table/nscatalog/dbcatalog/schemadb/rstbl1` | 
| Contêiner de link de catálogo | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nome do contêiner de link}}<br />Por exemplo: `arn:aws:glue:glue:us-east-1:123456789012:catalog`/linkcontainer-example  | 
| Banco de dados | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{nome do contêiner de link}}/{{nome do banco de dados}}<br />Por exemplo: `arn:aws:glue:glue:us-east-1:123456789012:database`/linkcontainer-example/link-db  | 
| Função definida pelo usuário | `arn:aws:glue:{{region}}:{{account-id}}:userDefinedFunction/{{database name}}/{{user-defined function name}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:userDefinedFunction/db1/func1` | 
| Conexão | `arn:aws:glue:{{region}}:{{account-id}}:connection/{{connection name}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:connection/connection1` | 
| Sessão interativa | `arn:aws:glue:{{region}}:{{account-id}}:session/{{interactive session id}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:session/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111` | 

Para habilitar um controle de acesso minucioso, você pode usar esses ARNs em suas políticas do IAM e políticas de recursos para conceder e negar acesso a recursos específicos. Curingas são permitidos nas políticas. Por exemplo, o seguinte ARN corresponde a todas as tabelas no banco de dados `default`.

```
arn:aws:glue:us-east-1:123456789012:table/default/*
```

**Importante**  
Todas as operações executadas em um recurso do Data Catalog exigem permissão no recurso e em todos os ancestrais desse recurso. Por exemplo, criar uma partição para uma tabela requer permissão na tabela, no banco de dados e no catálogo em que a tabela está localizada. O exemplo a seguir mostra a permissão necessária para criar partições na tabela `PrivateTable` do banco de dados `PrivateDatabase` no Data Catalog.  

```
{
   "Sid": "GrantCreatePartitions",
   "Effect": "Allow",
   "Action": [
       "glue:BatchCreatePartitions"
   ],
   "Resource": [
       "arn:aws:glue:us-east-1:123456789012:table/PrivateDatabase/PrivateTable",
       "arn:aws:glue:us-east-1:123456789012:database/PrivateDatabase",
       "arn:aws:glue:us-east-1:123456789012:catalog"
   ]
}
```
Além de permissão no recurso e em todos os seus ancestrais, todas as operações de exclusão exigem permissão em todos os filhos desse recurso. Por exemplo, excluir um banco de dados requer permissão em todas as tabelas e funções definidas pelo usuário no banco de dados, além do banco de dados e no catálogo em que o banco de dados está localizado. O exemplo a seguir mostra a permissão necessária para excluir o banco de dados `PrivateDatabase` no Data Catalog.  

```
{
   "Sid": "GrantDeleteDatabase",
   "Effect": "Allow",
   "Action": [
       "glue:DeleteDatabase"
   ],
   "Resource": [
       "arn:aws:glue:us-east-1:123456789012:table/PrivateDatabase/*",
       "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/PrivateDatabase/*",
       "arn:aws:glue:us-east-1:123456789012:database/PrivateDatabase",
       "arn:aws:glue:us-east-1:123456789012:catalog"
   ]
}
```
Resumindo, as ações em recursos do Data Catalog seguem estas regras de permissão:  
As ações no catálogo requerem permissão somente no catálogo.
As ações em um banco de dados requerem permissão no banco de dados e no catálogo.
A exclusão de ações em um banco de dados requer permissão no banco de dados e no catálogo e em todas as tabelas e funções definidas pelo usuário no banco de dados.
As ações em uma tabela, partição ou versão de tabela requerem permissão na tabela, no banco de dados e no catálogo.
As ações em uma função definida pelo usuário requerem permissão na função definida pelo usuário, no banco de dados e no catálogo.
As ações em uma conexão requerem permissão na conexão e no catálogo.

## ARNs de objetos fora do catálogo no AWS Glue
<a name="non-catalog-resource-arns"></a>

Alguns recursos do AWS Glue permitem permissões no nível do recurso para controlar o acesso usando um ARN. Você pode usar esses ARNs em suas políticas do IAM para permitir um controle de acesso refinado. A tabela a seguir lista os recursos que podem conter ARNs de recursos.


| **Tipo de recurso**  |  **Formato ARN**  | 
| --- | --- | 
| Crawler | `arn:aws:glue:{{region}}:{{account-id}}:crawler/{{crawler-name}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:crawler/mycrawler` | 
| Trabalho | `arn:aws:glue:{{region}}:{{account-id}}:job/{{job-name}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:job/testjob` | 
| Trigger | `arn:aws:glue:{{region}}:{{account-id}}:trigger/{{trigger-name}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:trigger/sampletrigger` | 
| Endpoint de desenvolvimento | `arn:aws:glue:{{region}}:{{account-id}}:devEndpoint/{{development-endpoint-name}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:devEndpoint/temporarydevendpoint` | 
| Transformação de machine learning | `arn:aws:glue:{{region}}:{{account-id}}:mlTransform/{{transform-id}}`<br />Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:mlTransform/tfm-1234567890` | 

## Controle de acesso para operações singulares da API fora do catálogo do AWS Glue
<a name="non-catalog-singular-apis"></a>

As operações *singulares* de API fora do catálogo do AWS Glue atuam em um único item (endpoint de desenvolvimento). Os exemplos são `GetDevEndpoint`, `CreateUpdateDevEndpoint` e `UpdateDevEndpoint`. Para essas operações, uma política deve colocar o nome da API no bloco `"action"` e o ARN do recurso no bloco `"resource"`.

Suponha que você queira permitir que um usuário chame a operação `GetDevEndpoint`. A política a seguir concede as permissões mínimas necessárias para um endpoint chamado `myDevEndpoint-1`.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "MinimumPermissions",
      "Effect": "Allow",
      "Action": "glue:GetDevEndpoint",
      "Resource": "arn:aws:glue:{{us-east-1}}:{{111122223333}}:devEndpoint/myDevEndpoint-1"
    }
  ]
}
```

------

A política a seguir permite o acesso `UpdateDevEndpoint` a recursos que correspondem a `myDevEndpoint-` com um caractere curinga (\*).

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "PermissionWithWildcard",
      "Effect": "Allow",
      "Action": "glue:UpdateDevEndpoint",
      "Resource": "arn:aws:glue:{{us-east-1}}:{{111122223333}}:devEndpoint/myDevEndpoint-*"
    }
  ]
}
```

------

Você pode combinar as duas políticas, como no exemplo a seguir. Você pode ver `EntityNotFoundException` para qualquer endpoint de desenvolvimento cujo nome começa com `A`. No entanto, um erro de acesso negado retorna quando você tenta acessar outros endpoints de desenvolvimento.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CombinedPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:UpdateDevEndpoint",
        "glue:GetDevEndpoint"
      ],
      "Resource": "arn:aws:glue:{{us-east-1}}:{{111122223333}}:devEndpoint/A*"
    }
  ]
}
```

------

## Controle de acesso para operações da API fora do catálogo do AWS Glue que recuperam vários itens
<a name="non-catalog-plural-apis"></a>

Algumas operações da API do AWS Glue recuperam vários itens (como vários endpoints de desenvolvimento); por exemplo, `GetDevEndpoints`. Para essa operação, você pode especificar apenas um recurso de caractere curinga (\*), e não ARNs específicos.

Por exemplo, para incluir `GetDevEndpoints` na política, o recurso deve estar projetado para o curinga (\*). As operações singulares (`GetDevEndpoint`, `CreateDevEndpoint` e `DeleteDevendpoint`) também têm escopo para todos (\*) os recursos no exemplo.

```
{
            "Sid": "PluralAPIIncluded",
            "Effect": "Allow",
            "Action": [
                "glue:GetDevEndpoints",
                "glue:GetDevEndpoint",
                "glue:CreateDevEndpoint",
                "glue:UpdateDevEndpoint"
            ],
            "Resource": [
                "*"
            ]
}
```

## Controle de acesso para operações da API BatchGet fora do catálogo do AWS Glue
<a name="non-catalog-batch-get-apis"></a>

Algumas operações da API do AWS Glue recuperam vários itens (como vários endpoints de desenvolvimento); por exemplo, `BatchGetDevEndpoints`. Para essa operação, você pode especificar um ARN para limitar o escopo dos recursos que podem ser acessados.

Por exemplo, para permitir o acesso a um endpoint de desenvolvimento específico, inclua `BatchGetDevEndpoints` na política com o ARN do seu recurso.

```
{
            "Sid": "BatchGetAPIIncluded",
            "Effect": "Allow",
            "Action": [
                "glue:BatchGetDevEndpoints"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:123456789012:devEndpoint/de1" 
            ]
}
```

Com essa política, você pode acessar com êxito o endpoint de desenvolvimento chamado `de1`. No entanto, se você tentar acessar o endpoint de desenvolvimento chamado `de2`, um erro será retornado.

```
An error occurred (AccessDeniedException) when calling the BatchGetDevEndpoints operation: No access to any requested resource.
```

**Importante**  
Para abordagens alternativas de configuração de políticas do IAM, como usar operações da API `List` e `BatchGet`, consulte [Exemplos das políticas baseadas em identidade do AWS Glue](security_iam_id-based-policy-examples.md). 