授予跨帳戶存取權 - AWS Glue

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

授予跨帳戶存取權

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

在 AWS Glue 中授予跨帳戶存取的方法

您可以使用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 許可

有兩個 AWS Glue 方法可授予資源的跨帳戶存取權:

  • 使用 Data Catalog 資源政策

  • 使用 IAM 角色

使用資源政策授予跨帳戶存取

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

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

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

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

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

使用 IAM 角色授予跨帳戶存取權

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

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

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

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

    如果您想要授與 AWS 服務權限來擔任角色,則信任原則中的主體也可以是 AWS 服務主體。

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

如需有關使用 IAM 來委派許可的詳細資訊,請參閱《IAM 使用者指南》中的存取管理。如需使用者、群組、角色和許可的相關資訊,請參閱《IAM 使用者指南》中的身分 (使用者、群組和角色)

有關這兩種方法的比較資料,請參閱《IAM 使用者指南》中的 IAM 角色與資源型政策有何差異。AWS Glue 支援這兩個選項,但限制是資源政策只能授予 Data Catalog 資源存取權。

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

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

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

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

新增或更新 Data Catalog 資源政策

您可以使用主控台、API 或 AWS Command Line Interface (AWS CLI) 新增或更新資AWS Glue料目錄資源策略。

重要

如果您已經使用 AWS Lake Formation從帳戶授予跨帳戶許可,則新增或更新 Data Catalog 資源政策需要額外的步驟。如需詳細資訊,請參閱《AWS Lake Formation 開發人員指南》中的同時使用 AWS Glue 和 Lake Formation 管理跨帳戶許可

若要判斷 Lake Formation 跨帳戶授予是否存在,請使用 glue:GetResourcePolicies API 操作或 AWS CLI。如果 glue:GetResourcePolicies 傳回現有 Data Catalog 政策以外的任何政策,則存在 Lake Formation 授予。如需詳細資訊,請參AWS Lake Formation 開發人員指南中的使用 GetResourcePolicies API 作業檢視所有跨帳戶授權

新增或更新 Data Catalog 資源政策 (主控台)
  1. 開啟位於 https://console.aws.amazon.com/glue/ 的 AWS Glue 主控台。

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

  2. 在導覽窗格中,選擇設定

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

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

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

    如需使用此命令的範例,請參閱AWS Glue 以資源型為基礎的範例

發起跨帳戶 API 呼叫

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

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

發起跨帳戶 ETL 呼叫

一些AWS Glue PySpark 和斯卡拉 API 有一個目錄 ID 字段。如果已授與所有必要權限來啟用跨帳戶存取,則 ETL 工作可以透過在目錄 ID 欄位中傳遞目標帳 AWS 戶 ID 以存取目標帳戶中的資料目錄資源,來跨帳戶對 API 作業進行 PySpark 和 Scala 呼叫。

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

如需支援的 PySpark APIcatalog_id,請參閱GlueContext 類。如需支援 catalogId 的 Scala API,請參閱 AWS Glue斯卡 GlueContext 拉

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

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

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

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

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

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

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

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

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

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

跨帳戶 CloudTrail 記錄

當AWS Glue擷取、轉換和載入 (ETL) 工作存取透過 AWS Lake Formation 跨帳戶授權共用之「資料目錄」資料表的基礎資料時,會有其他 AWS CloudTrail 記錄行為。

為了進行此討論,共用資料表的 AWS 帳戶是擁有者帳戶,而共用資料表的帳戶是收件者帳戶。當收件者帳戶中的 ETL 工作存取擁有者帳戶中資料表中的資料時,新增至收件者帳戶記錄檔的資料存取 CloudTrail 事件會複製到擁有者帳戶的 CloudTrail 記錄檔。如此一來,擁有者帳戶可以追蹤各種收件者帳戶的資料存取。依預設, CloudTrail 事件不包含人類可讀的主參與者識別元 (主體 ARN)。收件者帳戶中的系統管理員可以選擇加入,在記錄中包含主體 ARN。

如需詳細資訊,請參閱AWS Lake Formation 開發人員指南中的跨帳戶 CloudTrail記錄

跨帳戶資源所有權和帳單

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

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

如需AWS Glue計費和定價的詳細資訊,請參閱定 AWS 價方式。

跨帳戶存取限制

AWS Glue 跨帳戶存取的限制如下:

  • 如果您在區域支援 AWS Glue 之前使用 Amazon Athena 或 Amazon Redshift Spectrum 建立資料庫和資料表,並且資源擁有者帳戶尚未將 Amazon Athena Data Catalog 遷移至 AWS Glue,則不允許跨帳戶存取 AWS Glue。您可以使用 GetCatalogImportStatus (get_catalog_import_status) 找到目前移轉狀態。如需有關如何將 Athena 目錄移轉至的詳細資訊AWS Glue,請參閱 Amazon Athena 使用者指南AWS Glue Data Catalog step-by-step中的升級至

  • 只有 Data Catalog 資源 (包含資料庫、資料表、使用者定義的函數和連線) 支援跨帳戶存取。

  • 從 Athena 跨帳戶存取 Data Catalog 需要您將目錄註冊為 Athena DataCatalog 資源。如需說明,請參閱《Amazon Athena 使用者指南》中的從另一個帳戶註冊 AWS Glue Data Catalog