

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

# 授予跨帳戶存取權
<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)。