

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

# 使用 Athena 查詢向 註冊的資料 AWS Lake Formation
<a name="security-athena-lake-formation"></a>

[AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html) 可讓您在使用 Athena 查詢來讀取存放在 Amazon S3 中的資料或透過聯合資料來源存取時，定義並強制執行資料庫、資料表和資料欄層級存取政策。Lake Formation 會針對存放在 Amazon S3 或聯合資料目錄中的資料提供授權和控管層。您可以使用 Lake Formation 中的許可階層來授予或撤銷讀取資料目錄物件 (例如資料庫、資料表和資料欄) 的許可。Lake Formation 可簡化許可的管理，並讓您實作資料的精細定義存取控制 (FGAC)。

您可以使用 Athena 查詢向 Lake Formation 註冊的資料，以及未向 Lake Formation 註冊的資料。

使用 Athena 查詢已向 Lake Formation 註冊之 Amazon S3 位置或資料目錄的來源資料時，Lake Formation 許可即適用。當您建立指向已註冊 Amazon S3 資料位置或資料目錄的資料庫和資料表時，Lake Formation 許可也適用。

寫入物件時，Lake Formation 許可不適用，也不適用於查詢未向 Lake Formation 註冊的資料或中繼資料時。對於未向 Lake Formation 註冊的來源資料和中繼資料，存取權取決於 IAM 許可政策和 AWS Glue 動作。Simple Storage Service (Amazon S3) 中的 Athena 查詢結果位置無法向 Lake Formation 註冊，且 Simple Storage Service (Amazon S3) 的 IAM 許可政策控制存取權限。此外，Lake Formation 許可不適用於 Athena 查詢歷史記錄。您可以使用 Athena 工作群組來控制查詢歷史記錄的存取。

