

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

# 教學課程：使用 Lake Formation 和 JDBC 設定 Okta 使用者對 Athena 的聯合存取
<a name="security-athena-lake-formation-jdbc-okta-tutorial"></a>

本教學課程說明如何設定 Okta AWS Lake Formation、、 AWS Identity and Access Management permissions 和 Athena JDBC 驅動程式，以啟用 Athena 的 SAML 型聯合使用。Lake Formation 為以 SAML 為基礎的使用者提供對 Athena 中可用資料的精細存取控制。若要設定此組態，教學課程會使用 Okta 開發人員主控台、IAM AWS 和 Lake Formation 主控台，以及 SQL Workbench/J 工具。
<a name="security-athena-lake-formation-jdbc-okta-tutorial-prerequisites"></a>
**先決條件**  
此教學課程假設您已完成下列作業：
+ 已建立 Amazon Web Services 帳戶。若要建立帳戶，請造訪 [Amazon Web Services 首頁](https://aws.amazon.com/)。
+ 在 Amazon S3 中為 Athena [設定查詢結果位置](query-results-specify-location.md)。
+ 向 Lake Formation [註冊 Amazon S3 資料儲存貯體位置](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html)
+ 在 [AWS Glue 資料目錄](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) (指向您在 Amazon S3 中的資料) 上定義[資料庫](https://docs.aws.amazon.com/glue/latest/dg/define-database.html)和[資料表](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html)。
  + 如果您尚未定義資料表，請[執行 AWS Glue 爬蟲程式](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)[或使用 Athena 為您要存取的資料定義資料庫和一或多個資料表](work-with-data.md)。
  + 本教學課程使用以[紐約計程車行程資料集](https://registry.opendata.aws/nyc-tlc-trip-records-pds/) (可於 [AWS上的開放資料登記處](https://registry.opendata.aws/)取得) 為基礎的資料表。本教學課程會使用資料庫名稱 `tripdb` 和資料表名稱 `nyctaxi`。

**Topics**
+ [步驟 1：建立 Okta 帳戶](#security-athena-lake-formation-jdbc-okta-tutorial-step-1-create-an-okta-account)
+ [步驟 2：將使用者和群組新增至 Okta](#security-athena-lake-formation-jdbc-okta-tutorial-step-2-set-up-an-okta-application-for-saml-authentication)
+ [步驟 3：設定用於 SAML 身分驗證的 Okta 應用程式](#security-athena-lake-formation-jdbc-okta-tutorial-step-3-set-up-an-okta-application-for-saml-authentication)
+ [步驟 4：建立 AWS SAML 身分提供者和 Lake Formation 存取 IAM 角色](#security-athena-lake-formation-jdbc-okta-tutorial-step-4-create-an-aws-saml-identity-provider-and-lake-formation-access-IAM-role)
+ [步驟 5：將 IAM 角色和 SAML 身分提供者新增至 Okta 應用程式](#security-athena-lake-formation-jdbc-okta-tutorial-step-5-update-the-okta-application-with-the-aws-role-and-saml-identity-provider)
+ [步驟 6：透過 授予使用者和群組許可 AWS Lake Formation](#security-athena-lake-formation-jdbc-okta-tutorial-step-6-grant-permissions-through-aws-lake-formation)
+ [步驟 7：驗證透過 Athena JDBC 用戶端的存取](#security-athena-lake-formation-jdbc-okta-tutorial-step-7-verify-access-through-athena-jdbc-client)
+ [結論](#security-athena-lake-formation-jdbc-okta-tutorial-conclusion)
+ [相關資源](#security-athena-lake-formation-jdbc-okta-tutorial-related-resources)

## 步驟 1：建立 Okta 帳戶
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-1-create-an-okta-account"></a>

本教學課程使用 Okta 作為以 SAML 為基礎的身分提供者。如果您還沒有 Okta 帳戶，您可以建立免費的帳戶。需要 Okta 帳戶，以便您可以建立用於 SAML 身分驗證的 Okta 應用程式。

**若要建立 Okta 帳戶**

1. 若要使用 Okta，請導覽至 [Okta 開發人員註冊頁面](https://developer.okta.com/signup/)並建立免費的 Okta 試用帳戶。開發人員版服務免費提供，最高可達 Okta 在 [developer.okta.com/pricing](https://developer.okta.com/pricing) 指定的限制。

1. 收到啟用電子郵件時，請啟用您的帳戶。

   Okta 網域名稱將會指派給您。儲存網域名稱以供參考。稍後，您可以使用 JDBC 字串 (連接到 Athena) 中的網域名稱 (*<okta-idp-domain>*)。

## 步驟 2：將使用者和群組新增至 Okta
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-2-set-up-an-okta-application-for-saml-authentication"></a>

在此步驟中，您可以使用 Okta 主控台來執行以下任務：
+ 建立兩個 Okta 使用者。
+ 建立兩個 Okta 群組。
+ 在每個 Okta 群組中新增一個 Okta 使用者。

**若要將使用者新增至 Okta**

1. 啟用 Okta 帳戶之後，請以管理使用者身分登入指派的 Okta 網域。

1. 在左側導覽窗格中，選擇 **Directory** (目錄)，然後選擇 **People** (人員)。

1. 選擇 **Add Person** (新增人員)，新增一個將透過 JDBC 驅動程式存取 Athena 的新使用者。  
![\[選擇 Add Person (新增人員)。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-3.png)

1. 在 **Add Person** (新增人員) 對話方塊中，輸入所需資訊。
   + 輸入 **First name** (名字) 和 **Last name** (姓氏) 的值。本教學課程使用 *athena-okta-user*。
   + 輸入 **Username** (使用者名稱) 和 **Primary email** (主要電子郵件地址)。本教學課程使用 *athena-okta-user@anycompany.com*。
   + 對於 **Password** (密碼)，選擇 **Set by admin** (由管理員設定)，然後提供密碼。本教學課程會清除 **User must change password on first login** (使用者首次登入時必須變更密碼) 的選項；您的安全需求可能會有所不同。  
![\[將使用者新增至 Okta 應用程式。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4.png)

1. 選擇 **Save and Add Another** (儲存並新增另一個)。

1. 輸入另一個使用者的資訊。此範例會新增業務分析師使用者 *athena-ba-user@anycompany.com*。  
![\[將使用者新增至 Okta 應用程式。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4a.png)

1. 選擇**儲存**。

在下列程序中，您可以新增 "Business Analysts" (業務分析師) 群組和 "Developer" (開發人員) 群組，透過 Athena JDBC 驅動程式提供兩個 Okta 群組的存取權限。

**若要新增 Okta 群組**

1. 在 Okta 導覽窗格中選擇 **Directory** (目錄)，然後選擇 **Groups** (群組)。

1. 在 **Groups** (群組) 頁面上，選擇 **Add Group** (新增群組)。  
![\[選擇 Add Group (新增群組)。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4c.png)

1. 在 **Add Group** (新增群組) 對話方塊中，輸入所需資訊。
   + 在 **Name** (名稱) 中輸入 *lf-business-analyst*。
   + 在 **Group Description** (群組描述) 中輸入 *Business Analysts* (業務分析師)。  
![\[新增 Okta 群組。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4d.png)

1. 選擇 **Add Group** (新增群組)。

1. 在 **Groups** (群組) 頁面上，再次選擇 **Add Group** (新增群組)。現在輸入開發人員群組的資訊。

1. 輸入所需資訊。
   + 在 **Name** (名稱) 中輸入 *lf-developer*。
   + 在 **Group Description** (群組描述) 中輸入 *Developers* (開發人員)。

1. 選擇 **Add Group** (新增群組)。

現在您已擁有兩個使用者和兩個群組，可以在每個群組中新增使用者。

**若要將使用者新增至群組**

1. 在 **Groups** (群組) 頁面上，選擇您剛建立的 **lf-developer** 群組。您需將您建立為開發人員的 Okta 使用者之一新增至此群組。  
![\[選擇 lf-developer。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4f.png)

1. 選擇 **Manage People** (管理人員)。  
![\[選擇 Manage People (管理人員)。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4g.png)

1. 從 **Not Members** (非成員) 清單，選擇 **athena-okta-user**。  
![\[選擇要新增至成員清單的使用者。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4h.png)

   使用者的項目會從左側的 **Not Members** (非成員) 清單移動至右側的 **Members** (成員) 清單。  
![\[Okta 使用者已新增至 Okta 群組。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4i.png)

1. 選擇**儲存**。

1. 選擇 **Back to Group** (返回群組)，或選擇 **Directory** (目錄)，接著選擇 **Groups** (群組)。

1. 選擇 **lf-business-analyst** 群組。

1. 選擇 **Manage People** (管理人員)。

1. 將 **athena-ba-user** 新增至 **lf-business-analyst** 群組的 **Members** (成員) 清單，然後選擇 **Save** (儲存)。

1. 選擇 **Back to Group** (返回群組)，或依序選擇 **Directory** (目錄)、**Groups** (群組)。

   **Groups** (群組) 頁面現在顯示每個群組都有一個 Okta 使用者。  
![\[Okta 主控台中的每個 Okta 群組均已新增一個使用者。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4j.png)

## 步驟 3：設定用於 SAML 身分驗證的 Okta 應用程式
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-3-set-up-an-okta-application-for-saml-authentication"></a>

在此步驟中，您需使用 Okta 開發人員主控台以執行下列任務：
+ 新增 SAML 應用程式以搭配 使用 AWS。
+ 將應用程式指派給 Okta 使用者。
+ 將應用程式指派給 Okta 群組。
+ 下載產生的身分提供者中繼資料，以便稍後與 AWS搭配使用。

**若要新增應用程式以進行 SAML 身分驗證**

1. 在 Okta 導覽窗格中，選擇 **Applications** (應用程式)、**Applications** (應用程式)，以便您可設定 Okta 應用程式以進行對 Athena 的 SAML 身分驗證。

1. 按一下 **Browse App Catalog** (瀏覽應用程式目錄)。

1. 在搜尋方塊中，輸入 **Redshift**。

1. 選擇 **Amazon Web Services Redshift**。本教學課程中的 Okta 應用程式對 Amazon Redshift 使用現有的 SAML 整合。  
![\[選擇 Amazon Web Services Redshift。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-7.png)

1. 在 **Amazon Web Services Redshift** 頁面上，選擇 **Add** (新增) 來為 Amazon Redshift 建立以 SAML 為基礎的應用程式。  
![\[選擇 Add (新增) 來建立以 SAML 為基礎的應用程式。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-8.png)

1. 在 **Application** (應用程式) 標籤中輸入 `Athena-LakeFormation-Okta`，然後選擇 **Done** (完成)。  
![\[輸入 Okta 應用程式的名稱。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-9.png)

現在您已建立 Okta 應用程式，您可以將其指派給您建立的使用者和群組。

**若要將應用程式指派給使用者和群組**

1. 在 **Applications** (應用程式) 頁面上，選擇 **Athena-LakeFormation-Okta** 應用程式。

1. 在 **Assignments** (指派) 索引標籤上，依序選擇 **Assign** (指派)、**Assign to People** (指派給人員)。  
![\[依序選擇 Assign (指派)、Assign to People (指派給人員)。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-10.png)

1. 在 **Assign Athena-LakeFormation-Okta to People** (將 Athena-LakeFormation-Okta 指派給人員) 對話方塊中，尋找您之前建立的 **athena-okta-user** 使用者。

1. 選擇 **Assign** (指派) 將使用者指派給應用程式。  
![\[選擇 Assign (指派)。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-11.png)

1. 選擇 **Save and Go Back** (儲存並返回)。

1. 選擇 **Done** (完成)。

1. 在 **Athena-LakeFormation-Okta** 應用程式的 **Assignments** (指派) 索引標籤上，依序選擇 **Assign** (指派)、**Assign to Groups** (指派給群組)。

1. 對於 **lf-business-analyst**，選擇 **Assign** (指派)，將 **Athena-LakeFormation-Okta** 應用程式指派給 **lf-business-analyst** 群組，然後選擇 **Done** (完成)。  
![\[將 Okta 應用程式指派給 Okta 使用者群組。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-12b.png)

   該群組會出現在應用程式的群組清單中。  
![\[Okta 應用程式指派給 Okta 群組。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-12c.png)

現在您已準備好下載身分提供者應用程式中繼資料，以與 AWS搭配使用。

**若要下載應用程式中繼資料**

1. 選擇 Okta 應用程式 **Sign On** (登入) 索引標籤，然後以滑鼠右鍵按一下 **Identity Provider metadata** (身分提供者中繼資料)。  
![\[在 Identity Provider metadata (身分提供者中繼資料) 上按一下滑鼠右鍵。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-13.png)

1. 選擇 **Save Link As** (另存連結)，將 XML 格式的身分提供者中繼資料儲存至檔案中。指定一個您認識的名稱 (例如 `Athena-LakeFormation-idp-metadata.xml`)。  
![\[儲存身分提供者中繼資料。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-14.png)

## 步驟 4：建立 AWS SAML 身分提供者和 Lake Formation 存取 IAM 角色
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-4-create-an-aws-saml-identity-provider-and-lake-formation-access-IAM-role"></a>

在此步驟中，您可以使用 AWS Identity and Access Management (IAM) 主控台來執行下列任務：
+ 為 AWS建立身分提供者。
+ 為 Lake Formation 存取建立 IAM 角色。
+ 將 AmazonAthenaFullAccess 受管政策新增至該角色。
+ 將 Lake Formation 和 的政策 AWS Glue 新增至角色。
+ 將 Athena 查詢結果的政策新增至該角色。

**建立 AWS SAML 身分提供者**

1. 以 **Amazon Web Services 帳戶管理員**身分登入 **Amazon Web Services 帳戶****主控台**，並導覽至 **IAM** 主控台 ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))。

1. 在導覽窗格中，選擇 **Identity providers** (身分提供者)，然後按一下 **Add provider** (新增供應商)。

1. 在 **Configure provider** (設定供應商) 畫面上，輸入以下資訊：
   + 對於 **Provider type** (供應商類型)，選擇 **SAML**。
   + 對於 **Provider name** (供應商名稱)，輸入 `AthenaLakeFormationOkta`。
   + 對於 **Metadata document** (中繼資料文件)，使用 **Choose file** (選擇檔案) 選項，以上傳您下載的身分提供者 (IdP) 中繼資料 XML 檔案。

1. 選擇 **Add provider** (新增供應商)。

接著，您可以建立 IAM 角色以進行 AWS Lake Formation 存取。您可以將兩個內嵌政策新增至該角色。一個政策提供存取 Lake Formation 和 AWS Glue APIs的許可。另一個政策可用於存取 Athena 和在 Amazon S3 中的 Athena 查詢結果位置。

**建立用於 AWS Lake Formation 存取的 IAM 角色**

1. 在 IAM 主控台導覽窗格中，選擇 **Roles** (角色)，然後選擇 **Create role** (建立角色)。

1. 在 **Create role** (建立角色) 頁面上，執行以下步驟：  
![\[將 IAM 角色設定為使用 SAML 2.0。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-20.png)

   1. 對於 **Select type of trusted entity** (選取信任的實體類型)，選擇 **SAML 2.0 Federation** (SAML 2.0 聯合)。

   1. 對於 **SAML provider** (SAML 供應商)，選取 **AthenaLakeFormationOkta**。

   1. 對於 **SAML 供應商**，選取**允許程式設計和 AWS 管理主控台 存取**選項。

   1. 選擇 **Next: Permissions** (下一步：許可)。

1. 在 **Attach Permissions policies** (連接許可政策) 頁面上，對於 **Filter policies** (篩選條件政策)，輸入 **Athena**。

1. 選取名為 **AmazonAthenaFullAccess** 的受管政策，然後選擇 **Next: Tags** (下一步：標籤)。  
![\[將 AmazonAthenaFullAccess 受管政策附加至 IAM 角色。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-21.png)

1. 在 **Add tags** (新增標籤) 頁面上，選擇 **Next: Review** (下一步：檢閱)。

1. 在 **Review** (檢閱) 頁面上，對於 **Role name** (角色名稱)，輸入角色的名稱 (例如 *Athena-LakeFormation-OktaRole*)，然後選擇 **Create role** (建立角色)。  
![\[輸入 IAM 角色的名稱。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-22.png)

接著，您可以新增內嵌政策，允許存取 Amazon S3 中的 Lake Formation、 AWS Glue APIs和 Athena 查詢結果。

每當您使用 IAM 政策時，請務必遵循 IAM 最佳實務。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

**將內嵌政策新增至 Lake Formation 和 的角色 AWS Glue**

1. 從 IAM 主控台的角色清單中，選擇新建立的 `Athena-LakeFormation-OktaRole`。

1. 在角色的 **Summary** (摘要) 頁面之 **Permissions** (許可) 索引標籤上，選擇 **Add inline policy** (新增內嵌政策)。

1. 在 **Create policy** (建立政策) 頁面上，選擇 **JSON**。

1. 新增內嵌政策 (如下所示)，該政策提供對 Lake Formation 和 AWS Glue API 的存取權限。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": [
               "lakeformation:GetDataAccess",
               "glue:GetTable",
               "glue:GetTables",
               "glue:GetDatabase",
               "glue:GetDatabases",
               "glue:CreateDatabase",
               "glue:GetUserDefinedFunction",
               "glue:GetUserDefinedFunctions"
           ],
           "Resource": "*"
       }
   }
   ```

------

1. 選擇 **Review policy** (檢閱政策)。

1. 對於 **Name** (名稱)，輸入政策名稱 (例如 **LakeFormationGlueInlinePolicy**)。

1. 選擇 **Create policy** (建立政策)。

**若要針對 Athena 查詢結果位置將內嵌政策新增至角色**

1. 在 `Athena-LakeFormation-OktaRole` 角色 的 **Summary** (摘要) 頁面之 **Permissions** (許可) 索引標籤上，選擇 **Add inline policy** (新增內嵌政策)。

1. 在 **Create policy** (建立政策) 頁面上，選擇 **JSON**。

1. 新增內嵌政策 (如下所示)，該政策允許對 Athena 查詢結果位置進行角色存取。將範例中的 *<athena-query-results-bucket>* 預留位置取代為您的 Amazon S3 儲存貯體名稱。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AthenaQueryResultsPermissionsForS3",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:PutObject",
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::<athena-query-results-bucket>",
                   "arn:aws:s3:::<athena-query-results-bucket>/*"
               ]
           }
       ]
   }
   ```

------

1. 選擇 **Review policy** (檢閱政策)。

1. 對於 **Name** (名稱)，輸入政策名稱 (例如 **AthenaQueryResultsInlinePolicy**)。

1. 選擇 **Create policy** (建立政策)。

接下來，您要複製 Lake Formation 存取角色的 ARN 和您建立的 SAML 供應商的 ARN。在本教學課程的下一節中設定 Okta SAML 應用程式時，這些都是必要的程序。

**若要複製角色 ARN 和 SAML 身分提供者 ARN**

1. 在 IAM 主控台中，在 `Athena-LakeFormation-OktaRole` 角色的 **Summary** (摘要) 頁面上，選擇 **Role ARN** (角色 ARN) 旁的 **Copy to clipboard** (複製至剪貼簿) 圖示。ARN 採用下列格式：

   ```
   arn:aws:iam::<account-id>:role/Athena-LakeFormation-OktaRole
   ```

1. 安全地儲存完整的 ARN 以供日後參考。

1. 在 IAM 主控台導覽窗格中，選擇 **Identity providers** (身分提供者)。

1. 選擇 **AthenaLakeFormationOkta** 供應商。

1. 在 **Summary** (摘要) 頁面上，選擇 **Provider ARN** (供應商 ARN) 旁的 **Copy to clipboard** (複製至剪貼簿) 圖示。ARN 看起來應該如下所示：

   ```
   arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta
   ```

1. 安全地儲存完整的 ARN 以供日後參考。

## 步驟 5：將 IAM 角色和 SAML 身分提供者新增至 Okta 應用程式
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-5-update-the-okta-application-with-the-aws-role-and-saml-identity-provider"></a>

在此步驟中，您需返回 Okta 開發人員主控台並執行下列任務：
+ 將使用者和群組的 Lake Formation URL 屬性新增至 Okta 應用程式。
+ 將身分提供者的 ARN 和 IAM 角色的 ARN 新增至 Okta 應用程式。
+ 複製 Okta 應用程式 ID。連接至 Athena 的 JDBC 設定檔中需要 Okta 應用程式 ID。

**若要將使用者和群組的 Lake Formation URL 屬性新增至 Okta 應用程式**

1. 登入 Okta 開發人員主控台。

1. 選擇 **Applications** (應用程式) 索引標籤，然後選擇 `Athena-LakeFormation-Okta` 應用程式。

1. 選擇應用程式的 **Sign On** (登入) 索引標籤，然後選擇 **Edit** (編輯)。  
![\[編輯 Okta 應用程式。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-24.png)

1. 選擇 **Attributes (optional)** (屬性 (選填)) 以將其展開。  
![\[將使用者 Lake Formation URL 屬性新增至 Okta 應用程式。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-25.png)

1. 對於 **Attribute Statements (optional)** (屬性陳述式 (選填))，新增下列屬性：
   + 對於 **Name** (名稱)，輸入 **https://lakeformation.amazon.com/SAML/Attributes/Username**。
   + 對於 **Value** (值)，輸入 **user.login**

1. 在 **Group Attribute Statements (optional)** (群組屬性陳述式 (選填)) 下，新增下列屬性：
   + 對於 **Name** (名稱)，輸入 **https://lakeformation.amazon.com/SAML/Attributes/Groups**。
   + 對於 **Name format** (名稱格式)，輸入 **Basic**
   + 對於 **Filter** (篩選條件)，選擇 **Matches regex** (符合 regex)，然後在篩選條件方塊中輸入 **.\$1**。  
![\[將群組的 Lake Formation URL 屬性新增至 Okta 應用程式。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-25a.png)

1. 向下捲動至 **Advanced Sign-On Settings** (進階登入設定) 區段，您可以在此將身分提供者和 IAM 角色 ARN 新增至 Okta 應用程式。

**若要將身分提供者和 IAM 角色的 ARN 新增至 Okta 應用程式**

1. 對於 **Idp ARN 和角色 ARN**，以逗號分隔值格式輸入 AWS 身分提供者 ARN 和角色 ARN，格式為 *<saml-arn>*、*<role-arn>*。組合的字串看起來應該如下所示：

   ```
   arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta,arn:aws:iam::<account-id>:role/Athena-LakeFormation-OktaRole
   ```  
![\[在 Okta 應用程式中輸入身分提供者 ARN 和 IAM 角色 ARN。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-26.png)

1. 選擇**儲存**。

接下來，複製 Okta 應用程式 ID。您稍後需要此 ID，以用於連接至 Athena 的 JDBC 字串。

**若要尋找並複製 Okta 應用程式 ID**

1. 選擇 Okta 應用程式的 **General** (一般) 索引標籤。  
![\[選擇 Okta 應用程式的 General (一般) 索引標籤。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-27.png)

1. 向下捲動至 **App Embed Link** (應用程式內嵌連結) 區段。

1. 從 **Embed Link** (內嵌連結)，複製並安全地儲存 URL 的 Okta 應用程式 ID 部分。Okta 應用程式 ID 是 URL 中在 `amazon_aws_redshift/` 之後、下一個正斜線之前的部分。例如，如果 URL 包含 `amazon_aws_redshift/aaa/bbb`，則應用程式 ID 為 `aaa`。  
![\[複製 Okta 應用程式 ID。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-28.png)

**注意**  
無法使用嵌入的連結直接登入 Athena 主控台以查看資料庫。僅當您使用 JDBC 或 ODBC 驅動程式向 Athena 提交查詢時，才能識別 SAML 使用者和群組的 Lake Formation 許可。若要查看資料庫，您可以使用 SQL Workbench/J 工具，其使用 JDBC 驅動程式連接至 Athena。在 [步驟 7：驗證透過 Athena JDBC 用戶端的存取](#security-athena-lake-formation-jdbc-okta-tutorial-step-7-verify-access-through-athena-jdbc-client) 中有SQL Workbench/J 工具的說明。

## 步驟 6：透過 授予使用者和群組許可 AWS Lake Formation
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-6-grant-permissions-through-aws-lake-formation"></a>

在此步驟中，您可以使用 Lake Formation 主控台，將資料表的許可授予 SAML 使用者和群組。執行以下任務：
+ 指定 Okta SAML 使用者的 ARN 和資料表的相關使用者許可。
+ 指定 Okta SAML 群組的 ARN 和資料表的相關群組許可。
+ 確認您授予的許可。

**若要在 Lake Formation 中為 Okta 使用者授予許可**

1. 以資料湖管理員身分登入 AWS 管理主控台。

1. 開啟 Lake Formation 主控台，網址為 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 從導覽窗格中，選擇 **Tables** (資料表)，然後選取您要為其授予許可的資料表。本教學課程使用來自 `tripdb` 資料庫的 `nyctaxi` 資料表。  
![\[選擇您要為其授予許可的資料表。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-29.png)

1. 從 **Actions** (動作)，選擇 **Grant** (授予)。  
![\[選擇 Grant (授予)。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-30.png)

1. 在 **Grant permissions** (授予許可) 對話方塊中，輸入下列資訊：

   1. 在 **SAML 和 Amazon Quick 使用者和群組**下，以下列格式輸入 Okta SAML 使用者 ARN：

      ```
      arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta:user/<athena-okta-user>@<anycompany.com>       
      ```

   1. 對於 **Columns** (資料欄)、**Choose filter type** (選擇篩選條件類型)，選擇性地選擇 **Include columns** (包含資料欄) 或 **Exclude columns** (排除資料欄)。

   1. 使用篩選條件下的 **Choose one or more columns** (選擇一或多個資料欄) 下拉式清單，以指定您要包含或排除使用者的資料欄。

   1. 對於 **Table permissions** (資料表許可)，選擇 **Select** (選取)。本教學課程僅授予 `SELECT` 許可；您的需求可能會有所不同。  
![\[將表格和資料欄層級許可授予 Okta 使用者。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-31.png)

1. 選擇 **Grant** (授予)。

現在再針對 Okta 群組執行類似的步驟。

**若要在 Lake Formation 中為 Okta 群組授予許可**

1. 在 Lake Formation 主控台的 **Tables** (資料表) 頁面上，確定仍選取 **nyctaxi** 資料表。

1. 從 **Actions** (動作)，選擇 **Grant** (授予)。

1. 在 **Grant permissions** (授予許可) 對話方塊中，輸入下列資訊：

   1. 在 **SAML 和 Amazon Quick 使用者和群組**下，以下列格式輸入 Okta SAML 群組 ARN：

      ```
      arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta:group/lf-business-analyst
      ```

   1. 對於 **Columns** (資料欄)、**Choose filter type** (選擇篩選條件類型)，選擇 **Include columns** (包含資料欄)。

   1. 對於 **Choose one or more columns** (選擇一或多個資料欄)，選擇資料表的前三個資料欄。

   1. 對於 **Table permissions** (資料表許可)，選擇要授予的特定存取許可。本教學課程僅授予 `SELECT` 許可；您的需求可能會有所不同。  
![\[將資料表許可授予 Okta 群組。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-31b.png)

1. 選擇 **Grant** (授予)。

1. 若要確認您授予的許可，請選擇 **Actions** (動作)、**View permissions** (檢視許可)。  
![\[選擇 View permissions (檢視許可) 以確認授予的許可。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-32.png)

   `nyctaxi` 資料表的**資料許可**頁面會顯示 **athena-okta-user** 與 **lf-business-analyst** 群組的許可。  
![\[檢視授予 Okta 使用者和群組的許可。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-33.png)

## 步驟 7：驗證透過 Athena JDBC 用戶端的存取
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-7-verify-access-through-athena-jdbc-client"></a>

現在，您已經準備好使用 JDBC 用戶端，以 Okta SAML 使用者身分執行與 Athena 的測試連接。

在本節中，您需執行下列任務：
+ 準備測試用戶端 – 下載 Athena JDBC 驅動程式，安裝 SQL Workbench，然後將驅動程式新增至 Workbench。本教學課程使用 SQL Workbench 透過 Okta 身分驗證來存取 Athena，並驗證 Lake Formation 許可。
+ 在 SQL Workbench 中：
  + 為 Athena Okta 使用者建立連線。
  + 以 Athena Okta 使用者身分執行測試查詢。
  + 為業務分析師使用者建立並測試連線。
+ 在 Okta 主控台中，將業務分析師使用者新增至開發人員群組。
+ 在 Lake Formation 主控台中，設定開發人員群組的資料表許可。
+ 在 SQL Workbench 中，以業務分析師使用者身分執行測試查詢，並確認許可變更如何影響結果。

**若要準備測試用戶端**

1. 從 [使用 JDBC 連接到 Amazon Athena](connect-with-jdbc.md) 下載並解壓縮 Lake Formation 相容的 Athena JDBC 驅動程式 (2.0.14 或更高版本)。

1. 下載並安裝免費的 [SQL Workbench/J](https://www.sql-workbench.eu/index.html) SQL 查詢工具 (可在修改後的 Apache 2.0 授權下取得)。

1. 在 SQL Workbench 中，選擇 **File** (檔案)，然後選擇 **Manage Drivers** (管理驅動程式)。  
![\[選擇 Manage Drivers (管理驅動程式)。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-1.png)

1. 在 **Manage Drivers** (管理驅動程式) 對話方塊中，執行以下步驟：

   1. 選擇新驅動程式圖示。

   1. 對於 **Name** (名稱)，輸入 **Athena**。

   1. 對於 **Library** (程式庫)，瀏覽並選擇您剛下載的 Simba Athena JDBC `.jar` 檔案。

   1. 選擇**確定**。  
![\[將 Athena JDBC 驅動程式新增到 SQL Workbench。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-2.png)

您現在可以開始建立並測試 Athena Okta 使用者的連線。

**若要為 Okta 使用者建立連線**

1. 依序選擇 **File** (檔案)、**Connect window** (連接視窗)。  
![\[選擇 Connect window (連接視窗)。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-3.png)

1. 在 **Connection profile** (連線設定檔) 對話方塊中，輸入下列資訊來建立連線：
   + 在名稱方塊中，輸入 **Athena\$1Okta\$1User\$1Connection**。
   + 對於 **Driver** (驅動程式)，選擇 Simba Athena JDBC 驅動程式。
   + 對於 **URL**，執行下列其中一項作業：
     + 若要使用連線 URL，請輸入單行連線字串。以下範例新增了換行以方便閱讀。

       ```
       jdbc:awsathena://AwsRegion=region-id;
       S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
       AwsCredentialsProviderClass=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider;
       user=athena-okta-user@anycompany.com;
       password=password;
       idp_host=okta-idp-domain;
       App_ID=okta-app-id;
       SSL_Insecure=true;
       LakeFormationEnabled=true;
       ```
     + 若要使用 AWS 設定檔型 URL，請執行下列步驟：

       1. 設定具有 AWS 登入資料檔案的[AWS 設定檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)，如下列範例所示。

          ```
          [athena_lf_dev]
          plugin_name=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider
          idp_host=okta-idp-domain
          app_id=okta-app-id
          uid=athena-okta-user@anycompany.com
          pwd=password
          ```

       1. 對於 **URL**，輸入單行連線字串，如下列範例所示。該範例新增了換行以方便閱讀。

          ```
          jdbc:awsathena://AwsRegion=region-id;
          S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
          profile=athena_lf_dev;
          SSL_Insecure=true;
          LakeFormationEnabled=true;
          ```

     請注意，這些範例是連接至 Athena 所需的 URL 的基本表示。如需 URL 中支援的完整參數清單，請參閱 [JDBC 文件](connect-with-jdbc.md)。

   下圖顯示使用連線 URL 的 SQL Workbench 連線設定檔。  
![\[SQL Workbench 中的連線設定檔。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-4.png)

現在您已經為 Okta 使用者建立了連線，您可以擷取一些資料來進行測試。

**若要測試 Okta 使用者的連線**

1. 選擇 **Test** (測試)，然後確認連線成功。

1. 從 SQL Workbench **Statement** (陳述式) 視窗中，執行下列 SQL `DESCRIBE` 命令。確認已顯示所有資料欄。

   ```
   DESCRIBE "tripdb"."nyctaxi"
   ```  
![\[已顯示所有資料欄。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-5.png)

1. 從 SQL Workbench **Statement** (陳述式) 視窗中，執行下列 SQL `SELECT` 命令。確認已顯示所有資料欄。

   ```
   SELECT * FROM tripdb.nyctaxi LIMIT 5
   ```  
![\[確認已顯示所有資料欄。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-6.png)

接下來，您需確認 **athena-ba-user** (**lf-business-analyst** 群組的成員) 只能存取您先前在 Lake Formation 中指定之資料表的前三個資料欄。

**若要確認 **athena-ba-user** 的存取權限**

1. 在 SQL Workbench 的 **Connection profile** (連線設定檔) 對話方塊中，建立另一個連線設定檔。
   + 對於連線設定檔名稱，輸入 ** Athena\$1Okta\$1Group\$1Connection**。
   + 對於 **Driver** (驅動程式)，選擇 Simba Athena JDBC 驅動程式。
   + 對於 **URL**，執行下列其中一項作業：
     + 若要使用連線 URL，請輸入單行連線字串。以下範例新增了換行以方便閱讀。

       ```
       jdbc:awsathena://AwsRegion=region-id;
       S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
       AwsCredentialsProviderClass=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider;
       user=athena-ba-user@anycompany.com;
       password=password;
       idp_host=okta-idp-domain;
       App_ID=okta-application-id;
       SSL_Insecure=true;
       LakeFormationEnabled=true;
       ```
     + 若要使用 AWS 設定檔型 URL，請執行下列步驟：

       1. 設定具有登入資料檔案的 AWS 設定檔，如下列範例所示。

          ```
          [athena_lf_ba]
          plugin_name=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider
          idp_host=okta-idp-domain
          app_id=okta-application-id
          uid=athena-ba-user@anycompany.com
          pwd=password
          ```

       1. 對於 **URL**，輸入單行連線字串，如下所示。該範例新增了換行以方便閱讀。

          ```
          jdbc:awsathena://AwsRegion=region-id;
          S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
          profile=athena_lf_ba;
          SSL_Insecure=true;
          LakeFormationEnabled=true;
          ```

1. 選擇 **Test** (測試) 以確認連線是否成功。

1. 從 **SQL Statement** (SQL 陳述式) 視窗中，執行與您之前執行相同的 `DESCRIBE` 和 `SELECT` SQL 命令並檢查結果。

   由於 **athena-ba-user** 是 **lf-business-analyst** 群組的成員，只會傳回您在 Lake Formation 主控台中指定的前三個資料欄。  
![\[只會傳回前三個資料欄。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-7.png)  
![\[來自前三個資料欄的資料。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-8.png)

接下來，您需返回 Okta 主控台，將 `athena-ba-user` 新增至 `lf-developer` Okta 群組。

**若要將 athena-ba-user 新增至 lf-developer 群組**

1. 以指派的 Okta 網域的管理使用者身分登入 Okta 主控台。

1. 選擇 **Directory** (目錄)，然後選擇 **Groups** (群組)。

1. 在 Groups (群組) 頁面上，選擇 **lf-developer** 群組。  
![\[選擇 lf-developer 群組。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-9.png)

1. 選擇 **Manage People** (管理人員)。

1. 從 **Not Members** (非成員) 清單中，選擇 **athena-ba-user**，將其新增至 **lf-developer** 群組。

1. 選擇**儲存**。

現在請返回 Lake Formation 主控台來設定 **lf-developer** 群組的資料表許可。

**若要為 lf-developer-group 設定資料表許可**

1. 以資料湖管理員身分登入 Lake Formation 主控台。

1. 在導覽窗格中，選擇 **Tables** (資料表)。

1. 選取 **nyctaxi** 資料表。

1. 依序選擇 **Actions** (動作) 和 **Grant** (授予)。

1. 在 **Grant Permissions** (授予許可) 對話方塊中，輸入下列資訊：
   + 針對 **SAML 和 Amazon Quick 使用者和群組**，以下列格式輸入 Okta SAML lf-developer 群組 ARN：
   + 對於 **Columns** (資料欄)、**Choose filter type** (選擇篩選條件類型)，選擇 **Include columns** (包含資料欄)。
   + 選擇 **trip\$1type** 資料欄。
   + 對於 **Table permissions** (資料表許可)，選擇 **SELECT** (選取)。

1. 選擇 **Grant** (授予)。

現在，您可以使用 SQL Workbench 來驗證 **lf-developer** 群組的許可變更。變更應反映在 **athena-ba-user** (現在是 **lf-developer** 群組的成員) 可用的資料中。

**若要驗證 athena-ba-user 許可的變更**

1. 關閉 SQL Workbench 程式，然後再重新開啟。

1. 連接至 **athena-ba-user** 的設定檔。

1. 從 **Statement** (陳述式) 視窗中，發出您先前執行的相同 SQL 陳述式：

   這一次將會顯示 **trip\$1type** 資料欄。  
![\[第四個資料欄可用於查詢。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-10.png)

   由於 **athena-ba-user** 現在是 **lf-developer** 和 **lf-business-analyst** 群組的成員，這些群組的 Lake Formation 許可的組合會決定傳回的資料欄。  
![\[資料結果中的第四個資料欄。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-11.png)

## 結論
<a name="security-athena-lake-formation-jdbc-okta-tutorial-conclusion"></a>

在本教學課程中，您將 Athena 整合設定為 AWS Lake Formation 使用 Okta 做為 SAML 供應商。您使用 Lake Formation 和 IAM 來控制資料湖 AWS Glue 資料目錄中 SAML 使用者可用的資源。

## 相關資源
<a name="security-athena-lake-formation-jdbc-okta-tutorial-related-resources"></a>

如需相關資訊，請參閱下列資源。
+ [使用 JDBC 連接到 Amazon Athena](connect-with-jdbc.md)
+ [啟用對 Athena API 的聯合存取](access-federation-saml.md)
+ [AWS Lake Formation 開發人員指南](https://docs.aws.amazon.com/lake-formation/latest/dg/)
+ 《AWS Lake Formation 開發人員指南》**中的[授予和撤銷資料目錄許可](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html)。
+ 《IAM 使用者指南》**中的身分提供者[身分提供者與聯合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。
+ 《IAM 使用者指南》**中的[建立 IAM SAML 身分提供者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html)。
+ *AWS 安全部落格*上的[啟用聯合 AWS 使用 Windows Active Directory、ADFS 和 SAML 2.0。](https://aws.amazon.com/blogs/security/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml-2-0/)