

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

# 將 Athena 連線至 IAM Identity Center
<a name="using-trusted-identity-propagation-setup"></a>

下節列出將 Athena 連線至 IAM Identity Center 的程序。

## 設定可信權杖發行者
<a name="using-trusted-identity-propagation-step1"></a>

遵循[設定可信權杖發行者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html)指南，以便設定可信權杖發行者。這將建立 AWS IAM Identity Center。

**注意**  
對於**提供者問題**，選擇 **OpenID Connect**。在**提供者 URL** 中，輸入身分提供者的發行者 URL。對於**對象**，指定您應用程式身分提供者發出的用戶端 ID。  
 

複製 IAM Identity Provider 的應用程式資源名稱 AWS (ARN)。如需相關資訊，請參閱《[身分提供者和聯合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)》。

## 設定 IAM 角色
<a name="using-trusted-identity-propagation-step2"></a>

### 設定 IAM 應用程式角色
<a name="using-trusted-identity-propagation-step2-application-role"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇**角色**，然後選擇**建立角色**。

1. 對於**信任的實體類型**，選擇**自訂信任政策**：

   1. 對於**聯合主體**，新增您在可信權杖發行者設定期間複製的 AWS IAM 身分提供者的 ARN。

   1. 對於政策條件，從外部聯合身分提供者新增對象。

1. 新增下列內嵌政策，以授予使用者對 [CreateTokenWithIAM](https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateTokenWithIAM.html)、[ListTagsForResource](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListTagsForResource.html) 和 [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) 許可的存取權。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "athena:ListTags*",
                   "sso:ListTags*"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**注意**  
`CreateTokenWithIam` 許可會在客戶自管的 IAM Identity Center 應用程式中授予。

1. 複製應用程式角色的 ARN。

### 設定 IAM 存取角色
<a name="using-trusted-identity-propagation-step2-access-role"></a>

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中，選擇**角色**，然後選擇**建立角色**。

1. 對於**信任的實體類型**，選擇**自訂信任政策**：

   1. 對於**聯合主體**，新增您在可信權杖發行者設定期間複製的 AWS IAM Identity Center 的 ARN。

   1. 對於 **AWS 主體**，新增在 IAM 應用程式角色設定期間複製的 AWS IAM 應用程式角色 ARN。

1. 新增下列**內嵌政策**，以授予驅動器工作流程的存取權：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "athena:StartQueryExecution",
                   "athena:GetQueryExecution",
                   "athena:GetQueryResults",
                   "athena:ListWorkGroups",
                   "athena:ListDataCatalogs",
                   "athena:ListDatabases",
                   "athena:ListTableMetadata"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "glue:GetDatabase",
                   "glue:GetDatabases",
                   "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": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 複製存取角色的 ARN。

## 設定 AWS IAM Identity Center 客戶受管應用程式
<a name="using-trusted-identity-propagation-step3"></a>

若要設定客戶受管應用程式，請遵循[設定客戶受管 OAuth 2.0 應用程式以取得受信任身分傳播中的步驟](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html)，並考量 Athena 的下列事項。
+ 對於**標籤**，新增下列鍵值對：
  + **索引鍵** – **AthenaDriverOidcAppArn**
  + **值** – 在 IAM 存取角色設定期間複製的 **AccessRoleARN**。
