通過身份聯邦管理 Amazon Athena 允許您集中管理身份驗證和授權程序。Athena 是一種無伺服器的互動式分析服務,提供簡化和靈活的方法來分析 PB 級數據。
在這篇博客文章中,我們將向您展示如何使用 Athena JDBC 驅動程序(包括瀏覽器安全斷言標記語言 (SAML) 插件)從第三方 SQL 客戶端工具連接到 Athena,這有助於您快速實現身份聯邦功能和多因素身份驗證 (MFA)。這使得在整個組織中自動化和執行數據訪問策略成為可能。
您可以使用 AWS IAM 身份中心來聯邦訪問 AWS 帳戶的用戶。IAM 身份中心與 AWS 組織集成,以管理您組織下的 AWS 帳戶的訪問。在這篇文章中,您將學習如何配置 Athena 驅動程序以使用 AWS 配置文件憑證。這將允許您從 IAM 身份中心解析憑證並使用您的聯邦身份提供者 (IdP) 的 MFA 功能。在這篇文章中,您將學習如何集成基於瀏覽器的 SAML 插件來為您的聯邦身份提供者 (IdP) 添加單點登錄 (SSO) 和 MFA 功能。
前提條件
要實現此解決方案,您必須具備以下前提條件:
注意:Lake Formation 只支持 SAML 斷言中的單一角色。無法使用多個角色。
解決方案概述
圖 1:解決方案架構
要實現該解決方案,請按照圖 1 中所示的步驟完成:
一名 IAM 身份中心的委派管理員在身份中心內創建兩個自定義權限集。
一名 IAM 身份中心的委派管理員將權限集分配給 AWS 帳戶及用戶和組。用戶擁有數據湖帳戶中配置的單點登錄角色的權限。身份中心創建的角色名稱以 AWSReservedSSO 開頭。
Lake Formation 管理員授予單點登錄角色對相應數據庫和表的權限。
該解決方案的工作流程由以下高級步驟組成,如圖 1 所示:
用戶使用 AWS CLI 配置 IAM 身份中心身份驗證。
AWS CLI 將用戶重定向到 AWS 訪問門戶 URL。用戶輸入工作身份憑證(用戶名和密碼)。然後選擇登錄。
AWS 訪問門戶驗證用戶的身份。IAM 身份中心將請求重定向到身份中心身份驗證服務以驗證用戶的憑證。
如果為用戶啟用了 MFA,則會提示他們對其 MFA 設備進行身份驗證。
用戶輸入或批准 MFA 詳情。用戶的 MFA 成功完成。
用戶從顯示的列表中選擇要使用的 AWS 帳戶。然後從顯示的列表中選擇要使用的 IAM 單點登錄角色。
用戶測試 SQL 客戶端連接,然後使用客戶端運行 SQL 查詢。
客戶端調用 Athena 以從數據目錄中檢索表及相關元數據。
Athena 請求 Lake Formation 的數據訪問。Lake Formation 調用 AWS 安全令牌服務 (AWS STS)。
Lake Formation 調用 AWS STS。
Lake Formation 獲得與數據湖位置相關的定義 IAM 角色(敏感或非敏感)的臨時 AWS 憑證。
Lake Formation 將臨時憑證返回給 Athena。
Athena 使用臨時憑證從 Amazon S3 檢索數據對象。
Athena 引擎成功運行查詢並將結果返回給客戶端。
解決方案操作指南
該操作指南包括五個部分,將指導您完成創建權限集、將權限集分配給 AWS 帳戶、使用 Lake Formation 管理權限集訪問,以及設置第三方 SQL 客戶端(如 SQL Workbench)以連接到您的數據存儲並通過 Athena 查詢您的數據的過程。
步驟 1:聯邦入職
聯邦入職是在 IAM 身份中心帳戶內進行的。作為聯邦入職的一部分,您需要創建 IAM 身份中心用戶和組。組是一組擁有相同安全權利和權限的人。您可以創建組並將用戶添加到組中。創建一個 IAM 身份中心組用於敏感數據,另一個用於非敏感數據,以便為不同類別的數據集提供明確的訪問權限。您可以將 IAM 身份中心權限集的訪問權限分配給用戶或組。
要進行聯邦入職:
使用 IAM 身份中心帳戶打開 AWS 管理控制台並轉到 IAM 身份中心。
選擇組。
選擇創建組。
輸入組名和描述。
選擇創建組。
要將用戶添加為組的成員:
打開 IAM 身份中心控制台。
選擇組。
選擇您想要更新的組名稱。
在組詳細信息頁面上,在“此組中的用戶”下,選擇“將用戶添加到組”。
在“將用戶添加到組”頁面上,在“其他用戶”下,找到您想要添加為成員的用戶,並選中每個用戶旁邊的復選框。
選擇“將用戶添加到組”。

