本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 AWS Glue 資料目錄的跨帳戶存取
您可以使用 Athena 的跨帳戶 AWS Glue 目錄功能,從非您自己的帳戶註冊 AWS Glue 目錄。設定 的必要IAM許可 AWS Glue 並將目錄註冊為 Athena DataCatalog 資源後,您可以使用 Athena 執行跨帳戶查詢。如需使用 Athena 主控台以從其他帳戶註冊目錄的相關資訊,請參閱從另一個帳戶註冊 Data Catalog。
如需 中跨帳戶存取的詳細資訊 AWS Glue,請參閱《 AWS Glue 開發人員指南》中的授予跨帳戶存取。
開始之前
由於此功能使用現有的 Athena DataCatalog
資源APIs和功能來啟用跨帳戶存取,因此建議您在開始之前先閱讀下列資源:
-
連線至資料來源 - 包含搭配、 AWS Glue Hive 或 Lambda 資料目錄來源使用 Athena 的主題。
-
資料目錄範例政策 - 說明如何撰寫控制資料目錄存取的政策。
-
使用 AWS CLI 與蜂巢元存儲 - 示範如何 AWS CLI 搭配 Hive 中繼存放區使用 ,但包含適用於其他資料來源的使用案例。
考量與限制
目前,Athena 跨帳戶 AWS Glue 目錄存取有下列限制:
-
此功能僅適用於支援 Athena 引擎第 2 版或更新版本 AWS 區域 的 。如需有關 Athena 引擎版本的資訊,請參閱Athena 引擎版本控制。若要升級工作群組的引擎版本,請參閱變更 Athena 引擎版本。
-
當您 AWS Glue Data Catalog 在帳戶中註冊另一個帳戶時,您建立的區域
DataCatalog
資源只會連結到該特定區域中另一個帳戶的資料。 -
目前不支援包含跨帳戶 AWS Glue 目錄的
CREATE VIEW
陳述式。 -
使用 AWS 受管金鑰加密的目錄無法跨帳戶查詢。對於您要跨帳戶查詢的目錄,請改用客戶受管金鑰 (
KMS_CMK
)。如需客戶受管金鑰與 AWS 受管金鑰之間的差異資訊,請參閱《 AWS Key Management Service 開發人員指南》中的客戶金鑰和 AWS 金鑰。
開始使用
在下列案例中,「借用者」帳戶 (666666666666) 想要執行SELECT
查詢,其參考屬於「擁有者」帳戶 (999999999999) 的 AWS Glue 目錄,如下列範例所示:
SELECT * FROM ownerCatalog.tpch1000.customer
在下列程序中,步驟 1a 和 1b 顯示如何從借款人和擁有者的兩端,授予借款人帳戶對擁有者帳戶 AWS Glue 資源的存取權。該範例授予對資料庫 tpch1000
和資料表 customer
的存取權。變更這些範例名稱以符合您的需求。
步驟 1a:使用 政策建立借款人角色,以存取擁有者 AWS Glue 的資源
若要使用存取擁有者帳戶 AWS Glue 資源的政策建立借款人帳戶角色,您可以使用 AWS Identity and Access Management (IAM) 主控台或 IAM API。下列程序使用 IAM主控台。
建立借款人角色和政策以存取擁有者帳戶 AWS Glue 的資源
-
https://console.aws.amazon.com/iam/
從借款人帳戶登入 IAM 主控台。 -
在導覽窗格中,展開存取管理,然後選擇政策。
-
選擇 建立政策。
-
針對政策編輯器,選擇 JSON。
-
在政策編輯器中,輸入下列政策,然後根據您的需求進行修改:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": [ "arn:aws:glue:
us-east-1
:999999999999
:catalog", "arn:aws:glue:us-east-1
:999999999999
:database/tpch1000
", "arn:aws:glue:us-east-1
:999999999999
:table/tpch1000
/customer
" ] } ] } -
選擇 Next (下一步)。
-
在檢閱和建立頁面上,針對政策名稱輸入政策的名稱 (例如,
CrossGluePolicyForBorrowerRole
)。 -
選擇 建立政策。
-
在導覽窗格中,選擇 Roles (角色)。
-
選擇 Create Role (建立角色)。
-
在選取信任的實體頁面上,選擇 AWS 帳戶,然後選擇下一步。
-
在新增許可頁面上,輸入您在搜尋方塊中建立的政策名稱 (例如,
CrossGluePolicyForBorrowerRole
)。 -
選取政策名稱旁的核取方塊,然後選擇下一步。
-
在 Name, review, and create (名稱,檢閱和建立) 頁面上,針對 Role name (角色名稱) 輸入角色的名稱 (例如
CrossGlueBorrowerRole
)。 -
選擇建立角色。
步驟 1b:建立擁有者政策以授予借款人 AWS Glue 存取權
若要將來自擁有者帳戶 (999999999999) 的 AWS Glue 存取權授予借款人的角色,您可以使用 AWS Glue 主控台或 AWS Glue PutResourcePolicyAPI操作。下列程序使用 AWS Glue 主控台。
從擁有者授予借款人帳戶的 AWS Glue 存取權
-
https://console.aws.amazon.com/glue/
從擁有者帳戶登入 AWS Glue 主控台。 -
在導覽窗格中,展開資料目錄,然後選擇目錄設定。
-
在 Permissions (許可) 方塊中,輸入如下所示的政策。針對
rolename
,輸入借款人在步驟 1a 中建立的角色 (例如CrossGlueBorrowerRole
)。如果您想要增加許可範圍,可以將萬用字元*
用於資料庫和資料表資源類型。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
666666666666
:user/username
", "arn:aws:iam::666666666666
:role/rolename
" ] }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1
:999999999999
:catalog", "arn:aws:glue:us-east-1
:999999999999
:database/tpch1000
", "arn:aws:glue:us-east-1
:999999999999
:table/tpch1000
/customer
" ] } ] }
完成後,我們建議您使用 AWS Glue API進行一些測試跨帳戶呼叫,以確認許可已如預期般設定。
步驟 2:借款人註冊 AWS Glue Data Catalog 屬於擁有者帳戶的
下列程序說明如何使用 Athena 主控台,在擁有者 Amazon Web Services 帳戶中設定 AWS Glue Data Catalog 作為資料來源。如需使用 API 操作而非主控台來註冊目錄的資訊,請參閱 (選用) 使用 API註冊屬於擁有者帳戶的 Athena Data Catalog。
註冊 AWS Glue Data Catalog 屬於另一個帳戶的
在 https://console.aws.amazon.com/athena/
中開啟 Athena 主控台。 如果未顯示主控台的導覽窗格,請選擇左側的展開選單。
-
展開管理,然後選擇資料來源。
-
在右上角,選擇 Create data source (建立資料來源)。
-
在選擇資料來源頁面上,針對資料來源,選取 S3 - AWS Glue Data Catalog,然後選擇下一步。
-
在 Enter data source details (輸入資料來源詳細資訊) 頁面上的 AWS Glue Data Catalog 區段,針對選擇 AWS Glue Data Catalog,在另一個帳户選擇 AWS Glue Data Catalog 。
-
在 Data source details (資料來源詳細資訊) 輸入以下資訊:
-
資料來源名稱 – 輸入您要在SQL查詢中使用的名稱,以參考其他帳戶中的資料目錄。
-
Description (描述) – (選填) 輸入其他帳戶裡資料目錄的描述。
-
Catalog ID (目錄 ID) – 輸入資料目錄所屬帳戶的 12 位數 Amazon Web Services 帳戶 ID。Amazon Web Services 帳戶 ID 即為目錄 ID。
-
-
(選用) 展開標籤,然後輸入您希望與資料來源建立關聯的鍵值對。如需標籤的詳細資訊,請參閱標記 Athena 資源。
-
選擇 Next (下一步)。
-
在 Review and create (檢閱並建立) 頁面上,檢閱您提供的資訊,然後選擇 Create data source (建立資料來源)。Data source details (資料來源詳細資訊) 頁面列出了註冊資料型錄的資料庫和標籤。
-
選擇資料來源和目錄。您註冊的資料型錄列於 Data Source Name (資料來源名稱) 資料欄。
-
若要檢視或編輯資料型錄的相關資訊,請選擇型錄,然後選擇 Actions (動作)、Edit (編輯)。
-
若要刪除新資料型錄,請選擇型錄,然後選擇 Actions (動作)、Delete (刪除)。
步驟 3:借用者提交查詢
借用者使用 catalog
.database
.table
語法提交參考目錄的查詢,如下列範例所示:
SELECT * FROM ownerCatalog.tpch1000.customer
借用者也可以透過 將目錄傳入,而不是使用完全合格的語法,以內文方式指定目錄QueryExecutionContext。
(選用) 設定其他 Amazon S3 許可
-
如果借款人帳戶使用 Athena 查詢將新資料寫入擁有者帳戶中的資料表,即使該資料表存在於擁有者帳戶中,擁有者也不會自動存取 Amazon S3 中的此資料。這是因為除非另有設定,否則借款人是 Amazon S3 中資訊的物件擁有者。若要授予擁有者對資料的存取權,請相應地設定物件的許可作為額外的步驟。
-
某些 跨帳戶DDL操作MSCK REPAIR TABLE需要 Amazon S3 許可。例如,如果借款人帳戶正在對擁有者帳戶中的資料表執行跨帳戶
MSCK REPAIR
操作,而該資料表在擁有者帳戶 S3 儲存貯體中具有其資料,則該儲存貯體必須授予許可給借款人擔任的角色,才能讓查詢成功。
如需授予儲存貯體許可的相關資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的如何設定ACL儲存貯體許可?。
(選用) 動態使用目錄
在某些情況下,您可能想要在不進行必要步驟註冊的情況下,對跨帳戶 AWS Glue
目錄快速執行測試。如果必要IAM和 Amazon S3 許可已正確設定,您可以動態執行跨帳戶查詢,而無需建立DataCatalog
資源物件,如本文件先前所述。
若要在未註冊的情況下明確參考目錄,請使用以下範例中的語法:
SELECT * FROM "glue:arn:aws:glue:us-east-1:999999999999:catalog".tpch1000.customer
使用格式 "glue:
",其中 <arn>
是您要使用的 AWS Glue Data Catalog ARN 。在此範例中,Athena 使用此語法動態指向帳戶 999999999999 AWS Glue 的資料目錄,就像您為帳戶單獨建立<arn>
DataCatalog
物件一樣。
使用動態目錄的注意事項
使用動態目錄時,請記住以下幾點。
-
使用動態目錄需要您通常用於 Athena Data Catalog API操作的IAM許可。主要差異在於資料目錄資源名稱會遵循
glue:*
命名慣例。 -
目錄ARN必須屬於正在執行查詢的相同區域。
-
在DML查詢或檢視中使用動態目錄時,請以逸出的雙引號 () 包圍它
\"
。在DDL查詢中使用動態目錄時,請加上反引號字元 (`
)。
(選用) 使用 API註冊屬於擁有者帳戶的 Athena Data Catalog
可以使用 API操作來註冊屬於擁有者帳戶的資料目錄,而不是使用步驟 2 中所述的 Athena 主控台。
Athena DataCatalog 資源的建立者必須具備必要的許可,才能執行 Athena CreateDataCatalogAPI操作。根據您的需求,可能需要存取其他API操作。如需詳細資訊,請參閱資料目錄範例政策。
下列CreateDataCatalog
請求內文會註冊 AWS Glue 目錄以進行跨帳戶存取:
# Example CreateDataCatalog request to register a cross-account Glue catalog: { "Description": "Cross-account Glue catalog", "Name": "ownerCatalog", "Parameters": {"catalog-id" : "999999999999" # Owner's account ID }, "Type": "GLUE" }
以下範本程式碼會使用 Java 用戶端來建立 DataCatalog
物件。
# Sample code to create the DataCatalog through Java client CreateDataCatalogRequest request = new CreateDataCatalogRequest() .withName("ownerCatalog") .withType(DataCatalogType.GLUE) .withParameters(ImmutableMap.of("catalog-id", "999999999999")); athenaClient.createDataCatalog(request);
在這些步驟之後,借款人應該查看ownerCatalog
何時呼叫 ListDataCatalogsAPI操作。
其他資源
-
在 AWS 規範指導模式指南中AWS Glue Data Catalog ,使用 Amazon Athena 設定共用 的跨帳戶存取權。
-
在AWS 大數據部落格中使用 Amazon Athena AWS Glue Data Catalog查詢跨帳戶
-
《AWS Glue 開發人員指南》中的授予跨帳戶存取權