

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 指定 AWS Glue 資源 ARN
<a name="glue-specifying-resource-arns"></a>

在 中AWS Glue，您可以使用 AWS Identity and Access Management (IAM) 政策控制對 資源的存取。在政策中，您使用 Amazon Resource Name (ARN) 來識別要套用政策的資源。並不是所有 AWS Glue 中的資源都支援 ARN。

**Topics**
+ [Data Catalog ARN](#data-catalog-resource-arns)
+ [AWS Glue 中非目錄物件的 ARN](#non-catalog-resource-arns)
+ [對 AWS Glue 非目錄單數 API 操作的存取控制](#non-catalog-singular-apis)
+ [可擷取多個項目的 AWS Glue 非目錄 API 操作存取控制](#non-catalog-plural-apis)
+ [AWS Glue 非目錄 BatchGet API 操作的存取控制](#non-catalog-batch-get-apis)

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

Data Catalog 資源擁有階層結構，以 `catalog` 為根。

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

每個 AWS 帳戶在 AWS 區域中都有單一資料目錄，並以 12 位數帳戶 ID 做為目錄 ID。具有相關聯唯一 ARN 的資源，如下表所示。


| **Resource Type (資源類型)**  |  **ARN 格式**  | 
| --- | --- | 
| 目錄 | `arn:aws:glue:{{region}}:{{account-id}}:catalog`<br />例如：`arn:aws:glue:us-east-1:123456789012:catalog` | 
| 資料庫 | `arn:aws:glue:{{region}}:{{account-id}}:database/{{database name}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:database/db1` | 
| 資料表 | `arn:aws:glue:{{region}}:{{account-id}}:table/{{database name}}/{{table name}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:table/db1/tbl1` | 
| 聯合 S3 資料表目錄 (所有資料表儲存貯體) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/s3tablescatalog` <br />例如：`arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog` | 
| 聯合 S3 資料表儲存貯體目錄 (子目錄) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/s3tablescatalog/{{bucket name}}` <br />例如：`arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog/amzn-s3-demo-bucket1` | 
| 聯合 S3 資料表資料庫 |  `arn:aws:glue:{{region}}:{{account-id}}:database/s3tablescatalog/{{child catalog name}}/{{database name}}` <br />例如：`arn:aws:glue:us-east-1:123456789012:database/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1` | 
| 聯合 S3 資料表 |  `arn:aws:glue:{{region}}:{{account-id}}:table/s3tablescatalog/{{child catalog name}}/{{database name}}/{{table name}}` <br />例如：`arn:aws:glue:us-east-1:123456789012:table/s3tablescatalog/amzn-s3-demo-bucket1/nsdb1/s3tbl1` | 
| 聯合 S3 資料表目錄 (向 Lake Formation 註冊的單一資料表儲存貯體) | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{catalog name}} <br />例如：`arn:aws:glue:us-east-1:123456789012:catalog/amzn-s3-demo-bucket1` | 
| 聯合 S3 資料表資料庫  | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{catalog name}}/{{database name}}<br />例如：`arn:aws:glue:us-east-1:123456789012:database/amzn-s3-demo-bucket1/nsdb1` | 
| 聯合 S3 資料表 | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{catalog name}}/{{database name}}/{{table name}}<br /> 例如：`arn:aws:glue:us-east-1:123456789012:table/amzn-s3-demo-bucket1/{{nsdb1}}/s3tbl1` | 
| 聯合或受管目錄 (多目錄中的頂層目錄) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/{{top-level catalog name}}` <br />例如：`arn:aws:glue:us-east-1:123456789012:catalog/nscatalog`<br />受管目錄的 ARN 格式遵循相同的結構。 | 
| 聯合多層目錄 (多層目錄中的子目錄) |  `arn:aws:glue:{{region}}:{{account-id}}:catalog/{{top-level catalog name}}/{{child catalog name}}` <br />例如：`arn:aws:glue:us-east-1:123456789012:catalog/nscatalog/dbcatalog` | 
| 聯合資料庫 |  `arn:aws:glue:{{region}}:{{account-id}}:database/{{name space catalog name}}/{{child catalog name}}/{{database name}}` <br />例如：`arn:aws:glue:us-east-1:123456789012:database/nscatalog/dbcatalog/schemadb` | 
| 聯合資料表 |  `arn:aws:glue:{{region}}:{{account-id}}:table/{{name space catalog name}}/{{child catalog name}}/{{database name}}/{{table name}}` <br />例如：`arn:aws:glue:us-east-1:123456789012:table/nscatalog/dbcatalog/schemadb/rstbl1` | 
| 目錄連結容器 | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{link container name}}<br />例如：`arn:aws:glue:glue:us-east-1:123456789012:catalog`/linkcontainer-example  | 
| 資料庫 | `arn:aws:glue:{{region}}:{{account-id}}:catalog`/{{link container name}}/{{database name}}<br />例如：`arn:aws:glue:glue:us-east-1:123456789012:database`/linkcontainer-example/link-db  | 
| 使用者定義的函數 | `arn:aws:glue:{{region}}:{{account-id}}:userDefinedFunction/{{database name}}/{{user-defined function name}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:userDefinedFunction/db1/func1` | 
| 連線 | `arn:aws:glue:{{region}}:{{account-id}}:connection/{{connection name}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:connection/connection1` | 
| 互動式工作階段 | `arn:aws:glue:{{region}}:{{account-id}}:session/{{interactive session id}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:session/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111` | 

若要啟用精細定義的存取控制，您可以在您的 IAM 政策和資源政策中使用這些 ARN，以授予或拒絕特定資源的存取權。政策中允許萬用字元。例如，以下 ARN 會比對資料庫 `default` 中的所有資料表。

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

**重要**  
 Data Catalog 資源上執行的所有操作，都需要資源的許可與該資源所有上階的許可。例如，建立資料表分割區時，需要資料表、資料庫和資料表所在目錄的許可。以下範例說明要在 Data Catalog 的 `PrivateDatabase` 資料庫中建立 `PrivateTable` 資料表分割區的必要許可。  

```
{
   "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"
   ]
}
```
除了資源的許可與其所有上階的許可，所有刪除操作也需要該資源所有子項的許可。例如，刪除資料庫，除需要資料庫及其所在目錄的許可之外，還需要資料庫中所有資料表和使用者定義函數的許可。以下範例說明要刪除 Data Catalog 中 `PrivateDatabase` 資料庫的必要許可。  

```
{
   "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"
   ]
}
```
總而言之，對 Data Catalog 資源採取的動作需遵循以下許可規則：  
針對目錄採取的動作只需要有目錄的許可即可。
針對資料庫採取的動作需要資料庫和目錄的許可。
針對資料庫的刪除動作需要資料庫和目錄的許可，再加上資料庫中所有資料表和使用者定義函數的許可。
針對資料表、分割區或資料表版本採取的動作需要資料表、資料庫和目錄的許可。
針對使用者定義函數採取的動作需要使用者定義函數、資料庫和目錄的許可。
針對連線採取的動作需要連線和目錄的許可。

## AWS Glue 中非目錄物件的 ARN
<a name="non-catalog-resource-arns"></a>

有些 AWS Glue 資源允許資源層級許可使用 ARN 來控制存取。您可以在 IAM 政策中使用這些 ARN 來啟用精細定義的存取控制。下表列出的資源可以包含資源 ARN。


| **Resource Type (資源類型)**  |  **ARN 格式**  | 
| --- | --- | 
| 爬蟲程式 | `arn:aws:glue:{{region}}:{{account-id}}:crawler/{{crawler-name}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:crawler/mycrawler` | 
| 任務 | `arn:aws:glue:{{region}}:{{account-id}}:job/{{job-name}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:job/testjob` | 
| 觸發條件 | `arn:aws:glue:{{region}}:{{account-id}}:trigger/{{trigger-name}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:trigger/sampletrigger` | 
| 開發端點 | `arn:aws:glue:{{region}}:{{account-id}}:devEndpoint/{{development-endpoint-name}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:devEndpoint/temporarydevendpoint` | 
| 機器學習轉換 | `arn:aws:glue:{{region}}:{{account-id}}:mlTransform/{{transform-id}}`<br />例如：`arn:aws:glue:us-east-1:123456789012:mlTransform/tfm-1234567890` | 

## 對 AWS Glue 非目錄單數 API 操作的存取控制
<a name="non-catalog-singular-apis"></a>

AWS Glue 非目錄*單數* API 操作會在單一項目 (開發端點) 上執行動作。範例包括 `GetDevEndpoint`、`CreateUpdateDevEndpoint` 和 `UpdateDevEndpoint`。針對這些操作，政策的 `"action"` 區塊中必須放置 API 名稱，而 `"resource"` 區塊中必須放置資源 ARN。

假設您想要允許使用者呼叫 `GetDevEndpoint` 操作。下列政策會將最低必要許可授予名為 `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"
    }
  ]
}
```

------

以下政策允許 `UpdateDevEndpoint` 使用萬用字元 (\*) 存取符合 `myDevEndpoint-` 的資源。

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

****  

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

------

您可以結合兩個政策，如下範例所示。您可以查看 `EntityNotFoundException` 以取得名稱開頭為 `A` 的任何開發端點。不過，當您嘗試存取其他開發端點時會傳回拒絕存取錯誤。

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

------

## 可擷取多個項目的 AWS Glue 非目錄 API 操作存取控制
<a name="non-catalog-plural-apis"></a>

有些 AWS Glue API 操作可擷取多個項目 (例如多個開發端點)，像是 `GetDevEndpoints`。針對此操作，您只能指定萬用字元 (\*) 資源，不能使用特定的 ARN。

例如，若要在政策中包含 `GetDevEndpoints`，資源範圍必須以萬用字元 (\*) 放大。單數操作 (`GetDevEndpoint`、`CreateDevEndpoint` 和 `DeleteDevendpoint`) 也會將範圍限制為範例中的所有 (\*) 資源。

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

## AWS Glue 非目錄 BatchGet API 操作的存取控制
<a name="non-catalog-batch-get-apis"></a>

有些 AWS Glue API 操作可擷取多個項目 (例如多個開發端點)，像是 `BatchGetDevEndpoints`。處理此操作時，您可以指定一個 ARN 來限制可存取資源的範圍。

例如，若要允許存取特定的開發端點，可使用其資源 ARN 在政策中包含 `BatchGetDevEndpoints`。

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

使用此政策，您就可以成功存取名為 `de1` 的開發端點。不過，如果您嘗試存取名為 `de2` 的開發端點，此時就會傳回錯誤。

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

**重要**  
如需設定 IAM 政策的替代方法，例如使用 `List` 和 `BatchGet` API 操作，請參閱 [Glue AWS 的身分型政策範例](security_iam_id-based-policy-examples.md)。