

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

# Glue AWS 的身分和存取管理
<a name="security-iam"></a>



AWS Identity and Access Management (IAM) 是一種 AWS 服務 ，可協助管理員安全地控制對 AWS 資源的存取。IAM 管理員可控制誰可以*進行身分驗證* （登入） 和*授權* （具有許可） 來使用 AWS Glue 資源。IAM 是您可以免費使用 AWS 服務 的 。

**注意**  
您可以使用AWS Glue方法或授權，授予 Glue Data Catalog AWS 中資料的存取權 AWS Lake Formation 。您可以使用 AWS Identity and Access Management (IAM) 政策，透過 AWS Glue方法設定精細存取控制。Lake Formation 使用更簡單的 `GRANT/REVOKE` 許可模型，這類似於關聯式資料庫系統中的 `GRANT/REVOKE` 命令。  
本節包含如何使用 AWS Glue 方法的相關資訊。如需使用 Lake Formation 授予的詳細資訊，請參閱*AWS Lake Formation 開發人員指南*中的[授予 Lake Formation 許可](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html)。

**Topics**
+ [目標對象](#security_iam_audience)
+ [使用身分驗證](#security_iam_authentication)
+ [使用政策管理存取權](#security_iam_access-manage)
+ [Glue AWS 如何與 IAM 搭配使用](security_iam_service-with-iam.md)
+ [設定 AWS Glue 的 IAM 許可](configure-iam-for-glue.md)
+ [AWS Glue 存取控制政策範例](glue-policy-examples.md)
+ [授予 Glue AWS 的 AWS 受管政策](security-iam-awsmanpol.md)
+ [為任務執行授予動態範圍的政策](dynamically-scoped-policies.md)
+ [指定 AWS Glue 資源 ARN](glue-specifying-resource-arns.md)
+ [授予跨帳戶存取權](cross-account-access.md)
+ [對 AWS Glue 身分和存取進行故障診斷](security_iam_troubleshoot.md)

## 目標對象
<a name="security_iam_audience"></a>

使用方式 AWS Identity and Access Management (IAM) 會根據您的角色而有所不同：
+ **服務使用者** — 若無法存取某些功能，請向管理員申請所需許可 (請參閱 [對 AWS Glue 身分和存取進行故障診斷](security_iam_troubleshoot.md))
+ **服務管理員** — 負責設定使用者存取權並提交相關許可請求 (請參閱 [Glue AWS 如何與 IAM 搭配使用](security_iam_service-with-iam.md))
+ **IAM 管理員** — 撰寫政策以管理存取控制 (請參閱 [Glue AWS 的身分型政策範例](security_iam_id-based-policy-examples.md))

## 使用身分驗證
<a name="security_iam_authentication"></a>

身分驗證是您 AWS 使用身分憑證登入 的方式。您必須以 AWS 帳戶根使用者、IAM 使用者或擔任 IAM 角色身分進行身分驗證。

您可以使用身分來源的登入資料，例如 AWS IAM Identity Center (IAM Identity Center)、單一登入身分驗證或 Google/Facebook 登入資料，以聯合身分的形式登入。如需有關登入的詳細資訊，請參閱《AWS 登入 使用者指南》**中的[如何登入您的 AWS 帳戶](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

對於程式設計存取， AWS 提供 SDK 和 CLI 以密碼編譯方式簽署請求。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [API 請求的AWS 第 4 版簽署程序](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 帳戶 根使用者
<a name="security_iam_authentication-rootuser"></a>

 當您建立 時 AWS 帳戶，您會從一個名為 AWS 帳戶 *theroot 使用者的*登入身分開始，該身分具有對所有 AWS 服務 和 資源的完整存取權。強烈建議不要使用根使用者來執行日常任務。有關需要根使用者憑證的任務，請參閱《IAM 使用者指南》**中的[需要根使用者憑證的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### 聯合身分
<a name="security_iam_authentication-federated"></a>

最佳實務是要求人類使用者使用聯合身分提供者，以 AWS 服務 使用臨時憑證存取 。

*聯合身分*是您企業目錄、Web 身分提供者的使用者，或使用來自身分來源的 AWS 服務 憑證存取 Directory Service 。聯合身分會擔任角色，而該角色會提供臨時憑證。

若需集中化管理存取權限，建議使用 AWS IAM Identity Center。如需詳細資訊，請參閱 *AWS IAM Identity Center 使用者指南*中的[什麼是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

### IAM 使用者和群組
<a name="security_iam_authentication-iamuser"></a>

*IAM 使用者*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)是一種身分具備單人或應用程式的特定許可權。建議以臨時憑證取代具備長期憑證的 IAM 使用者。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[要求人類使用者使用聯合身分提供者來 AWS 使用臨時憑證存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) 。

[IAM 群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)**會指定 IAM 使用者集合，使管理大量使用者的許可權更加輕鬆。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 使用者的使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*IAM 角色*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)的身分具有特定許可權，其可以提供臨時憑證。您可以透過[從使用者切換到 IAM 角色 （主控台） ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或呼叫 AWS CLI 或 AWS API 操作來擔任角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[擔任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色適用於聯合身分使用者存取、臨時 IAM 使用者許可、跨帳戶存取權與跨服務存取，以及在 Amazon EC2 執行的應用程式。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的快帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用政策管理存取權
<a name="security_iam_access-manage"></a>

您可以透過建立政策並將其連接到身分或資源 AWS 來控制 AWS 中的存取。政策定義與身分或資源相關聯的許可。當委託人提出請求時 AWS ， 會評估這些政策。大多數政策會以 JSON 文件 AWS 的形式存放在 中。如需進一步了解 JSON 政策文件，請參閱《*IAM 使用者指南*》中的 [JSON 政策概觀](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理員會使用政策，透過定義哪些**主體**可在哪些**條件**下對哪些**資源**執行**動作**，以指定可存取的範圍。

預設情況下，使用者和角色沒有許可。IAM 管理員會建立 IAM 政策並將其新增至角色，供使用者後續擔任。IAM 政策定義動作的許可，無論採用何種方式執行。

### 身分型政策
<a name="security_iam_access-manage-id-based-policies"></a>

身分型政策是附加至身分 (使用者、使用者群組或角色) 的 JSON 許可政策文件。這類政策控制身分可對哪些資源執行哪些動作，以及適用的條件。如需了解如何建立身分型政策，請參閱《*IAM 使用者指南*》中的[透過客戶管理政策定義自訂 IAM 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

身分型政策可分為*內嵌政策* (直接內嵌於單一身分) 與*受管政策* (可附加至多個身分的獨立政策)。如需了解如何在受管政策及內嵌政策之間做選擇，請參閱《IAM 使用者指南》**中的[在受管政策與內嵌政策之間選擇](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 資源型政策
<a name="security_iam_access-manage-resource-based-policies"></a>

資源型政策是附加到資源的 JSON 政策文件。範例包括 IAM *角色信任政策*與 Amazon S3 *儲存貯體政策*。在支援資源型政策的服務中，服務管理員可以使用它們來控制對特定資源的存取權限。您必須在資源型政策中[指定主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

資源型政策是位於該服務中的內嵌政策。您無法在資源型政策中使用來自 IAM 的 AWS 受管政策。

### 其他政策類型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支援其他政策類型，可設定更多常見政策類型授予的最大許可：
+ **許可界限** — 設定身分型政策可授與 IAM 實體的最大許可。如需詳細資訊，請參閱《 IAM 使用者指南》**中的 [IAM 實體許可界限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服務控制政策 (SCP)** — 為 AWS Organizations中的組織或組織單位指定最大許可。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[服務控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **資源控制政策 (RCP)** — 設定您帳戶中資源可用許可的上限。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[資源控制政策 (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **工作階段政策** — 在以程式設計方式為角色或聯合身分使用者建立臨時工作階段時，以參數形式傳遞的進階政策。如需詳細資訊，請參《*IAM 使用者指南*》中的[工作階段政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多種政策類型
<a name="security_iam_access-manage-multiple-policies"></a>

當多種類型的政策適用於請求時，產生的許可會更複雜而無法理解。若要了解如何 AWS 在涉及多種政策類型時決定是否允許請求，請參閱《*IAM 使用者指南*》中的[政策評估邏輯](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

# Glue AWS 如何與 IAM 搭配使用
<a name="security_iam_service-with-iam"></a>

在您使用 IAM 管理 Glue AWS 的存取權之前，請先了解哪些 IAM 功能可與 Glue AWS 搭配使用。






**您可以搭配 Glue 使用的 IAM AWS 功能**  

| IAM 功能 | AWS Glue 支援 | 
| --- | --- | 
|  [身分型政策](#security_iam_service-with-iam-id-based-policies)  |   是  | 
|  [資源型政策](#security_iam_service-with-iam-resource-based-policies)  |   部分  | 
|  [政策動作](#security_iam_service-with-iam-id-based-policies-actions)  |   是  | 
|  [政策資源](#security_iam_service-with-iam-id-based-policies-resources)  |   是  | 
|  [政策條件索引鍵 (服務特定)](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   是  | 
|  [ACL](#security_iam_service-with-iam-acls)  |   否   | 
|  [ABAC(政策中的標籤)](#security_iam_service-with-iam-tags)  |   部分  | 
|  [臨時憑證](#security_iam_service-with-iam-roles-tempcreds)  |   是  | 
|  [主體許可](#security_iam_service-with-iam-principal-permissions)  |   否   | 
|  [服務角色](#security_iam_service-with-iam-roles-service)  |   是  | 
|  [服務連結角色](#security_iam_service-with-iam-roles-service-linked)  |   否   | 

若要全面了解 AWS Glue 和其他 AWS 服務如何與大多數 IAM 功能搭配使用，請參閱《IAM *使用者指南*》中的[AWS 與 IAM 搭配使用的 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## Glue AWS 的身分型政策
<a name="security_iam_service-with-iam-id-based-policies"></a>

**支援身分型政策：**是

身分型政策是可以附加到身分 (例如 IAM 使用者、使用者群組或角色) 的 JSON 許可政策文件。這些政策可控制身分在何種條件下能對哪些資源執行哪些動作。如需了解如何建立身分型政策，請參閱《*IAM 使用者指南*》中的[透過客戶管理政策定義自訂 IAM 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

使用 IAM 身分型政策，您可以指定允許或拒絕的動作和資源，以及在何種條件下允許或拒絕動作。如要了解您在 JSON 政策中使用的所有元素，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

AWS Glue 支援所有 AWS Glue 操作的身分識別型政策 (IAM 政策)。連接政策，即可授予建立、存取或修改 AWS Glue 資源 (例如 AWS Glue Data Catalog 中的資料表) 的許可。

### Glue AWS 的身分型政策範例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



若要檢視 AWS Glue 身分型政策的範例，請參閱 [Glue AWS 的身分型政策範例](security_iam_id-based-policy-examples.md)。

## Glue AWS 中的資源型政策
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**支援資源型政策：**部分

資源型政策是附加到資源的 JSON 政策文件。資源型政策的最常見範例是 IAM *角色信任政策*和 Amazon S3 *儲存貯體政策*。在支援資源型政策的服務中，服務管理員可以使用它們來控制對特定資源的存取權限。對於附加政策的資源，政策會定義指定的主體可以對該資源執行的動作以及在何種條件下執行的動作。您必須在資源型政策中[指定主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。委託人可以包含帳戶、使用者、角色、聯合身分使用者或 AWS 服務。

如需啟用跨帳戶存取權，您可以在其他帳戶內指定所有帳戶或 IAM 實體作為資源型政策的主體。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的快帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

**注意**  
您只能使用 AWS Glue 資源政策來管理 Data Catalog 資源的許可。您無法將它連接到任何其他 AWS Glue 資源 (例如任務、觸發、開發端點、爬蟲程式或分類器)。  
每個目錄只允許*一項*資源政策，而且其大小限制為 10 KB。

在 AWS Glue 中，資源政策會連接至目錄，該*目錄*是適用於前述所有類型 Data Catalog 資源的虛擬容器。每個 AWS 帳戶在目錄 ID 與 AWS 帳戶 ID 相同的 AWS 區域中擁有單一目錄。無法刪除或修改目錄。

針對目錄的所有 API 呼叫評估資源政策，而在此目錄中，發起人委託人包含在政策文件的 `"Principal"` 區塊中。



若要檢視 AWS Glue 資源型政策的範例，請參閱 [Glue AWS 的資源型政策範例](security_iam_resource-based-policy-examples.md)。

## Glue AWS 的政策動作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**支援政策動作：**是

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

JSON 政策的 `Action` 元素描述您可以用來允許或拒絕政策中存取的動作。政策會使用動作來授予執行相關聯動作的許可。



若要查看 AWS Glue 動作清單，請參閱《*服務授權參考*》中的 [Glue AWS 定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-actions-as-permissions)。

Glue AWS 中的政策動作在動作之前使用以下字首：

```
glue
```

如需在單一陳述式中指定多個動作，請用逗號分隔。

```
"Action": [
      "glue:action1",
      "glue:action2"
         ]
```





您也可以使用萬用字元 (\$1) 來指定多個動作。例如，若要指定開頭是 `Get` 文字的所有動作，請包含以下動作：

```
"Action": "glue:Get*"
```

若要檢視範例原則，請參閱[AWS Glue 存取控制政策範例](glue-policy-examples.md)。

## Glue AWS 的政策資源
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**支援政策資源：**是

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

`Resource` JSON 政策元素可指定要套用動作的物件。最佳實務是使用其 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 來指定資源。若動作不支援資源層級許可，使用萬用字元 (\$1) 表示該陳述式適用於所有資源。

```
"Resource": "*"
```

如需如何使用 ARNs AWS 控制 Glue 資源存取的詳細資訊，請參閱 [指定 AWS Glue 資源 ARN](glue-specifying-resource-arns.md)。

若要查看 AWS Glue 資源類型及其 ARNs，請參閱*《服務授權參考*》中的 [Glue AWS 定義的資源](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-resources-for-iam-policies)。若要了解您可以使用哪些動作來指定每個資源的 ARN，請參閱 [Glue AWS 定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-actions-as-permissions)。



## Glue AWS 的政策條件索引鍵
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**支援服務特定政策條件金鑰：**是

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

`Condition` 元素會根據定義的條件，指定陳述式的執行時機。您可以建立使用[條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)的條件運算式 (例如等於或小於)，來比對政策中的條件和請求中的值。若要查看所有 AWS 全域條件索引鍵，請參閱《*IAM 使用者指南*》中的[AWS 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

若要查看 AWS Glue 條件索引鍵的清單，請參閱*《服務授權參考*》中的 [AWS Glue 條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-policy-keys)。若要了解您可以搭配哪些動作和資源使用條件索引鍵，請參閱 [Glue AWS 定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-actions-as-permissions)。

若要檢視範例原則，請參閱[使用條件索引鍵或內容索引鍵來控制設定](security_iam_id-based-policy-examples.md#glue-identity-based-policy-condition-keys)。

## Glue AWS 中的 ACLs
<a name="security_iam_service-with-iam-acls"></a>

**支援 ACL：**否 

存取控制清單 (ACL) 可控制哪些主體 (帳戶成員、使用者或角色) 擁有存取某資源的許可。ACL 類似於資源型政策，但它們不使用 JSON 政策文件格式。

## ABAC 與 AWS Glue
<a name="security_iam_service-with-iam-tags"></a>

**支援 ABAC (政策中的標籤)：**部分

屬性型存取控制 (ABAC) 是一種授權策略，根據稱為標籤的屬性定義許可權。您可以將標籤連接至 IAM 實體 AWS 和資源，然後設計 ABAC 政策，以便在委託人的標籤符合資源上的標籤時允許操作。

如需根據標籤控制存取，請使用 `aws:ResourceTag/key-name`、`aws:RequestTag/key-name` 或 `aws:TagKeys` 條件索引鍵，在政策的[條件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中，提供標籤資訊。

如果服務支援每個資源類型的全部三個條件金鑰，則對該服務而言，值為 **Yes**。如果服務僅支援某些資源類型的全部三個條件金鑰，則值為 **Partial**。

如需 ABAC 的詳細資訊，請參閱《*IAM 使用者指南*》中的[使用 ABAC 授權定義許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。如要查看含有設定 ABAC 步驟的教學課程，請參閱《*IAM 使用者指南*》中的[使用屬性型存取控制 (ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)。

**重要**  
條件內容金鑰只會套用在爬蟲程式、任務、觸發條件和開發端點上的 AWS Glue API 動作。如需哪些 API 操作受到影響的詳細資訊，請參閱 [Glue AWS 的條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-policy-keys)。  
AWS Glue Data Catalog API 操作目前不支援 `aws:referer` 和 `aws:UserAgent` 全域條件內容索引鍵。

若要檢視身分型政策範例，以根據該資源上的標籤來限制存取資源，請參閱 [使用標籤授權存取](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-allow)。

## 搭配 Glue AWS 使用臨時登入資料
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**支援臨時憑證：**是

臨時登入資料提供 AWS 資源的短期存取權，當您使用聯合或切換角色時會自動建立。 AWS 建議您動態產生臨時登入資料，而不是使用長期存取金鑰。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的臨時安全憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)與[可與 IAM 搭配運作的AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## Glue AWS 的跨服務主體許可
<a name="security_iam_service-with-iam-principal-permissions"></a>

**支援轉寄存取工作階段 (FAS)**：否 

 轉送存取工作階段 (FAS) 使用呼叫 的委託人許可 AWS 服務，結合 AWS 服務 請求向下游服務提出請求。如需提出 FAS 請求時的政策詳細資訊，請參閱[轉發存取工作階段](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。

## Glue AWS 的服務角色
<a name="security_iam_service-with-iam-roles-service"></a>

**支援服務角色：**是

 服務角色是服務擔任的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)，可代您執行動作。IAM 管理員可以從 IAM 內建立、修改和刪除服務角色。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以委派許可給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**警告**  
變更服務角色的許可可能會中斷 AWS Glue 功能。只有在 AWS Glue 提供指引時，才能編輯服務角色。

如需為 Glue AWS 建立服務角色的詳細說明，請參閱 [步驟 1：建立適用於 AWS Glue 服務的 IAM 政策](create-service-policy.md)和 [步驟 2：為 AWS Glue 建立 IAM 角色](create-an-iam-role.md)。

## Glue AWS 的服務連結角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**支援服務連結角色：**否 

 服務連結角色是連結至 的一種服務角色 AWS 服務。服務可以擔任代表您執行動作的角色。服務連結角色會出現在您的 中 AWS 帳戶 ，並由服務擁有。IAM 管理員可以檢視，但不能編輯服務連結角色的許可。

如需建立或管理服務連結角色的詳細資訊，請參閱[可搭配 IAM 運作的AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。在資料表中尋找服務，其中包含**服務連結角色**欄中的 `Yes`。選擇**是**連結，以檢視該服務的服務連結角色文件。

# 設定 AWS Glue 的 IAM 許可
<a name="configure-iam-for-glue"></a>

您可以使用 AWS Identity and Access Management (IAM) 來定義 AWS Glue 用來存取 資源的政策和角色。下列步驟會引導您選擇各種選項，以為 AWS Glue設定許可。根據您的商業需求，您可能需要新增或降低資源存取。

**注意**  
若要 AWS Glue 改為開始使用 的基本 IAM 許可，請參閱 [設定 的 IAM 許可 AWS Glue](set-up-iam.md)。

1. [建立適用於 AWS Glue 服務的 IAM 政策](create-service-policy.md)：建立允許存取 AWS Glue 資源的服務政策。

1. [為 AWS Glue 建立 IAM 角色](create-an-iam-role.md)：建立 IAM 角色，並連接 AWS Glue 服務政策和 AWS Glue 使用的 Amazon Simple Storage Service (Amazon S3) 資源的政策。

1. [連接政策到存取 AWS Glue 的使用者或群組](attach-policy-iam-user.md)：連接政策到登入 AWS Glue 主控台的任何使用者或群組。

1. [建立適用於筆記本的 IAM 政策](create-notebook-policy.md)：建立筆記本伺服器政策，以在開發端點上建立筆記本伺服器時使用。

1. [建立適用於筆記本的 IAM 角色](create-an-iam-role-notebook.md)：建立 IAM 角色，並連接筆記本伺服器政策。

1. [建立 Amazon SageMaker AI 筆記本的 IAM 政策](create-sagemaker-notebook-policy.md)：建立 IAM 政策，以在開發端點上建立 Amazon SageMaker AI 筆記本時使用。

1. [為 Amazon SageMaker AI 筆記本建立 IAM 角色](create-an-iam-role-sagemaker-notebook.md)：建立 IAM 角色，並連接政策，以在開發端點上建立 Amazon SageMaker AI 筆記本時授予許可。

# 步驟 1：建立適用於 AWS Glue 服務的 IAM 政策
<a name="create-service-policy"></a>

對於存取其他 AWS 資源上資料的任何操作，例如存取 Amazon S3 中的物件， AWS Glue都需要代表您存取資源的許可。您可以使用 AWS Identity and Access Management (IAM) 提供這些許可。

**注意**  
如果您使用 AWS 受管政策 ，則可以略過此步驟`AWSGlueServiceRole`。

在本步驟中，您將建立一個類似 `AWSGlueServiceRole` 的政策。最新版本的 `AWSGlueServiceRole` 可在 IAM 主控台找到。

**為 建立 IAM 政策 AWS Glue**

此政策授予部分 Amazon S3 動作的許可，在 AWS Glue 擔任使用此政策的角色時可用於管理其所需的帳戶內資源。此政策指定的部分資源參照 AWS Glue 用於 Amazon S3 儲存貯體、Amazon S3 ETL 指令碼、CloudWatch Logs 和 Amazon EC2 資源的預設名稱。為了簡化，AWS Glue 寫入部分 Amazon S3 物件到您預設字首為 `aws-glue-*` 之帳戶的儲存貯體內。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中選擇 **Policies** (政策)。

1. 選擇**建立政策**。

1. 在 **Create Policy** (建立政策) 畫面上導覽至索引標籤，以編輯 JSON。使用下列 JSON 陳述式建立政策文件，然後選擇 **Review policy** (檢閱政策)。
**注意**  
新增 Amazon S3 資源所需的任何許可。您可能希望將存取政策的資源部分範圍限縮在需要的資源。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:*",
           "s3:GetBucketLocation",
           "s3:ListBucket",
           "s3:ListAllMyBuckets",
           "s3:GetBucketAcl",
           "ec2:DescribeVpcEndpoints",
           "ec2:DescribeRouteTables",
           "ec2:CreateNetworkInterface",
           "ec2:DeleteNetworkInterface",
           "ec2:DescribeNetworkInterfaces",
           "ec2:DescribeSecurityGroups",
           "ec2:DescribeSubnets",
           "ec2:DescribeVpcAttribute",
           "iam:ListRolePolicies",
           "iam:GetRole",
           "iam:GetRolePolicy",
           "cloudwatch:PutMetricData"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:CreateBucket",
           "s3:PutBucketPublicAccessBlock"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue-*/*",
           "arn:aws:s3:::*/*aws-glue-*/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject"
         ],
         "Resource": [
           "arn:aws:s3:::crawler-public*",
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:AssociateKmsKey"
         ],
         "Resource": [
           "arn:aws:logs:*:*:log-group:/aws-glue/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "ec2:CreateTags",
           "ec2:DeleteTags"
         ],
         "Condition": {
           "ForAllValues:StringEquals": {
             "aws:TagKeys": [
               "aws-glue-service-resource"
             ]
           }
         },
         "Resource": [
           "arn:aws:ec2:*:*:network-interface/*",
           "arn:aws:ec2:*:*:security-group/*",
           "arn:aws:ec2:*:*:instance/*"
         ]
       }
     ]
   }
   ```

------

   下表說明此政策授予的許可。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/create-service-policy.html)

1. 在 **Review Policy** (檢閱政策) 畫面上，輸入 **Policy Name** (政策名稱)，例如 **GlueServiceRolePolicy**。輸入選用的說明，當您對政策滿意時，即可選擇 **Create policy (建立政策)**。

# 步驟 2：為 AWS Glue 建立 IAM 角色
<a name="create-an-iam-role"></a>

您需要授予 AWS Glue 在代為呼叫其他服務時可擔任之 IAM 角色的許可。這包括存取 Amazon S3 的任何來源、目標、指令碼和使用於 AWS Glue 的臨時目錄。爬蟲程式、工作和開發端點皆需要許可。

您可以使用 AWS Identity and Access Management (IAM) 提供這些許可。新增政策至傳送到 AWS Glue 的 IAM 角色。

****在任務編輯器中建立 IAM 角色****

1. 當您在AWS Glue主控台中建立任務時，請尋找角色區段。

1. 選擇 **Create new role** (建立新角色)。

1. 會開啟內嵌角色建立表單，讓您：
   + 指定**角色名稱**，例如 `AWSGlueServiceRoleDefault`。
   + `AWSGlueServiceRole` 系統會自動選取 受管政策。
   + 檢閱信任政策以擔任角色。
   + 新增中繼資料的選用標籤。

1. 選擇建**立角色**。

1. 系統會自動為您的任務選取新建立的角色。

或者，您可以使用 IAM 主控台來建立角色：

****使用 IAM 主控台建立 IAM AWS Glue 角色****

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇 **Roles** (角色)。

1. 選擇**建立角色**。

1.  選擇 **AWS 服務**作為信任的實體類型。然後，針對服務或使用案例，尋找並選擇 **AWS Glue**。選擇**下一步**。

1. 在**新增許可**頁面上，選擇包含必要許可的政策；例如，一般AWS Glue許可`AWSGlueServiceRole`的 AWS 受管政策，以及存取 Amazon S3 資源的 AWS 受管政策 Amazon S3FullAccess。 **AmazonS3FullAccess** 然後選擇**下一步**。
**注意**  
確定此角色其中一個政策授予 Amazon S3 來源和目標的許可。您可能想要提供自己的政策來存取特定的 Amazon S3 資源。資料來源需要 `s3:ListBucket` 和 `s3:GetObject` 許可。資料目標需要 `s3:ListBucket`、`s3:PutObject` 和 `s3:DeleteObject` 許可。如需為您的資源建立 Amazon S3 政策的詳細資訊，請參閱[在政策中指定資源](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-arn-format.html)。如需範例 Amazon S3 政策，請參閱[編寫 IAM 政策：如何授予 Amazon S3 儲存貯體的存取](https://aws.amazon.com/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/)。  
如果您計劃存取使用 SSE-KMS 加密的 Amazon S3 來源和目標，請連接允許 AWS Glue 爬蟲程式、任務和開發端點解密資料的政策。如需詳細資訊，請參閱[使用伺服器端加密搭配受管金鑰保護資料 AWS KMS(SSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。  
下列是 範例。  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": [
           "arn:aws:kms:*:111122223333:key/key-id"
         ]
       }
     ]
   }
   ```

1.  為您的角色命名並新增描述 (選用)，然後檢閱信任政策和許可。在 **Role name (角色名稱)** 中輸入角色名稱，例如 `AWSGlueServiceRoleDefault`。建立名稱字首為 `AWSGlueServiceRole` 字串的角色，以允許角色從主控台使用者傳送到服務。AWS Glue​ 提供的政策預期 IAM​ 服務角色的開頭應為 `AWSGlueServiceRole`。否則，您必須新增政策，允許您的使用者取得 `iam:PassRole` 許可，使 IAM 角色符合您的命名慣例。選擇**建立角色**。
**注意**  
在您使用角色建立筆記本時，系統會將該角色傳遞至互動式工作階段，以便在兩個位置皆可使用同一個角色。因此，`iam:PassRole` 許可需要成為角色政策的一部分。  
使用下列範例為角色建立新政策。用您的帳號與角色名稱取代範例中的值。  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "iam:PassRole",
         "Resource": "arn:aws:iam::090000000210:role/<role_name>"
       }
     ]
   }
   ```

1.  將標籤新增至您的角色 (選用)。標籤是索引鍵/值組，您可以新增至 AWS 資源，以協助識別、組織或搜尋資源。然後，選擇 **Create role** (建立角色)。

# 步驟 3：連接政策到存取 AWS Glue 的使用者或群組
<a name="attach-policy-iam-user"></a>

管理員必須使用AWS Glue主控台或 AWS Command Line Interface () 將許可指派給任何使用者、群組或角色AWS CLI。您可透過政策用 AWS Identity and Access Management (IAM) 提供這些許可。此步驟說明如何將許可指派給使用者或群組。

完成此步驟時，您的使用者或群組將連接以下政策：
+  AWS 受管政策`AWSGlueConsoleFullAccess`或自訂政策 **GlueConsoleAccessPolicy**
+ **`AWSGlueConsoleSageMakerNotebookFullAccess`**
+ **`CloudWatchLogsReadOnlyAccess`**
+ **`AWSCloudFormationReadOnlyAccess`**
+ **`AmazonAthenaFullAccess`**

**連接內嵌政策並內嵌於使用者或群組**

您可以將 AWS 受管政策或內嵌政策連接至使用者或群組，以存取 AWS Glue主控台。此政策指定的部分資源參照 AWS Glue 用於 Amazon S3 儲存貯體、Amazon S3 ETL 指令碼、CloudWatch Logs、 CloudFormation和 Amazon EC2 資源的預設名稱。為了簡化，AWS Glue 寫入部分 Amazon S3 物件到您預設字首為 `aws-glue-*` 之帳戶的儲存貯體內。
**注意**  
如果您使用 AWS 受管政策 ，則可以略過此步驟**`AWSGlueConsoleFullAccess`**。
**重要**  
AWS Glue 需要獲得許可才能擔任代為執行任務的角色。**為了達成這個目標，您新增 `iam:PassRole` 許可至 AWS Glue 使用者或群組。**此政策授予許可給 AWS Glue 服務角色開頭為 `AWSGlueServiceRole` 的角色，和建立筆記本伺服器時需要之角色的 `AWSGlueServiceNotebookRole`。您也可以依照您的命名慣例建立自己的 `iam:PassRole` 許可政策。  
根據安全最佳實務，建議透過限制政策來限制存取，以進一步限制對 Amazon S3 儲存貯體和 Amazon CloudWatch 日誌群組的存取。如需範例 Amazon S3 政策，請參閱[編寫 IAM 政策：如何授予 Amazon S3 儲存貯體的存取](https://aws.amazon.com/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/)。

在本步驟中，您將建立一個類似 `AWSGlueConsoleFullAccess` 的政策。最新版本的 `AWSGlueConsoleFullAccess` 可在 IAM 主控台找到。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**群組**或**使用者**。

1. 在清單中，選擇要內嵌政策的使用者或群組名稱。

1. 選擇 **Permissions (許可)** 索引標籤，並在必要時，展開 **Permissions policies (許可政策)** 部分。

1. 選擇 **Add Inline policy** (新增內嵌政策) 連結。

1. 在 **Create Policy** (建立政策) 畫面上導覽至索引標籤，以編輯 JSON。使用下列 JSON 陳述式建立政策文件，然後選擇 **Review policy** (檢閱政策)。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:*",
           "redshift:DescribeClusters",
           "redshift:DescribeClusterSubnetGroups",
           "iam:ListRoles",
           "iam:ListUsers",
           "iam:ListGroups",
           "iam:ListRolePolicies",
           "iam:GetRole",
           "iam:GetRolePolicy",
           "iam:ListAttachedRolePolicies",
           "ec2:DescribeSecurityGroups",
           "ec2:DescribeSubnets",
           "ec2:DescribeVpcs",
           "ec2:DescribeVpcEndpoints",
           "ec2:DescribeRouteTables",
           "ec2:DescribeVpcAttribute",
           "ec2:DescribeKeyPairs",
           "ec2:DescribeInstances",
           "rds:DescribeDBInstances",
           "rds:DescribeDBClusters",
           "rds:DescribeDBSubnetGroups",
           "s3:ListAllMyBuckets",
           "s3:ListBucket",
           "s3:GetBucketAcl",
           "s3:GetBucketLocation",
           "cloudformation:DescribeStacks",
           "cloudformation:GetTemplateSummary",
           "dynamodb:ListTables",
           "kms:ListAliases",
           "kms:DescribeKey",
           "cloudwatch:GetMetricData",
           "cloudwatch:ListDashboards"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject"
         ],
         "Resource": [
           "arn:aws:s3:::*/*aws-glue-*/*",
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "tag:GetResources"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:CreateBucket",
           "s3:PutBucketPublicAccessBlock"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue-*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "logs:GetLogEvents"
         ],
         "Resource": [
           "arn:aws:logs:*:*:/aws-glue/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "cloudformation:CreateStack",
           "cloudformation:DeleteStack"
         ],
         "Resource": "arn:aws:cloudformation:*:*:stack/aws-glue*/*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "ec2:RunInstances"
         ],
         "Resource": [
           "arn:aws:ec2:*:*:instance/*",
           "arn:aws:ec2:*:*:key-pair/*",
           "arn:aws:ec2:*:*:image/*",
           "arn:aws:ec2:*:*:security-group/*",
           "arn:aws:ec2:*:*:network-interface/*",
           "arn:aws:ec2:*:*:subnet/*",
           "arn:aws:ec2:*:*:volume/*"
         ]
       },
       {
         "Action": [
           "iam:PassRole"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:iam::*:role/AWSGlueServiceRole*",
         "Condition": {
           "StringLike": {
             "iam:PassedToService": [
               "glue.amazonaws.com"
             ]
           }
         }
       },
       {
         "Action": [
           "iam:PassRole"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:iam::*:role/AWSGlueServiceNotebookRole*",
         "Condition": {
           "StringLike": {
             "iam:PassedToService": [
               "ec2.amazonaws.com"
             ]
           }
         }
       },
       {
         "Action": [
           "iam:PassRole"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:iam::*:role/service-role/AWSGlueServiceRole*"
         ],
         "Condition": {
           "StringLike": {
             "iam:PassedToService": [
               "glue.amazonaws.com"
             ]
           }
         }
       }
     ]
   }
   ```

------

   下表說明此政策授予的許可。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/attach-policy-iam-user.html)

1. 在 **Review policy (檢閱政策)** 頁面上，輸入政策名稱 (例如 **GlueConsoleAccessPolicy**)。當您滿意時，選擇 **Create policy (建立政策)**。確認畫面頂端的紅色方塊未出現任何錯誤。如出現任何錯誤，請加以修正。
**注意**  
如果選取 **Use autoformatting** (使用自動格式化)，每當您開啟政策或選擇 **Validate Policy** (驗證政策) 時，政策都會重新格式化。

**附加 AWSGlueConsoleFullAccess 受管政策**

您可連接 `AWSGlueConsoleFullAccess` 政策，以提供 AWS Glue 主控台使用者所需要的許可。
**注意**  
如果您已自行為 AWS Glue 主控台存取建立政策，可跳過此步驟。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**政策**。

1. 在政策清單中，選取 **AWSGlueConsoleFullAccess** 旁的核取方塊。您可用**篩選**功能表和搜尋方塊來篩選政策清單。

1. 選擇**政策動作**，再選擇**附加**。

1. 選擇要附加政策的使用者。您可用**篩選**功能表和搜尋方塊來篩選主體實體清單。選擇要附加的使用者後，選擇**附加政策**。

**連接 `AWSGlueConsoleSageMakerNotebookFullAccess` 受管政策**

您可以將 `AWSGlueConsoleSageMakerNotebookFullAccess` 政策連接至使用者，以管理在 AWS Glue 主控台中建立的 SageMaker AI 筆記本。除了其他必要的 AWS Glue 主控台許可之外，此政策會授予管理 SageMaker AI 筆記本所需的資源存取權。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**政策**。

1. 在政策清單中，選取 **AWSGlueConsoleSageMakerNotebookFullAccess** 旁的核取方塊。您可用**篩選**功能表和搜尋方塊來篩選政策清單。

1. 選擇**政策動作**，再選擇**附加**。

1. 選擇要附加政策的使用者。您可用**篩選**功能表和搜尋方塊來篩選主體實體清單。選擇要附加的使用者後，選擇**附加政策**。

**附加 CloudWatchLogsReadOnlyAccess 受管政策**

您可以將 **CloudWatchLogsReadOnlyAccess** 政策連接到使用者，以在 CloudWatch Logs 主控台上檢視 AWS Glue 建立的日誌。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**政策**。

1. 在政策清單中，選取 **CloudWatchLogsReadOnlyAccess** 旁的核取方塊。您可用**篩選**功能表和搜尋方塊來篩選政策清單。

1. 選擇**政策動作**，再選擇**附加**。

1. 選擇要附加政策的使用者。您可用**篩選**功能表和搜尋方塊來篩選主體實體清單。選擇要附加的使用者後，選擇**附加政策**。

**附加 AWSCloudFormationReadOnlyAccess 受管政策**

您可以將 **AWSCloudFormationReadOnlyAccess** 政策連接至使用者，以在 CloudFormation 主控台AWS Glue上檢視 使用的 CloudFormation 堆疊。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**政策**。

1. 在政策清單中，選取 **AWSCloudFormationReadOnlyAccess** 旁的核取方塊。您可用**篩選**功能表和搜尋方塊來篩選政策清單。

1. 選擇**政策動作**，再選擇**附加**。

1. 選擇要附加政策的使用者。您可用**篩選**功能表和搜尋方塊來篩選主體實體清單。選擇要附加的使用者後，選擇**附加政策**。

**連接 AmazonAthenaFullAccess 受管政策**

您可以將 **AmazonAthenaFullAccess** 政策連接到使用者，以在 Athena 主控台中檢視 Amazon S3 資料。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**政策**。

1. 在政策清單中，選取 **AmazonAthenaFullAccess** 旁的核取方塊。您可用**篩選**功能表和搜尋方塊來篩選政策清單。

1. 選擇**政策動作**，再選擇**附加**。

1. 選擇要附加政策的使用者。您可用**篩選**功能表和搜尋方塊來篩選主體實體清單。選擇要附加的使用者後，選擇**附加政策**。

# 步驟 4：建立適用於筆記本伺服器的 IAM 政策
<a name="create-notebook-policy"></a>

如果您計劃使用筆記本搭配開發端點，您必須指定建立筆記本伺服器時的許可。您可用 AWS Identity and Access Management (IAM) 來提供這些許可。

此政策授予部分 Amazon S3 動作的許可，在 AWS Glue 擔任使用此政策的角色時可用於管理其所需的帳戶內資源。此政策指定的部分資源參照 AWS Glue 用於 Amazon S3 儲存貯體、Amazon S3 ETL 指令碼和 Amazon EC2 資源的預設名稱。為了簡化，AWS Glue 預設寫入部分 Amazon S3 物件到您預設字首為 `aws-glue-*` 之帳戶的儲存貯體內。

**注意**  
如果您使用 AWS 受管政策 ，則可以略過此步驟**`AWSGlueServiceNotebookRole`**。

在本步驟中，您將建立一個類似 `AWSGlueServiceNotebookRole` 的政策。最新版本的 `AWSGlueServiceNotebookRole` 可在 IAM 主控台找到。

**建立適用於筆記本的 IAM 政策**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中選擇 **Policies** (政策)。

1. 選擇**建立政策**。

1. 在 **Create Policy** (建立政策) 畫面上導覽至索引標籤，以編輯 JSON。使用下列 JSON 陳述式建立政策文件，然後選擇 **Review policy** (檢閱政策)。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:CreateDatabase",
           "glue:CreatePartition",
           "glue:CreateTable",
           "glue:DeleteDatabase",
           "glue:DeletePartition",
           "glue:DeleteTable",
           "glue:GetDatabase",
           "glue:GetDatabases",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:GetTable",
           "glue:GetTableVersions",
           "glue:GetTables",
           "glue:UpdateDatabase",
           "glue:UpdatePartition",
           "glue:UpdateTable",
           "glue:GetJobBookmark",
           "glue:ResetJobBookmark",
           "glue:CreateConnection",
           "glue:CreateJob",
           "glue:DeleteConnection",
           "glue:DeleteJob",
           "glue:GetConnection",
           "glue:GetConnections",
           "glue:GetDevEndpoint",
           "glue:GetDevEndpoints",
           "glue:GetJob",
           "glue:GetJobs",
           "glue:UpdateJob",
           "glue:BatchDeleteConnection",
           "glue:UpdateConnection",
           "glue:GetUserDefinedFunction",
           "glue:UpdateUserDefinedFunction",
           "glue:GetUserDefinedFunctions",
           "glue:DeleteUserDefinedFunction",
           "glue:CreateUserDefinedFunction",
           "glue:BatchGetPartition",
           "glue:BatchDeletePartition",
           "glue:BatchCreatePartition",
           "glue:BatchDeleteTable",
           "glue:UpdateDevEndpoint",
           "s3:GetBucketLocation",
           "s3:ListBucket",
           "s3:ListAllMyBuckets",
           "s3:GetBucketAcl"
         ],
         "Resource": [
           "*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject"
         ],
         "Resource": [
           "arn:aws:s3:::crawler-public*",
           "arn:aws:s3:::aws-glue*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::aws-glue*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "ec2:CreateTags",
           "ec2:DeleteTags"
         ],
         "Condition": {
           "ForAllValues:StringEquals": {
             "aws:TagKeys": [
               "aws-glue-service-resource"
             ]
           }
         },
         "Resource": [
           "arn:aws:ec2:*:*:network-interface/*",
           "arn:aws:ec2:*:*:security-group/*",
           "arn:aws:ec2:*:*:instance/*"
         ]
       }
     ]
   }
   ```

------

   下表說明此政策授予的許可。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/create-notebook-policy.html)

1. 在 **Review Policy** (檢閱政策) 畫面上，輸入 **Policy Name** (政策名稱)，例如 **GlueServiceNotebookPolicyDefault**。輸入選用的說明，當您對政策滿意時，即可選擇 **Create policy (建立政策)**。

# 步驟 5：建立適用於筆記本伺服器的 IAM 角色
<a name="create-an-iam-role-notebook"></a>

如果您計劃使用筆記本搭配開發端點，您需要授予 IAM 角色許可。您可以透過 IAM 角色使用 AWS Identity and Access Management IAM 來提供這些許可。

**注意**  
使用 IAM 主控台建立 IAM 角色時，主控台會自動建立執行個體描述檔，並將其命名為與對應角色相同的名稱。

**建立適用於筆記本的 IAM 角色**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇 **Roles** (角色)。

1. 選擇**建立角色**。

1. 在角色類型中選擇 **AWS Service** (AWS 服務)，找出並選擇 **EC2**，接著選擇 **EC2** 使用案例，然後選擇 **Next: Permissions** (下一步：許可)。

1. 在**連接許可政策**頁面上，選擇包含必要許可的政策；例如，一般AWS Glue許可的 **AWSGlueServiceNotebookRole**，以及存取 Amazon S3 資源的 AWS 受管政策 **AmazonS3FullAccess**。接著選擇 **Next: Review** (下一步：檢閱)。
**注意**  
確定此角色其中一個政策授予 Amazon S3 來源和目標的許可。同時確認您的政策允許在建立筆記本伺服器時完整存取筆記本存放位置。您可能想要提供自己的政策來存取特定的 Amazon S3 資源。如需為您的資源建立 Amazon S3 政策的詳細資訊，請參閱[在政策中指定資源](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-arn-format.html)。  
如果您計劃存取使用 SSE-KMS 加密的 Amazon S3 來源和目標，請連接允許筆記本解密資料的政策。如需詳細資訊，請參閱[使用伺服器端加密搭配受管金鑰保護資料 AWS KMS(SSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。  
下列是 範例。  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": [
           "arn:aws:kms:*:111122223333:key/key-id"
         ]
       }
     ]
   }
   ```

1. 針對 **Role name (角色名稱)**，輸入您的角色名稱。建立名稱字首為 `AWSGlueServiceNotebookRole` 字串的角色，以允許角色從主控台使用者傳送到筆記本伺服器。AWS Glue​ 提供的政策預期 IAM​ 服務角色的開頭應為 `AWSGlueServiceNotebookRole`。否則，您必須為使用者新增政策，允許其取得 `iam:PassRole` 許可，使 IAM 角色符合您的命名慣例。例如，​輸入 `AWSGlueServiceNotebookRoleDefault`。然後選擇 **Create role** (建立角色)。

# 步驟 6：建立適用於 SageMaker AI 筆記本的 IAM 政策
<a name="create-sagemaker-notebook-policy"></a>

如果您計劃將 SageMaker AI 筆記本與開發端點搭配使用，您必須在建立筆記本時指定許可。您可用 AWS Identity and Access Management (IAM) 來提供這些許可。

**建立適用於 SageMaker AI 筆記本的 IAM 政策**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中選擇 **Policies** (政策)。

1. 選擇**建立政策**。

1. 在 **Create Policy (建立政策)** 頁面上，導覽至索引標籤，以編輯 JSON。使用以下 JSON 陳述式建立政策文件。編輯您環境的 *bucket-name*、*region-code* 和 *account-id*。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": [
                   "s3:ListBucket"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           },
           {
               "Action": [
                   "s3:GetObject"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket*"
               ]
           },
           {
               "Action": [
                   "logs:CreateLogStream",
                   "logs:DescribeLogStreams",
                   "logs:PutLogEvents",
                   "logs:CreateLogGroup"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws/sagemaker/*",
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws/sagemaker/*:log-stream:aws-glue-*"
               ]
           },
           {
               "Action": [
                   "glue:UpdateDevEndpoint",
                   "glue:GetDevEndpoint",
                   "glue:GetDevEndpoints"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:glue:us-east-1:111122223333:devEndpoint/*"
               ]
           },
           {
               "Action": [
                   "sagemaker:ListTags"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:sagemaker:us-east-1:111122223333:notebook-instance/*"
               ]
           }
       ]
   }
   ```

------

   接著選擇 **Review policy** (檢閱政策)。

   下表說明此政策授予的許可。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/create-sagemaker-notebook-policy.html)

1. 在 **Review Policy** (檢閱政策) 畫面上，輸入 **Policy Name** (政策名稱)，例如 `AWSGlueSageMakerNotebook`。輸入選用的說明，當您對政策滿意時，即可選擇 **Create policy (建立政策)**。

# 步驟 7：建立適用於 SageMaker AI 筆記本的 IAM 角色
<a name="create-an-iam-role-sagemaker-notebook"></a>

如果您計劃將 SageMaker AI 筆記本與開發端點搭配使用，您需要授予 IAM 角色許可。您可以透過 IAM 角色使用 AWS Identity and Access Management (IAM) 來提供這些許可。

**建立適用於 SageMaker AI 筆記本的 IAM 角色**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇 **Roles** (角色)。

1. 選擇**建立角色**。

1. 針對角色類型，選擇 **AWS Service (AWS 服務)**，尋找並選擇 **SageMaker**，接著選擇 **SageMaker - Execution (SageMaker - 執行)** 使用案例。然後選擇**下一步：許可**。

1. 在 **Attach permissions policy (連接許可政策)** 頁面上，選擇包含所需許可的政策；例如 **AmazonSageMakerFullAccess**。選擇下**一步：檢閱**。

   如果您計劃存取使用 SSE-KMS 加密的 Amazon S3 來源和目標，請連接允許筆記本解密資料的政策，如以下範例所示。如需詳細資訊，請參閱[使用伺服器端加密搭配受管金鑰保護資料 AWS KMS(SSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt"
         ],
         "Resource": [
           "arn:aws:kms:*:111122223333:key/key-id"
         ]
       }
     ]
   }
   ```

------

1. 針對 **Role name (角色名稱)**，輸入您的角色名稱。若要允許從主控台使用者將角色傳送到 SageMaker AI，請使用字首為 `AWSGlueServiceSageMakerNotebookRole` 字串的名稱。AWS Glue​ 提供的政策預期 IAM​ 角色的開頭應為 `AWSGlueServiceSageMakerNotebookRole`。否則，您必須為使用者新增政策，允許其取得 `iam:PassRole` 許可，使 IAM 角色符合您的命名慣例。

   例如，輸入 `AWSGlueServiceSageMakerNotebookRole-Default`，然後選擇 **Create role (建立角色)**。

1. 在您建立角色之後，即可連接政策以允許從 AWS Glue 建立 SageMaker AI 筆記本所需的額外許可。

   開啟您剛才建立的角色 `AWSGlueServiceSageMakerNotebookRole-Default`，然後選擇 **Attach policies (連接政策)**。將您建立的名為 `AWSGlueSageMakerNotebook` 的政策連接至角色。

# AWS Glue 存取控制政策範例
<a name="glue-policy-examples"></a>

本節包含身分識別型 (IAM) 存取控制政策和 AWS Glue 資源政策的範例。

**Contents**
+ [Glue AWS 的身分型政策範例](security_iam_id-based-policy-examples.md)
  + [政策最佳實務](security_iam_id-based-policy-examples.md#security_iam_service-with-iam-policy-best-practices)
  + [資源層級許可僅適用特定的 AWS Glue 物件](security_iam_id-based-policy-examples.md#glue-identity-based-policy-limitations)
  + [使用 AWS Glue 主控台](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-console)
  + [允許使用者檢視他們自己的許可](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-view-own-permissions)
  + [授予資料表的唯讀許可](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-read-only-table-access)
  + [依據 GetTables 許可篩選資料表](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-filter-tables)
  + [授予完整存取資料表和所有分割區的許可](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-full-access-tables-partitions)
  + [透過名稱字首和明確拒絕的存取控制](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-deny-by-name-prefix)
  + [使用標籤授權存取](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-allow)
  + [使用標籤拒絕存取](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-deny)
  + [搭配使用標籤與清單和批次 API 操作](security_iam_id-based-policy-examples.md#tags-control-access-example-triggers-list-batch)
  + [使用條件索引鍵或內容索引鍵來控制設定](security_iam_id-based-policy-examples.md#glue-identity-based-policy-condition-keys)
    + [控制使用條件索引鍵來控制設定的政策](security_iam_id-based-policy-examples.md#glue-identity-based-policy-condition-key-vpc)
    + [控制使用內容索引鍵來控制設定的政策](security_iam_id-based-policy-examples.md#glue-identity-based-policy-context-key-glue)
  + [拒絕給予身分建立資料預覽工作階段的能力](security_iam_id-based-policy-examples.md#deny-data-preview-sessions-per-identity)
+ [Glue AWS 的資源型政策範例](security_iam_resource-based-policy-examples.md)
  + [搭配 Glue AWS 使用資源型政策的考量事項](security_iam_resource-based-policy-examples.md#security_iam_resource-based-policy-examples-considerations)
  + [使用資源政策來控制相同帳戶的存取](security_iam_resource-based-policy-examples.md#glue-policy-resource-policies-example-same-account)

# Glue AWS 的身分型政策範例
<a name="security_iam_id-based-policy-examples"></a>

根據預設，使用者和角色沒有建立或修改 AWS Glue 資源的許可。若要授予使用者對其所需資源執行動作的許可，IAM 管理員可以建立 IAM 政策。

如需了解如何使用這些範例 JSON 政策文件建立 IAM 身分型政策，請參閱《*IAM 使用者指南*》中的[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

如需 Glue AWS 定義的動作和資源類型的詳細資訊，包括每種資源類型的 ARNs 格式，請參閱*《服務授權參考*》中的 [Glue AWS 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html)。

**注意**  
本節提供的範例全部使用 `us-west-2` 區域。您可以將此取代為您要使用的 AWS 區域。

**Topics**
+ [政策最佳實務](#security_iam_service-with-iam-policy-best-practices)
+ [資源層級許可僅適用特定的 AWS Glue 物件](#glue-identity-based-policy-limitations)
+ [使用 AWS Glue 主控台](#security_iam_id-based-policy-examples-console)
+ [允許使用者檢視他們自己的許可](#security_iam_id-based-policy-examples-view-own-permissions)
+ [授予資料表的唯讀許可](#security_iam_id-based-policy-examples-read-only-table-access)
+ [依據 GetTables 許可篩選資料表](#security_iam_id-based-policy-examples-filter-tables)
+ [授予完整存取資料表和所有分割區的許可](#security_iam_id-based-policy-examples-full-access-tables-partitions)
+ [透過名稱字首和明確拒絕的存取控制](#security_iam_id-based-policy-examples-deny-by-name-prefix)
+ [使用標籤授權存取](#tags-control-access-example-triggers-allow)
+ [使用標籤拒絕存取](#tags-control-access-example-triggers-deny)
+ [搭配使用標籤與清單和批次 API 操作](#tags-control-access-example-triggers-list-batch)
+ [使用條件索引鍵或內容索引鍵來控制設定](#glue-identity-based-policy-condition-keys)
+ [拒絕給予身分建立資料預覽工作階段的能力](#deny-data-preview-sessions-per-identity)

## 政策最佳實務
<a name="security_iam_service-with-iam-policy-best-practices"></a>

身分型政策會判斷您帳戶中的某個人員是否可以建立、存取或刪除 AWS Glue 資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時，請遵循下列準則及建議事項：
+ **開始使用 AWS 受管政策並邁向最低權限許可** – 若要開始將許可授予您的使用者和工作負載，請使用將許可授予許多常見使用案例的 *AWS 受管政策*。它們可在您的 中使用 AWS 帳戶。我們建議您定義特定於使用案例 AWS 的客戶受管政策，以進一步減少許可。如需更多資訊，請參閱《*IAM 使用者指南*》中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[任務職能的AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **套用最低權限許可** – 設定 IAM 政策的許可時，請僅授予執行任務所需的許可。為實現此目的，您可以定義在特定條件下可以對特定資源採取的動作，這也稱為*最低權限許可*。如需使用 IAM 套用許可的更多相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的政策和許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 政策中的條件進一步限制存取權** – 您可以將條件新增至政策，以限制動作和資源的存取。例如，您可以撰寫政策條件，指定必須使用 SSL 傳送所有請求。如果透過特定 例如 使用服務動作 AWS 服務，您也可以使用條件來授予其存取權 CloudFormation。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素：條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 驗證 IAM 政策，確保許可安全且可正常運作** – IAM Access Analyzer 驗證新政策和現有政策，確保這些政策遵從 IAM 政策語言 (JSON) 和 IAM 最佳實務。IAM Access Analyzer 提供 100 多項政策檢查及切實可行的建議，可協助您撰寫安全且實用的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[使用 IAM Access Analyzer 驗證政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重要素驗證 (MFA)** – 如果您的案例需要 IAM 使用者或 中的根使用者 AWS 帳戶，請開啟 MFA 以提高安全性。如需在呼叫 API 操作時請求 MFA，請將 MFA 條件新增至您的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[透過 MFA 的安全 API 存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

如需 IAM 中最佳實務的相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 資源層級許可僅適用特定的 AWS Glue 物件
<a name="glue-identity-based-policy-limitations"></a>

您只能在 AWS Glue 中定義特定物件的精細控制。因此，您必須編寫您用戶端的 IAM 政策，讓允許 `Resource` 陳述式 Amazon Resource Name (ARN) 的 API 操作，不會與不允許 ARN 的 API 操作混合。

例如，以下 IAM 政策允許 `GetClassifier` 和 `GetJobRun` 的 API 操作。它將 `Resource` 定義為 `*`，因為 AWS Glue 不允許分類器和任務回合的 ARN。因為允許特定 API 操作的 ARN (例如 `GetDatabase` 和 `GetTable`)，所以可以在政策的下半部指定 ARN。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetClassifier*",
        "glue:GetJobRun*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "glue:Get*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/default",
        "arn:aws:glue:us-east-1:111122223333:table/default/e*1*",
        "arn:aws:glue:us-east-1:111122223333:connection/connection2"
      ]
    }
  ]
}
```

------

如需允許 ARN 的 AWS Glue 物件清單，請參閱[指定 AWS Glue 資源 ARN](glue-specifying-resource-arns.md) 

## 使用 AWS Glue 主控台
<a name="security_iam_id-based-policy-examples-console"></a>

若要存取 AWS Glue 主控台，您必須擁有一組最低許可。這些許可必須允許您列出和檢視 AWS Glue 資源的詳細資訊 AWS 帳戶。如果您建立比最基本必要許可更嚴格的身分型政策，則對於具有該政策的實體 (使用者或角色) 而言，主控台就無法如預期運作。

對於僅呼叫 AWS CLI 或 AWS API 的使用者，您不需要允許最低主控台許可。反之，只需允許存取符合他們嘗試執行之 API 操作的動作就可以了。

為了確保使用者和角色仍然可以使用 AWS Glue 主控台，請將 AWS Glue `ConsoleAccess`或 `ReadOnly` AWS 受管政策連接到實體。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[新增許可到使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)。

若要讓使用者使用 AWS Glue 主控台，該使用者必須擁有一組最低許可，允許他們使用其 AWS 帳戶AWS Glue的資源。除了這些 AWS Glue 許可之外，主控台還需要以下服務的許可：
+ 顯示日誌的 Amazon CloudWatch Logs 許可。
+ AWS Identity and Access Management 列出和傳遞角色的 (IAM) 許可。
+ AWS CloudFormation 使用堆疊的許可。
+ 列出 VPC、子網路、安全群組、執行個體和其他物件的 Amazon Elastic Compute Cloud (Amazon EC2) 許可。
+ 列出儲存貯體和物件，以及擷取和儲存指令碼的 Amazon Simple Storage Service (Amazon S3) 許可。
+ 使用叢集的 Amazon Redshift 許可
+ 列出執行個體的 Amazon Relational Database Service (Amazon RDS) 許可。

如需使用者檢視和使用 AWS Glue 主控台所需許可的詳細資訊，請參閱[步驟 3：連接政策到存取 AWS Glue 的使用者或群組](attach-policy-iam-user.md)。

如果您建立比最基本必要許可更嚴格的 IAM 政策，則對於採取該 IAM 政策的使用者而言，主控台就無法如預期運作。為確保這些使用者仍可使用 AWS Glue 主控台，也請連接 [AWS 的 受管 （預先定義） 政策 AWS Glue](security-iam-awsmanpol.md#access-policy-examples-aws-managed) 中所述的 `AWSGlueConsoleFullAccess` 受管政策。

## 允許使用者檢視他們自己的許可
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

此範例會示範如何建立政策，允許 IAM 使用者檢視附加到他們使用者身分的內嵌及受管政策。此政策包含在 主控台或使用 或 AWS CLI AWS API 以程式設計方式完成此動作的許可。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## 授予資料表的唯讀許可
<a name="security_iam_id-based-policy-examples-read-only-table-access"></a>

下列政策可授予 `db1` 資料庫中 `books` 資料表的唯讀許可。如需資源 Amazon Resource Name (ARN) 的詳細資訊，請參閱[Data Catalog ARN](glue-specifying-resource-arns.md#data-catalog-resource-arns)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesActionOnBooks",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/books"
      ]
    }
  ]
}
```

------

此政策會授予名為 `db1` 之資料庫中名為 `books` 之資料表的唯讀許可。若要將 `Get` 許可授予資料表，則也需要目錄和資料庫資源的該許可。

下列政策會授予在 `db1` 資料庫中建立 `tb1` 資料表的最低必要許可：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:CreateTable"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:table/db1/tbl1",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:catalog"
      ]
    }
  ]
}
```

------

## 依據 GetTables 許可篩選資料表
<a name="security_iam_id-based-policy-examples-filter-tables"></a>

假設有三個資料表 `customers`、`stores` 以及 `store_sales` 在 `db1` 資料庫中。下列政策會授予 `GetTables` 許可給 `stores` 和 `store_sales`，但不會授予給 `customers`。當您使用此政策呼叫 `GetTables` 時，結果只會包含兩個授權的資料表 (不會傳回 `customers` 資料表)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesExample",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/store_sales",
        "arn:aws:glue:us-east-1:111122223333:table/db1/stores"
      ]
    }
  ]
}
```

------

您可以使用 `store*` 來比對任何開頭為 `store` 的資料表名稱，藉此簡化上述政策。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesExample2",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/store*"
      ]
    }
  ]
}
```

------

同樣地，使用 `/db1/*` 比對 `db1` 中所有資料表時，下列政策可將 `GetTables` 存取授予 `db1` 中所有資料表。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesReturnAll",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/*"
      ]
    }
  ]
}
```

------

如未提供任何資料表 ARN，則可成功呼叫 `GetTables`，但會傳回空白清單。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesEmptyResults",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1"
      ]
    }
  ]
}
```

------

如果政策中缺少資料庫 ARN，則呼叫 `GetTables` 會失敗，並顯示 `AccessDeniedException`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTablesAccessDeny",
      "Effect": "Allow",
      "Action": [
        "glue:GetTables"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:table/db1/*"
      ]
    }
  ]
}
```

------

## 授予完整存取資料表和所有分割區的許可
<a name="security_iam_id-based-policy-examples-full-access-tables-partitions"></a>

下列政策可授予 `db1` 資料庫中名稱為 `books` 之資料表的所有許可。這包括資料表本身、其存檔版本和其所有分割區的讀取和寫入許可。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FullAccessOnTable",
      "Effect": "Allow",
      "Action": [
        "glue:CreateTable",
        "glue:GetTable",
        "glue:GetTables",
        "glue:UpdateTable",
        "glue:DeleteTable",
        "glue:BatchDeleteTable",
        "glue:GetTableVersion",
        "glue:GetTableVersions",
        "glue:DeleteTableVersion",
        "glue:BatchDeleteTableVersion",
        "glue:CreatePartition",
        "glue:BatchCreatePartition",
        "glue:GetPartition",
        "glue:GetPartitions",
        "glue:BatchGetPartition",
        "glue:UpdatePartition",
        "glue:DeletePartition",
        "glue:BatchDeletePartition"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/books"
      ]
    }
  ]
}
```

------

上述政策在實務中可予以簡化。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FullAccessOnTable",
      "Effect": "Allow",
      "Action": [
        "glue:*Table*",
        "glue:*Partition*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1",
        "arn:aws:glue:us-east-1:111122223333:table/db1/books"
      ]
    }
  ]
}
```

------

請注意，精細定義存取控制的最低精細程度是資料表層級。這表示您無法授予使用者存取資料表中某些分割區而非其他分割區，或是存取某些資料表欄位而非其他欄位。使用者可以存取整個資料表，不然就是完全不能存取資料表。

## 透過名稱字首和明確拒絕的存取控制
<a name="security_iam_id-based-policy-examples-deny-by-name-prefix"></a>

在此範例中，假設 Glue Data Catalog AWS 中的資料庫和資料表是使用名稱字首進行組織。開發階段中的資料庫名稱字首為 `dev-`，而生產階段中的資料庫名稱字首為 `prod-`。您可以使用下列政策授予開發人員完整存取含 `dev-` 字首的所有資料庫、資料表、UDF 等。但是，若是含 `prod-` 字首的所有項目，您只授予唯讀存取。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DevAndProdFullAccess",
      "Effect": "Allow",
      "Action": [
        "glue:*Database*",
        "glue:*Table*",
        "glue:*Partition*",
        "glue:*UserDefinedFunction*",
        "glue:*Connection*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/dev-*",
        "arn:aws:glue:us-east-1:111122223333:database/prod-*",
        "arn:aws:glue:us-east-1:111122223333:table/dev-*/*",
        "arn:aws:glue:us-east-1:111122223333:table/*/dev-*",
        "arn:aws:glue:us-east-1:111122223333:table/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:table/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/dev-*/*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/*/dev-*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:connection/dev-*",
        "arn:aws:glue:us-east-1:111122223333:connection/prod-*"
      ]
    },
    {
      "Sid": "ProdWriteDeny",
      "Effect": "Deny",
      "Action": [
        "glue:*Create*",
        "glue:*Update*",
        "glue:*Delete*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:database/prod-*",
        "arn:aws:glue:us-east-1:111122223333:table/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:table/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/prod-*/*",
        "arn:aws:glue:us-east-1:111122223333:userDefinedFunction/*/prod-*",
        "arn:aws:glue:us-east-1:111122223333:connection/prod-*"
      ]
    }
  ]
}
```

------

上述政策中的第二個陳述式會使用明確 `deny`。您可以使用明確 `deny` 來覆寫已授予委託人的任何 `allow` 許可。這可讓您鎖定關鍵資源的存取權，並防止其他政策意外授予這些資源的存取權。

在上述範例中，即使第一個陳述式授予 `prod-` 資源的完整存取，第二個陳述式仍明確撤銷其寫入存取，而只保留 `prod-` 資源的唯讀取存取。

## 使用標籤授權存取
<a name="tags-control-access-example-triggers-allow"></a>

例如，假設您想要限定只有您帳戶下名為 `Tom` 的特定使用者，才能存取觸發 `t2`。所有其他使用者，包括 `Sam`，都可以存取該觸發條件 `t1`。觸發條件 `t1` 和 `t2` 具備下列屬性。

```
aws glue get-triggers
{
    "Triggers": [
        {
            "State": "CREATED",
            "Type": "SCHEDULED",
            "Name": "t1",
            "Actions": [
                {
                    "JobName": "j1"
                }
            ],
            "Schedule": "cron(0 0/1 * * ? *)"
        },
        {
            "State": "CREATED",
            "Type": "SCHEDULED",
            "Name": "t2",
            "Actions": [
                {
                    "JobName": "j1"
                }
            ],
            "Schedule": "cron(0 0/1 * * ? *)"
        }
    ]
}
```

AWS Glue 管理員已將標籤值 `Tom` (`aws:ResourceTag/Name": "Tom"`) 連接到觸發條件 `t2`。AWS Glue 管理員也對 Tom 實施搭配以標籤為基礎之條件陳述式的 IAM 政策。因此，Tom 能使用的 AWS Glue 操作，將僅限於操作標籤值 `Tom` 的資源。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "glue:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Name": "Tom"
        }
      }
    }
  ]
}
```

------

當 Tom 嘗試存取觸發 `t1` 時，他會收到拒絕存取訊息。同時，他可以成功擷取觸發條件 `t2`。

```
aws glue get-trigger --name t1

An error occurred (AccessDeniedException) when calling the GetTrigger operation: User: Tom is not authorized to perform: glue:GetTrigger on resource: arn:aws:glue:us-east-1:123456789012:trigger/t1

aws glue get-trigger --name t2
{
    "Trigger": {
        "State": "CREATED",
        "Type": "SCHEDULED",
        "Name": "t2",
        "Actions": [
            {
                "JobName": "j1"
            }
        ],
        "Schedule": "cron(0 0/1 * * ? *)"
    }
}
```

Tom 無法使用複數 `GetTriggers` API 操作來列出觸發，因為此作業不支援篩選標籤。

為讓 Tom 存取 `GetTriggers`，AWS Glue 管理員要建立一項政策，將這些許可分為兩部分。其中一區可讓 Tom 使用 `GetTriggers` API 操作，存取所有觸發條件。第二區則讓 Tom 存取已標記值 `Tom` 的 API 操作。透過此政策，便可允許 Tom 同時擁有觸發條件 `t2` 的 `GetTriggers` 和 `GetTrigger` 存取權。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "glue:GetTriggers",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "glue:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Name": "Tom"
        }
      }
    }
  ]
}
```

------

## 使用標籤拒絕存取
<a name="tags-control-access-example-triggers-deny"></a>

另一種資源政策方法就是明確拒絕資源存取。

**重要**  
明確拒絕政策不適用於 `GetTriggers` 等複數 API 操作。

在下列範例政策中，允許所有 AWS Glue 任務操作。但是，第二個 `Effect` 陳述式*明確拒絕*存取標記為 `Team` 索引鍵和 `Special` 值的任務。

當管理員將以下政策連接至身分時，身分能存取除標記為 `Team` 索引鍵和 `Special` 值*以外*的所有任務。

## 搭配使用標籤與清單和批次 API 操作
<a name="tags-control-access-example-triggers-list-batch"></a>

撰寫資源政策的第三個方法，就是使用 `List` API 操作來列出符合標籤值的資源清單，進而允許資源的存取。然後，使用對應的 `Batch` API 操作，允許存取特定資源的詳細資訊。使用此方法時，管理員並不需要允許存取複數的 `GetCrawlers`、`GetDevEndpoints`、`GetJobs` 或 `GetTriggers` API 操作。相反地，您可以搭配下列 API 操作，允許列出資源的操作：
+ `ListCrawlers`
+ `ListDevEndpoints`
+ `ListJobs`
+ `ListTriggers`

此外，您可以搭配下列 API 操作，允許取得個別資源詳細資訊的操作：
+ `BatchGetCrawlers`
+ `BatchGetDevEndpoints`
+ `BatchGetJobs`
+ `BatchGetTriggers`

身為管理員，您可以使用此方法執行下列操作：

1. 新增標籤到您的爬蟲程式、開發端點、任務和觸發條件。

1. 拒絕使用者存取 `Get` API 操作，例如 `GetCrawlers`、`GetDevEndponts`、`GetJobs` 和 `GetTriggers`。

1. 為了讓使用者能夠找出其具備存取權的標記資源，這時要允許使用者存取 `List` API 操作，例如 `ListCrawlers`、`ListDevEndponts`、`ListJobs` 和 `ListTriggers`。

1. 拒絕使用者存取 AWS Glue 標記 API，例如 `TagResource` 和 `UntagResource`。

1. 允許使用者搭配 `BatchGet` API 操作來存取資源詳細資訊，例如 `BatchGetCrawlers`、`BatchGetDevEndponts`、`BatchGetJobs` 和 `BatchGetTriggers`。

例如，呼叫 `ListCrawlers` 操作時，提供標籤值以比對使用者名稱。然後，會得到符合所提供標籤值的爬蟲程式清單結果。將名稱清單提供給 `BatchGetCrawlers`，取得每個具備指定標籤之爬蟲程式的詳細資訊。

例如，如果 Tom 應該只能擷取已標記 `Tom` 之觸發條件的詳細資訊，則管理員可以將標籤新增至 `Tom` 的觸發條件，向所有使用者拒絕 `GetTriggers` API 操作的存取，而允許所有使用者對於 `ListTriggers` 和 `BatchGetTriggers` 的存取。

下面是 AWS Glue 管理員授予 Tom 的資源政策。在政策的第一區中，`GetTriggers` 已拒絕用於 AWS Glue API 操作。在政策的第二區中，允許 `ListTriggers` 用於所有資源。但在第三區中，標記 `Tom` 的這些資源就會允許 `BatchGetTriggers` 存取權進行存取。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "glue:GetTriggers",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListTriggers"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "glue:BatchGetTriggers"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Name": "Tom"
        }
      }
    }
  ]
}
```

------

使用與前例相同的觸發時，Tom 可以存取觸發 `t2`，但不觸發 `t1`。下面範例示範當 Tom 嘗試搭配 `BatchGetTriggers`，存取 `t1` 和 `t2` 時的結果。

```
aws glue batch-get-triggers --trigger-names t2
{
    "Triggers": {
        "State": "CREATED",
        "Type": "SCHEDULED",
        "Name": "t2",
        "Actions": [
            {
                "JobName": "j2"
            }
        ],
        "Schedule": "cron(0 0/1 * * ? *)"
    }
}

aws glue batch-get-triggers  --trigger-names t1

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

下面範例示範當 Tom 嘗試使用同的 `BatchGetTriggers` 呼叫，同時存取觸發條件 `t2` 和觸發條件 `t3` (其實並不存在) 時的結果。請注意，因為 Tom 具備觸發條件 `t2` 的存取權，且只有當 `t2` 傳回時才具備此存取權限。雖然 Tom 獲允存取觸發條件 `t3`，但觸發條件 `t3` 並不存在，因此回應時傳回的 `t3` 會列在 `"TriggersNotFound": []` 清單中。

```
aws glue batch-get-triggers --trigger-names t2 t3
{
    "Triggers": {
        "State": "CREATED",
        "Type": "SCHEDULED",
        "Name": "t2",
        "Actions": [
            {
                "JobName": "j2"
            }
        ],
        "TriggersNotFound": ["t3"],
        "Schedule": "cron(0 0/1 * * ? *)"
    }
}
```

## 使用條件索引鍵或內容索引鍵來控制設定
<a name="glue-identity-based-policy-condition-keys"></a>

授予建立和更新任務的許可時，您可以使用條件索引鍵或內容索引鍵。以下章節討論索引鍵：
+ [控制使用條件索引鍵來控制設定的政策](#glue-identity-based-policy-condition-key-vpc)
+ [控制使用內容索引鍵來控制設定的政策](#glue-identity-based-policy-context-key-glue)

### 控制使用條件索引鍵來控制設定的政策
<a name="glue-identity-based-policy-condition-key-vpc"></a>

AWS Glue 提供三個 IAM 條件金鑰 `glue:VpcIds`、 `glue:SubnetIds`和 `glue:SecurityGroupIds`。授予建立和更新任務的許可時，您可以在 IAM 政策中使用條件索引鍵。您可以使用此設定來確保未建立 (或更新) 任務或工作階段，以在所需的 VPC 環境之外執行。VPC 設定資訊不是直接從 `CreateJob` 請求輸入，而是從任務「連線」欄位中推斷，該欄位指向 AWS Glue 連線。

**範例使用方式**  
建立名為 "traffic-monitored-connection" 的 AWS Glue 網路類型連線，其具有所需的 VpcId "vpc-id1234"、SubnetIds 和 SecurityGroupIds。

為 IAM 政策中的 `CreateJob` 和 `UpdateJob` 動作指定條件索引鍵。

```
{
  "Effect": "Allow",
  "Action": [
    "glue:CreateJob",
    "glue:UpdateJob"
  ],
  "Resource": [
    "*"
  ],
  "Condition": {
    "ForAnyValue:StringLike": {
      "glue:VpcIds": [
        "vpc-id1234"
      ]
    }
  }
}
```

 您可以建立類似的 IAM 政策，以禁止建立 AWS Glue 任務，而不指定連線資訊。

**限制 VPC 上的工作階段**

 若要強制建立的工作階段在指定的 VPC 內執行，您可以透過在 `glue:CreateSession` 動作上新增 `Deny` 效果來限制角色許可，條件是 glue:vpc-id 不等於 vpc-<123>。例如：

```
"Effect": "Deny",
"Action": [
    "glue:CreateSession"
 ],
"Condition": {
    "StringNotEquals" : {"glue:VpcIds" : ["vpc-123"]} 
}
```

 您也可以透過在 `glue:CreateSession` 動作上新增 `Deny` 效果來強制建立的工作階段在 VPC 內執行，條件是 `glue:vpc-id` 為 Null。例如：

```
{
    "Effect": "Deny",
    "Action": [
        "glue:CreateSession"
    ],
      "Condition": {
        "Null": {"glue:VpcIds": true}
    }
}, 
{
    "Effect": "Allow",
    "Action": [
        "glue:CreateSession"
    ],
    "Resource": ["*"]
}
```

### 控制使用內容索引鍵來控制設定的政策
<a name="glue-identity-based-policy-context-key-glue"></a>

AWS Glue 為每個角色工作階段提供內容索引鍵 (`glue:CredentialIssuingService= glue.amazonaws.com`)，AWS Glue可供任務和開發人員端點使用。這可讓您針對AWS Glue指令碼所採取的動作實作安全控制。 會為每個角色工作階段AWS Glue提供另一個內容金鑰 AWS (`glue:RoleAssumedBy=glue.amazonaws.com`)，其中 代表客戶 （而非任務/開發端點，而是直接由AWS Glue服務） AWS Glue呼叫其他服務。

**範例使用方式**  
在 IAM 政策中指定條件性許可，並將其連接至 AWS Glue 任務使用的角色。根據角色工作階段是否用於 AWS Glue 任務執行時間環境，這可確保某些動作被允許/拒絕。

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "StringEquals": {
            "glue:CredentialIssuingService": "glue.amazonaws.com"
        }
    }
}
```

## 拒絕給予身分建立資料預覽工作階段的能力
<a name="deny-data-preview-sessions-per-identity"></a>

本節包含的 IAM 政策範例可用於拒絕給予身分建立資料預覽工作階段的能力。將此政策連接至身分，此身分與資料預覽工作階段在執行期間所使用的角色不同。

```
{
    "Sid": "DatapreviewDeny",
    "Effect": "Deny",
     "Action": [
           "glue:CreateSession"
     ],
     "Resource": [
          "arn:aws:glue:*:*:session/glue-studio-datapreview*"
      ]
 }
```

# Glue AWS 的資源型政策範例
<a name="security_iam_resource-based-policy-examples"></a>

本節包含以資源為基礎的範例政策，包括授予跨帳户存取權的政策。

這些範例使用 AWS Command Line Interface (AWS CLI) 與服務 AWS Glue API 操作互動。您可以在 AWS Glue 主控台或使用其中一個 AWS SDKs執行相同的操作。

**重要**  
變更 AWS Glue 資源政策時，您可能會不小心撤銷您帳戶中現有 AWS Glue 使用者的許可，並造成意外中斷。請僅在開發或測試帳戶中試用這些範例，並先確保您所做的變更不會破壞現有任務流程之後再變更。

**Topics**
+ [搭配 Glue AWS 使用資源型政策的考量事項](#security_iam_resource-based-policy-examples-considerations)
+ [使用資源政策來控制相同帳戶的存取](#glue-policy-resource-policies-example-same-account)

## 搭配 Glue AWS 使用資源型政策的考量事項
<a name="security_iam_resource-based-policy-examples-considerations"></a>

**注意**  
IAM 政策和 AWS Glue 資源政策都需要幾秒鐘的傳播時間。連接新政策之後到新政策在整個系統傳播之前，您可能會發現舊政策仍然有效。

您可以使用以 JSON 格式撰寫的政策文件來建立或修改資源政策。政策語法與以身分為基礎的 IAM 政策的政策語法相同 (請參閱 [IAM JSON 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html))，但有下列例外狀況︰
+ 每個政策陳述式都需要 `"Principal"` 或 `"NotPrincipal"` 區塊。
+ `"Principal"` 或 `"NotPrincipal"` 必須識別有效的現有主體。不允許萬用字元模式 (例如 `arn:aws:iam::account-id:user/*`)。
+ 政策中的 `"Resource"` 區塊需要所有資源 ARN 符合下列規則表達式語法 (其中，第一個 `%s` 是 *region*，而第二個 `%s` 是 *account-id*)：

  ```
  *arn:aws:glue:%s:%s:(\*|[a-zA-Z\*]+\/?.*)
  ```

  例如，允許 `arn:aws:glue:us-west-2:account-id:*` 和 `arn:aws:glue:us-west-2:account-id:database/default`，但不允許 `*`。
+ 與以身分為基礎的政策不同，AWS Glue 資源政策只能包含屬於政策連接目錄之資源的 Amazon Resource Name (ARN)。這類 ARN 的開頭一律為 `arn:aws:glue:`。
+ 政策不能鎖定建立它的身分，使其無法執行進一步建立或修改。
+ 資源政策 JSON 文件的大小不能超過 10 KB。

## 使用資源政策來控制相同帳戶的存取
<a name="glue-policy-resource-policies-example-same-account"></a>

在此範例中，帳戶 A 的管理使用者建立了一個資源政策，以授予帳戶 A 中 IAM 使用者 `Alice` 對目錄的完整存取權。Alice 未連接任何 IAM 政策。

若要這樣做，管理員使用者會執行下列 AWS CLI 命令。

```
# Run as admin of Account A
$ aws glue put-resource-policy --profile administrator-name --region us-west-2 --policy-in-json '{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Principal": {
        "AWS": [
          "arn:aws:iam::account-A-id:user/Alice"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:*"
      ],
      "Resource": [
        "arn:aws:glue:us-west-2:account-A-id:*"
      ]
    }
  ]
}'
```

您可以儲存檔案中的政策文件，並在命令中 AWS CLI 參考 字首為 的檔案路徑，而不是輸入 JSON 政策文件做為 AWS CLI 命令的一部分`file://`。以下範例示範如何執行上述作業。

```
$ echo '{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Principal": {
        "AWS": [
          "arn:aws:iam::account-A-id:user/Alice"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:*"
      ],
      "Resource": [
        "arn:aws:glue:us-west-2:account-A-id:*"
      ]
    }
  ]
}' > /temp/policy.json

$ aws glue put-resource-policy --profile admin1 \
    --region us-west-2 --policy-in-json file:///temp/policy.json
```

傳播這項資源政策之後，Alice 即可存取帳戶 A 中的所有 AWS Glue 資源，如下所示。

```
# Run as user Alice
$ aws glue create-database --profile alice --region us-west-2 --database-input '{
    "Name": "new_database",
    "Description": "A new database created by Alice",
    "LocationUri": "s3://amzn-s3-demo-bucket"
}'

$ aws glue get-table --profile alice --region us-west-2 --database-name "default" --table-name "tbl1"}
```

AWS Glue 服務會傳回下列項目，以回應 Alice 的 `get-table` 呼叫。

```
{
  "Table": {
    "Name": "tbl1",
    "PartitionKeys": [],
    "StorageDescriptor": {
        ......
    },
    ......
  }
}
```

# 授予 Glue AWS 的 AWS 受管政策
<a name="security-iam-awsmanpol"></a>

 AWS 受管政策是由 AWS AWS 受管政策建立和管理的獨立政策旨在為許多常用案例提供許可，以便您可以開始將許可指派給使用者、群組和角色。

請記住， AWS 受管政策可能不會授予特定使用案例的最低權限許可，因為這些許可可供所有 AWS 客戶使用。我們建議您定義特定於使用案例的[客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)，以便進一步減少許可。

您無法變更 AWS 受管政策中定義的許可。如果 AWS 更新受 AWS 管政策中定義的許可，則更新會影響政策連接的所有委託人身分 （使用者、群組和角色）。 AWS 服務 當新的 啟動或新的 API 操作可用於現有服務時， AWS 最有可能更新 AWS 受管政策。

如需詳細資訊，請參閱 *IAM 使用者指南*中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## AWS 的 受管 （預先定義） 政策 AWS Glue
<a name="access-policy-examples-aws-managed"></a>

AWS 透過提供由 建立和管理的獨立 IAM 政策，解決許多常見的使用案例 AWS。這些 AWS 受管政策會授予常見使用案例的必要許可，讓您不必調查需要哪些許可。如需詳細資訊，請參閱 *IAM 使用者指南*中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

下列 AWS 受管政策可連接到您帳戶中的身分，其專屬於 AWS Glue，並依使用案例案例分組：
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) – 當連接政策的身分使用 AWS 管理主控台時，授予對 AWS Glue 資源的完整存取權。如果您依照此政策中指定的資源命名慣例，使用者就能擁有完整的主控台功能。此政策通常會連接至 AWS Glue 主控台的使用者。
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 允許存取多個 AWS Glue 程序代表您執行時所需的資源。這些資源包括 AWS Glue、Amazon S3、IAM、CloudWatch Logs 和 Amazon EC2。如果您依照此政策中指定的資源命名慣例，AWS Glue 程序就能擁有必要的許可。此政策通常會連接至定義編目程式、工作和開發端點時所指定的角色。
+ [AwsGlueSessionUserRestrictedServiceRole](https://console.aws.amazon.com/iam/home#policies/details/arn:aws:iam::aws:policy%2Fservice-role%2FAwsGlueSessionUserRestrictedServiceRole) – 提供所有 AWS Glue 資源的完整存取 (工作階段除外)。其允許使用者建立並僅使用與使用者相關聯的互動式工作階段。此政策包含 AWS Glue 管理其他 AWS 服務中的AWS Glue資源所需的其他許可。此政策也允許將標籤新增至其他服務中的AWS Glue資源 AWS 。
**注意**  
若要達到完整的安全性優點，請勿將此政策授予已指派 `AWSGlueServiceRole`、`AWSGlueConsoleFullAccess` 或 `AWSGlueConsoleSageMakerNotebookFullAccess` 政策的使用者。
+ [AwsGlueSessionUserRestrictedPolicy](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AwsGlueSessionUserRestrictedPolicy) – 只有在提供符合受指派者 AWS 使用者 ID 的標籤金鑰「擁有者」和值時，才能使用 `CreateSession` API 操作提供建立AWS Glue互動式工作階段的存取權。此身分政策連接至叫用 `CreateSession` API 操作的 IAM 使用者。此政策也允許被指派者與使用符合其 AWS 使用者 ID 的「擁有者」標籤和值建立的AWS Glue互動式工作階段資源互動。建立工作階段之後，此政策拒絕變更或移除 AWS Glue 工作階段資源中「擁有者」標籤的許可。
**注意**  
若要達到完整的安全性優點，請勿將此政策授予已指派 `AWSGlueServiceRole`、`AWSGlueConsoleFullAccess` 或 `AWSGlueConsoleSageMakerNotebookFullAccess` 政策的使用者。
+ [AwsGlueSessionUserRestrictedNotebookServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AwsGlueSessionUserRestrictedNotebookServiceRole) – 提供足夠的 AWS Glue Studio 筆記本工作階段存取權，以便與特定的 AWS Glue 互動式工作階段資源互動。這些是使用與建立筆記本之委託人 (IAM 使用者或角色） AWS 的使用者 ID 相符的「擁有者」標籤值所建立的資源。如需這些標籤的詳細資訊，請參閱《*IAM 使用者指南*》中的[主體鍵值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse)圖表。

  此服務角色政策會連接至筆記本內使用神奇代碼命令指定的角色，或作為角色傳遞給 `CreateSession` API 操作。此政策也允許委託人從AWS Glue Studio筆記本界面建立AWS Glue互動式工作階段，前提是標籤索引鍵「擁有者」和值符合委託人 AWS 的使用者 ID。建立工作階段之後，此政策拒絕變更或移除 AWS Glue 工作階段資源中「擁有者」標籤的許可。此政策還包括從 Amazon S3 儲存貯體寫入和讀取、寫入 CloudWatch 日誌，以及為 AWS Glue 使用的 Amazon EC2 資源建立和刪除標籤的許可。
**注意**  
若要達到完整的安全性優點，請勿將此政策授予已指派 `AWSGlueServiceRole`、`AWSGlueConsoleFullAccess` 或 `AWSGlueConsoleSageMakerNotebookFullAccess` 政策的角色。
+ [AwsGlueSessionUserRestrictedNotebookPolicy](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AwsGlueSessionUserRestrictedNotebookPolicy) – 只有在標籤鍵「擁有者」和值符合建立筆記本之主體 (IAM 使用者或角色) 的 AWS 使用者 ID 時，提供存取權以從 AWS Glue Studio 筆記本介面建立 AWS Glue 互動式工作階段。如需這些標籤的詳細資訊，請參閱《*IAM 使用者指南*》中的[主體鍵值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse)圖表。

  此政策會連接至從 AWS Glue Studio 筆記本介面建立工作階段的主體 (IAM 使用者或角色)。此政策還允許足夠的 AWS Glue Studio 筆記本存取權，以便與特定的 AWS Glue 互動式工作階段資源互動。這些是使用與委託 AWS 人的使用者 ID 相符的「擁有者」標籤值建立的資源。建立工作階段之後，此政策拒絕變更或移除 AWS Glue 工作階段資源中「擁有者」標籤的許可。
+ [AWSGlueServiceNotebookRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceNotebookRole) – 授予在 AWS Glue Studio 筆記本中啟動之 AWS Glue 工作階段的存取權。此政策允許列出和取得所有工作階段的工作階段資訊，但只允許使用者建立和使用以其 AWS 使用者 ID 標記的工作階段。此政策拒絕變更或移除具有 AWS ID 標記之AWS Glue工作階段資源的「擁有者」標籤的許可。

  將此政策指派給在 中使用筆記本界面建立任務 AWS 的使用者AWS Glue Studio。
+ [AWSGlueConsoleSageMakerNotebookFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleSageMakerNotebookFullAccess) – 當連接政策的身分使用 AWS 管理主控台時授予 AWS Glue 和 SageMaker AI 資源的完整存取權。如果您依照此政策中指定的資源命名慣例，使用者就能擁有完整的主控台功能。此政策通常會連接到管理 SageMaker AI 筆記本的 AWS Glue 主控台使用者。
+ [AWSGlueSchemaRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueSchemaRegistryFullAccess) – 當政策連接至 的身分使用 AWS 管理主控台 或 時，授予對AWS Glue結構描述登錄檔資源的完整存取權 AWS CLI。如果您依照此政策中指定的資源命名慣例，使用者就能擁有完整的主控台功能。此政策通常連接到AWS Glue主控台的使用者或管理AWS Glue結構描述登錄 AWS CLI 的使用者。
+ [AWSGlueSchemaRegistryReadonlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueSchemaRegistryReadonlyAccess) – 當附加政策的身分使用 AWS 管理主控台 或 時，授予對AWS Glue結構描述登錄檔資源的唯讀存取權 AWS CLI。如果您依照此政策中指定的資源命名慣例，使用者就能擁有完整的主控台功能。此政策通常連接到AWS Glue主控台的使用者或使用AWS Glue結構描述登錄 AWS CLI 檔的使用者。

**注意**  
您可以登入 IAM 主控台並在該處搜尋特定政策，來檢閱這些許可政策。

您也可以建立自己的自訂 IAM 政策，以允許 AWS Glue 動作與資源的許可。您可以將這些自訂政策連接至需要這些許可的 IAM 使用者或群組。

若要在使用自訂 IAM 角色時建立與 VPC 組態的連線，其必須具有下列 VPC 存取動作：
+ secretsmanager:GetSecretValue
+ secretsmanager:PutSecretValue
+ secretsmanager:DescribeSecret
+ ec2:CreateNetworkInterface
+ ec2:DeleteNetworkInterface
+ ec2:DescribeNetworkInterfaces
+ ec2：DescribeSubnets

## AWS AWS 受管政策的 Glue 更新
<a name="security-iam-awsmanpol-updates"></a>



檢視自此服務開始追蹤 Glue AWS AWS 受管政策更新以來的詳細資訊。如需此頁面變更的自動提醒，請訂閱 Glue 文件歷史記錄頁面上的 RSS AWS 摘要。




| 變更 | 描述 | Date | 
| --- | --- | --- | 
| AwsGlueSessionUserRestrictedNotebookPolicy：現有政策的次要更新。 | 新增允許對擁有者標籤金鑰執行 glue:TagResource 動作。對於具有擁有者標籤金鑰的工作階段，需要支援 tag-on-create。 | 2024 年 8 月 30 日 | 
| AwsGlueSessionUserRestrictedNotebookServiceRole – 現有政策的小幅更新。 | 新增允許對擁有者標籤金鑰執行 glue:TagResource 動作。對於具有擁有者標籤金鑰的工作階段，需要支援 tag-on-create。 | 2024 年 8 月 30 日 | 
| AwsGlueSessionUserRestrictedPolicy – 現有政策的小幅更新。 | 新增允許對擁有者標籤金鑰執行 glue:TagResource 動作。對於具有擁有者標籤金鑰的工作階段，需要支援 tag-on-create。 | 2024 年 8 月 5 日 | 
| AwsGlueSessionUserRestrictedServiceRole – 現有政策的小幅更新。 | 新增允許對擁有者標籤金鑰執行 glue:TagResource 動作。對於具有擁有者標籤金鑰的工作階段，需要支援 tag-on-create。 | 2024 年 8 月 5 日 | 
| AwsGlueSessionUserRestrictedPolicy – 現有政策的小幅更新。 | 將 glue:StartCompletion 和 glue:GetCompletion 新增至政策。Glue 中的 Amazon Q AWS 資料整合需要。 | 2024 年 4 月 30 日 | 
| AwsGlueSessionUserRestrictedNotebookServiceRole – 現有政策的小幅更新。 | 將 glue:StartCompletion 和 glue:GetCompletion 新增至政策。Glue 中的 Amazon Q AWS 資料整合需要。 | 2024 年 4 月 30 日 | 
| AwsGlueSessionUserRestrictedServiceRole – 現有政策的小幅更新。 | 將 glue:StartCompletion 和 glue:GetCompletion 新增至政策。Glue 中的 Amazon Q AWS 資料整合需要。 | 2024 年 4 月 30 日 | 
| AWSGlueServiceNotebookRole – 現有政策的次要更新。 | 將 glue:StartCompletion 和 glue:GetCompletion 新增至政策。Glue 中的 Amazon Q AWS 資料整合需要。 | 2024 年 1 月 30 日 | 
| AwsGlueSessionUserRestrictedNotebookPolicy：現有政策的次要更新。 | 將 glue:StartCompletion 和 glue:GetCompletion 新增至政策。Glue 中的 Amazon Q AWS 資料整合需要。 | 2023 年 11 月 29 日 | 
| AWSGlueServiceNotebookRole – 現有政策的次要更新。 | 將 codewhisperer:GenerateRecommendations 新增至政策。Glue AWS 產生 CodeWhisperer 建議的新功能需要。 | 2023 年 10 月 9 日 | 
|  AWSGlueServiceRole：現有政策的次要更新。  |  限制 CloudWatch 許可的範圍，以更好地反映 Glue AWS 記錄。 | 2023 年 8 月 4 日 | 
|  AWSGlueConsoleFullAccess：現有政策的次要更新。  |  將 databrew 配方清單和描述許可新增至政策。為 Glue AWS 可存取配方的新功能提供完整的管理存取權時需要。 | 2023 年 5 月 9 日 | 
|  AWSGlueConsoleFullAccess：現有政策的次要更新。  |  將 cloudformation:ListStacks 新增至政策。在變更 CloudFormation 授權要求後保留現有功能。 | 2023 年 3 月 28 日 | 
|  為互動式工作階段功能新增新的受管政策︰ [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/security-iam-awsmanpol.html)  |  這些政策的設計目的是為 AWS Glue Studio 中的互動式工作階段和筆記本提供更多的安全性。這些政策限制對 `CreateSession` API 操作的存取，只有擁有者可以存取。  | 2021 年 11 月 30 日 | 
|  AWSGlueConsoleSageMakerNotebookFullAccess - 更新現有政策。  |  針對 AWS Glue 用於存放指令碼和臨時檔案的 Amazon S3 儲存貯體上授予讀取/寫入許可的動作，移除了冗餘資源 ARN (`arn:aws:s3:::aws-glue-*/*`)。 修正語法問題，方法是將 `"StringEquals"` 變更為 `"ForAnyValue:StringLike"`，並將 ` "Effect": "Allow"` 行移動到它們亂序的每個位置的 `"Action":` 行之前。  | 2021 年 7 月 15 日 | 
|  AWSGlueConsoleFullAccess - 更新現有政策。  | 針對 arn:aws:s3:::aws-glue-\$1/\$1 用於存放指令碼和臨時檔案的 Amazon S3 儲存貯體上授予讀取/寫入許可的動作，移除了冗餘資源 ARN (AWS Glue)。 | 2021 年 7 月 15 日 | 
|  AWS Glue 已開始追蹤變更。  | AWS Glue 已開始追蹤其 AWS 受管政策的變更。 | 2021 年 6 月 10 日 | 

# 為任務執行授予動態範圍的政策
<a name="dynamically-scoped-policies"></a>

AWS Glue 提供強大的新功能：任務執行的動態工作階段政策。此功能可讓您為每個任務執行指定自訂、精細分級的許可，而無需建立多個 IAM 角色。

在使用 `StartJobRun` API 啟動 Glue 任務時，您可以包含內嵌工作階段政策。此政策會在該特定任務執行期間暫時修改任務執行角色的許可。這類似於在其他 AWS 服務中搭配 `AssumeRole` API 使用臨時登入資料。
+ **增強安全性**：您可以將任務許可限制為每次執行所需的最低許可。
+ **簡化管理**：無需為不同案例建立和維護許多 IAM 角色。
+ **彈性**：您可以根據執行時期參數或租用戶專屬的需求動態調整許可。
+ **可擴展性**：此方法在您需要隔離租用戶之間的資源的多租用戶環境中表現卓越。

**授予動態範圍的政策用量的範例：**

下列範例示範僅將任務*讀取*和*寫入*存取權授予特定 Amazon S3 儲存貯體路徑，其中路徑是由任務執行 ID 動態決定。這說明如何針對每個任務執行實作精細的執行特定許可。

**從 CLI**

```
aws glue start-job-run \
    --job-name "your-job-name" \
    --execution-role-session-policy '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": [
                    "arn:aws:s3:::specific-bucket/${JobRunId}/*"
                ]
            }
        ]
    }'
```

# 指定 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` 例如：`arn:aws:glue:us-east-1:123456789012:catalog`  | 
| 資料庫 |  `arn:aws:glue:region:account-id:database/database name` 例如：`arn:aws:glue:us-east-1:123456789012:database/db1`  | 
| 資料表 |  `arn:aws:glue:region:account-id:table/database name/table name` 例如：`arn:aws:glue:us-east-1:123456789012:table/db1/tbl1`  | 
| 聯合 S3 資料表目錄 (所有資料表儲存貯體) |   `arn:aws:glue:region:account-id:catalog/s3tablescatalog`  例如：`arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog`  | 
| 聯合 S3 資料表儲存貯體目錄 (子目錄) |   `arn:aws:glue:region:account-id:catalog/s3tablescatalog/bucket name`  例如：`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`  例如：`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`  例如：`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*  例如：`arn:aws:glue:us-east-1:123456789012:catalog/amzn-s3-demo-bucket1`  | 
| 聯合 S3 資料表資料庫  | `arn:aws:glue:region:account-id:catalog`/*catalog name*/*database name* 例如：`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*  例如：`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`  例如：`arn:aws:glue:us-east-1:123456789012:catalog/nscatalog` 受管目錄的 ARN 格式遵循相同的結構。  | 
| 聯合多層目錄 (多層目錄中的子目錄) |   `arn:aws:glue:region:account-id:catalog/top-level catalog name/child catalog name`  例如：`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`  例如：`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`  例如：`arn:aws:glue:us-east-1:123456789012:table/nscatalog/dbcatalog/schemadb/rstbl1`  | 
| 目錄連結容器 | `arn:aws:glue:region:account-id:catalog`/*link container name* 例如：`arn:aws:glue:glue:us-east-1:123456789012:catalog`/linkcontainer-example   | 
| 資料庫 | `arn:aws:glue:region:account-id:catalog`/*link container name*/*database name* 例如：`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` 例如：`arn:aws:glue:us-east-1:123456789012:userDefinedFunction/db1/func1`  | 
| 連線 |  `arn:aws:glue:region:account-id:connection/connection name` 例如：`arn:aws:glue:us-east-1:123456789012:connection/connection1`  | 
| 互動式工作階段 |  `arn:aws:glue:region:account-id:session/interactive session id` 例如：`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` 例如：`arn:aws:glue:us-east-1:123456789012:crawler/mycrawler`  | 
| 任務 |  `arn:aws:glue:region:account-id:job/job-name` 例如：`arn:aws:glue:us-east-1:123456789012:job/testjob`  | 
| 觸發條件 |  `arn:aws:glue:region:account-id:trigger/trigger-name` 例如：`arn:aws:glue:us-east-1:123456789012:trigger/sampletrigger`  | 
| 開發端點 |  `arn:aws:glue:region:account-id:devEndpoint/development-endpoint-name` 例如：`arn:aws:glue:us-east-1:123456789012:devEndpoint/temporarydevendpoint`  | 
| 機器學習轉換 |  `arn:aws:glue:region:account-id:mlTransform/transform-id` 例如：`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` 使用萬用字元 (\$1) 存取符合 `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`。針對此操作，您只能指定萬用字元 (\$1) 資源，不能使用特定的 ARN。

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

```
{
            "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)。

# 授予跨帳戶存取權
<a name="cross-account-access"></a>

跨帳戶授予 Data Catalog 資源存取權可讓您的擷取、轉換和載入 (ETL) 任務查詢和聯結來自不同帳戶的資料。

**Topics**
+ [在 AWS Glue 中授予跨帳戶存取的方法](#cross-account-how-works)
+ [新增或更新 Data Catalog 資源政策](#cross-account-adding-resource-policy)
+ [發起跨帳戶 API 呼叫](#cross-account-calling)
+ [發起跨帳戶 ETL 呼叫](#cross-account-calling-etl)
+ [跨帳戶 CloudTrail 日誌記錄](#cross-account-ct-logs)
+ [跨帳戶資源所有權和帳單](#cross-account-ownership-and-billing)
+ [跨帳戶存取限制](#cross-account-limitations)

## 在 AWS Glue 中授予跨帳戶存取的方法
<a name="cross-account-how-works"></a>

您可以使用 AWS Glue方法或使用 AWS Lake Formation 跨 AWS 帳戶授權，將資料存取權授予外部帳戶。這些AWS Glue方法使用 AWS Identity and Access Management (IAM) 政策來實現精細存取控制。Lake Formation 使用更簡單的 `GRANT/REVOKE` 許可模型，類似於關聯式資料庫系統中的 `GRANT/REVOKE` 命令。

本節說明如何使用 AWS Glue 方法。如需使用 Lake Formation 跨帳戶授予的詳細資訊，請參閱*AWS Lake Formation 開發人員指南*中的[授予 Lake Formation 許可](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html)。

有兩個 AWS Glue 方法可授予資源的跨帳戶存取權：
+ 使用 Data Catalog 資源政策
+ 使用 IAM 角色

**使用資源政策授予跨帳戶存取**  
以下是使用 Data Catalog 資源政策授予跨帳戶存取權的一般步驟：

1. 帳戶 A 中的管理員 (或其他授權身分) 會將資源政策連接到帳戶 A 中的 Data Catalog 。此政策會授予帳戶 B 特定跨帳戶許可，以對帳戶 A 目錄中的資源執行操作。

1. 帳戶 B 中的管理員會將 IAM 政策連接至帳戶 B 中委派接收自帳戶 A 之許可的 IAM 身分。

   帳戶 B 中的身分現在可存取帳戶 A 中所指定的資源。

   身分*同時*需要資源擁有者 (帳戶 A) *和*其父帳戶 (帳戶 B) 的許可，才能存取資源。

**使用 IAM 角色授予跨帳戶存取權**  
以下是使用 IAM 角色授予跨帳戶存取權的一般步驟：

1. 帳戶中擁有資源 (帳戶 A) 的管理員 (或其他授權身分) 會建立 IAM 角色。

1. 帳戶 A 中的管理員會將政策連接到角色，以授予跨帳戶許可以存取有問題的資源。

1. 帳戶 A 中的管理員會將信任政策連接到角色，以將不同帳戶 (帳戶 B) 中的 IAM 身分識別為可擔任該角色的委託人。

   如果您想要授予 AWS 服務擔任角色的許可，信任政策中的委託人也可以是 AWS 服務委託人。

1. 帳戶 B 中的管理員現在會將許可委派給帳戶 B 中的一或多個 IAM 身分，讓他們可以擔任該角色。這樣做會將帳戶 A 中的資源存取權授予帳戶 B 中的這些身分。

如需有關使用 IAM 來委派許可的詳細資訊，請參閱*《IAM 使用者指南》*中的[存取管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。如需使用者、群組、角色和許可的相關資訊，請參閱《IAM 使用者指南》**中的[身分 (使用者、群組和角色)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

有關這兩種方法的比較資料，請參閱《*IAM 使用者指南*》中的 [IAM 角色與資源型政策有何差異](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html)。AWS Glue 支援這兩個選項，但限制是資源政策只能授予 Data Catalog 資源存取權。

例如，若要讓帳戶 B 的 `Dev` 角色存取帳戶 A 的 `db1` 資料庫，請將下列資源政策連接到帳戶 A 的目錄。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:role/Dev"
        ]
      },
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1"
      ]
    }
  ]
}
```

------

此外，帳戶 B 還必須先將下列 IAM 政策連接至 `Dev` 角色，他才能真正存取帳戶 A 的 `db1`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:catalog",
        "arn:aws:glue:us-east-1:111122223333:database/db1"
      ]
    }
  ]
}
```

------

## 新增或更新 Data Catalog 資源政策
<a name="cross-account-adding-resource-policy"></a>

您可以使用主控台、API 或 AWS Command Line Interface () 新增或更新 AWS Glue Data Catalog 資源政策AWS CLI。

**重要**  
如果您已經使用 AWS Lake Formation從帳戶授予跨帳戶許可，則新增或更新 Data Catalog 資源政策需要額外的步驟。如需詳細資訊，請參閱《*AWS Lake Formation 開發人員指南*》中的[同時使用 AWS Glue 和 Lake Formation 管理跨帳戶許可](https://docs.aws.amazon.com/lake-formation/latest/dg/hybrid-cross-account.html)。  
若要判斷 Lake Formation 跨帳戶授予是否存在，請使用 `glue:GetResourcePolicies` API 操作或 AWS CLI。如果 `glue:GetResourcePolicies` 傳回現有 Data Catalog 政策以外的任何政策，則存在 Lake Formation 授予。如需詳細資訊，請參閱 *AWS Lake Formation 開發人員指南*中的[使用 GetResourcePolicies API 操作檢視所有跨帳戶授權](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-getresourcepolicies.html)。

**新增或更新 Data Catalog 資源政策 (主控台)**

1. 開啟位於 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 的 AWS Glue 主控台。

   以具有 `glue:PutResourcePolicy`許可的 AWS Identity and Access Management (IAM) 管理使用者身分登入。

1. 在導覽窗格中，選擇**設定**。

1. 在 **Data catalog settings ( Data Catalog 設定)** 頁面，在 **Permissions (許可)** 下，將資源政策貼到文字區域。然後選擇 **Save** (儲存)。

   如果主控台顯示警示，指出政策中的許可將會新增至使用 Lake Formation 授予的任何許可，請選擇 **Proceed (繼續)**。

**新增或更新 Data Catalog 資源政策 (AWS CLI)**
+ 提交 `aws glue put-resource-policy` 命令。如果 Lake Formation 授予已經存在，請確保您包含具有值 `'TRUE'` 的 `--enable-hybrid` 選項。

  如需使用此命令的範例，請參閱[Glue AWS 的資源型政策範例](security_iam_resource-based-policy-examples.md)。

## 發起跨帳戶 API 呼叫
<a name="cross-account-calling"></a>

所有 AWS Glue Data Catalog 操作都會有 `CatalogId` 欄位。如已授予啟用跨帳戶存取的必要許可，發起人即可跨帳戶發起 Data Catalog API 呼叫。發起人可在 `CatalogId` 中傳遞目標 AWS 帳戶 ID 來執行此操作，以便存取該目標帳戶中的資源。

如果未提供任何 `CatalogId` 值，則根據預設，AWS Glue 會使用發起人的專屬帳戶 ID，而且呼叫未跨帳戶。

## 發起跨帳戶 ETL 呼叫
<a name="cross-account-calling-etl"></a>

有些 AWS Glue PySpark 和 Scala API 會有目錄 ID 欄位。如果已授予所有必要許可來啟用跨帳戶存取權，則 ETL 任務可以傳遞目錄 ID 欄位中的目標 AWS 帳戶 ID 以將 API 操作的 PySpark 和 Scala 呼叫設為跨帳戶，以存取目標帳戶中的 Data Catalog 資源。

如果未提供任何目錄 ID 值，則根據預設，AWS Glue 會使用發起人的專屬帳戶 ID，而且呼叫未跨帳戶。

如需支援 `catalog_id` 的 PySpark API，請參閱 [GlueContext 類別](aws-glue-api-crawler-pyspark-extensions-glue-context.md)。如需支援 `catalogId` 的 Scala API，請參閱 [AWS Glue Scala GlueContext API](glue-etl-scala-apis-glue-gluecontext.md)。

下列範例顯示承授者執行 ETL 任務所需的許可。在此範例中，*grantee-account-id* 是執行任務的用戶端 `catalog-id`，而 *grantor-account-id* 是資源的擁有者。此範例會授予授予者帳戶中所有目錄資源的許可。若要限制所授予資源的範圍，您可以提供目錄、資料庫、資料表和連線的特定 ARN。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetConnection",
        "glue:GetDatabase",
        "glue:GetTable",
        "glue:GetPartition"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:root"
        ]
      },
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:*"
      ]
    }
  ]
}
```

------

**注意**  
如果授予者帳戶中的資料表指向也在授予者帳戶中的 Amazon S3 位置，則承授者帳戶中用來執行 ETL 任務的 IAM 角色必須具備從授予者帳戶中列出和取得物件的許可。

如果帳戶 A 的用戶端已具備建立和執行 ETL 任務的許可，則設定跨帳戶存取權 ETL 任務的基本步驟如下：

1. 允許跨帳戶資料存取 (如果已設定 Amazon S3 跨帳戶存取權，則請略過此步驟)。

   1. 更新帳戶 B 中的 Amazon S3 儲存貯體政策，以允許從帳戶 A 的跨帳戶存取權。

   1. 更新帳戶 A 中的 IAM 政策，以允許存取帳戶 B 中的儲存貯體。

1. 允許跨帳戶 Data Catalog 存取。

   1. 建立或更新連接到帳戶 B 中 Data Catalog 的資源政策，以允許從帳戶 A 存取。

   1. 更新帳戶 A 中的 IAM 政策，以允許存取帳戶 B 中的 Data Catalog 。

## 跨帳戶 CloudTrail 日誌記錄
<a name="cross-account-ct-logs"></a>

當AWS Glue擷取、轉換和載入 (ETL) 任務存取透過 AWS Lake Formation 跨帳戶授與共用之 Data Catalog 資料表的基礎資料時，還有其他 AWS CloudTrail 記錄行為。

就本討論而言，共用資料表 AWS 的帳戶是擁有者帳戶，而共用資料表的帳戶是收件人帳戶。當收件者帳戶中的 ETL 任務存取擁有者帳戶中資料表中的資料時，新增至收件者帳戶之記錄的資料存取 CloudTrail 事件會複製到擁有者帳戶的 CloudTrail 記錄中。如此一來，擁有者帳戶可以追蹤各種收件者帳戶的資料存取。根據預設，CloudTrail 事件不包含人類可讀的主體識別碼 (主體 ARN)。收件者帳戶中的系統管理員可以選擇加入，在記錄中包含主體 ARN。

如需詳細資訊，請參閱 *AWS Lake Formation 開發人員指南*中的[跨帳戶 CloudTrail 記錄](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-logging.html)。

**另請參閱**  
[在 中記錄和監控 AWS Glue](logging-and-monitoring.md)

## 跨帳戶資源所有權和帳單
<a name="cross-account-ownership-and-billing"></a>

當一個 AWS 帳戶 （帳戶 A) 中的使用者建立新的資源，例如不同帳戶 （帳戶 B) 中的資料庫時，該資源即為帳戶 B 所擁有，而帳戶 B 是建立該資源的帳戶。帳戶 B 中的管理員會自動取得存取新資源的完整許可 (包含讀取、寫入以及授予第三個帳戶的存取許可)。只有在帳戶 A 中的使用者具備帳戶 B 所授予的適當許可時，才能存取他們剛剛所建立的資源。

儲存成本以及與新資源直接建立關聯的其他成本都會計費到帳戶 B (資源擁有者)。來自建立資源之使用者的要求成本會計費到申請者帳戶 (帳戶 A)。

 如需AWS Glue帳單和定價的詳細資訊，請參閱 [AWS 定價的運作方式](https://d0.awsstatic.com/whitepapers/aws_pricing_overview.pdf)。

## 跨帳戶存取限制
<a name="cross-account-limitations"></a>

AWS Glue 跨帳戶存取的限制如下：
+ 如果您在區域支援 AWS Glue 之前使用 Amazon Athena 或 Amazon Redshift Spectrum 建立資料庫和資料表，並且資源擁有者帳戶尚未將 Amazon Athena Data Catalog 移轉至 AWS Glue，則不允許跨帳戶存取 AWS Glue。您可以使用 [GetCatalogImportStatus (get\$1catalog\$1import\$1status)](aws-glue-api-catalog-migration.md#aws-glue-api-catalog-migration-GetCatalogImportStatus) 找到目前移轉狀態。如需如何將 Athena 目錄移轉到 AWS Glue 的詳細資訊，請參閱《*Amazon Athena 使用者指南*》中的[逐步升級至 AWS Glue Data Catalog](https://docs.aws.amazon.com/athena/latest/ug/glue-upgrade.html)。
+ *只有* Data Catalog 資源 (包含資料庫、資料表、使用者定義的函數和連線) 支援跨帳戶存取。
+ 從 Athena 跨帳戶存取 Data Catalog 需要您將目錄註冊為 Athena `DataCatalog` 資源。如需說明，請參閱《*Amazon Athena 使用者指南*》中的[從另一個帳戶註冊 AWS Glue Data Catalog](https://docs.aws.amazon.com/athena/latest/ug/data-sources-glue-cross-account.html)。

# 對 AWS Glue 身分和存取進行故障診斷
<a name="security_iam_troubleshoot"></a>

使用以下資訊來協助您診斷和修正使用 Glue AWS 和 IAM 時可能遇到的常見問題。

**Topics**
+ [我無權在 Glue AWS 中執行動作](#security_iam_troubleshoot-no-permissions)
+ [我未獲得執行 iam:PassRole 的授權](#security_iam_troubleshoot-passrole)
+ [我想要允許 以外的人員 AWS 帳戶 存取我的 AWS Glue 資源](#security_iam_troubleshoot-cross-account-access)

## 我無權在 Glue AWS 中執行動作
<a name="security_iam_troubleshoot-no-permissions"></a>

如果您收到錯誤，告知您未獲授權執行動作，您的政策必須更新，允許您執行動作。

下列範例錯誤會在`mateojackson` IAM 使用者嘗試使用主控台檢視一個虛構 `my-example-widget` 資源的詳細資訊，但卻無虛構 `glue:GetWidget` 許可時發生。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: glue:GetWidget on resource: my-example-widget
```

在此情況下，必須更新 `mateojackson` 使用者的政策，允許使用 `glue:GetWidget` 動作存取 `my-example-widget` 資源。

如果您需要協助，請聯絡您的 AWS 管理員。您的管理員提供您的簽署憑證。

## 我未獲得執行 iam:PassRole 的授權
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到錯誤，告知您無權執行 `iam:PassRole`動作，您的政策必須更新，以允許您將角色傳遞給 AWS Glue。

有些 AWS 服務 可讓您將現有角色傳遞給該服務，而不是建立新的服務角色或服務連結角色。如需執行此作業，您必須擁有將角色傳遞至該服務的許可。

當名為 `marymajor` 的 IAM 使用者嘗試使用主控台在 AWS Glue 中執行動作時，發生下列範例錯誤。但是，動作請求服務具備服務角色授予的許可。Mary 沒有將角色傳遞給服務的許可。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在這種情況下，Mary 的政策必須更新，允許她執行 `iam:PassRole` 動作。

如果您需要協助，請聯絡您的 AWS 管理員。您的管理員提供您的簽署憑證。

## 我想要允許 以外的人員 AWS 帳戶 存取我的 AWS Glue 資源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以建立一個角色，讓其他帳戶中的使用者或您組織外部的人員存取您的資源。您可以指定要允許哪些信任物件取得該角色。針對支援基於資源的政策或存取控制清單 (ACL) 的服務，您可以使用那些政策來授予人員存取您的資源的許可。

如需進一步了解，請參閱以下內容：
+ 若要了解 AWS Glue 是否支援這些功能，請參閱 [Glue AWS 如何與 IAM 搭配使用](security_iam_service-with-iam.md)。
+ 若要了解如何 AWS 帳戶 在您擁有的 資源之間提供存取權，請參閱《[IAM 使用者指南》中的在您擁有 AWS 帳戶 的另一個 IAM 使用者中提供存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)。 **
+ 若要了解如何將資源的存取權提供給第三方 AWS 帳戶，請參閱《*IAM 使用者指南*》中的[將存取權提供給第三方 AWS 帳戶 擁有](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)。
+ 如需了解如何透過聯合身分提供存取權，請參閱《*IAM 使用者指南*》中的[將存取權提供給在外部進行身分驗證的使用者 (聯合身分)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 如需了解使用角色和資源型政策進行跨帳戶存取之間的差異，請參閱《IAM 使用者指南》**中的 [IAM 中的跨帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。