+ [指定應用程式登入](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html#customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2-specify-application-credentials)資料時，請新增您在 AWS IAM 應用程式角色設定期間複製的 IAM 應用程式角色 ARN。
+ 對於**可接收請求的應用程式**，選擇 **AWS-Lake-Formation-AWS-Glue-Data-Catalog-<account-id>**。
+ 針對**要套用的存取範圍**，選取啟用 IAM 的工作群組的 **lakeformation：query**，或選取啟用 Identity Center 的工作群組的 **lakeformation：query**、**athena：workgroup：read\_write** 和 **s3：access\_grants：read\_write**。

## 設定工作群組關聯
<a name="using-trusted-identity-propagation-step4"></a>

1. 在 Athena 主控台導覽窗格中，選擇 **Workgroups** (工作群組)。

1. 從清單中選擇工作群組，然後開啟**標籤**索引標籤。

1. 選擇**管理標籤**，然後輸入下列內容：

   1. **索引鍵**：`AthenaDriverOidcAppArn`

   1. **值** – AWS IAM Identity Center 應用程式的 ARN。

1. 選擇**儲存**。

管理員完成一次性設定後，他們可以將基本連線詳細資訊分發給使用者。使用者需要這五個強制性參數才能執行 SQL 工作負載：

1. **ApplicationRoleARN** – 應用程式角色的 ARN

1. **JwtWebIdentityToken** – 用於身分驗證的 JWT 權杖

1. **WorkgroupARN** – Athena 工作群組的 ARN

1. **JwtRoleSessionName** – JWT 角色的工作階段名稱

1. **CredentialsProvider** – 憑證提供者組態

**注意**  
我們已透過策略標記簡化連線字串組態。透過正確標記 Athena 工作群組和 AWS IAM Identity Center 客戶受管應用程式，管理員無需使用者提供 `AccessRoleArn`和 `CustomerIdcApplicationArn`。外掛程式會使用應用程式角色來尋找必要的標籤，並擷取其工作流程的對應 ARN 值，進而自動處理此問題。  
管理員仍然可以視需要調整應用程式角色許可，從而讓使用者在連線字串中提供 `AccessRoleArn` 或 `CustomerIdcApplicationArn`。

## 使用已啟用可信身分傳播的 Athena 驅動器執行查詢
<a name="using-trusted-identity-propagation-step5"></a>

下載要使用的最新版本驅動器。如需有關 JDBC 安裝的詳細資訊，請參閱 [JDBC 3.x 驅動器入門](jdbc-v3-driver-getting-started.md)。您可以根據支援的平台選擇安裝 ODBC 驅動器。如需詳細資訊，請參閱[ODBC 2.x 驅動器入門](odbc-v2-driver-getting-started.md)。根據您要使用的驅動器，提供下文列出的參數：
+ [JDBC 身分驗證外掛程式連線參數](jdbc-v3-driver-jwt-tip-credentials.md)
+ [ODBC 身分驗證外掛程式連線參數](odbc-v2-driver-jwt-tip.md)

**注意**  
具有驅動器的可信身分傳播僅適用於 JDBC 3.6.0 版或更高版本和 ODBC 2.0.5.0 版或更高版本。

## 搭配使用 Athena 驅動器與具有 DBeaver 的可信身分傳播
<a name="using-trusted-identity-propagation-step6"></a>

1. 從 Athena 下載具有相依性的最新 JDBC jar。如需詳細資訊，請參閱[Athena JDBC 3.x 驅動程式](jdbc-v3-driver.md)。

1. 在電腦上開啟 DBeaver 應用程式。

1. 導覽至螢幕頂端的**資料庫**選單，然後選擇**驅動器管理員**。

1. 選擇**新增**，然後選擇**程式庫**。

1. 新增最新的驅動器，然後選擇**尋找類別**。這將為您提供類似 `com.amazon.athena.jdbc.AthenaDriver` 的檔案路徑。

1. 開啟**設定**索引標籤並提供下列欄位

   1. **驅動器名稱** – Athena JDBC 可信身分傳播

   1. **類別名稱**– `com.amazon.athena.jdbc.AthenaDriver`

   1. 選取選項**無身分驗證**。

1. 選擇**連接至資料庫**並尋找 Athena JDBC 可信身分傳播。這會將您導向至 JDBC URL。如需詳細資訊，請參閱[設定驅動程式](jdbc-v3-driver-getting-started.md#jdbc-v3-driver-configuring-the-driver)。

1. 提供下列詳細資訊

   1. **工作群組** – 您要在其中執行查詢的工作群組。如需有關工作群組的資訊，請參閱[工作群組](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html)。

   1. **區域** – 將執行查詢 AWS 區域 的 。如需區域清單，請參閱 [Amazon Athena 端點和配額](https://docs.aws.amazon.com/general/latest/gr/athena.html)。

   1. **OutputLocation** – Amazon S3 中您要存放查詢結果的位置。如需有關輸出位置的資訊，請參閱 [ResultConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultConfiguration.html)。

   1. **CredentialsProvider** – 輸入 `JWT_TIP`。

   1. **ApplicationRoleArn** – 要啟用 `AssumeRoleWithWebIdentity` 的角色的 ARN。如需 ARN 角色的詳細資訊，請參閱 AWS Security Token Service API 參考中的 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)。

   1. **WorkgroupArn** – 將執行查詢的工作群組的 ARN。其必須與**工作群組**欄位中提供的工作群組相同。如需有關工作群組的資訊，請參閱[工作群組](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html)。

   1. **JwtRoleSessionName** – 使用 JWT 憑證進行身分驗證時的工作階段名稱。其可以是您選擇的任何名稱。

   1. **JwtWebIdentityToken** – 從外部聯合身分提供者獲得的 JWT 權杖。此權杖可用於向 Athena 進行身分驗證。

      ```
      jdbc:athena://Workgroup={{<value>}};Region={{<region>}};OutputLocation={{<location>}};CredentialsProvider=JWT_TIP;ApplicationRoleArn={{<arn>}};WorkgroupArn={{<arn>}};JwtRoleSessionName=JDBC_TIP_SESSION;JwtWebIdentityToken={{<token>}};
      ```

1. 選擇**確定**並關閉視窗。完成此步驟後，DBeaver 會開始載入中繼資料，而您應該會開始看到您的目錄、資料庫和資料表逐漸被填入。
**注意**  
如果權杖中存在 JTI 宣告，並且您在選擇**確定**之前選擇**測試連線**，則可防止重複使用相同的 JTI 進行權杖交換。如需詳細資訊，請參閱[可信權杖發行者的先決條件和考量事項](https://docs.aws.amazon.com/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#trusted-token-issuer-prerequisites)。為了處理此問題，JDBC 會實作記憶體快取，而其生命週期取決於主要驅動器執行個體。對於 ODBC，[檔案快取](odbc-v2-driver-jwt-tip.md#odbc-v2-driver-jwt-tip-file-cache)是選擇性存在的，可快取和重複使用臨時憑證，以減少工作階段生命週期期間使用的 Web 身分權杖數量。

1. 開啟 **SQL 查詢編輯器**，然後開始執行查詢。請參閱 [Cloudtrail 日誌](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)，驗證使用者的傳播身分。