

# 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` Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:catalog`  | 
| Banco de dados |  `arn:aws:glue:region:account-id:database/database name` Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:database/db1`  | 
| Tabela |  `arn:aws:glue:region:account-id:table/database name/table name` 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`  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`  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`  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`  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*  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* 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*  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`  Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:catalog/nscatalog` 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`  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`  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`  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* 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* 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` Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:userDefinedFunction/db1/func1`  | 
| Conexão |  `arn:aws:glue:region:account-id:connection/connection name` Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:connection/connection1`  | 
| Sessão interativa |  `arn:aws:glue:region:account-id:session/interactive session id` 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` Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:crawler/mycrawler`  | 
| Trabalho |  `arn:aws:glue:region:account-id:job/job-name` Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:job/testjob`  | 
| Trigger |  `arn:aws:glue:region:account-id:trigger/trigger-name` Por exemplo, .: `arn:aws:glue:us-east-1:123456789012:trigger/sampletrigger`  | 
| Endpoint de desenvolvimento |  `arn:aws:glue:region:account-id:devEndpoint/development-endpoint-name` 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` 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 (\$1).

------
#### [ 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 (\$1), e não ARNs específicos.

Por exemplo, para incluir `GetDevEndpoints` na política, o recurso deve estar projetado para o curinga (\$1). As operações singulares (`GetDevEndpoint`, `CreateDevEndpoint` e `DeleteDevendpoint`) também têm escopo para todos (\$1) 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). 