圖 2:將用戶分配到組
步驟 2:創建權限集
在此步驟中,創建兩個權限集(敏感-iam-角色和非敏感-iam-角色)。這些權限集可以分配給 IAM 身份中心中的用戶或組,授予他們對 AWS 帳戶資源的特定訪問權限。
要創建自定義權限集:
在 IAM 身份中心管理員帳戶中,在多帳戶權限下,選擇權限集。
選擇創建權限集。
在選擇權限集類型頁面上,在權限集類型下,選擇自定義權限集。

圖 3:選擇權限集
選擇下一步。
在指定策略和權限邊界頁面上,展開內聯策略以添加自定義 JSON 格式的策略文本。
插入以下策略並更新 S3 桶名稱 (<s3-bucket-name>)、AWS 區域 (<region>) 帳戶 ID (<account-id>)、CloudWatch 警報名稱 (<AlarmName>)、Athena 工作組名稱(敏感或非敏感) (<WorkGroupName>)、KMS 密鑰別名名稱 (<KMS-key-alias-name>) 和組織 ID (<aws-PrincipalOrgID>)。
更新自定義策略以添加相應的敏感和非敏感 IAM 角色的 Athena 工作組 ARN。
注意:請參閱文檔以獲取有關 AWS 全局條件上下文鍵的信息。
選擇下一步。
在指定權限集詳細信息頁面上,輸入一個名稱以識別此權限集在 IAM 身份中心中的名稱。您為此權限集指定的名稱將顯示在 AWS 訪問門戶中作為可用角色。用戶登錄到 AWS 訪問門戶,選擇 AWS 帳戶,然後選擇角色。
選擇下一步。
在審查並創建頁面上,審查您所做的選擇,然後選擇創建。
步驟 3:將權限集分配給 AWS 帳戶
您可以通過附加和分離權限集來向 IAM 用戶或組添加和刪除權限集。權限集定義身份可以對哪些 AWS 資源執行哪些操作。
要將權限集分配給 AWS 帳戶:
在 IAM 身份中心管理員帳戶中,在多帳戶權限下,選擇 AWS 帳戶。
在 AWS 帳戶頁面上,選擇一個或多個您想要分配單點登錄訪問的 AWS 帳戶。
選擇分配用戶或組。

圖 4:選擇用戶和組
在將用戶和組分配到“<AWS 帳戶名稱>”頁面上,對於所選用戶和組,選擇您想要為其創建權限集的用戶。選擇下一步。
選擇權限集:在將權限集分配給“AWS-account-name”頁面上,選擇一個或多個權限集。
在審查並提交分配到 AWS-account-name 頁面上,對於審查和提交,選擇提交。
步驟 4:授予 IAM(單點登錄)角色權限
數據湖管理員擁有授予主體(包括自己)對數據目錄資源的權限的廣泛能力。這包括管理數據湖的訪問控制和權限的能力。當您在特定數據目錄表上授予 Lake Formation 權限時,您還可以包括數據過濾規範。這使您能夠進一步限制對表中某些數據的訪問,根據這些過濾規則限制用戶在查詢結果中可以看到的內容。
要授予 IAM 角色權限:
在 Lake Formation 控制台中,在導航窗格中的權限下,選擇數據湖權限,然後選擇授予。
要授予數據庫權限給 IAM 角色:
在主要原則下,選擇 IAM 角色名稱(例如,Sensitive-IAM-Role)。
在命名數據目錄資源下,轉到數據庫並選擇一個數據庫(例如,demo)。

圖 5:選擇 IAM 角色和數據庫
在數據庫權限下,選擇描述,然後選擇授予。

圖 6:將數據庫權限授予 IAM 角色
要將表權限授予 IAM 角色:
重複前面程序的第 1 步和第 2 步。
在表 – 可選下,選擇一個表名(例如,demo2)。

圖 7:選擇數據庫中的表以授予訪問權限
選擇所需的表權限(例如,選擇和描述),然後選擇授予。