如需有關 Lake Formation 的詳細資訊，請參閱 [Lake Formation 常見問答集](https://aws.amazon.com/lake-formation/faqs/)與《[AWS Lake Formation 開發人員指南](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html)》。

## 將 Lake Formation 許可套用至現有資料庫和資料表
<a name="lf-athena-apply-lf-permissions-to-existing-databases-and-tables"></a>

如果您是初次使用 Athena，且使用 Lake Formation 設定對查詢資料的存取，則不需要設定 IAM 政策以讓使用者能夠讀取資料和建立中繼資料。您可以使用 Lake Formation 來管理許可。

不需要向 Lake Formation 註冊資料和更新 IAM 許可政策。如果資料未向 Lake Formation 註冊，則擁有適當許可的 Athena 使用者可以繼續查詢未向 Lake Formation 註冊的資料。

如果您有現有的 Athena 使用者查詢未向 Lake Formation 註冊的 Amazon S3 資料，您可以更新 Amazon S3 和 的 IAM 許可 AWS Glue Data Catalog，如果適用的話，以便您可以使用 Lake Formation 許可集中管理使用者存取。對於讀取 Simple Storage Service (Amazon S3) 資料位置的許可，您可更新以資源和以身分為基礎的政策，來修改 Simple Storage Service (Amazon S3) 許可。對於中繼資料的存取，如果您使用 設定了精細存取控制的資源層級政策 AWS Glue，則可以改用 Lake Formation 許可來管理存取。

如需詳細資訊，請參閱《 *AWS Lake Formation 開發人員指南*》中的將資料許可[在 中設定資料庫和資料表的存取權 AWS Glue Data Catalog](fine-grained-access-to-glue-resources.md)升級到模型。 [AWS GlueAWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/upgrade-glue-lake-formation.html)

**Topics**
+ [將 Lake Formation 許可套用至現有資料庫和資料表](#lf-athena-apply-lf-permissions-to-existing-databases-and-tables)
+ [資料存取的運作方式](lf-athena-access.md)
+ [考量和限制](lf-athena-limitations.md)
+ [跨帳戶存取權](lf-athena-limitations-cross-account.md)
+ [管理使用者許可](lf-athena-user-permissions.md)
+ [使用 Lake Formation 和 JDBC 或 ODBC 進行聯合存取](security-athena-lake-formation-jdbc.md)

# Athena 如何存取向 Lake Formation 註冊的資料
<a name="lf-athena-access"></a>

本節所述的存取工作流程適用於在 Amazon S3 位置、資料目錄或針對向 Lake Formation 註冊的中繼資料物件執行 Athena 查詢時。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[註冊資料湖](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html)。除了註冊資料之外，Lake Formation 管理員還會套用 Lake Formation 許可，以授予或撤銷對資料目錄中中繼資料 AWS Glue Data Catalog或 Amazon S3 中資料位置的存取權。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[中繼資料與資料的安全性與存取控制](https://docs.aws.amazon.com/lake-formation/latest/dg/security-data-access.html#security-data-access-permissions)。

每當 Athena 主體 (使用者、群組或角色) 對使用 Lake Formation 註冊的資料執行查詢時，Lake Formation 都會驗證主體是否有適合查詢的資料庫、資料表和資料來源位置的適當 Lake Formation 許可。如果主體有權存取，Lake Formation 會將暫時性憑證*提供*給 Athena，且查詢會執行。

下圖顯示憑證販售如何在 Athena 中以逐次查詢為基礎運作，以便對 Lake Formation 中註冊之 Amazon S3 位置或資料目錄的資料表進行假設的 `SELECT` 查詢：

![\[Athena 資料表上的查詢的憑證販賣工作流程。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/lake-formation-athena-security.png)


1. 主體在 Athena 中執行 `SELECT` 查詢。

1. Athena 會分析查詢並檢查 Lake Formation 許可，以查看是否授予主體對資料表和資料欄的存取權。

1. 如果主體有權存取，則 Athena 會向 Lake Formation 請求憑證。如果主體*沒有*存取權，Athena 會發出存取遭拒錯誤。

1. Lake Formation 會在從 Amazon S3 或目錄讀取資料時發出憑證給 Athena，也會發出允許的資料欄之清單。

1. Athena 使用 Lake Formation 臨時憑證來查詢來自 Amazon S3 或目錄的資料。查詢完成後，Athena 會捨棄憑證。

# 查詢向 Lake Formation 註冊之資料的考量事項與限制
<a name="lf-athena-limitations"></a>

使用 Athena 查詢在 Lake Formation 中註冊的資料時請考慮以下項目。如需其他資訊，請參閱《AWS Lake Formation 開發人員指南》**中的 [AWS Lake Formation的已知問題](https://docs.aws.amazon.com/lake-formation/latest/dg/limitations.html)。

**Topics**
+ [在某些情況下，沒有資料欄資料許可的使用者可以看見資料欄中繼資料](#lf-athena-limitations-column-metadata)
+ [使用檢視的 Lake Formation 許可](#lf-athena-limitations-permissions-to-views)
+ [Iceberg DDL 支援](#lf-athena-limitations-iceberg-ddl-operations)
+ [Lake Formation 精細存取控制和 Athena 工作群組](#lf-athena-limitations-fine-grained-access-control)
+ [Amazon S3 中的 Athena 查詢結果位置未向 Lake Formation 註冊](#lf-athena-limitations-query-results-location)
+ [使用 Athena 工作群組限制查詢歷史記錄的存取](#lf-athena-limitations-use-workgroups-to-limit-access-to-query-history)
+ [無法在 Athena 中查詢向 Lake Formation 註冊的 CSE-KMS Amazon S3](#lf-athena-limitations-cse-kms)
+ [向 Lake Formation 註冊的分割資料位置必須位於資料表子目錄中](#lf-athena-limitations-partioned-data-locations)
+ [Create Table As Select (CTAS) 查詢需要 Amazon S3 寫入許可](#lf-athena-limitations-ctas-queries)
+ [預設資料庫需要 DESCRIBE 許可](#lf-athena-limitations-describe-default)

## 在某些情況下，未經授權的使用者利用 Avro 和自訂 SerDe 可以看見資料欄中繼資料
<a name="lf-athena-limitations-column-metadata"></a>

Lake Formation 資料欄層級授權可防止沒有 Lake Formation 許可的使用者存取資料欄中的資料。不過，在某些情況下，使用者可以存取描述資料表中所有資料欄的中繼資料，包括他們沒有資料許可的資料欄。

此情形會在資料欄中繼資料存放在資料表的資料表屬性中時發生，使用 Apache Avro 儲存格式或使用自訂序列化程式/還原序列化程式 (SerDe)，其中資料表結構描述與 SerDe 定義已一併在資料表屬性中定義。搭配 Lake Formation 使用 Athena 時，我們建議您檢閱向 Lake Formation 註冊的資料表屬性內容，並盡可能限制資料表屬性中所存放的資訊，以防止使用者看到任何敏感中繼資料。

## 了解 Lake Formation 和視觀表
<a name="lf-athena-limitations-permissions-to-views"></a>

對於向 Lake Formation 註冊的資料，Athena 使用者只有在擁有資料表、資料欄，以及來源 Simple Storage Service (Amazon S3) 資料位置 (此為 `VIEW` 之根據) 之 Lake Formation 許可時，才能建立 `VIEW`。在 Athena 中建立 `VIEW` 之後，Lake Formation 許可即可套用至 `VIEW`。資料欄層級許可不適用於 `VIEW`。具有 `VIEW` 的 Lake Formation 許可，但沒有資料表和資料欄許可 (此為檢視之根據) 的使用者，無法使用 `VIEW` 來查詢資料。不過，具有此混合許可的使用者可以使用陳述式 (例如 `DESCRIBE VIEW`、`SHOW CREATE VIEW` 和 `SHOW COLUMNS`) 來查看 `VIEW` 中繼資料。因此，請務必針對每個 `VIEW` 調整 Lake Formation 許可以符合基礎資料表的許可。在資料表中定義的儲存格篩選條件不適用於針對該資料表的 `VIEW`。資源連結名稱必須與原始帳戶中的資源名稱相同。在跨帳戶設定中使用檢視時，還會有其他限制。如需有關設定跨帳戶的共用視圖的許可的詳細資訊，請參閱[設定跨帳戶 Data Catalog 存取權](lf-athena-limitations-cross-account.md)。

## Iceberg DDL 支援
<a name="lf-athena-limitations-iceberg-ddl-operations"></a>

Athena 目前不支援位置已向 Lake Formation 註冊的 Iceberg 資料表執行 DDL 操作。嘗試對其中一個 Iceberg 資料表執行 DDL 查詢可能會傳回 Amazon S3 存取遭拒錯誤，或因查詢逾時失敗。Iceberg 資料表上的 DDL 操作要求使用者擁有對 Iceberg 資料表位置的直接 Amazon S3 存取權。

## Lake Formation 精細存取控制和 Athena 工作群組
<a name="lf-athena-limitations-fine-grained-access-control"></a>

同一 Athena 工作群組中的使用者可以看到 Lake Formation 精細存取控制設定為可供工作群組存取的資料。如需有關在 Lake Formation 中使用精細定義存取控制的詳細資訊，請參閱 *AWS 大數據部落格*中的[使用 AWS Lake Formation管理精細定義存取控制](https://aws.amazon.com/blogs/big-data/manage-fine-grained-access-control-using-aws-lake-formation/)。

## Amazon S3 中的 Athena 查詢結果位置未向 Lake Formation 註冊
<a name="lf-athena-limitations-query-results-location"></a>

Simple Storage Service (Amazon S3) 中的 Athena 查詢結果無法向 Lake Formation 註冊。Lake Formation 許可不會限制對這些位置的存取。除非您限制存取，否則 Athena 使用者可以在沒有 Lake Formation 的資料許可時存取查詢結果檔案和中繼資料。若要避免這種情況，我們建議您使用工作群組來指定查詢結果的位置，並使工作群組成員資格與 Lake Formation 許可保持一致。然後，您可以使用 IAM 許可政策來限制查詢結果位置的存取。如需有關查詢結果的詳細資訊，請參閱[使用查詢結果和近期查詢](querying.md)。

## 使用 Athena 工作群組限制查詢歷史記錄的存取
<a name="lf-athena-limitations-use-workgroups-to-limit-access-to-query-history"></a>

Athena 查詢歷史記錄會公開已儲存查詢和完整查詢字串的清單。除非您使用工作群組來分隔查詢歷程記錄的存取權限，否則未獲授權在 Lake Formation 中查詢資料的 Athena 使用者可以檢視對該資料執行的查詢字串，包括資料欄名稱、選取準則等。我們建議您使用工作群組來分隔查詢歷程記錄，並使 Athena 工作群組成員資格與 Lake Formation 許可保持一致，以限制存取。如需詳細資訊，請參閱[使用工作群組來控制查詢存取和成本](workgroups-manage-queries-control-costs.md)。

## 查詢向 Lake Formation 註冊的 CSE\$1KMS 加密資料表
<a name="lf-athena-limitations-cse-kms"></a>

無法使用 Athena 查詢具有下列特性的開放資料表格式 (OTF) 資料表，例如 Apache Iceberg：
+ 這些資料表以向 Lake Formation 註冊的 Amazon S3 資料位置為基礎。
+ 使用用戶端加密 (CSE) 對 Amazon S3 中的物件進行加密。
+ 加密使用 AWS KMS 客戶受管金鑰 (`CSE_KMS`)。

若要查詢使用`CSE_KMS`金鑰加密的非OTF 資料表，請將下列區塊新增至您用於 CSE 加密的 AWS KMS 金鑰政策。*<KMS\$1KEY\$1ARN>* 是加密資料的 AWS KMS 金鑰 ARN。*<IAM-ROLE-ARN>* 是 Lake Formation 中註冊 Amazon S3 位置的 IAM 角色的 ARN。

```
{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "*"
    },
    "Action": "kms:Decrypt",
    "Resource": "<KMS-KEY-ARN>",
    "Condition": {
        "ArnLike": {
            "aws:PrincipalArn": "<IAM-ROLE-ARN>"
        }
    }
}
```

## 向 Lake Formation 註冊的分割資料位置必須位於資料表子目錄中
<a name="lf-athena-limitations-partioned-data-locations"></a>

向 Lake Formation 註冊的分割資料表必須在目錄中擁有分割資料，這些目錄是 Simple Storage Service (Amazon S3) 中資料表的子目錄。例如，具有 `s3://amzn-s3-demo-bucket/mytable` 位置和分割區 `s3://amzn-s3-demo-bucket/mytable/dt=2019-07-11`、`s3://amzn-s3-demo-bucket/mytable/dt=2019-07-12` 等的資料表，可以向 Lake Formation 註冊並使用 Athena 進行查詢。另一方面，位置 `s3://amzn-s3-demo-bucket/mytable` 的資料表和位於 `s3://amzn-s3-demo-bucket/dt=2019-07-11`、`s3://amzn-s3-demo-bucket/dt=2019-07-12` 等的分割區，無法向 Lake Formation 註冊。此類分割區不是 `s3://amzn-s3-demo-bucket/mytable` 的子目錄，因此也無法從 Athena 讀取。

## Create Table As Select (CTAS) 查詢需要 Amazon S3 寫入許可
<a name="lf-athena-limitations-ctas-queries"></a>

Create Table As Statements (CTAS) 需要對資料表的 Simple Storage Service (Amazon S3) 位置的寫入存取權限。若要對在 Lake Formation 註冊的資料執行 CTAS 查詢，Athena 使用者除了適當的 Lake Formation 許可以讀取資料位置之外，還必須具有 IAM 許可才能寫入資料表 Simple Storage Service (Amazon S3) 位置。如需詳細資訊，請參閱[從查詢結果建立資料表 (CTAS)](ctas.md)。

## 預設資料庫需要 DESCRIBE 許可
<a name="lf-athena-limitations-describe-default"></a>

`default` 資料庫需要 Lake Formation `DESCRIBE` 許可，如此 Lake Formation 才能檢視該資料庫。下列範例 AWS CLI 命令會將`default`資料庫的 `DESCRIBE`許可授予 AWS 帳戶 `datalake_user1`中的使用者`111122223333`。

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DESCRIBE" --resource '{ "Database": {"Name":"default"}}
```

如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的 [DESCRIBE](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html#perm-describe)。

# 設定跨帳戶 Data Catalog 存取權
<a name="lf-athena-limitations-cross-account"></a>

若要存取另一個帳戶中的資料目錄，您可以使用 Athena 的跨帳戶 AWS Glue 功能或在 Lake Formation 中設定跨帳戶存取。

## 選項 A：在 Athena 中設定跨帳戶 Data Catalog 存取權
<a name="lf-athena-limitations-cross-account-glue"></a>

您可以使用 Athena 的跨帳戶 AWS Glue 目錄功能，在帳戶中註冊目錄。僅 Athena 引擎版本 2 及更新版本中提供此功能，且僅限於帳戶之間的相同區域使用。如需詳細資訊，請參閱[從另一個帳戶註冊 Data Catalog](data-sources-glue-cross-account.md)。

如果要共用的資料目錄在 中設定了資源政策 AWS Glue，則必須更新以允許存取 ， AWS Resource Access Manager 並授予許可給帳戶 B 使用帳戶 A 的資料目錄。

如需詳細資訊，請參閱[設定 AWS Glue 資料目錄的跨帳戶存取](security-iam-cross-account-glue-catalog-access.md)。

## 選項 B：在 Lake Formation 中設定跨帳戶存取權
<a name="lf-athena-limitations-cross-account-glue-lf-xacct"></a>

AWS Lake Formation 可讓您使用單一帳戶來管理中央 Data Catalog。您可以使用此功能來實作對資料目錄中繼資料和基礎資料的[跨帳戶存取](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-cross-account.html)。例如，擁有者帳戶可以授予另一個 (收件人) 帳戶對資料表的 `SELECT` 許可。

若要在 Athena 查詢編輯器中顯示共用的資料庫或資料表，您需在 Lake Formation 中對共用的資料庫或資料表[建立資源連結](https://docs.aws.amazon.com/lake-formation/latest/dg/resource-links-about.html)。當 Lake Formation 中的收件人帳戶查詢擁有者的資料表時，[CloudTrail](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-logging.html) 會將資料存取事件新增至收件人帳戶和擁有者帳戶的記錄。

如需共用視圖，請謹記下列要點：
+ 在目標資源連結上執行，而不是來源資料表或視圖上執行查詢，然後將輸出共用到目標帳戶。
+ 僅共用視圖並不足夠。建立視圖所涉及的所有資料表必須是跨帳戶共用的一部分。
+ 在共用資源上建立的資源連結的名稱必須與擁有者帳戶中的資源名稱相符。如果名稱不相符，則會出現一則錯誤訊息，例如分析存放檢視 'awsdatacatalog.*my-lf-resource-link*.*my-lf-view*' 失敗：行 3:3：結構描述 *schema\$1name* 不存在。

如需有關在 Lake Formation 中跨帳戶存取的詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的以下資源：

 [跨帳戶存取](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-cross-account.html) 

 [資源連結在 Lake Formation 中如何運作](https://docs.aws.amazon.com/lake-formation/latest/dg/resource-links-about.html) 

 [跨帳戶 CloudTrail 記錄](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-logging.html) 

# 管理 Lake Formation 和 Athena 使用者許可
<a name="lf-athena-user-permissions"></a>

Lake Formation 提供憑證來查詢向 Lake Formation 註冊的 Amazon S3) 資料存放區或聯合目錄。如果您之前使用 IAM 政策來允許或拒絕讀取 Amazon S3 中目錄或資料位置的許可，您可以改為使用 Lake Formation 許可。不過，仍需要其他 IAM 許可。

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

以下章節摘要說明使用 Athena 查詢在 Lake Formation 中註冊之資料所需的許可。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的 [AWS Lake Formation的安全性](https://docs.aws.amazon.com/lake-formation/latest/dg/security.html)。

**Topics**
+ [Lake Formation 和 Athena 的身分型許可](#lf-athena-user-permissions-identity-based)
+ [Athena 查詢結果位置的 Amazon S3 許可](#lf-athena-user-permissions-query-results-locations)
+ [查詢歷史記錄的 Athena 工作群組成員資格](#lf-athena-user-permissions-workgroup-memberships-query-history)
+ [Lake Formation 的資料許可](#lf-athena-user-permissions-data)
+ [寫入 Amazon S3 位置的 IAM 許可](#lf-athena-user-permissions-s3-write)
+ [加密資料、中繼資料和 Athena 查詢結果的許可](#lf-athena-user-permissions-encrypted)
+ [外部帳戶中的 Amazon S3 儲存貯體以資源為基礎的許可 (選用)](#lf-athena-user-permissions-s3-cross-account)

## Lake Formation 和 Athena 的身分型許可
<a name="lf-athena-user-permissions-identity-based"></a>

任何使用 Athena 查詢向 Lake Formation 註冊之資料的人，都必須擁有允許 `lakeformation:GetDataAccess` 動作的 IAM 許可政策。[AWS 受管政策：AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy) 允許此動作。如果您使用內嵌政策，請務必更新許可政策來允許此動作。

在 Lake Formation 中，*資料湖管理員*具有建立中繼資料物件 (例如資料庫和資料表)、授予 Lake Formation 許可給其他使用者，以及註冊新 Amazon S3 位置或資料目錄的許可。若要註冊新的位置，需要 Lake Formation 的服務連結角色許可。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[建立資料湖管理員](https://docs.aws.amazon.com/lake-formation/latest/dg/getting-started-setup.html#create-data-lake-admin)和 [Lake Formation 的服務連結角色許可](https://docs.aws.amazon.com/lake-formation/latest/dg/service-linked-roles.html#service-linked-role-permissions)。

Lake Formation 使用者可以根據資料湖管理員授予的 Lake Formation 許可，使用 Athena 查詢資料庫、資料表、資料表資料欄和基礎 Amazon S3 資料存放區或目錄。使用者無法建立資料庫或資料表，或向 Lake Formation 註冊新的 Simple Storage Service (Amazon S3) 位置。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[建立資料湖使用者](https://docs.aws.amazon.com/lake-formation/latest/dg/cloudtrail-tut-create-lf-user.html)。

在 Athena 中，身分型許可政策 (包括 Athena 工作群組的政策) 仍然控制 Amazon Web Services 帳戶使用者對 Athena 動作的存取。此外，還可能透過 Athena 驅動程式提供以 SAML 為基礎的身分驗證來提供聯合存取。如需詳細資訊，請參閱[使用工作群組來控制查詢存取和成本](workgroups-manage-queries-control-costs.md)、[使用 IAM 政策來控制工作群組存取](workgroups-iam-policy.md)及[啟用對 Athena API 的聯合存取](access-federation-saml.md)。

如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[授予 Lake Formation 許可](https://docs.aws.amazon.com/lake-formation/latest/dg/lake-formation-permissions.html)。

## Athena 查詢結果位置的 Amazon S3 許可
<a name="lf-athena-user-permissions-query-results-locations"></a>

Simple Storage Service (Amazon S3) 中的 Athena 查詢結果無法向 Lake Formation 註冊。Lake Formation 許可不會限制對這些位置的存取。除非您限制存取，否則 Athena 使用者可以在沒有 Lake Formation 的資料許可時存取查詢結果檔案和中繼資料。若要避免這種情況，我們建議您使用工作群組來指定查詢結果的位置，並使工作群組成員資格與 Lake Formation 許可保持一致。然後，您可以使用 IAM 許可政策來限制查詢結果位置的存取。如需有關查詢結果的詳細資訊，請參閱[使用查詢結果和近期查詢](querying.md)。

## 查詢歷史記錄的 Athena 工作群組成員資格
<a name="lf-athena-user-permissions-workgroup-memberships-query-history"></a>

Athena 查詢歷史記錄會公開已儲存查詢和完整查詢字串的清單。除非您使用工作群組來分隔查詢歷程記錄的存取權限，否則未獲授權在 Lake Formation 中查詢資料的 Athena 使用者可以檢視對該資料執行的查詢字串，包括資料欄名稱、選取準則等。我們建議您使用工作群組來分隔查詢歷程記錄，並使 Athena 工作群組成員資格與 Lake Formation 許可保持一致，以限制存取。如需詳細資訊，請參閱[使用工作群組來控制查詢存取和成本](workgroups-manage-queries-control-costs.md)。

## Lake Formation 的資料許可
<a name="lf-athena-user-permissions-data"></a>

除了使用 Lake Formation 的基準許可之外，Athena 使用者還必須具備 Lake Formation 許可，才能存取其查詢的資源。這些許可是由 Lake Formation 管理員授予和管理。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[中繼資料與資料的安全性與存取控制](https://docs.aws.amazon.com/lake-formation/latest/dg/security-data-access.html#security-data-access-permissions)。

## 寫入 Amazon S3 位置的 IAM 許可
<a name="lf-athena-user-permissions-s3-write"></a>

對 Simple Storage Service (Amazon S3) 的 Lake Formation 許可不包含寫入 Simple Storage Service (Amazon S3) 的能力。Create Table As Statements (CTAS) 需要對資料表的 Simple Storage Service (Amazon S3) 位置的寫入存取權限。若要對在 Lake Formation 註冊的資料執行 CTAS 查詢，Athena 使用者除了適當的 Lake Formation 許可以讀取資料位置之外，還必須具有 IAM 許可才能寫入資料表 Simple Storage Service (Amazon S3) 位置。如需詳細資訊，請參閱[從查詢結果建立資料表 (CTAS)](ctas.md)。

## 加密資料、中繼資料和 Athena 查詢結果的許可
<a name="lf-athena-user-permissions-encrypted"></a>

在 Amazon S3 中的基礎來源資料，以及向 Lake Formation 註冊的目錄中繼資料都可以加密。使用 Athena 查詢向 Lake Formation 註冊的資料時，Athena 處理查詢結果加密的方式沒有變更。如需詳細資訊，請參閱[加密 Amazon S3 中存放的 Athena 查詢結果](encrypting-query-results-stored-in-s3.md)。
+ **加密來源資料** – 支援 Simple Storage Service (Amazon S3) 資料位置來源資料的加密。查詢向 Lake Formation 註冊的已加密 Simple Storage Service (Amazon S3) 位置的 Athena 使用者，需要加密和解密資料的許可。如需有關需求的詳細資訊，請參閱[支援的 Amazon S3 加密選項](encryption.md#encryption-options-S3-and-Athena)和[Amazon S3 中加密資料的許可](encryption.md#permissions-for-encrypting-and-decrypting-data)。
+ **加密中繼資料** – AWS Glue Data Catalog 支援在 中加密中繼資料。對於使用 Athena 的主體，身分型政策必須允許用於加密中繼資料之索引鍵的 `"kms:GenerateDataKey"`、`"kms:Decrypt"` 和 `"kms:Encrypt"` 動作。如需詳細資訊，請參閱《AWS Glue 開發人員指南**》和 [在 中設定從 Athena 到加密中繼資料的存取權 AWS Glue Data Catalog](access-encrypted-data-glue-data-catalog.md) 中的[加密您的資料目錄](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html)。

## 外部帳戶中的 Amazon S3 儲存貯體以資源為基礎的許可 (選用)
<a name="lf-athena-user-permissions-s3-cross-account"></a>

若要在不同帳戶中查詢 Simple Storage Service (Amazon S3) 資料位置，以資源為基礎的 IAM 政策 (儲存貯體政策) 必須允許存取該位置。如需詳細資訊，請參閱[設定 Athena 中的 Amazon S3 儲存貯體跨帳戶存取權](cross-account-permissions.md)。

如需有關在其他帳戶中存取目錄的資訊，請參閱 [選項 A：在 Athena 中設定跨帳戶 Data Catalog 存取權](lf-athena-limitations-cross-account.md#lf-athena-limitations-cross-account-glue)。

# 使用 Lake Formation 和 JDBC 或 ODBC 驅動器對 Athena 進行聯合存取
<a name="security-athena-lake-formation-jdbc"></a>

Athena JDBC 和 ODBC 驅動程式支援使用 Okta 和 Microsoft Active Directory 聯合服務 (AD FS) 身分提供者，實現以 SAML 2.0 為基礎的 Athena 聯合。透過整合 Amazon Athena 與 AWS Lake Formation，您可以使用公司登入資料對 Athena 啟用 SAML 型身分驗證。使用 Lake Formation 和 AWS Identity and Access Management (IAM)，您可以對 SAML 使用者可用的資料維持精細的資料層級存取控制。透過 Athena JDBC 和 ODBC 驅動程式，聯合存取可用於工具或程式設計存取。

若要使用 Athena 存取 Lake Formation 控制的資料來源，您需要透過設定身分提供者 (IdP) 和 AWS Identity and Access Management (IAM) 角色來啟用 SAML 2.0 型聯合。如需詳細步驟，請參閱[教學課程：使用 Lake Formation 和 JDBC 設定 Okta 使用者對 Athena 的聯合存取](security-athena-lake-formation-jdbc-okta-tutorial.md)。

## 先決條件
<a name="security-athena-lake-formation-jdbc-prerequisites"></a>

若要使用 Amazon Athena 和 Lake Formation 進行聯合存取，您必須符合以下需求：
+ 您使用現有以 SAML 為基礎的身分提供者來管理您的公司身分，例如 Okta 或 Microsoft Active Directory 聯合服務 (AD FS)。
+ 您可以使用 AWS Glue Data Catalog 做為中繼資料存放區。
+ 您在 Lake Formation 中定義和管理許可，以存取 AWS Glue Data Catalog中的資料庫、資料表和資料欄。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》[https://docs.aws.amazon.com/lake-formation/latest/dg/](https://docs.aws.amazon.com/lake-formation/latest/dg/)。
+ 您使用 2.0.14 版或更新版本的 [Athena JDBC 驅動程式](https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html)，或 1.1.3 版或更新版本的 [Athena ODBC 驅動程式](connect-with-odbc.md)。

## 考量和限制
<a name="security-athena-lake-formation-jdbc-considerations-and-limitations"></a>

使用 Athena JDBC 或 ODBC 驅動程式和 Lake Formation 來設定對 Athena 的聯合存取時，請記住下列幾點：
+ 目前，Athena JDBC 驅動程式和 ODBC 驅動程式支援 Okta、Microsoft Active Directory 聯合服務 (AD FS) 和 Azure AD 身分提供者。雖然 Athena JDBC 驅動程式具有可擴充為使用其他身分提供者的通用 SAML 類別，但是讓其他身分提供者 (IdP) 搭配 Athena 使用的自訂擴充功能支援可能會受到限制。
+ 使用 JDBC 和 ODBC 驅動程式的聯合存取與 IAM Identity Center 信任身分傳播功能不相容。
+ 目前，您無法使用 Athena 主控台來設定 IdP 和 SAML 與 Athena 搭配使用時的支援。若要設定此支援，請使用第三方身分提供者、Lake Formation 和 IAM 管理主控台，以及 JDBC 或 ODBC 驅動程式用戶端。
+ 在設定身分提供者和 SAML 以與 Lake Formation 和 Athena 搭配使用之前，您應先了解 [SAML 2.0 規格](https://www.oasis-open.org/standards#samlv2.0)以及其如何與您的身分提供者搭配使用。
+ SAML 提供者和 Athena JDBC 和 ODBC 驅動程式由第三方提供，因此對 的使用相關問題 AWS 的支援可能會受到限制。

**Topics**
+ [先決條件](#security-athena-lake-formation-jdbc-prerequisites)
+ [考量和限制](#security-athena-lake-formation-jdbc-considerations-and-limitations)
+ [教學課程：使用 Lake Formation 和 JDBC 設定 Okta 使用者對 Athena 的聯合存取](security-athena-lake-formation-jdbc-okta-tutorial.md)

# 教學課程：使用 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/)