圖 8:授予數據庫中的表的訪問權限
重複步驟 1 到 4,為非敏感 IAM 角色授予相應數據庫和表的訪問權限。
步驟 5:使用 JDBC 進行客戶端設置
您可以使用 JDBC 連接將 Athena 和 SQL 客戶端應用程序(例如,PyCharm 或 SQL Workbench)連接起來,以啟用對 Athena 從 Amazon S3 數據庫返回的數據的分析和報告。要使用 Athena JDBC 驅動程序,您必須從 JAR 文件中指定驅動程序類。此外,您還必須傳遞一些參數以更改身份驗證機制,以便使用 athena-sts-auth 庫:
S3 輸出位置 – Athena 服務可以將其輸出寫入 S3 的位置。例如,s3://path/to/query/bucket/。
IAM 身份中心管理員可以配置 AWS 訪問門戶的會話持續時間。會話持續時間可以設置為最少 15 分鐘到最多 90 天。
要設置 PyCharm
從 Athena JDBC 3.x 驅動程序安裝 Athena JDBC 3.x 驅動程序。
在左側導航窗格中,選擇 JDBC 3.x,然後選擇入門。選擇 Uber JAR 下載包含驅動程序及其依賴項的 .jar 文件。

圖 9:下載 Athena JDBC jar
打開 PyCharm 並創建一個新項目。
輸入項目的名稱
選擇所需的項目位置
選擇創建

圖 10:在 PyCharm 中創建新項目
配置數據源和驅動程序。選擇數據源,然後選擇加號或新建以配置新的數據源和驅動程序。

圖 11:添加數據庫源屬性
通過選擇驅動程序選項卡,然後選擇加號以添加新驅動程序來配置 Athena 驅動程序。

圖 12:添加數據庫驅動程序
在驅動程序文件下,上傳您在第 1 步中下載的自定義 JAR 文件。選擇 Athena 類下拉選單。輸入驅動程序的名稱(例如 Athena JDBC 驅動程序)。然後選擇應用。

圖 13:添加數據庫驅動程序文件
配置新的數據源。選擇加號,然後從驅動程序下拉選單中選擇您的驅動程序名稱。
輸入數據源名稱(例如,Athena Demo)。對於身份驗證方法,選擇用戶和密碼。然後選擇應用。

圖 14:創建項目數據源配置文件
選擇 SSH/SSL 標籤並選擇使用 SSL。驗證 IDE、JAVA 和系統的信任庫選項均已選中。然後選擇應用。

圖 15:啟用數據源配置文件 SSL
選擇選項標籤,然後選擇單一會話模式。然後選擇應用。

圖 16:在 PyCharm 中配置單一會話模式
選擇常規標籤並輸入 JDBC 和單點登錄 URL。以下是基於 SAML 應用程序的示例 JDBC URL:
選擇應用。
選擇測試連接。如果配置文件已過期,請通過運行 aws sso login –profile <profile-name> 並使用相應的配置文件刷新單點登錄會話。

圖 17:測試數據源連接
連接成功後,選擇架構選項卡並選擇所有數據庫和所有架構。

圖 18:選擇數據源數據庫和架構
運行示例測試查詢:SELECT <table-names> FROM <database-name> limit 10;
驗證憑證和權限是否正常工作。
要設置 SQL Workbench
打開 SQL Workbench。
通過選擇文件然後管理驅動程序來配置 Athena 驅動程序。
輸入 Athena JDBC 驅動程序作為名稱,並設置庫以瀏覽您下載驅動程序的位置。輸入 amazonaws.athena.jdbc.AthenaDriver 作為類名稱。
輸入以下 URL,將 <name-of-the-WorkGroup> 替換為您的工作組名稱。
選擇確定。
運行測試查詢,將 <table-names> 和 <database-name> 替換為您的表和數據庫名稱:
驗證憑證和權限是否正常工作。
結論
在這篇文章中,我們介紹了如何使用 JDBC 驅動程序從第三方 SQL 客戶端工具連接到 Athena。您能夠在不創建 IAM 用戶或任何需要存儲在開發人員工作站上的長期憑證的情況下設置這一切。您學會了如何配置 IAM 身份中心用戶和組,創建權限集,並將權限集分配給 AWS 帳戶。您還學會了如何使用 Lake Formation 授予單點登錄角色權限,以為不同類別的數據集創建明確的訪問權限並通過 SQL 客戶端工具(如 PyCharm)連接到 Athena。該設置也可以與其他支持的身份來源一起使用,例如 IAM 身份中心、自我管理或本地 Active Directory,或外部 IdP。
如果您對這篇文章有反饋,請在下面的評論區提交評論。如果您對這篇文章有疑問,請聯繫 AWS 支持。