

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

# Amazon Athena 安全性
<a name="security"></a>

的雲端安全性 AWS 是最高優先順序。身為 AWS 客戶，您可以受益於資料中心和網路架構，這些架構專為滿足最安全敏感組織的需求而建置。

安全性是 AWS 與您之間的共同責任。[‬共同責任模型‭](https://aws.amazon.com/compliance/shared-responsibility-model/)‬ 將此描述為雲端*‬的‭*‬安全和雲端*‬內*‬的安全：
+ **雲端的安全性** – AWS 負責保護在 Cloud AWS 服務 中執行的 AWS 基礎設施。 AWS 也為您提供可安全使用的服務。第三方稽核人員定期檢測及驗證安全的效率也是我們 [AWS 合規計劃](https://aws.amazon.com/compliance/programs/)的一部分。若要進一步了解適用於 Athena 的合規計劃，請參閱[合規計劃範圍內的AWS 服務](https://aws.amazon.com/compliance/services-in-scope/)。
+ **雲端的安全性** – 您的責任取決於您使用 AWS 服務 的 。您也必須對其他因素負責，包括資料的敏感度、您組織的需求和適用的法律及法規。

本文件協助您了解如何在使用 Amazon Athena 時套用共同的責任模型。下列主題說明如何設定 Athena 以滿足您的安全與合規目標。您也將了解如何使用其他 AWS 服務 來協助您監控和保護 Athena 資源。

**Topics**
+ [Athena 中的資料保護](security-data-protection.md)
+ [Athena 中的 Identity and Access Management](security-iam-athena.md)
+ [記錄並監控 Athena](security-logging-monitoring.md)
+ [的合規驗證](security-compliance-validation.md)
+ [Athena 中的復原功能](security-resilience.md)
+ [Athena 中的基礎設施安全](security-infrastructure.md)
+ [Athena 中的組態與漏洞分析](security-vulnerability-management.md)
+ [使用 Athena 查詢向 註冊的資料 AWS Lake Formation](security-athena-lake-formation.md)

# Athena 中的資料保護
<a name="security-data-protection"></a>

 AWS [共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)適用於 中的資料保護。如此模型所述， AWS 負責保護執行所有 的全域基礎設施 AWS 雲端。您負責維護在此基礎設施上託管內容的控制權。您也同時負責所使用 AWS 服務 的安全組態和管理任務。如需資料隱私權的詳細資訊，請參閱[資料隱私權常見問答集](https://aws.amazon.com/compliance/data-privacy-faq/)。如需有關歐洲資料保護的相關資訊，請參閱*AWS 安全性部落格*上的[AWS 共同責任模型和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

基於資料保護目的，我們建議您保護 AWS 帳戶 登入資料，並使用 AWS IAM Identity Center 或 AWS Identity and Access Management (IAM) 設定個別使用者。如此一來，每個使用者都只會獲得授與完成其任務所必須的許可。我們也建議您採用下列方式保護資料：
+ 每個帳戶均要使用多重要素驗證 (MFA)。
+ 使用 SSL/TLS 與 AWS 資源通訊。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 使用 設定 API 和使用者活動記錄 AWS CloudTrail。如需有關使用 CloudTrail 追蹤擷取 AWS 活動的資訊，請參閱*AWS CloudTrail 《 使用者指南*》中的[使用 CloudTrail 追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解決方案，以及其中的所有預設安全控制 AWS 服務。
+ 使用進階的受管安全服務 (例如 Amazon Macie)，協助探索和保護儲存在 Amazon S3 的敏感資料。
+ 如果您在 AWS 透過命令列界面或 API 存取 時需要 FIPS 140-3 驗證的密碼編譯模組，請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的更多相關資訊，請參閱[聯邦資訊處理標準 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)。

我們強烈建議您絕對不要將客戶的電子郵件地址等機密或敏感資訊，放在標籤或自由格式的文字欄位中，例如**名稱**欄位。這包括當您使用 或使用主控台、API AWS CLI或其他 AWS 服務 AWS SDKs 時。您在標籤或自由格式文字欄位中輸入的任何資料都可能用於計費或診斷日誌。如果您提供外部伺服器的 URL，我們強烈建議請勿在驗證您對該伺服器請求的 URL 中包含憑證資訊。

作為額外的安全步驟，您也能使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia) 全域條件內容索引鍵來限制僅能有從 Athena 進行的請求。如需詳細資訊，請參閱[針對 Athena 使用 CalledVia 內容索引鍵](security-iam-athena-calledvia.md)。

## 保護多種資料類型
<a name="security-data-protection-types-of-data"></a>

使用 Athena 建立資料庫和資料表時，涉及多種類型的資料。這些資料類型包括存放在 Amazon S3 中的來源資料、執行查詢時建立之資料庫和資料表的中繼資料，或用於探索資料、查詢結果資料和查詢歷史記錄的 AWS Glue 爬蟲程式。本節討論每個類型的資料，並提供如何保護它的相關指導。
+ **來源資料** – 您將資料庫和資料表的資料存放在 Amazon S3 中，而且 Athena 不會修改它。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的 [Amazon S3 中的資料保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DataDurability.html)。您可以控制來源資料的存取，並可在 Simple Storage Service (Amazon S3) 中將其加密。您可以使用 Athena，[根據 Simple Storage Service (Amazon S3) 中的加密資料集建立資料表](creating-tables-based-on-encrypted-datasets-in-s3.md)。
+ **Database and table metadata (schema)** (資料庫和資料表中繼資料 (結構描述)) – Athena 使用讀取時定義結構描述的技術，也就是在 Athena 執行查詢時，您的資料表定義會套用至您在 Simple Storage Service (Amazon S3) 中的資料。您定義的所有結構描述都會自動儲存，除非您確實將其刪除。在 Athena 中，您可以使用 DDL 陳述式來修改資料目錄中繼資料。您也可以刪除資料表定義和結構描述，不會影響存放在 Simple Storage Service (Amazon S3) 中的基礎資料。您在 Athena 中使用之資料庫和資料表的中繼資料會存放在 AWS Glue Data Catalog中。

  您可以使用 AWS Glue Data Catalog AWS Identity and Access Management (IAM) [定義在 中註冊的資料庫和資料表的精細存取政策](fine-grained-access-to-glue-resources.md)。您也可以[加密 AWS Glue Data Catalog的中繼資料](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html)。如果您加密中繼資料，請使用[加密中繼資料的許可](encryption.md#glue-encryption)進行存取。
+ **查詢結果和查詢歷史記錄，包括儲存的查詢** – 查詢結果存放在 Simple Storage Service (Amazon S3) 中您可以選擇來全域指定，或針對每個工作群組指定的位置。如果未指定，Athena 會在每個案例中使用預設位置。您可以控制 Simple Storage Service (Amazon S3) 儲存貯體的存取，而您可在這些儲存貯體中存放查詢結果和已儲存的查詢。此外，您還可以選擇加密您存放在 Simple Storage Service (Amazon S3) 中的查詢結果。您的使用者必須擁有適當的許可，才能存取 Simple Storage Service (Amazon S3) 位置和解密檔案。如需詳細資訊，請參閱本文件的[加密 Amazon S3 中存放的 Athena 查詢結果](encrypting-query-results-stored-in-s3.md)。

  Athena 會將查詢歷史記錄保留 45 天。您可以使用 Athena APIs、主控台和 來[檢視查詢歷史記錄](queries-viewing-history.md) AWS CLI。若要存放查詢超過 45 天，請將其儲存。若要保護對已儲存查詢的存取權限，請在 Athena 中[使用工作群組](workgroups-manage-queries-control-costs.md)，限制僅有權檢視已儲存查詢的使用者可存取這些查詢。

**Topics**
+ [保護多種資料類型](#security-data-protection-types-of-data)
+ [靜態加密](encryption.md)
+ [傳輸中加密](encryption-in-transit.md)
+ [金鑰管理](key-management.md)
+ [網際網路流量隱私權](internetwork-traffic-privacy.md)

# 靜態加密
<a name="encryption"></a>

您可以在 Amazon Athena 中，針對同一區域和有限數量區域的 Simple Storage Service (Amazon S3) 中的加密資料執行查詢。您也可以加密 Amazon S3 中的查詢結果和 AWS Glue Data Catalog 中的資料。

您可以加密 Athena 中的以下資產：
+ Simple Storage Service (Amazon S3) 中所有查詢的結果，Athena 會將其存放在稱為 Simple Storage Service (Amazon S3) 結果位置的位置。您可以加密存放在 Simple Storage Service (Amazon S3) 中的查詢結果，而不論 Simple Storage Service (Amazon S3) 中的基礎資料集是否加密。如需相關資訊，請參閱[加密 Amazon S3 中存放的 Athena 查詢結果](encrypting-query-results-stored-in-s3.md)。
+ Data Catalog 中的 AWS Glue 資料。如需相關資訊，請參閱[AWS Glue Data Catalog 中加密中繼資料的許可](#glue-encryption)。

**注意**  
當您使用 Athena 讀取加密資料表時，Athena 會使用為資料表資料指定的加密選項，而不是針對查詢結果的加密選項。如果針對查詢結果和資料表資料設定不同的加密方法或金鑰，則 Athena 讀取資料表資料時，不會使用用於加密或解密查詢結果的加密選項和金鑰。  
不過，如果您使用 Athena 將資料插入具有加密資料的資料表，Athena 會使用為查詢結果指定的加密組態來加密插入的資料。例如，如果您為查詢結果指定`CSE_KMS`加密，Athena 會使用您用於查詢結果加密的相同 AWS KMS 金鑰 ID，以使用 加密插入的資料表資料`CSE_KMS`。

**Topics**
+ [支援的 Amazon S3 加密選項](#encryption-options-S3-and-Athena)
+ [Amazon S3 中加密資料的許可](#permissions-for-encrypting-and-decrypting-data)
+ [AWS Glue Data Catalog 中加密中繼資料的許可](#glue-encryption)
+ [從 CSE-KMS 移轉至 SSE-KMS](migrating-csekms-ssekms.md)
+ [加密 Amazon S3 中存放的 Athena 查詢結果](encrypting-query-results-stored-in-s3.md)
+ [根據 Amazon S3 中加密的資料集建立資料表](creating-tables-based-on-encrypted-datasets-in-s3.md)

## 支援的 Amazon S3 加密選項
<a name="encryption-options-S3-and-Athena"></a>

Athena 支援下列 Simple Storage Service (Amazon S3) 中資料集和查詢結果的加密選項。


| 加密類型 | Description | 跨區域支援 | 
| --- | --- | --- | 
| [SSE-S3 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) | 使用 Simple Storage Service (Amazon S3) 受管金鑰的伺服器端加密 (SSE)。 | 是 | 
| [SSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html) (建議) | 使用 AWS Key Management Service 客戶受管金鑰的伺服器端加密 (SSE)。 | 是 | 
| [CSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro) |  使用 AWS KMS 客戶受管金鑰的用戶端加密 (CSE)。在 Athena 中，此選項要求您使用 `CREATE TABLE`陳述式搭配指定 `'has_encrypted_data'='true'`或 `'encryption_option'='CSE_KMS'` 的 `TBLPROPERTIES` 子句`'kms_key'='kms_key_arn'`。如需詳細資訊，請參閱[根據 Amazon S3 中加密的資料集建立資料表](creating-tables-based-on-encrypted-datasets-in-s3.md)。  | 否 | 

如需使用 Amazon S3 AWS KMS 加密的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[什麼是 AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 和 [Amazon Simple Storage Service (Amazon S3) 如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html) 。如需有關搭配 Athena 使用 SSE-KMS 或 CSE-KMS 的詳細資訊，請參閱 *AWS 大數據部落格*的[啟動：Amazon Athena 新增對查詢加密資料的支援](https://aws.amazon.com/blogs/aws/launch-amazon-athena-adds-support-for-querying-encrypted-data/)。

### 加密建議
<a name="encryption-recommendation"></a>

當您使用客戶受管 KMS 金鑰加密和解密資料表資料和查詢結果時，我們建議您使用 SSE-KMS 加密，而非 SSE-S3 或 CSE-KMS 加密方法。SSE-KMS 實現了控制、簡單性和效能的平衡，因此當您使用受管 KMS 金鑰進行資料加密時，建議使用此方法。

**與 SSE-S3 相比，SSE-KMS 的優勢**
+ SSE-KMS 可讓您指定和管理自己的金鑰，以便增強控制。您可以定義金鑰政策、監督金鑰生命週期，以及監控金鑰用量。

**與 CSE-KMS 相比，SSE-KMS 的優勢**
+ CSE-KMS 需要持續維護 S3 加密用戶端，而與此不同的是，SSE-KMS 不需要額外的基礎設施來加密和解密資料。
+ 由於加密演算法不斷發展演進，CSE-KMS 可能會面臨新舊 S3 加密用戶端之間的相容性問題，而 SSE-KMS 則可避免這一問題。
+ 在加密和解密程序期間，為進行金鑰擷取，SSE-KMS 對 KMS 服務發出的 API 呼叫較少，因此相較於 CSE-KMS，可提供更好的效能。

### 不支援的選項
<a name="encryption-unsupported-options"></a>

不支援下列加密選項：
+ 使用客戶提供金鑰的 SSE (SSE-C)。
+ 使用用戶端受管金鑰的用戶端加密。
+ 非對稱金鑰。

若要比較 Amazon S3 加密選項，請參閱《Amazon Simple Storage Service 使用者指南》**中的[使用加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html)。

### 用戶端加密工具
<a name="encryption-client-side-tools"></a>

 對於用戶端加密，請注意有兩種工具可用：
+ [Amazon S3 加密用戶端](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3EncryptionClient.html) – 這只會為 Amazon S3 加密資料，並由 Athena 支援。
+ [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) – 開發套件可用於跨任何地方加密資料， AWS 但 Athena 不支援。

這些工具不相容，而且使用一個工具加密的資料無法由另一個工具解密。Athena 僅直接支援 Simple Storage Service (Amazon S3) 加密用戶端。如果您使用軟體開發套件來加密資料，您可以從 Athena 執行查詢，但資料會以加密文字傳回。

如果您想要使用 Athena 來查詢已使用 AWS Encryption 軟體開發套件加密的資料，您必須先下載並解密資料，然後使用 Simple Storage Service (Amazon S3) 加密用戶端再次加密資料。

## Amazon S3 中加密資料的許可
<a name="permissions-for-encrypting-and-decrypting-data"></a>

根據您在 Amazon S3 中使用的加密類型，您可能需要針對在 Athena 中使用的政策新增許可 (也稱為「允許」動作)：
+ **SSE-S3** – 如果您使用 SSE-S3 進行加密，Athena 使用者在他們的政策中不需要額外的許可。有適當 Simple Storage Service (Amazon S3) 位置和 Athena 動作的適當 Simple Storage Service (Amazon S3) 許可即已足夠。如需有關允許適當 Athena 和 Simple Storage Service (Amazon S3) 許可的政策的詳細資訊，請參閱[AWS Amazon Athena 的 受管政策](security-iam-awsmanpol.md)和[透過 Athena 控制 Amazon S3 的存取權](s3-permissions.md)。
+ **AWS KMS** – 如果您使用 AWS KMS 進行加密，除了 Athena 和 Amazon S3 許可之外，還必須允許 Athena 使用者執行特定 AWS KMS 動作。您可以透過編輯用於在 Amazon S3 中加密資料的客戶自管金鑰的金鑰政策，來允許這些動作。若要將金鑰使用者新增至適當的 AWS KMS 金鑰政策，您可以使用位於 https：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 的 AWS KMS 主控台。如需如何將使用者新增至 AWS KMS 金鑰政策的資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[允許金鑰使用者使用客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)。
**注意**  
進階金鑰政策管理員可以調整金鑰政策。`kms:Decrypt` 是允許 Athena 使用者使用加密的資料集的最低允許動作。若要使用加密的查詢結果，允許的最低動作為 `kms:GenerateDataKey` 和 `kms:Decrypt`。

  使用 Athena 以大量使用 加密的物件查詢 Amazon S3 中的資料集時 AWS KMS， AWS KMS 可能會調節查詢結果。當存在大量小型物件時，這種情況更有可能發生。Athena 會退回重試請求，但仍可能發生調節錯誤。如果您正在使用大量加密物件且遭遇此問題，一個方法是啟用 Simple Storage Service (Amazon S3) 儲存貯體金鑰以減少對 KMS 的呼叫次數。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[使用 Amazon S3 儲存貯體金鑰降低 SSE-KMS 的成本](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)。另一種方式是提高您 AWS KMS的服務配額。如需詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[配額](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second)。

如需有關搭配 Athena 使用 Simple Storage Service (Amazon S3) 時許可的疑難排解資訊，請參閱[對 Athena 中的問題進行疑難排解](troubleshooting-athena.md) 主題的 [許可](troubleshooting-athena.md#troubleshooting-athena-permissions) 一節。

## AWS Glue Data Catalog 中加密中繼資料的許可
<a name="glue-encryption"></a>

如果您在 [中加密中繼資料 AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html)，則必須將 `"kms:GenerateDataKey"`、 `"kms:Decrypt"`和 `"kms:Encrypt"`動作新增至您用於存取 Athena 的政策。如需相關資訊，請參閱[在 中設定從 Athena 到加密中繼資料的存取權 AWS Glue Data Catalog](access-encrypted-data-glue-data-catalog.md)。

# 從 CSE-KMS 移轉至 SSE-KMS
<a name="migrating-csekms-ssekms"></a>

您可以透過兩種方式來指定 CSE-KMS 加密：在工作群組查詢結果加密組態期間以及用戶端設定中。如需詳細資訊，請參閱[加密 Amazon S3 中存放的 Athena 查詢結果](encrypting-query-results-stored-in-s3.md)。在移轉程序期間，請務必稽核讀取和寫入 CSE-KMS 資料的現有工作流程、識別已設定 CSE-KMS 的工作群組，以及找到透過用戶端參數設定 CSE-KMS 的執行個體。

## 更新工作群組查詢結果加密設定
<a name="migrating-updating-workgroup-query-results-encryption"></a>

------
#### [ Console ]

**在 Athena 主控台中更新加密設定**

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

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

1. 在 **Workgroups** (工作群組) 頁面上，選取您要編輯的工作群組的按鈕。

1. 選擇 **Actions** (動作)、**Edit** (編輯)。

1. 開啟**查詢結果組態**，然後選擇**加密查詢結果**。

1. 對於**加密類型**區段，選擇 **SSE\$1KMS** 加密選項。

1. 在**選擇不同的 AWS KMS 金鑰 (進階)** 下，輸入您的 KMS 金鑰。

1. 選擇**儲存變更**。更新的工作群組會出現在 **Workgroups** (工作群組) 頁面上的清單。

------
#### [ CLI ]

執行下列命令，將工作群組中的查詢結果加密組態更新為 SSE-KMS。

```
aws athena update-work-group \
    --work-group "my-workgroup" \
    --configuration-updates '{
        "ResultConfigurationUpdates": {
            "EncryptionConfiguration": {
                "EncryptionOption": "SSE_KMS",
                "KmsKey": "<my-kms-key>"
            }
        }
    }'
```

------

## 更新用戶端查詢結果加密設定
<a name="migrating-updating-clientside-query-results-encryption"></a>

------
#### [ Console ]

要將查詢結果加密的用戶端設定從 CSE-KMS 更新為 SSE-KMS，請參閱 [加密 Amazon S3 中存放的 Athena 查詢結果](encrypting-query-results-stored-in-s3.md)。

------
#### [ CLI ]

您只能使用 `start-query-execution` 命令在用戶端設定中指定查詢結果加密組態。如果您執行此 CLI 命令，並使用 CSE-KMS 覆寫您在工作群組中指定的查詢結果加密組態，請變更命令以使用 `SSE_KMS` 加密查詢結果，如下所示。

```
aws athena start-query-execution \
    --query-string "SELECT * FROM <my-table>;" \
    --query-execution-context "Database=<my-database>,Catalog=<my-catalog>" \
    --result-configuration '{
        "EncryptionConfiguration": {
            "EncryptionOption": "SSE_KMS",
            "KmsKey": "<my-kms-key>"
        }
    }' \
    --work-group "<my-workgroup>"
```

------

**注意**  
更新工作群組或用戶端設定後，您透過寫入查詢插入的任何新資料都會使用 SSE-KMS 加密而不是 CSE-KMS。這是因為查詢結果加密組態也適用於新插入的資料表資料。Athena 查詢結果、中繼資料和資訊清單檔案也會使用 SSE-KMS 進行加密。
即使混合使用了 CSE-KMS 加密物件和 SSE-S3/SSE-KMS 物件，Athena 仍然可以讀取具有 `has_encrypted_data` 資料表屬性的資料表。

# 將 CSE-KMS 資料表資料轉換為 SSE-KMS
<a name="convert-csekms-table-ssekms"></a>

如果您的工作流程目前使用 CSE-KMS 來進行資料表資料加密，則請依照下列步驟轉換至 SSE-KMS。

## 先決條件
<a name="convert-csekms-table-ssekms-preq"></a>

如果您仍然使用 CSE-KMS 工作群組或用戶端設定寫入資料，則請遵循 [從 CSE-KMS 移轉至 SSE-KMS](migrating-csekms-ssekms.md) 中的步驟，將其更新為 SSE-KMS。這可避免在移轉程序期間從可能寫入資料表的任何其他工作流程中新增新的 CSE-KMS 加密資料。

## 資料遷移
<a name="convert-csekms-table-ssekms-migrat"></a>

1. 檢查資料表是否已將 `has_encrypted_data` 屬性設定為 `true`。此屬性會指定該資料表可能包含 CSE-KMS 加密資料。不過，請務必注意，即使資料表上沒有任何實際 CSE-KMS 加密資料，也可能存在此屬性。

------
#### [ Console ]

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

   1. 選擇**啟動查詢編輯器**。

   1. 在編輯器左側的**資料庫**下，選擇您要查詢的資料庫。

   1. 在查詢編輯器中，執行下列查詢以查看 `has_encrypted_data table` 屬性所設定的值。

      ```
      SHOW TBLPROPERTIES <table_name>('has_encrypted_data');
      ```

------
#### [ CLI ]

   啟動 Athena 查詢，其中會顯示資料表上 `has_encrypted_data` 屬性的值，如下列範例所示。

   ```
   aws athena start-query-execution \
       --query-string "SHOW TBLPROPERTIES <table-name>('has_encrypted_data');" \
       --work-group "<my-workgroup>"
   ```

   擷取查詢結果，以檢查資料表的 `has_encrypted_data` 資料表屬性的值，如下列範例所示。

   ```
   aws athena get-query-results --query-execution-id <query-execution-id-from-previous-step>
   ```

------

1. 適用於資料表中的每個 CSE-KMS 加密物件。

   1. 使用 S3 加密用戶端從 S3 下載物件並將其解密。以下是 AWS Java SDK V2 的範例。

      **匯入**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.services.s3.model.GetObjectRequest;
      import software.amazon.awssdk.services.s3.model.GetObjectResponse;
      import software.amazon.encryption.s3.S3EncryptionClient;
      import software.amazon.encryption.s3.materials.Keyring;
      import software.amazon.encryption.s3.materials.KmsDiscoveryKeyring;
      ```

      Code

      ```
      final Keyring kmsDiscoveryKeyRing = KmsDiscoveryKeyring.builder()
              .enableLegacyWrappingAlgorithms(true)
              .build();
      final S3EncryptionClient s3EncryptionClient = S3EncryptionClient.builder()
              .enableLegacyUnauthenticatedModes(true)
              .keyring(kmsDiscoveryKeyRing)
              .build();
      
      GetObjectRequest getObjectRequest = GetObjectRequest.builder()
              .bucket("amzn-s3-demo-bucket")
              .key("<my-key>")
              .build();
      
      ResponseInputStream<GetObjectResponse> s3Object = s3EncryptionClient.getObject(getObjectRequest);
      ```

   1. 以相同的名稱和 SSE-KMS 加密的方式，將物件上傳至 S3。以下是 AWS Java SDK V2 的範例。

      **匯入**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.core.sync.RequestBody;
      import software.amazon.awssdk.services.s3.S3Client;
      import software.amazon.awssdk.services.s3.model.PutObjectRequest;
      import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
      ```

      **Code**

      ```
      final S3Client s3Client = S3Client.builder()
              .build();
                  
      PutObjectRequest putObjectRequest = PutObjectRequest.builder()
              .bucket("amzn-s3-demo-bucket")
              .key("<my-key>")
              .serverSideEncryption(ServerSideEncryption.AWS_KMS)
              .ssekmsKeyId("<my-kms-key>")
              .build();
      
      s3Client.putObject(putObjectRequest, RequestBody.fromBytes(s3Object.readAllBytes()));
      ```

## 移轉後
<a name="convert-csekms-table-ssekms-post-migrat"></a>

成功重新加密資料表中的所有 CSE-KMS 檔案後，請執行下列步驟。

1. 從資料表中移除 `has_encrypted_data` 屬性。

------
#### [ Console ]

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

   1. 選擇**啟動查詢編輯器**。

   1. 在編輯器左側的**資料庫**下，選擇您要查詢的資料庫。

   1. 在查詢編輯器中，為您的資料表執行下列查詢。

      ```
      ALTER TABLE <database-name>.<table-name> UNSET TBLPROPERTIES ('has_encrypted_data')
      ```

------
#### [ CLI ]

   執行下列命令，從資料表移除 `has_encrypted_data` 屬性。

   ```
   aws athena start-query-execution \
       --query-string "ALTER TABLE <database-name>.<table-name> UNSET TBLPROPERTIES ('has_encrypted_data');" \
       --work-group "<my-workgroup>"
   ```

------

1. 更新工作流程以使用基本 S3 用戶端而非 S3 加密用戶端，然後為資料寫入指定 SSE-KMS 加密。

# 加密 Amazon S3 中存放的 Athena 查詢結果
<a name="encrypting-query-results-stored-in-s3"></a>

您使用 Athena 主控台或在使用 JDBC 或 ODBC 時設定查詢結果加密。工作群組可讓您強制加密查詢結果。

**注意**  
加密查詢結果時，Athena 會加密查詢寫入的所有物件。這包括陳述式 (例如 `INSERT INTO`、`UPDATE`) 的結果，以及採用 Iceberg 或其他格式的資料查詢。

在主控台中，您透過兩種方式設定查詢結果的加密設定：
+ **用戶端設定** – 當您使用主控台的 **Settings** (設定) 或 API 操作指出您想要加密查詢結果時，這稱為使用用戶端設定。用戶端設定包括查詢結果的位置和加密。如果您指定這些設定，就會派上用場，除非被群組設定所覆寫。
+ **工作群組設定** – 當您[建立或編輯工作群組](creating-workgroups.md)，並選取 **Override client-side settings** (覆寫用戶端設定) 欄位時，在此工作群組中執行的所有查詢會使用工作群組加密和查詢結果位置設定。如需詳細資訊，請參閱[Override client-side settings (覆寫用戶端設定)](workgroups-settings-override.md)。

**若要使用主控台加密存放在 Simple Storage Service (Amazon S3) 中的查詢結果**
**重要**  
如果您的工作群組選取 **Override client-side settings** (覆寫用戶端設定) 欄位，則工作群組中的所有查詢均會使用工作群組設定。不會使用在 Athena 主控台中的**設定**索引標籤上指定，或由 API 操作與 JDBC 和 ODBC 驅動器指定的加密組態和查詢結果位置。如需詳細資訊，請參閱[Override client-side settings (覆寫用戶端設定)](workgroups-settings-override.md)。

1. 在 Athena 主控台中，選擇 **Settings** (設定)。  
![\[Athena 查詢編輯器的設定索引標籤。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/settings.png)

1. 選擇**管理**。

1. 針對 **Location of query result** (查詢結果的位置)，輸入或選擇 Simple Storage Service (Amazon S3) 路徑。這是儲存查詢結果的 Simple Storage Service (Amazon S3) 位置。

1. 選擇 **Encrypt query results** (加密查詢結果)。  
![\[Athena 主控台管理設定頁面上的加密查詢結果選項。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/encrypt-query-results.png)

1. 對於 **Encryption type** (加密類型)，選擇 **CSE-KMS**、**SSE-KMS** 或 **SSE-S3**。在這三個中，**CSE-KMS** 提供了最高級別的加密，而 **SSE-S3** 是最低的。

1. 如果您選擇 **SSE-KMS** 或 **CSE-KMS**，請指定 AWS KMS 金鑰。
   + 針對**選擇 AWS KMS 金鑰**，如果您的帳戶可存取現有的 AWS KMS 客戶受管金鑰，請選擇其別名或輸入 AWS KMS 金鑰 ARN。
   +  如果您的帳戶無法存取現有的客戶受管金鑰，請選擇**建立 AWS KMS 金鑰**，然後開啟[AWS KMS 主控台](https://console.aws.amazon.com/kms)。如需詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
**注意**  
Athena 僅支援用於讀取和寫入資料的對稱金鑰。

1. 返回 Athena 主控台，選擇您透過別名或 ARN 建立的索引鍵。

1. 選擇**儲存**。

## 使用 JDBC 或 ODBC 時加密 Athena 查詢結果
<a name="encrypting-query-results-stored-in-s3-jdbc-odbc"></a>

如果您使用 ODBC 或 JDBC 驅動器連接，您需設定驅動器選項，以指定要使用的加密類型，以及 Amazon S3 臨時目錄位置。若要設定 JDBC 或 ODBC 驅動器，以使用 Athena 支援的任何加密通訊協定來加密您的查詢結果，請參閱 [使用 ODBC 和 JDBC 驅動器連接至 Amazon Athena](athena-bi-tools-jdbc-odbc.md)。

# 根據 Amazon S3 中加密的資料集建立資料表
<a name="creating-tables-based-on-encrypted-datasets-in-s3"></a>

Athena 可以讀取和寫入基礎資料集為 SSE-S3、SSE-KMS 或 CSE-KMS 加密的資料表。根據用於資料表資料的加密選項和執行的查詢類型，您可能需要指定一些額外的資料表屬性，才能讀取和寫入加密的資料。

## 讀取 SSE-S3/SSE-KMS 加密資料表
<a name="reading-sse-s3-sse-kms-encrypted-tables"></a>

建立資料表時不需要指定其他資料表屬性，即可讀取 SSE-S3/SSE-KMS 加密資料集。Amazon S3 會自動處理 SSE 物件的解密。

## 讀取 CSE-KMS 加密資料表
<a name="reading-cse-kms-encrypted-tables"></a>

可以指定兩組不同的資料表屬性，以便 Athena 讀取 CSE-KMS 加密資料集。
+ 使用 `encryption_option`和 `kms_key` 資料表屬性 （建議）
+ 使用`has_encrypted_data`資料表屬性

**重要**  
如果您使用 Amazon EMR 搭配 EMRFS 上傳 CSE-KMS 加密 Parquet 檔案，您必須將 `fs.s3n.multipart.uploads.enabled`設定為 來停用分段上傳`false`。如果您不執行此操作，則 Athena 無法判斷 Parquet 檔案長度，並且會發生 **HIVE\$1CANNOT\$1OPEN\$1SPLIT** 錯誤。如需詳細資訊，請參閱《Amazon EMR 管理指南》**中的[設定適用於 Amazon S3 的分段上傳](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-upload-s3.html#Config_Multipart)。

### 使用 encryption\$1option 和 kms\$1key 資料表屬性
<a name="using-encryption-option-and-kms-key-table-properties"></a>

在 [CREATE TABLE](create-table.md) 陳述式中，使用指定 `encryption_option='CSE_KMS'`和 的`TBLPROPERTIES`子句`kms_key='aws_kms_key_arn'`，如下列範例所示。

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/'
TBLPROPERTIES (
    'encryption_option' = 'CSE_KMS',
    'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')
```

設定這些屬性時，
+ Athena 可以讀取 V1, V2 或 V3 Amazon S3 加密用戶端建立的 CSE-KMS 加密物件。
+ Athena 將使用 中的 AWS KMS 金鑰`kms_key`來解密 CSE-KMS 資料。如果任何物件使用不同的 AWS KMS 金鑰加密，查詢將會失敗。
+ Athena 仍然可以讀取 SSE-S3 和 SSE-KMS 加密物件，但不建議混合伺服器端和用戶端加密物件。

### 使用 has\$1encrypted\$1data 資料表屬性
<a name="using-has-encrypted-data-table-property"></a>

在 [CREATE TABLE](create-table.md) 陳述式中，請使用指定 `has_encrypted_data='true'` 的 `TBLPROPERTIES` 子句，如以下範例所示。

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/'
TBLPROPERTIES (
    'has_encrypted_data' = 'true')
```

指定 has\$1encrypted\$1data 資料表屬性時，
+ Athena 只能讀取 V1 Amazon S3 加密用戶端建立的 CSE-KMS 加密物件。
+ Athena 會推斷用於從物件中繼資料加密 CSE-KMS 物件的 AWS KMS 金鑰，然後使用該金鑰解密物件。
+ Athena 仍然可以讀取 SSE-S3 和 SSE-KMS 加密物件，但不建議混合伺服器端和用戶端加密物件。

**注意**  
當 `kms_key` `encryption_option`和 與 一起指定時`has_encrypted_data`， `encryption_option`和 `kms_key`資料表屬性會優先，且`has_encrypted_data`會被忽略。

當您使用 Athena 主控台使用[表單建立資料表](data-sources-glue-manual-table.md)並指定資料表位置時，請選取**加密的資料集**選項，將 `has_encrypted_data='true'` 屬性新增至資料表。

![\[在新增資料表表格中選取 Encrypted data set (加密的資料集)\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/add-table-form-encrypted-option.png)


在 Athena 主控台的資料表清單中，具有 的 CSE-KMS 加密資料表`has_encrypted_data='true'`會顯示金鑰形狀圖示。

![\[已加密資料表圖示\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/tables-list-encrypted-table-icon.png)


## 寫入 SSE-S3/SSE-KMS/CSE-KMS 加密資料
<a name="writing-sse-s3-sse-kms-cse-kms-encrypted-data"></a>

根據預設，新插入的資料檔案將使用 Athena 工作群組中指定的查詢結果的加密組態進行加密。為了使用與查詢結果的加密組態不同的加密組態來寫入資料表資料，您必須新增一些額外的資料表屬性。

在 [CREATE TABLE](create-table.md) 陳述式中，使用指定 `encryption_option='SSE_S3 | SSE_KMS | CSE_KMS'`和 的`TBLPROPERTIES`子句`kms_key='aws_kms_key_arn'`，如下列範例所示。

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/'
TBLPROPERTIES (
    'encryption_option' = 'SSE_KMS',
    'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')
```

所有新插入的資料都會使用資料表屬性指定的加密組態來加密，而不是使用工作群組中查詢的加密組態。

## 考量事項與限制
<a name="considerations-and-limitations"></a>

寫入和讀取加密的資料集時，請考慮下列事項。
+ `has_encrypted_data`、 `encryption_option`和 `kms_key`資料表屬性只能與 Hive 資料表搭配使用。
+ 使用 CSE-KMS 加密資料建立資料表時，建議您確保所有資料都使用相同的 AWS KMS 金鑰加密。
+ 使用 CSE-KMS 加密資料建立資料表時，建議您確保所有資料都經過 CSE-KMS 加密，而且不會混合non-CSE-KMS 和 CSE-KMS 加密物件。

# 傳輸中加密
<a name="encryption-in-transit"></a>

除了在 Simple Storage Service (Amazon S3) 中加密靜態資料外，Amazon Athena 還會在 Athena 與 Simple Storage Service (Amazon S3) 之間，以及 Athena 與存取它的客戶應用程式之間，對傳輸中資料使用 Transport Layer Security (TLS) 加密。

您應該使用 Simple Storage Service (Amazon S3) 儲存貯體 IAM 政策上的 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean)，僅允許透過 HTTPS (TLS) 進行加密連線。

串流至 JDBC 或 ODBC 用戶端的查詢結果會使用 TLS 來加密。如需最新版 JDBC 和 ODBC 驅動程式及其文件的詳細資訊，請參閱[使用 JDBC 連接到 Amazon Athena](connect-with-jdbc.md)和[使用 ODBC 連接到 Amazon Athena](connect-with-odbc.md)。

對於 Athena 聯合資料來源連接器，支援使用 TLS 加密進行傳輸中加密取決於各個連接器。如需相關資訊，請參閱個別[資料來源連接器](connectors-available.md)的文件。

# 金鑰管理
<a name="key-management"></a>

Amazon Athena 支援 AWS Key Management Service (AWS KMS) 加密 Amazon S3 和 Athena 查詢結果中的資料集。 AWS KMS 使用客戶受管金鑰來加密 Amazon S3 物件，並依賴[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。

在 中 AWS KMS，您可以執行下列動作：
+  [建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) 
+  [為新的客戶自管金鑰匯入您自己的金鑰材料](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) 

**注意**  
Athena 僅支援用於讀取和寫入資料的對稱金鑰。

如需詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[什麼是 AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)，以及 [Amazon Simple Storage Service 如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html)。若要檢視您帳戶中為您 AWS 建立和管理的金鑰，請在導覽窗格中選擇**AWS 受管金鑰**。

如果您要上傳或存取 SSE-KMS 加密的物件，請使用 AWS Signature 第 4 版來提高安全性。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[指定請求身分驗證中的簽章版本](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingAWSSDK.html#specify-signature-version)。

如果 Athena 工作負載會加密大量資料，您可以使用 Amazon S3 儲存貯體金鑰來降低成本。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[使用 Amazon S3 儲存貯體金鑰降低 SSE-KMS 的成本](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)。

# 網際網路流量隱私權
<a name="internetwork-traffic-privacy"></a>

同時保護 Athena 與內部部署應用程式之間的流量，以及 Athena 與 Simple Storage Service (Amazon S3) 之間的流量。Athena 與其他 服務之間的流量，例如 AWS Glue 和 AWS Key Management Service，預設會使用 HTTPS。
+ **對於 Athena 與內部部署用戶端和應用程式之間的流量**，串流至 JDBC 或 ODBC 用戶端的查詢結果會使用 Transport Layer Security (TLS) 來加密。

  您可以在私有網路與 AWS之間使用其中一個連線選項：
  + Site-to-Site Site-to-Site VPN 連接。如需詳細資訊，請參閱《 Site-to-Site VPN使用者指南》[https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)中的*什麼是 Site-to-Site VPN AWS Site-to-Site VPN *。
  +  Direct Connect 連線。如需詳細資訊，請參閱《Direct Connect 使用者指南》**中的[什麼是 Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)。
+ **對於 Athena 和 Simple Storage Service (Amazon S3) 儲存貯體之間的流量**，Transport Layer Security (TLS) 會在 Athena 和 Simple Storage Service (Amazon S3) 之間，以及在 Athena 和存取該物件的客戶應用程式之間加密傳輸中的物件，且您應使用 Simple Storage Service (Amazon S3) 儲存貯體 IAM 政策上的 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean)，僅允許透過 HTTPS (TLS) 的加密連線。儘管 Athena 目前使用公有端點存取 Amazon S3 儲存貯體中的資料，但這並不意味著資料會周遊公有網際網路。Athena 和 Amazon S3 之間的所有流量都會透過 AWS 網路路由，並使用 TLS 加密。
+ **合規計劃** – Amazon Athena 符合多個 AWS 合規計劃，包括 SOC、PCI、FedRAMP 等。如需詳細資訊，請參閱[合規計劃的AWS 服務 範圍](https://aws.amazon.com/compliance/services-in-scope/)。

# Athena 中的 Identity and Access Management
<a name="security-iam-athena"></a>

Amazon Athena 使用 [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 政策來限制對 Athena 操作的存取。如需 Athena 許可的完整清單，請參閱《服務授權參考》**中的[適用於 Amazon Athena 的動作、資源和條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)。

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

執行 Athena 查詢所需的許可包括以下項目：
+ Amazon S3 位置，用來存放要查詢的基礎資料。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的 [Amazon S3 中的 Identity and Access Management](https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html)。
+ 存放在 中的中繼資料和資源 AWS Glue Data Catalog，例如資料庫和資料表，包括加密中繼資料的其他動作。如需詳細資訊，請參閱《AWS Glue 開發人員指南》**中的[設定 AWS Glue的 IAM 許可](https://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html)以及[設定 AWS Glue中的加密](https://docs.aws.amazon.com/glue/latest/dg/set-up-encryption.html)。
+ Athena API 動作。如需 Athena 中的 API 動作清單，請參閱《Amazon Athena API 參考》**中的[動作](https://docs.aws.amazon.com/athena/latest/APIReference/API_Operations.html)。

以下主題會提供有關 Athena 特定區域許可的詳細資訊。

**Topics**
+ [AWS 受管政策](security-iam-awsmanpol.md)
+ [資料周邊](data-perimeters.md)
+ [透過 JDBC 和 ODBC 連接存取](policy-actions.md)
+ [透過 Athena 控制 Amazon S3 的存取權](s3-permissions.md)
+ [跨帳戶存取 S3 儲存貯體](cross-account-permissions.md)
+ [存取 中的資料庫和資料表 AWS Glue](fine-grained-access-to-glue-resources.md)
+ [跨帳戶存取 AWS Glue 資料目錄](security-iam-cross-account-glue-catalog-access.md)
+ [存取 Data Catalog 中的加密中繼資料](access-encrypted-data-glue-data-catalog.md)
+ [存取工作群組和標籤](workgroups-access.md)
+ [使用 IAM 政策來控制工作群組存取](workgroups-iam-policy.md)
+ [啟用 IAM Identity Center 的工作群組](workgroups-identity-center.md)
+ [設定最低加密](workgroups-minimum-encryption.md)
+ [設定存取預備陳述式](security-iam-athena-prepared-statements.md)
+ [使用 CalledVia 內容索引鍵](security-iam-athena-calledvia.md)
+ [允許存取外部 Hive 中繼存放區的 Athena 資料連接器](hive-metastore-iam-access.md)
+ [允許 Lambda 函數存取外部 Hive 中繼存放區](hive-metastore-iam-access-lambda.md)
+ [建立連接器和 Athena 目錄所需的許可](athena-catalog-access.md)
+ [允許存取 Athena 聯合查詢](federated-query-iam-access.md)
+ [允許存取 UDF](udf-iam-access.md)
+ [允許使用 Athena 存取機器學習](machine-learning-iam-access.md)
+ [啟用對 Athena API 的聯合存取](access-federation-saml.md)

# AWS Amazon Athena 的 受管政策
<a name="security-iam-awsmanpol"></a>

 AWS 受管政策是由 AWS AWS 受管政策建立和管理的獨立政策旨在為許多常用案例提供許可，以便您可以開始將許可指派給使用者、群組和角色。

請記住， AWS 受管政策可能不會授予特定使用案例的最低權限許可，因為這些許可可供所有 AWS 客戶使用。我們建議您定義特定於使用案例的[客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)，以便進一步減少許可。

您無法變更 AWS 受管政策中定義的許可。如果 AWS 更新 AWS 受管政策中定義的許可，則更新會影響政策連接的所有主體身分 （使用者、群組和角色）。 AWS 服務 當新的 啟動或新的 API 操作可用於現有 服務時， AWS 最有可能更新 AWS 受管政策。

如需詳細資訊，請參閱 *IAM 使用者指南*中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## 在搭配 Athena 使用受管政策時的考量事項
<a name="managed-policies-considerations"></a>

受管政策不但易於使用，且會隨著服務的演進，自動更新以具有所需動作。在搭配 Athena 使用受管政策時，請記得以下幾點：
+ 若要使用 AWS Identity and Access Management (IAM)，為您自己或其他使用者允許或拒絕 Amazon Athena 服務動作，請將身分型政策連接到委託人，例如使用者或群組。
+ 每個身分型政策由陳述式組成，這些陳述式定義了允許或拒絕的動作。如需有關將政策連接到使用者的詳細資訊和逐步說明，請參閱《IAM 使用者指南》**中的[連接受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)。如需動作的清單，請參閱《[Amazon Athena API 參考](https://docs.aws.amazon.com/athena/latest/APIReference/)》。
+  *客戶受管*和*內嵌*的身分型政策，可讓您在政策中指定更詳細的 Athena 動作來微調存取。我們建議您以 `AmazonAthenaFullAccess` 政策做為起點，然後允許或拒絕 [Amazon Athena API 參考](https://docs.aws.amazon.com/athena/latest/APIReference/)中列出的特定動作。如需內嵌政策的詳細資訊，請參閱《IAM 使用者指南》**中的[受管政策和內嵌政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html)。
+ 如果您也有使用 JDBC 連接的委託人，您必須向您的應用程式提供 JDBC 驅動程式登入資料。如需詳細資訊，請參閱[透過 JDBC 和 ODBC 連接控制存取](policy-actions.md)。
+ 如果您已加密 AWS Glue Data Catalog，您必須在 Athena 的身分型 IAM 政策中指定其他動作。如需詳細資訊，請參閱[在 中設定從 Athena 到加密中繼資料的存取權 AWS Glue Data Catalog](access-encrypted-data-glue-data-catalog.md)。
+ 如果您建立和使用工作群組，請確保您的政策包含對群組動作的相關存取。如需詳細資訊，請參閱[使用 IAM 政策來控制工作群組存取](workgroups-iam-policy.md)和[工作群組政策範例](example-policies-workgroup.md)。

## AWS 受管政策：AmazonAthenaFullAccess
<a name="amazonathenafullaccess-managed-policy"></a>

`AmazonAthenaFullAccess` 受管政策會授予 Athena 的完整存取權。

若要提供存取權，請新增許可到您的使用者、群組或角色：
+ 中的使用者和群組 AWS IAM Identity Center：

  建立權限合集。請按照《*AWS IAM Identity Center 使用者指南*》中的[建立權限合集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)說明進行操作。
+ 透過身分提供者在 IAM 中管理的使用者：

  建立聯合身分的角色。遵循《*IAM 使用者指南*》的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)中的指示。
+ IAM 使用者：
  + 建立您的使用者可擔任的角色。請按照《*IAM 使用者指南*》的[為 IAM 使用者建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)中的指示。
  + (不建議) 將政策直接附加至使用者，或將使用者新增至使用者群組。請遵循《IAM 使用者指南》**的[新增許可到使用者 (主控台)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的指示。

### 許可群組
<a name="amazonathenafullaccess-managed-policy-groupings"></a>

`AmazonAthenaFullAccess` 政策會分組為以下許可集。
+ **`athena`** – 允許委託人存取 Athena 資源。
+ **`glue`** – 允許主體存取 AWS Glue 目錄、資料庫、資料表和分割區。這是必要的，以便委託人可以搭配 Athena 使用 AWS Glue Data Catalog。
+ **`s3`** – 允許委託人寫入和讀取來自 Simple Storage Service (Amazon S3) 的查詢結果，讀取位於 Simple Storage Service (Amazon S3) 中的公開可用 Athena 資料範例，並列出儲存貯體。委託人需要此許可才能使用 Athena 以與 Simple Storage Service (Amazon S3) 搭配運作。
+ **`sns`** – 允許委託人列出 Amazon SNS 主題並取得主題屬性。這可讓委託人將 Amazon SNS 主題搭配 Athena 使用，以用於監控和提醒用途。
+ **`cloudwatch`** – 允許委託人建立、讀取和刪除 CloudWatch 警示。如需詳細資訊，請參閱[使用 CloudWatch 和 EventBridge 來監控查詢和控制成本](workgroups-control-limits.md)。
+ **`lakeformation`** – 允許委託人要求臨時憑證，以存取位於向 Lake Formation 註冊的資料湖位置中的資料。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[基礎資料存取控制](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html)。
+ **`datazone`** – 允許主體列出 Amazon DataZone 專案、網域和環境。如需有關在 Athena 中使用 DataZone 的詳細資訊，請參閱 [在 Athena 中使用 Amazon DataZone](datazone-using.md)。
+ **`pricing`** – 提供 的存取權 AWS 帳單與成本管理。如需詳細資訊，請參閱《AWS 帳單與成本管理 API 參考》**中的 [GetProducts](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_pricing_GetProducts.html)。

若要檢視此政策的許可，請參閱《 AWS 受管政策參考》中的 [AmazonAthenaFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html)。

**注意**  
您必須明確允許存取服務擁有的 Amazon S3 儲存貯體，以存放範例查詢和範例資料集。如需詳細資訊，請參閱[資料周邊](data-perimeters.md)。

## AWS 受管政策：AWSQuicksightAthenaAccess
<a name="awsquicksightathenaaccess-managed-policy"></a>

`AWSQuicksightAthenaAccess` 會授予 Quick 與 Athena 整合所需的動作存取權。您可將 `AWSQuicksightAthenaAccess` 政策連接到 IAM 身分。僅將此政策連接到使用 Quick with Athena 的委託人。此政策包含的 Athena 動作，有些已被取代且未包含在目前的公有 API 中，或是僅用於 JDBC 和 ODBC 驅動程式。

### 許可群組
<a name="awsquicksightathenaaccess-managed-policy-groupings"></a>

`AWSQuicksightAthenaAccess` 政策會分組為以下許可集。
+ **`athena`** – 允許委託人在 Athena 資源上執行查詢。
+ **`glue`** – 允許主體存取 AWS Glue 目錄、資料庫、資料表和分割區。這是必要的，以便委託人可以搭配 Athena 使用 AWS Glue Data Catalog。
+ **`s3`** – 允許委託人從 Simple Storage Service (Amazon S3) 寫入和讀取查詢結果。
+ **`lakeformation`** – 允許委託人要求臨時憑證，以存取位於向 Lake Formation 註冊的資料湖位置中的資料。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[基礎資料存取控制](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html)。

若要檢視此政策的許可，請參閱《 AWS 受管政策參考》中的 [AWSQuicksightAthenaAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSQuicksightAthenaAccess.html)。

## AWS 受管政策的 Athena 更新
<a name="managed-policies-updates"></a>

檢視自此服務開始追蹤這些變更以來，Athena AWS 受管政策更新的詳細資訊。


| 變更 | 描述 | Date | 
| --- | --- | --- | 
| [AWSQuicksightAthenaAccess](#awsquicksightathenaaccess-managed-policy) – 現有政策的更新 | 新增了 glue:GetCatalog 和 glue:GetCatalogs 許可，讓 Athena 使用者能夠存取 SageMaker AI Lakehouse 目錄。 | 2025 年 1 月 2 日 | 
| [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy) – 更新現有政策 | 新增了 glue:GetCatalog 和 glue:GetCatalogs 許可，讓 Athena 使用者能夠存取 SageMaker AI Lakehouse 目錄。 | 2025 年 1 月 2 日 | 
| [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy) – 更新現有政策 |  讓 Athena 使用公開記載 AWS Glue 的 `GetCatalogImportStatus` API 擷取目錄匯入狀態。  | 2024 年 6 月 18 日 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy) – 更新現有政策  |  新增 `datazone:ListDomains`、`datazone:ListProjects`、和 `datazone:ListAccountEnvironments` 許可，讓 Athena 使用者能夠使用 Amazon DataZone 網域、專案和環境。如需詳細資訊，請參閱[在 Athena 中使用 Amazon DataZone](datazone-using.md)。  | 2024 年 1 月 3 日 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy) – 更新現有政策  |  新增 `glue:StartColumnStatisticsTaskRun`、 `glue:GetColumnStatisticsTaskRun`和 `glue:GetColumnStatisticsTaskRuns`許可，讓 Athena 有權呼叫 AWS Glue 來擷取成本型最佳化工具功能的統計資料。如需詳細資訊，請參閱[使用成本型最佳化工具](cost-based-optimizer.md)。  | 2024 年 1 月 3 日 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy) – 更新現有政策  |  Athena 已新增 `pricing:GetProducts`，以提供對 AWS 帳單與成本管理的存取。如需詳細資訊，請參閱《AWS 帳單與成本管理 API 參考》**中的 [GetProducts](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_pricing_GetProducts.html)。  | 2023 年 1 月 25 日 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy) – 更新現有政策  |  Athena 新增了 `cloudwatch:GetMetricData` 以擷取 CloudWatch 指標值。如需詳細資訊，請參閱《Amazon CloudWatch API 參考**》中的 [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html)。  | 2022 年 11 月 14 日 | 
|  [AmazonAthenaFullAccess](#amazonathenafullaccess-managed-policy) 和 [AWSQuicksightAthenaAccess](#awsquicksightathenaaccess-managed-policy) - 現有政策的更新  |  Athena 新增了 `s3:PutBucketPublicAccessBlock`，以封鎖對 Athena 建立的儲存貯體的公開存取。  | 2021 年 7 月 7 日 | 
|  Athena 已開始追蹤變更  |  Athena 開始追蹤其 AWS 受管政策的變更。  | 2021 年 7 月 7 日 | 

# 資料周邊
<a name="data-perimeters"></a>

[資料周邊](https://aws.amazon.com/identity/data-perimeters-on-aws/)是 AWS 環境中的一組許可護欄，用於協助確保只有您信任的身分才能從預期的網路存取信任的資源。

Amazon Athena 使用服務擁有的 Amazon S3 儲存貯體來存放範例查詢和範例資料集。如果您使用資料周邊來控制環境中的存取，您必須明確允許存取這些服務擁有的資源，才能使用對應的 Athena 功能。

 下表列出 Athena 需要存取的 Amazon S3 儲存貯體 ARN、所需的許可、Athena 使用的身分，以及依賴 S3 儲存貯體的功能。若要允許存取，請將儲存貯體 ARN `<region>`中的 取代為實際 ， AWS 區域 並允許根據您的 Amazon S3 存取控制列出此儲存貯體。


**Athena 使用的資料周邊**  

| 資源 ARN | 所需的許可 | 用於存取的身分 | 存取案例 | 
| --- | --- | --- | --- | 
|  arn:aws:s3:::athena-examples-<region>  | s3:GetObjects3:ListBucket | 存取 Athena 的 IAM 主體。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/data-perimeters.html)  | 

# 透過 JDBC 和 ODBC 連接控制存取
<a name="policy-actions"></a>

若要存取 AWS 服務 和 資源，例如 Athena 和 Amazon S3 儲存貯體，請將 JDBC 或 ODBC 驅動程式憑證提供給應用程式。如果您使用的是 JDBC 或 ODBC 驅動程式，請確保 IAM 許可政策包括 [AWS 受管政策：AWSQuicksightAthenaAccess](security-iam-awsmanpol.md#awsquicksightathenaaccess-managed-policy) 中列出的所有動作。

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

## 身分驗證方法
<a name="security-jdbc-odbc-access-authentication"></a>

Athena JDBC 和 ODBC 驅動程式支援 SAML 2.0 型身分驗證，包括以下身分提供者：
+ Active Directory Federation Services (AD FS)
+ Azure Active Directory (AD)
+ Okta 
+ PingFederate

如需詳細資訊，請參閱各個驅動程式的安裝和組態指南，可從 [JDBC](connect-with-jdbc.md) 和 [ODBC](connect-with-odbc.md) 驅動程式頁面下載 PDF 格式的指南。如需其他相關資訊，請參閱以下內容：
+ [啟用對 Athena API 的聯合存取](access-federation-saml.md)
+ [使用 Lake Formation 和 JDBC 或 ODBC 驅動器對 Athena 進行聯合存取](security-athena-lake-formation-jdbc.md)
+  [使用 ODBC、SAML 2.0 和 Okta 身分提供者設定單一登入](okta-saml-sso.md)

如需最新版 JDBC 和 ODBC 驅動程式及其文件的詳細資訊，請參閱[使用 JDBC 連接到 Amazon Athena](connect-with-jdbc.md)和[使用 ODBC 連接到 Amazon Athena](connect-with-odbc.md)。

# 透過 Athena 控制 Amazon S3 的存取權
<a name="s3-permissions"></a>

您可以使用身分型政策、儲存貯體資源政策、存取點政策或上述政策的任何組合，授予對 Amazon S3 位置的存取權。當演員與 Athena 互動時，其許可會傳遞給 Athena，進而確定 Athena 可以存取的內容。這表示使用者必須擁有存取 Amazon S3 儲存貯體的許可，才能向 Athena 查詢這些儲存貯體。

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

請注意，對 Amazon S3 的請求來自 Athena 的私有 IPv4 位址，而不是 `aws:SourceIp` 中指定的來源 IP。因此，您無法使用 `aws:SourceIp` 條件來拒絕存取指定 IAM 政策中的 Amazon S3 動作。此外，您也無法根據 `aws:SourceVpc` 或 `aws:SourceVpce` 條件索引鍵限制或允許存取 Amazon S3 資源。

**注意**  
使用 IAM Identity Center 身分驗證的 Athena 工作群組，需要將 S3 Access Grants 設定為使用受信任的身分傳播身分。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的 [S3 Access Grants 和目錄身分](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-directory-ids.html)。

**Topics**
+ [身分型政策](#s3-permissions-identity-based-policies)
+ [儲存貯體資源政策](#s3-permissions-bucket-resource-policies)
+ [存取點政策](#s3-permissions-aliases)
+ [CalledVia 內容索引鍵](#s3-permissions-calledvia)
+ [其他資源](#s3-permissions-additional-resources)

## 使用身分型政策來控制 Amazon S3 儲存貯體的存取權
<a name="s3-permissions-identity-based-policies"></a>

以身分為基礎的政策會連接至 IAM 使用者、群組或角色。這些政策可讓您指定該身分可以執行哪些動作 (其許可)。您可以使用身分型政策來控制 Amazon S3 儲存貯體的存取權。

下列身分型政策允許對特定 Amazon S3 儲存貯體中的物件進行 `Read` 和 `Write` 存取。若要使用此政策，請將*斜體預留位置文字*取代為您自己的值。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

------

## 使用儲存貯體資源政策來控制 Amazon S3 儲存貯體的存取權
<a name="s3-permissions-bucket-resource-policies"></a>

您可以使用 Amazon S3 儲存貯體政策，以確保安全地存取儲存貯體中的物件，以便只有具有適當許可的使用者才能存取它們。如需有關建立 Amazon S3 政策的指南，請參閱《Amazon S3 使用者指南**》中的[使用 Amazon S3 主控台新增儲存貯體政策](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)。

下列範例許可政策會限制使用者只能讀取具有 `environment: production` 索引標籤金鑰和值的物件。此範例政策會使用 `s3:ExistingObjectTag` 條件金鑰來指定索引標籤金鑰和值。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/JohnDoe"
            },
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/environment": "production"
                }
            }
        }
    ]
}
```

------

如需更多儲存貯體政策範例，請參閱《Amazon S3 使用者指南**》中的 [Amazon S3 儲存貯體政策範例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)。

## 使用 Amazon S3 Access Points，以更精確地控制儲存貯體存取
<a name="s3-permissions-aliases"></a>

如果您在 Amazon S3 儲存貯體中具有共用的資料集，則維護負責管理數百個使用案例存取的單一儲存貯體政策可能十分具有挑戰性。

Amazon S3 儲存貯體存取點、政策和別名有助於解決此問題。儲存貯體可有多個存取點，每個存取點都有一個以不同方式控制儲存貯體存取的政策。

Amazon S3 會對您建立的每個存取點產生代表存取點的別名。由於別名採用 Amazon S3 儲存貯體名稱格式，您可以在 Athena 的 `CREATE TABLE` 陳述式 `LOCATION` 子句中使用該別名。接著，會由別名所代表的存取點政策來控制 Athena 對儲存貯體的存取。

如需詳細資訊，請參閱《Amazon S3 使用者指南》**中的 [在 Amazon S3 中指定資料表位置](tables-location-format.md) 和[使用存取點](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html)。

## 使用 CalledVia 內容索引鍵，僅允許從 Athena 呼叫其他服務
<a name="s3-permissions-calledvia"></a>

為了提升安全性，您可以使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia) 全域條件內容索引鍵。`aws:CalledVia` 條件索引鍵包含允許呼叫其他服務的服務清單。例如， AWS Lambda 只有在`InvokeFunction`呼叫來自 Athena 時，您才能允許呼叫 ，方法是指定`aws:CalledVia`內容金鑰`athena.amazonaws.com`的 Athena 服務主體名稱。如需詳細資訊，請參閱[針對 Athena 使用 CalledVia 內容索引鍵](security-iam-athena-calledvia.md)。

## 其他資源
<a name="s3-permissions-additional-resources"></a>

如需有關如何授予 Amazon S3 存取權的詳細資訊和範例，請參閱以下資源：
+ 《Amazon S3 使用者指南》**中的[範例演練：管理存取](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access.html)。
+ [如何在 知識中心提供 Amazon S3 儲存貯體中物件的跨帳戶存取權？](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/)。 AWS 
+ [設定 Athena 中的 Amazon S3 儲存貯體跨帳戶存取權](cross-account-permissions.md).

# 設定 Athena 中的 Amazon S3 儲存貯體跨帳戶存取權
<a name="cross-account-permissions"></a>

常見的 Amazon Athena 案例是將存取權授予非儲存貯體擁有者帳戶中的使用者，讓他們可以執行查詢。在這種情況下，使用儲存貯體政策來授予存取權。

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

以下範例儲存貯體政策由儲存貯體擁有者建立並套用至 `s3://amzn-s3-demo-bucket` 儲存貯體，會將存取權授予 `123456789123` 帳戶 (不同帳戶) 中的所有使用者。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "MyPolicyID",
   "Statement": [
      {
          "Sid": "MyStatementSid",
          "Effect": "Allow",
          "Principal": {
             "AWS": "arn:aws:iam::123456789123:root"
          },
          "Action": [
             "s3:GetBucketLocation",
             "s3:GetObject",
             "s3:ListBucket",
             "s3:ListBucketMultipartUploads",
             "s3:ListMultipartUploadParts",
             "s3:AbortMultipartUpload"
          ],
          "Resource": [
             "arn:aws:s3:::amzn-s3-demo-bucket",
             "arn:aws:s3:::amzn-s3-demo-bucket/*"
          ]
       }
    ]
 }
```

------

若要將存取權授予帳戶中的特定使用者，將 `Principal` 索引鍵取代為指定該使用者而非 `root` 的索引鍵。例如，針對使用者描述檔 `Dave`，請使用 `arn:aws:iam::123456789123:user/Dave`。

## 設定使用自訂 AWS KMS 金鑰加密之儲存貯體的跨帳戶存取權
<a name="cross-account-permissions-kms"></a>

如果您有使用 custom AWS Key Management Service (AWS KMS) 金鑰加密的 Amazon S3 儲存貯體，您可能需要將存取權授予其他 Amazon Web Services 帳戶的使用者。

將帳戶 A AWS KMS中 加密儲存貯體的存取權授予帳戶 B 中的使用者需要下列許可：
+ 帳戶 A 中的儲存貯體政策必須授與帳戶 B 所擔任的角色的存取權。
+ 帳戶 A 中的 AWS KMS 金鑰政策必須授予帳戶 B 中使用者所擔任角色的存取權。
+ 帳戶 B 擔任的 AWS Identity and Access Management (IAM) 角色必須同時授予帳戶 A 中儲存貯體和金鑰的存取權。

下列程序說明如何授與這些許可。

**將帳戶 A 中儲存貯體的存取權授與帳戶 B 中的使用者**
+ 從帳戶 A，[檢閱 S3 儲存貯體政策](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)，並確認有允許透過帳戶 B 的帳戶 ID 存取的陳述式。

  例如，下列儲存貯體政策會允許 `s3:GetObject` 存取帳戶 ID `111122223333`：

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

****  

  ```
  {
    "Id": "ExamplePolicy1",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "ExampleStmt1",
        "Action": [
          "s3:GetObject"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
        "Principal": {
          "AWS": [
            "111122223333"
          ]
        }
      }
    ]
  }
  ```

------

**從帳戶 a 中的 AWS KMS 金鑰政策，將存取權授予帳戶 b 中的使用者**

1. 在帳戶 A 的 AWS KMS 金鑰政策中，將帳戶 B 所擔任的角色許可授予下列動作：
   +  `kms:Encrypt` 
   +  `kms:Decrypt` 
   +  `kms:ReEncrypt*` 
   +  `kms:GenerateDataKey*` 
   +  `kms:DescribeKey` 

   下列範例僅會將金鑰存取權授予一個 IAM 角色。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowUseOfTheKey",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/role_name"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 從帳戶 A，[使用政策檢視檢閱金鑰 AWS 管理主控台 政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-policy-view)。

1. 在金鑰政策中，確認下列陳述式將帳戶 B 列為主體。

   ```
   "Sid": "Allow use of the key" 
   ```

1. 如果 `"Sid": "Allow use of the key"` 陳述式不存在，請執行下列步驟：

   1. [使用主控台預設檢視](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-default-view)切換以檢視金鑰政策。

   1.  將帳戶 B 的帳戶 ID 新增為具有金鑰存取權的外部帳戶。

**若要透過帳戶 B 所擔任的 IAM 角色授予帳戶 A 中儲存貯體和金鑰的存取權**

1. 從帳戶 B 中，開啟位於 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在帳戶 B 中開啟與使用者關聯的 IAM 角色。

1. 檢閱套用至 IAM 角色的許可政策清單。

1. 確定已套用會授與儲存貯體存取權的政策。

   下列範例陳述式會授予 IAM 角色 `amzn-s3-demo-bucket` 儲存貯體上的 `s3:GetObject` 和 `s3:PutObject` 操作的存取權：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExampleStmt2",
         "Action": [
           "s3:GetObject",
           "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
       }
     ]
   }
   ```

------

1. 確定已套用會授予金鑰存取權的政策。
**注意**  
如果帳戶 B 所擔任的 IAM 角色已經具有[管理員存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)，則您不需要透過使用者 IAM 政策授予金鑰存取權。

   下列陳述式範例會授予 IAM 角色使用金鑰 `arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd` 的存取權。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExampleStmt3",
         "Action": [
           "kms:Decrypt",
           "kms:DescribeKey",
           "kms:Encrypt",
           "kms:GenerateDataKey",
           "kms:ReEncrypt*"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
       }
     ]
   }
   ```

------

## 設定對儲存貯體物件的跨帳戶存取權
<a name="cross-account-permissions-objects"></a>

由帳戶 (帳戶 C) (而非儲存貯體擁有的帳戶 (帳戶 A)) 上傳的物件，可能需要可授與查詢帳戶 (帳戶 B) 讀取權限的明確物件層級 ACL。為了避免此需求，帳戶 C 應該先負責帳戶 A 中的角色，才能在儲存貯體中放置物件。如需詳細資訊，請參閱[如何提供 Amazon S3 儲存貯體中物件的跨帳戶存取權？](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/)。

# 在 中設定資料庫和資料表的存取權 AWS Glue Data Catalog
<a name="fine-grained-access-to-glue-resources"></a>

如果您將 AWS Glue Data Catalog 與 Amazon Athena 搭配使用，您可以為 Athena 中使用的資料庫和資料表 Data Catalog 物件定義資源層級政策。

**注意**  
本主題討論了資料庫和資料表層級安全性。如需有關資料欄、資料列和儲存格層級安全性的資訊，請參閱 [Lake Formation 中的資料篩選和儲存格層級安全性](https://docs.aws.amazon.com/lake-formation/latest/dg/data-filtering.html)。

您可以定義 IAM 身分型政策中的資源層級許可。

**重要**  
本節討論 IAM 身分型政策中的資源層級許可。這些不同於資源型政策。如需有關相關差異的詳細資訊，請參閱《IAM 使用者指南》**中的[身分型政策和資源型政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)。

請參閱以下主題以了解這些任務：


| 執行此任務 | 參閱以下主題 | 
| --- | --- | 
| 建立 IAM 政策來定義資源的存取權 | 《IAM 使用者指南》中的[建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。 | 
| 了解 中使用的 IAM 身分型政策 AWS Glue | 《AWS Glue 開發人員指南》中的[身分型政策 (IAM 政策)](https://docs.aws.amazon.com/glue/latest/dg/using-identity-based-policies.html)。 | 

 **本節內容** 
+  [限制](#access-to-glue-resources-limitations) 
+  [根據 設定目錄和資料庫的 AWS Glue 存取權 AWS 區域](#full-access-to-default-db-per-region) 
+  [關於 中資料表分割區和版本的存取控制 AWS Glue](#access-to-glue-resources-table-partitions-and-versions) 
+  [資料庫和資料表層級許可的範例](#examples-fine-grained-table-database-policies) 

## 限制
<a name="access-to-glue-resources-limitations"></a>

當您使用 和 Athena 的資料庫 AWS Glue Data Catalog 和資料表層級存取控制時，請考慮下列限制：
+ 啟用 IAM Identity Center 的 Athena 工作群組需要將 Lake Formation 設定為使用 IAM Identity Center 身分。如需詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[整合 IAM Identity Center](https://docs.aws.amazon.com/lake-formation/latest/dg/identity-center-integration.html)。
+ 您可以限制只能存取資料庫和資料表。這些控制項適用於資料表層級。您不能限制存取資料表中個別分割區。如需詳細資訊，請參閱[關於 中資料表分割區和版本的存取控制 AWS Glue](#access-to-glue-resources-table-partitions-and-versions)。
+  AWS Glue Data Catalog 包含下列資源：`CATALOG`、`TABLE`、 `DATABASE`和 `FUNCTION`。
**注意**  
從此清單中，Athena 和 之間的常見資源 AWS Glue Data Catalog 是`CATALOG`每個帳戶的 `DATABASE`、 `TABLE`和 。 `Function` 是特定的 AWS Glue。對於 Athena 中的刪除動作，您必須包含 AWS Glue 動作的許可。請參閱 [資料庫和資料表層級許可的範例](#examples-fine-grained-table-database-policies)。

  其階層如下：`CATALOG` 是每個帳戶中所有 `DATABASES` 的上階，而每個 `DATABASE` 是它的所有 `TABLES` 和 `FUNCTIONS` 的上階。例如，在帳戶中目錄裡的 `db` 資料庫中名為 `table_test` 的資料表，它的上階是帳戶中的 `db` 和目錄。對 `db` 資料庫來說，它的上階是帳戶中的目錄，而它的子代是資料表和函數。如需有關資源階層架構的詳細資訊，請參閱《AWS Glue 開發人員指南》**中的[資料目錄中的 ARN 清單](https://docs.aws.amazon.com/glue/latest/dg/glue-specifying-resource-arns.html#data-catalog-resource-arns)。
+ 對於資源的任何非刪除 Athena 動作，例如 `CREATE DATABASE`、`CREATE TABLE`、`SHOW DATABASE`、`SHOW TABLE` 或 `ALTER TABLE`，您需要許可，才能對資源 (資料表或資料庫) 以及資料目錄中資源的所有上階呼叫此動作。例如，對於表格，其上階為其所屬的資料庫，以及帳戶的目錄。對於資料庫，其上階為帳戶的目錄。請參閱 [資料庫和資料表層級許可的範例](#examples-fine-grained-table-database-policies)。
+ 對於 Athena 中的刪除動作，例如 `DROP DATABASE` 或 `DROP TABLE`，您也需要許可，才能對資料型錄中資源的所有上階和下階呼叫刪除動作。例如，若要刪除資料庫，您需要資料庫，目錄 (即其上階)，以及所有表格和使用者定義函數 (即其下階) 的許可。表格沒有下階。若要執行 `DROP TABLE`，您需要許可，才能對表格、其所屬資料庫，以及目錄執行此動作。請參閱 [資料庫和資料表層級許可的範例](#examples-fine-grained-table-database-policies)。

## 根據 設定目錄和資料庫的 AWS Glue 存取權 AWS 區域
<a name="full-access-to-default-db-per-region"></a>

若要讓 Athena 使用 AWS Glue， AWS 區域 需要一個政策，授予 AWS Glue Data Catalog 您 帳戶中每個 的資料庫和 存取權。若要建立資料庫，還需要 `CreateDatabase` 許可。在下列範例政策中，將 AWS 區域、 AWS 帳戶 ID 和 資料庫名稱取代為您自己的名稱。

```
{
   "Sid": "DatabasePermissions",
   "Effect": "Allow",
   "Action": [
      "glue:GetDatabase", 
      "glue:GetDatabases",
      "glue:CreateDatabase"
   ],
   "Resource": [
     "arn:aws:glue:us-east-1:123456789012:catalog",
     "arn:aws:glue:us-east-1:123456789012:database/default"
   ]
}
```

## 關於 中資料表分割區和版本的存取控制 AWS Glue
<a name="access-to-glue-resources-table-partitions-and-versions"></a>

在 中 AWS Glue，資料表可以有分割區和版本。資料表版本和分割區不會被視為 中的獨立資源 AWS Glue。授予資料表和資料表上階資源的存取權，便可得到資料表版本和分割區的存取權。

基於存取控制之目的，以下存取許可適用：
+ 控制適用於資料表層級。您可以限制只能存取資料庫和資料表。例如，如果允許存取有分割區的資料表，則此存取權會套用到資料表中的所有分割區。您不能限制存取資料表中個別分割區。
**重要**  
若要在分割區 AWS Glue 上執行動作，目錄、資料庫和資料表層級需要分割區動作的許可。存取資料表內的分割區並不足夠。例如，若要在資料庫 `myDB` 中對資料表 `myTable` 執行 `GetPartitions`，您必須授予目錄、`myDB` 資料庫和 `myTable` 資源的 `glue:GetPartitions` 許可。
+ 存取控制不適用於資料表版本。與分割區一樣，透過存取資料表 AWS Glue 上 中的資料表版本 APIs 和資料表前代來授予對資料表舊版的存取權。

如需 AWS Glue 動作許可的相關資訊，請參閱《 *AWS Glue 開發人員指南*》中的 [AWS Glue API 許可：動作和資源參考](https://docs.aws.amazon.com/glue/latest/dg/api-permissions-reference.html)。

## 資料庫和資料表層級許可的範例
<a name="examples-fine-grained-table-database-policies"></a>

下列資料表列出了 IAM 身分型政策範例，這些政策允許對 Athena 中的資料庫和資料表進行存取。我們建議您從這些範例開始，並根據您的需要調整它們，來允許或拒絕對特定資料庫和資料表的特定動作。

這些範例包括存取資料庫和目錄，以便 Athena 和 AWS Glue 可以一起運作。對於多個 AWS 區域，請包含每個資料庫和目錄的類似政策，每個區域一行。

在此範例中，將 `example_db` 資料庫和 `test` 資料表名稱取代為您自己的資料庫和資料表名稱。


| DDL 陳述式 | IAM 存取政策授予資源存取權的範例 | 
| --- | --- | 
| ALTER DATABASE | 可讓您修改 example\$1db 資料庫的屬性。<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase", <br />      "glue:UpdateDatabase"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db"<br />   ]<br />}</pre> | 
| CREATE DATABASE | 可讓您建立名為 example\$1db 的資料庫。<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase", <br />      "glue:CreateDatabase"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db"<br />   ]<br />}<br /></pre> | 
| CREATE TABLE | 可讓您在 example\$1db 資料庫中建立名為 test 的資料表。<pre>{<br />   "Sid": "DatabasePermissions",<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase", <br />      "glue:GetDatabases"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db"<br />   ]<br />},<br />{<br />   "Sid": "TablePermissions",<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetTables",<br />      "glue:GetTable",<br />      "glue:GetPartitions",<br />      "glue:CreateTable"<br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db",<br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/test"<br />   ]<br />}</pre> | 
| DROP DATABASE | 可讓您捨棄 example\$1db 資料庫，包括其中的所有資料表。<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:DeleteDatabase",<br />      "glue:GetTables", <br />      "glue:GetTable", <br />      "glue:DeleteTable" <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db", <br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/*", <br />     "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/example_db/*"<br />   ]<br /> }</pre> | 
| DROP TABLE | 可讓您捨棄 example\$1db 資料庫中名為 test 的分割資料表。如果您的資料表沒有分割區，請勿包含分割動作。<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:GetTable",<br />      "glue:DeleteTable", <br />      "glue:GetPartitions",<br />      "glue:GetPartition",<br />      "glue:DeletePartition" <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db", <br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/test"<br />   ]<br /> }</pre> | 
| MSCK REPAIR TABLE | 允許您在將 Hive 相容分割區新增至 example\$1db 資料庫中名為 test 的資料表後更新目錄中繼資料。<pre>{<br />    "Effect": "Allow",<br />    "Action": [<br />        "glue:GetDatabase",<br />        "glue:CreateDatabase",<br />        "glue:GetTable",<br />        "glue:GetPartitions",<br />        "glue:GetPartition",<br />        "glue:BatchCreatePartition"<br />    ],<br />    "Resource": [<br />      "arn:aws:glue:us-east-1:123456789012:catalog",<br />      "arn:aws:glue:us-east-1:123456789012:database/example_db", <br />      "arn:aws:glue:us-east-1:123456789012:table/example_db/test"<br />    ]<br />}</pre> | 
| SHOW DATABASES | 可讓您列出 AWS Glue Data Catalog中的所有資料庫。<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:GetDatabases" <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/*"<br />   ]<br /> }</pre> | 
| SHOW TABLES | 可讓您列出 example\$1db 資料庫中的所有資料表。<pre>{<br />   "Effect": "Allow",<br />   "Action": [<br />      "glue:GetDatabase",<br />      "glue:GetTables"    <br />   ],<br />   "Resource": [<br />     "arn:aws:glue:us-east-1:123456789012:catalog",<br />     "arn:aws:glue:us-east-1:123456789012:database/example_db",  <br />     "arn:aws:glue:us-east-1:123456789012:table/example_db/*"<br />   ]<br />}</pre> | 

# 設定 AWS Glue 資料目錄的跨帳戶存取
<a name="security-iam-cross-account-glue-catalog-access"></a>

您可以使用 Athena 的跨帳戶 AWS Glue 目錄功能，從非您自己的帳戶註冊 AWS Glue 目錄。在您設定 AWS Glue 所需的 IAM 許可，並註冊目錄作為 Athena [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html) 資源後，您可以使用 Athena 來執行跨帳戶查詢。如需使用 Athena 主控台以從其他帳戶註冊目錄的相關資訊，請參閱[從另一個帳戶註冊 Data Catalog](data-sources-glue-cross-account.md)。

如需 中跨帳戶存取的詳細資訊 AWS Glue，請參閱《 *AWS Glue 開發人員指南*》中的[授予跨帳戶存取](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html)。

## 開始之前
<a name="security-iam-cross-account-glue-catalog-access-before-you-start"></a>

由於此功能會使用現有的 Athena `DataCatalog` 資源 API 和功能，以啟用跨帳戶存取，因此建議您先閱讀以下資源再開始使用：
+ [連線至資料來源](work-with-data-stores.md) - 包含搭配、 AWS Glue Hive 或 Lambda 資料目錄來源使用 Athena 的主題。
+ [資料目錄範例政策](datacatalogs-example-policies.md) - 說明如何撰寫控制資料目錄存取的政策。
+ [AWS CLI 搭配 Hive 中繼存放區使用](datastores-hive-cli.md) - 示範如何 AWS CLI 搭配 Hive 中繼存放區使用 ，但包含適用於其他資料來源的使用案例。

## 考量和限制
<a name="security-iam-cross-account-glue-catalog-access-considerations-and-limitations"></a>

目前，Athena 跨帳戶 AWS Glue 目錄存取有下列限制：
+ 此功能僅適用於支援 Athena 引擎版本 2 或更新版本 AWS 區域 的 。如需有關 Athena 引擎版本的資訊，請參閱[Athena 引擎版本控制](engine-versions.md)。若要升級工作群組的引擎版本，請參閱[變更 Athena 引擎版本](engine-versions-changing.md)。
+ 當您 AWS Glue Data Catalog 在帳戶中註冊另一個帳戶的 時，您建立的區域`DataCatalog`資源只會連結到該特定區域中另一個帳戶的資料。
+ 目前不支援包含跨帳戶 AWS Glue 目錄的 `CREATE VIEW` 陳述式。
+ 使用 AWS 受管金鑰加密的目錄無法跨帳戶查詢。對於要跨帳戶查詢的目錄，請改用客戶自管金鑰 (`KMS_CMK`)。如需客戶受管金鑰與 AWS 受管金鑰之間的差異資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[客戶金鑰和 AWS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt                     )。

## 開始使用
<a name="security-iam-cross-account-glue-catalog-getting-started"></a>

在下列案例中，「借用者」帳戶 (666666666666) 想要執行`SELECT`查詢，其參照屬於「擁有者」帳戶 (999999999999) 的 AWS Glue 目錄，如下列範例所示：

```
SELECT * FROM ownerCatalog.tpch1000.customer
```

在下列程序中，步驟 1a 和 1b 顯示如何讓借用者帳戶從借用者和擁有者端存取擁有者帳戶 AWS Glue 的資源。該範例授予對資料庫 `tpch1000` 和資料表 `customer` 的存取權。變更這些範例名稱以符合您的需求。

### 步驟 1a：建立具有政策的借用者角色，以存取擁有者 AWS Glue 的資源
<a name="security-iam-cross-account-glue-catalog-access-step-1a"></a>

若要使用存取擁有者帳戶 AWS Glue 資源的政策建立借用者帳戶角色，您可以使用 AWS Identity and Access Management (IAM) 主控台或 [IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_Operations.html)。以下為使用 IAM 主控台的程序。

**建立借用者角色和政策以存取擁有者帳戶 AWS Glue 的資源**

1. 從借用者帳戶登入位於 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在導覽窗格中，展開**存取管理**，然後選擇**政策**。

1. 選擇**建立政策**。

1. 對於**政策編輯器**，選擇 **JSON**。

1. 在政策編輯器中，輸入以下政策，然後根據您的需求進行修改：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-east-1:999999999999:catalog",
                   "arn:aws:glue:us-east-1:999999999999:database/tpch1000",
                   "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer"
               ]
           }
       ]
   }
   ```

------

1. 選擇**下一步**。

1. 在**檢閱和建立**頁面上，針對**政策名稱**，輸入該政策的名稱 (例如 **CrossGluePolicyForBorrowerRole**)。

1. 選擇**建立政策**。

1. 在導覽窗格中，選擇 **Roles** (角色)。

1. 選擇 **Create Role** (建立角色)。

1. 在**選取可信實體**頁面中，選擇 **AWS 帳戶**，然後選擇**下一步**。

1. 在**新增許可**頁面上的搜尋方塊中，輸入您建立的政策的名稱 (例如 **CrossGluePolicyForBorrowerRole**)。

1. 選取政策名稱旁的核取方塊，然後選擇**下一步**。

1. 在 **Name, review, and create** (名稱，檢閱和建立) 頁面上，針對 **Role name** (角色名稱) 輸入角色的名稱 (例如 **CrossGlueBorrowerRole**)。

1. 選擇建**立角色**。

### 步驟 1b：建立擁有者政策，將 AWS Glue 存取權授予借用者
<a name="security-iam-cross-account-glue-catalog-access-step-1b"></a>

若要將來自擁有者帳戶 (999999999999) 的 AWS Glue 存取權授予借款人的角色，您可以使用 AWS Glue 主控台或 AWS Glue [PutResourcePolicy](https://docs.aws.amazon.com/glue/latest/webapi/API_PutResourcePolicy.html) API 操作。下列程序使用 AWS Glue 主控台。

**從擁有者授予對借用者帳戶的 AWS Glue 存取權**

1. 從擁有者帳戶登入 AWS Glue 主控台，網址為 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)。

1. 在導覽窗格中，展開**資料目錄**，然後選擇**目錄設定**。

1. 在 **Permissions** (許可) 方塊中，輸入如下所示的政策。針對 *rolename*，輸入借用者在步驟 1a 中建立的角色 (例如 **CrossGlueBorrowerRole**)。如果您想要增加許可範圍，可以將萬用字元 `*` 用於資料庫和資料表資源類型。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::666666666666:user/username",
                       "arn:aws:iam::666666666666:role/rolename"
                   ]
               },
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-east-1:999999999999:catalog",
                   "arn:aws:glue:us-east-1:999999999999:database/tpch1000",
                   "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer"
               ]
           }
       ]
   }
   ```

------

完成後，我們建議您使用 [AWS Glue API](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api.html)，進行一些跨帳戶呼叫測試，以確認已按您的預期設定許可。

### 步驟 2：借用者註冊 AWS Glue Data Catalog 屬於擁有者帳戶的
<a name="security-iam-cross-account-glue-catalog-access-step-2"></a>

下列程序說明如何使用 Athena 主控台，在擁有者 Amazon Web Services 帳戶中設定 AWS Glue Data Catalog 作為資料來源。如需使用 API 操作 (而不是主控台) 註冊型錄的相關資訊，請參閱[(選用) 使用 API 註冊屬於擁有者帳戶的 Athena 資料目錄](#security-iam-cross-account-glue-catalog-access-step-2-api)。

**註冊 AWS Glue Data Catalog 屬於另一個帳戶的**

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

1. 如果未顯示主控台的導覽窗格，請選擇左側的展開選單。  
![\[選擇展開選單。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/nav-pane-expansion.png)

1. 展開**管理**，然後選擇**資料來源**。

1. 在右上角，選擇 **Create data source** (建立資料來源)。

1. 在**選擇資料來源**頁面上，針對**資料來源**，選取 **S3 - AWS Glue Data Catalog**，然後選擇**下一步**。

1. 在 **Enter data source details** (輸入資料來源詳細資訊) 頁面上的 **AWS Glue Data Catalog** 區段，針對**選擇 AWS Glue Data Catalog**，在另一個帳户選擇 **AWS Glue Data Catalog **。

1. 在 **Data source details** (資料來源詳細資訊) 輸入以下資訊：
   + **Data source name** (資料來源名稱) – 輸入您希望在 SQL 查詢中使用的名稱，以參考其他帳戶中的資料目錄。
   + **Description** (描述) – (選填) 輸入其他帳戶裡資料目錄的描述。
   + **Catalog ID** (目錄 ID) – 輸入資料目錄所屬帳戶的 12 位數 Amazon Web Services 帳戶 ID。Amazon Web Services 帳戶 ID 即為目錄 ID。

1. (選用) 展開**標籤**，然後輸入您希望與資料來源建立關聯的鍵值對。如需標籤的詳細資訊，請參閱[標記 Athena 資源](tags.md)。

1. 選擇**下一步**。

1. 在 **Review and create** (檢閱並建立) 頁面上，檢閱您提供的資訊，然後選擇 **Create data source** (建立資料來源)。**Data source details** (資料來源詳細資訊) 頁面列出了註冊資料型錄的資料庫和標籤。

1. 選擇**資料來源和目錄**。您註冊的資料型錄列於 **Data Source Name** (資料來源名稱) 資料欄。

1. 若要檢視或編輯資料型錄的相關資訊，請選擇型錄，然後選擇 **Actions** (動作)、**Edit** (編輯)。

1. 若要刪除新資料型錄，請選擇型錄，然後選擇 **Actions** (動作)、**Delete** (刪除)。

### 步驟 3：借用者提交查詢
<a name="security-iam-cross-account-glue-catalog-access-step-4"></a>

借用者會提交使用 *catalog*.*database*.*table* 語法來參考目錄的查詢，如下列範例所示：

```
SELECT * FROM ownerCatalog.tpch1000.customer
```

除了使用完整語法之外，借用者也可以透過依上下文在 [QueryExecutionContext](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionContext.html) 中傳遞以指定目錄。

## (選用) 設定其他 Amazon S3 許可
<a name="security-iam-cross-account-glue-catalog-access-additional-s3-permissions"></a>
+ 如果借用者帳戶使用 Athena 查詢，以將新資料寫入擁有者帳戶的資料表，則擁有者不會自動存取 Amazon S3 中的此資料，即使該資料表存在於擁有者帳戶中亦同。這是因為除非進行另外設定，否則借用者即為 Amazon S3 中資訊的物件擁有者。若要授予擁有者對資料的存取權，請將物件的許可設定為其他步驟。
+ 某些跨帳戶 DDL 操作，如 [MSCK REPAIR TABLE](msck-repair-table.md) 會需要 Amazon S3 許可。例如，如果借用者帳戶正在對擁有者帳戶中的資料表執行跨帳戶 `MSCK REPAIR` 操作，而借用者資料在擁有者帳戶 S3 儲存貯體中，則該儲存貯體必須授予借用者所擔任的角色許可，才能成功查詢。

如需有關授予儲存貯體許可的資訊，請參閱*《Amazon Simple Storage Service 使用者指南》*中的[如何設定 ACL 儲存貯體許可？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/set-bucket-permissions.html)。

## (選用) 動態使用目錄
<a name="security-iam-cross-account-glue-catalog-access-dynamic-catalogs"></a>

在某些情況下，您可能想要在不進行必要步驟註冊的情況下，對跨帳戶 AWS Glue 目錄快速執行測試。如果已如本文件前述，正確設定所需的 IAM 和 Amazon S3 許可，您便可以動態執行跨帳戶查詢，而無需建立 `DataCatalog` 資源物件。

若要在未註冊的情況下明確參考目錄，請使用以下範例中的語法：

```
SELECT * FROM "glue:arn:aws:glue:us-east-1:999999999999:catalog".tpch1000.customer
```

使用格式「`glue:<arn>`」，其中 `<arn>` 為您要使用的 [AWS Glue Data Catalog ARN](https://docs.aws.amazon.com/glue/latest/dg/glue-specifying-resource-arns.html#data-catalog-resource-arns)。在此範例中，Athena 使用此語法動態指向帳戶 999999999999 AWS Glue 的資料目錄，就好像您已另外為其建立`DataCatalog`物件一樣。

### 使用動態目錄的注意事項
<a name="security-iam-cross-account-glue-catalog-access-notes-dynamic-catalogs"></a>

使用動態目錄時，請記住以下幾點。
+ 使用動態目錄會需要您通常用於 Athena 資料目錄 API 操作的 IAM 許可。主要差異在於資料目錄資源名稱會遵循 `glue:*` 命名慣例。
+ 目錄 ARN 必須與正在執行的查詢屬於同一區域。
+ 在 DML 查詢或檢視中使用動態目錄時，請以逸出的雙引號 (`\"`) 括住該目錄。在 DDL 查詢中使用動態目錄時，請使用反引號字元 (```) 括住該目錄。

## (選用) 使用 API 註冊屬於擁有者帳戶的 Athena 資料目錄
<a name="security-iam-cross-account-glue-catalog-access-step-2-api"></a>

可以使用 API 操作來註冊屬於擁有者帳户的資料型錄，而不是使用步驟 2 中所述的 Athena 主控台。

Athena [DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html) 資源的建立者必須具有必要許可，才可執行 Athena [CreateDataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateDataCatalog.html) API 操作。依您的需求而定，可能會需要存取其他 API 操作。如需詳細資訊，請參閱[資料目錄範例政策](datacatalogs-example-policies.md)。

下列`CreateDataCatalog`請求內文會註冊 AWS Glue 目錄以進行跨帳戶存取：

```
# Example CreateDataCatalog request to register a cross-account Glue catalog:
{
    "Description": "Cross-account Glue catalog",
    "Name": "ownerCatalog",
    "Parameters": {"catalog-id" : "999999999999"  # Owner's account ID
    },
    "Type": "GLUE"
}
```

以下範本程式碼會使用 Java 用戶端來建立 `DataCatalog` 物件。

```
# Sample code to create the DataCatalog through Java client
CreateDataCatalogRequest request = new CreateDataCatalogRequest()
    .withName("ownerCatalog")
    .withType(DataCatalogType.GLUE)
    .withParameters(ImmutableMap.of("catalog-id", "999999999999"));

athenaClient.createDataCatalog(request);
```

在這些步驟之後，借用者應會在呼叫 [ListDataCatalogs](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDataCatalogs.html) API 操作時看到 `ownerCatalog`。

## 其他資源
<a name="security-iam-cross-account-glue-catalog-access-additional-resources"></a>
+ [從另一個帳戶註冊 Data Catalog](data-sources-glue-cross-account.md)
+ 《 *AWS 規範指引模式*指南》中的[AWS Glue Data Catalog 使用 Amazon Athena 設定共用 的跨帳戶存取權](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena.html)。
+ *AWS 大數據部落格*中的[使用 Amazon Athena AWS Glue Data Catalog查詢跨帳戶](https://aws.amazon.com/blogs/big-data/query-cross-account-aws-glue-data-catalogs-using-amazon-athena/) 
+ 《*AWS Glue 開發人員指南*》中的[授予跨帳戶存取權](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html) 

# 在 中設定從 Athena 到加密中繼資料的存取權 AWS Glue Data Catalog
<a name="access-encrypted-data-glue-data-catalog"></a>

如果您 AWS Glue Data Catalog 搭配 Amazon Athena 使用 ，您可以使用 AWS Glue Data Catalog AWS Glue 主控台或 API 在 中啟用加密。如需相關資訊，請參閱《AWS Glue 開發人員指南》**中的[加密您的資料目錄](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html)。

如果 AWS Glue Data Catalog 已加密，您必須將下列動作新增至用於存取 Athena 的所有政策：

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

# 設定存取工作群組和標籤
<a name="workgroups-access"></a>

工作群組是由 Athena 管理的資源。因此，如果您的工作群組政策使用的動作接受 `workgroup` 做為輸入，您必須指定工作群組的 ARN，如下所示，其中 `workgroup-name` 是工作群組的名稱：

```
"Resource": [arn:aws:athena:region:AWSAcctID:workgroup/workgroup-name]
```

例如，在 Amazon Web Services 帳戶 `123456789012` 的 `us-west-2` 區域中，對於名為 `test_workgroup` 的工作群組，使用以下 ARN 將工作群組指定為資源：

```
"Resource":["arn:aws:athena:us-east-2:123456789012:workgroup/test_workgroup"]
```

若要存取啟用受信任身分傳播 (TIP) 的工作群組，IAM Identity Center 使用者必須指派給 Athena [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) API 動作回應所傳回的 `IdentityCenterApplicationArn`。
+ 如需工作群組政策的清單，請參閱[工作群組政策範例](example-policies-workgroup.md)。
+ 如需工作群組的標籤型政策清單，請參閱[使用標籤型 IAM 存取控制政策](tags-access-control.md)。
+ 如需有關為工作群組建立 IAM 政策的詳細資訊，請參閱[使用 IAM 政策來控制工作群組存取](workgroups-iam-policy.md)。
+ 如需 Amazon Athena 動作的完整清單，請參閱《[Amazon Athena API 參考](https://docs.aws.amazon.com/athena/latest/APIReference/)》中的 API 動作名稱。
+ 如需有關 IAM 政策的詳細資訊，請參閱《IAM 使用者指南》**中的[使用視覺化編輯器來建立政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor)。

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

# 使用 IAM 政策來控制工作群組存取
<a name="workgroups-iam-policy"></a>

若要控制對工作群組的存取，請使用資源層級 IAM 許可或以身分為基礎的 IAM 政策。每當您使用 IAM 政策時，請務必遵循 IAM 最佳實務。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

**注意**  
若要存取啟用受信任身分傳播的工作群組，IAM Identity Center 使用者必須指派給 Athena [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) API 動作回應所傳回的 `IdentityCenterApplicationArn`。

下列程序專用於 Athena。

如需 IAM 特定的資訊，請參閱本節最後列出的連結。如需範例 JSON 工作群組政策的相關資訊，請參閱[工作群組政策範例](example-policies-workgroup.md)。

**若要在 IAM 主控台中使用視覺化編輯器來建立工作群組政策**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左邊的導覽窗格中，選擇 **Policies** (政策)，然後選擇 **Create policy** (建立政策)。

1. 在 **Visual editor** (視覺化編輯器) 標籤上，選擇 **Choose a service** (選擇一項服務)。接著選擇 Athena 以新增到政策。

1. 選擇 **Select actions** (選取動作)，然後選擇要新增到政策的動作。視覺化編輯器會顯示 Athena 中可用的動作。如需詳細資訊，請參閱《服務授權參考》**中的 [Amazon Athena 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)。

1. 選擇 **add actions** (新增動作) 來輸入特定動作，或使用萬用字元 (\$1) 來指定多個動作。

   預設情況下，您建立的政策允許執行選擇的操作。對於 Athena 中的 `workgroup` 資源，如果您選擇的一個或多個動作支援資源層級許可，則編輯器會列出 `workgroup` 資源。

1. 選擇 **Resources** (資源) 來為您的政策指定工作群組。如需 JSON 工作群組政策的範例，請參閱[工作群組政策範例](example-policies-workgroup.md)。

1. 如下所示指定 `workgroup` 資源：

   ```
   arn:aws:athena:<region>:<user-account>:workgroup/<workgroup-name>
   ```

1. 選擇 **Review policy** (檢閱政策)，然後為您正在建立的政策輸入 **Name** (名稱) 與 **Description** (描述) (選用)。檢閱政策摘要來確認您已授予想要的許可。

1. 選擇 **Create policy** (建立政策) 儲存您的新政策。

1. 將此基於身分的政策連接到使用者、群組或角色。

如需詳細資訊，請參閱《服務授權參考》**與《IAM 使用者指南》**中的下列主題：
+  [Amazon Athena 的操作、資料和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) 
+  [使用視覺化編輯器來建立政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) 
+  [新增和移除 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) 
+  [控制資源的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#access_controlling-resources) 

如需 JSON 工作群組政策的範例，請參閱[工作群組政策範例](example-policies-workgroup.md)。

如需 Amazon Athena 動作的完整清單，請參閱《[Amazon Athena API 參考](https://docs.aws.amazon.com/athena/latest/APIReference/)》中的 API 動作名稱。

# 工作群組政策範例
<a name="example-policies-workgroup"></a>

本節包含可讓您在工作群組上用來啟用各種動作的政策範例。每當您使用 IAM 政策時，請務必遵循 IAM 最佳實務。如需詳細資訊，請參閱*《IAM 使用者指南》*中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

工作群組是由 Athena 管理的 IAM 資源。因此，如果您的工作群組政策使用的動作接受 `workgroup` 做為輸入，您必須指定工作群組的 ARN，如下所示：

```
"Resource": [arn:aws:athena:<region>:<user-account>:workgroup/<workgroup-name>]
```

其中 `<workgroup-name>` 為工作群組的名稱。例如，假設工作群組名為 `test_workgroup`，請如下所示將它指定為資源：

```
"Resource": ["arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"]
```

如需 Amazon Athena 動作的完整清單，請參閱《[Amazon Athena API 參考](https://docs.aws.amazon.com/athena/latest/APIReference/)》中的 API 動作名稱。如需有關 IAM 政策的詳細資訊，請參閱《IAM 使用者指南》**中的[使用視覺化編輯器來建立政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor)。如需有關為工作群組建立 IAM 政策的詳細資訊，請參閱[使用 IAM 政策來控制工作群組存取](workgroups-iam-policy.md)。
+  [Example policy for full access to all workgroups](#example1-full-access-all-wkgs) 
+  [Example policy for full access to a specified workgroup](#example2-full-access-this-wkg) 
+  [Example policy for running queries in a specified workgroup](#example3-user-access) 
+  [Example policy for running queries in the primary workgroup](#example4-run-in-primary-access) 
+  [Example policy for management operations on a specified workgroup](#example5-manage-wkgs-access) 
+  [Example policy for listing workgroups](#example6-list-all-wkgs-access) 
+  [Example policy for running and stopping queries in a specific workgroup](#example7-run-queries-access) 
+  [Example policy for working with named queries in a specific workgroup](#example8-named-queries-access) 
+  [Example policy for working with Spark notebooks](#example9-spark-workgroup) 

**Example 適用於完整存取所有工作群組的政策範例**  
以下政策允許完整存取帳戶中可能存在的所有工作群組資源。對於您的帳戶中必須為所有其他使用者來管理工作群組的那些使用者，我們建議您使用此政策。    
****  

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

**Example 適用於完整存取指定工作群組的政策範例**  
以下政策允許完整存取名為 `workgroupA` 的單一特定的工作群組資源。對於能夠完全控制特定群組的使用者，您可以使用此政策。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListEngineVersions",
                "athena:ListWorkGroups",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:BatchGetQueryExecution",
                "athena:GetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery",
                "athena:CreatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:ListPreparedStatements",
                "athena:UpdatePreparedStatement",
                "athena:DeletePreparedStatement"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:DeleteWorkGroup",
                "athena:UpdateWorkGroup",
                "athena:GetWorkGroup",
                "athena:CreateWorkGroup"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA"
            ]
        }
    ]
}
```

**Example 適用於在指定的工作群組中執行查詢的政策範例**  
在以下政策中，允許使用者在指定的 `workgroupA` 中執行查詢並檢視查詢。不允許使用者對工作群組本身執行管理任務，例如更新或刪除。請注意，範例政策並未將使用者限制於僅此工作群組或拒絕存取其他工作群組。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "athena:ListEngineVersions",
                "athena:ListWorkGroups",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetWorkGroup", 
                "athena:BatchGetQueryExecution",
                "athena:GetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery",
                "athena:CreatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:ListPreparedStatements",
                "athena:UpdatePreparedStatement",
                "athena:DeletePreparedStatement"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA"
            ]
        }
    ]
}
```

**Example 適用於在主要工作群組中執行查詢的政策範例**  
您可以修改上述範例，以允許特定使用者也在主要工作群組中執行查詢。  
對於以其他方式設定為在指定的工作群組中執行查詢的所有使用者，我們建議您新增主要工作群組資源。為了以防其指定的工作群組遭到刪除或停用，將此資源新增到其工作群組使用者政策非常有用。在這種情況下，他們可以在主要工作群組中繼續執行查詢。
若要允許您帳戶中的使用者在主要工作群組中執行查詢，請將包含主要工作群組 ARN 的行新增到 [Example policy for running queries in a specified workgroup](#example3-user-access) 的資源區段，如以下範例所示。  

```
arn:aws:athena:us-east-1:123456789012:workgroup/primary"
```

**Example 適用於在指定的工作群組上執行管理操作的政策範例**  
在以下政策中，允許使用者建立、刪除、取得詳細資訊和更新工作群組 `test_workgroup`。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListEngineVersions"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateWorkGroup",
                "athena:GetWorkGroup",
                "athena:DeleteWorkGroup",
                "athena:UpdateWorkGroup"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"
            ]
        }
    ]
}
```

**Example 適用於列出工作群組的政策範例**  
以下政策可讓所有使用者列出所有工作群組：    
****  

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

**Example 適用於在特定工作群組中執行和停止查詢的政策範例**  
在這個政策中，允許使用者在工作群組中執行查詢：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:StopQueryExecution"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"
            ]
        }
    ]
}
```

**Example 適用於在特定工作群組中處理具名查詢的政策範例**  
在以下政策中，使用者有許可在指定的工作群組中建立、刪除具名查詢及取得其相關資訊：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:DeleteNamedQuery"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"            ]
        }
    ]
}
```

**Example 使用 Athena 中的 Spark 筆記本的範例政策**  
使用類似下列所示的政策來使用 Athena 中的 Spark 筆記本。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCreatingWorkGroupWithDefaults",
            "Action": [
                "athena:CreateWorkGroup",
                "s3:CreateBucket",
                "iam:CreateRole",
                "iam:CreatePolicy",
                "iam:AttachRolePolicy",
                "s3:GetBucketLocation",
                "athena:ImportNotebook"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/Demo*",
                "arn:aws:s3:::123456789012-us-east-1-athena-results-bucket-*",
                "arn:aws:iam::123456789012:role/service-role/AWSAthenaSparkExecutionRole-*",
                "arn:aws:iam::123456789012:policy/service-role/AWSAthenaSparkRolePolicy-*"
            ]
        },
        {
            "Sid": "AllowRunningCalculations",
            "Action": [
                "athena:ListWorkGroups",
                "athena:GetWorkGroup",
                "athena:StartSession",
                "athena:CreateNotebook",
                "athena:ListNotebookMetadata",
                "athena:ListNotebookSessions",
                "athena:GetSessionStatus",
                "athena:GetSession",
                "athena:GetNotebookMetadata",
                "athena:CreatePresignedNotebookUrl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:athena:us-east-1:123456789012:workgroup/Demo*"
        },
        {
            "Sid": "AllowListWorkGroupAndEngineVersions",
            "Action": [
                "athena:ListWorkGroups",
                "athena:ListEngineVersions"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

# 使用啟用 IAM Identity Center 的 Athena 工作群組
<a name="workgroups-identity-center"></a>

[信任的身分傳播](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overview.html)是一項 AWS IAM Identity Center 功能，連線的管理員 AWS 服務 可以使用此功能來授予和稽核服務資料的存取權。存取此資料是根據使用者屬性，例如群組關聯。設定信任的身分傳播需要連線的管理員 AWS 服務 與 IAM Identity Center 管理員之間的協同合作。如需詳細資訊，請參閱[先決條件和考量](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overall-prerequisites.html)。

使用 [IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)，您可管理員工身分 (也稱為員工使用者) 的登入安全性。IAM Identity Center 提供一個位置，您可以在其中建立或連接人力資源使用者，並集中管理其所有 AWS 帳戶和應用程式的存取權。您可使用多帳戶許可，將對 AWS 帳戶的存取權指派給這些使用者。您可使用應用程式指派功能，來指派使用者對啟用 IAM Identity Center 的應用程式、雲端應用程式和客戶安全性聲明標記語言 (SAML 2.0) 應用程式的存取權。如需詳細資訊，請參閱《AWS IAM Identity Center 使用者指南》**中的[跨應用程式的受信任身分傳播](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation.html)。

EMR Studio 和 SageMaker Unified Studio 均提供 Athena SQL 對可信身分傳播的支援。每個平台都為搭配使用 TIP 和 Athena 提供了特定介面。

在 EMR Studio 中搭配使用 Athena SQL 與 IAM Identity Center 身分時，您有兩個工作群組選項：
+ **一般工作群組** – 不需要使用者/群組指派。
+ **啟用 IAM Identity Center 的工作群組** – 需要透過 IAM Identity Center 主控台或 API 指派使用者/群組。

對於這兩個選項，您可以在已啟用 IAM Identity Center 的 EMR Studio 中使用 Athena SQL 介面來執行查詢。

## 考量和限制
<a name="workgroups-identity-center-considerations-and-limitations"></a>

當您搭配使用可信身分傳播與 Amazon Athena 時，請考慮下列幾點：
+ 建立工作群組之後，無法變更工作群組的身分驗證方法。
  + 無法修改現有的 Athena SQL 工作群組來支援啟用了 IAM Identity Center 的工作群組。現有的 Athena SQL 工作群組可以將身分資訊傳播到下游服務。
  + 無法修改啟用了 IAM Identity Center 的工作群組，來支援資源層級 IAM 許可或以 Identity Center 為基礎的 IAM 政策。
+ 若要存取啟用可信身分傳播的工作群組，IAM Identity Center 使用者必須指派給 Athena [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) API 動作回應所傳回的 `IdentityCenterApplicationArn`。
+ Amazon S3 存取授權必須設定為使用可信身分傳播身分。如需詳細資訊，請參閱《Amazon S3 使用者指南》**中的 [S3 Access Grants 和公司目錄身分](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-directory-ids.html)。
+ 啟用 IAM Identity Center 的 Athena 工作群組需要將 Lake Formation 設定為使用 IAM Identity Center 身分。如需組態資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[整合 IAM Identity Center](https://docs.aws.amazon.com/lake-formation/latest/dg/identity-center-integration.html)。
+ 依預設，在啟用 IAM Identity Center 的工作群組中，查詢會在 30 分鐘後逾時。您可請求增加查詢逾時，但在可信身分傳播工作群組中，可執行的查詢上限為一小時。
+ 在可信身分傳播工作群組中，使用者或群組權利變更可能需要最多一小時才會生效。
+ 使用可信身分傳播的 Athena 工作群組中的查詢，無法直接從 Athena 主控台執行。必須從啟用了 IAM Identity Center 的 EMR Studio 中的 Athena 介面執行。如需有關在 EMR Studio 中使用 Athena 的詳細資訊，請參閱《Amazon EMR 管理指南》**中的在 [ EMR Studio 中使用 Amazon Athena SQL 編輯器](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-athena.html)。
+ 受信任身分傳播與下列 Athena 功能不相容。
  + 啟用 IAM Identity Center 的工作群組的 `aws:CalledVia` 內容索引鍵。
  + Athena for Spark 工作群組。
  + 對 Athena API 的聯合存取。
  + 使用 Lake Formation 以及 Athena JDBC 和 ODBC 驅動程式對 Athena 進行聯合存取。
+ 您只能在下列情況下搭配 Athena 使用受信任身分傳播 AWS 區域：
  + `us-east-2` – 美國東部 (俄亥俄)
  + `us-east-1` – 美國東部 (維吉尼亞北部)
  + `us-west-1` – 美國西部 (加利佛尼亞北部)
  + `us-west-2` – 美國西部 (奧勒岡)
  + `af-south-1` – 非洲 (開普敦)
  + `ap-east-1` – 亞太區域 (香港)
  + `ap-southeast-3` – 亞太區域 (雅加達)
  + `ap-south-1` – 亞太區域 (孟買)
  + `ap-northeast-3` – 亞太區域 (大阪)
  + `ap-northeast-2` – 亞太區域 (首爾)
  + `ap-southeast-1` – 亞太區域 (新加坡)
  + `ap-southeast-2` – 亞太區域 (雪梨)
  + `ap-northeast-1` – 亞太區域 (東京)
  + `ca-central-1` – 加拿大 (中部)
  + `eu-central-1` – 歐洲 (法蘭克福)
  + `eu-central-2` – 歐洲 (蘇黎世)
  + `eu-west-1` – 歐洲 (愛爾蘭)
  + `eu-west-2` – 歐洲 (倫敦)
  + `eu-south-1` – 歐洲 (米蘭)
  + `eu-west-3` – 歐洲 (巴黎)
  + `eu-north-1` – 歐洲 (斯德哥爾摩)
  + `me-south-1` – 中東 (巴林)
  + `sa-east-1` – 南美洲 (聖保羅)

## 所需的許可
<a name="workgroups-identity-center-required-permissions"></a>

若管理員 IAM 使用者在 Athena 主控台中建立啟用了 IAM Identity Center 的工作群組，必須附加下列政策。
+ `AmazonAthenaFullAccess` 受管政策。如需詳細資訊，請參閱[AWS 受管政策：AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy)。
+ 下列內嵌政策允許 IAM 和 IAM Identity Center 的以下動作：

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

****  

  ```
  { "Version":"2012-10-17",		 	 	  "Statement": [ { "Action": [ "iam:createRole",
      "iam:CreatePolicy", "iam:AttachRolePolicy", "iam:ListRoles", "identitystore:ListUsers",
      "identitystore:ListGroups", "identitystore:CreateUser", "identitystore:CreateGroup",
      "sso:ListInstances", "sso:CreateInstance", "sso:DeleteInstance", "sso:ListTrustedTokenIssuers",
      "sso:DescribeTrustedTokenIssuer", "sso:ListApplicationAssignments",
      "sso:DescribeRegisteredRegions", "sso:GetManagedApplicationInstance",
      "sso:GetSharedSsoConfiguration", "sso:PutApplicationAssignmentConfiguration",
      "sso:CreateApplication", "sso:DeleteApplication", "sso:PutApplicationGrant",
      "sso:PutApplicationAuthenticationMethod", "sso:PutApplicationAccessScope",
      "sso:ListDirectoryAssociations", "sso:CreateApplicationAssignment",
      "sso:DeleteApplicationAssignment", "organizations:ListDelegatedAdministrators",
      "organizations:DescribeAccount", "organizations:DescribeOrganization",
      "organizations:CreateOrganization", "sso-directory:SearchUsers", "sso-directory:SearchGroups",
      "sso-directory:CreateUser" ], "Effect": "Allow", "Resource": [ "*" ] }, { "Action": [
      "iam:PassRole" ], "Effect": "Allow", "Resource": [
          "arn:aws:iam::111122223333:role/service-role/AWSAthenaSQLRole-*"
      ] } ] }
  ```

------

## 建立啟用 IAM Identity Center 的 Athena 工作群組
<a name="workgroups-identity-center-creating-an-identity-center-enabled-athena-workgroup"></a>

下列程序顯示與建立啟用 IAM Identity Center 的 Athena 工作群組相關的步驟和選項。如需 Athena 工作群組可用的其他組態選項的說明，請參閱 [建立工作群組](creating-workgroups.md)。

**在 Athena 主控台中建立啟用 SSO 的工作群組**

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

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

1. 在 **Workgroups** (工作群組) 頁面中，請選擇 **Create workgroup** (建立工作群組)。

1. 在**建立工作群組**頁面上，針對**工作群組名稱**，輸入工作群組的名稱。

1. 針對**分析引擎**，使用 **Athena SQL** 預設值。

1. 針對**身分驗證**，選擇 **IAM Identity Center**。

1. 針對 **IAM Identity Center 存取的服務角色**，選擇現有的服務角色，或建立新的服務角色。

   Athena 需要許可，才能代表您存取 IAM Identity Center。Athena 需要服務角色，才能執行此操作。服務角色是您管理的 IAM 角色，可授權 AWS 服務代表您存取其他 AWS 服務。若要查詢聯合目錄或執行 UDF，請使用對應的 Lambda 許可更新服務角色。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

1. 展開**查詢結果組態**，然後針對**查詢結果的位置**輸入或選擇 Amazon S3 路徑。

1. (選用) 選擇**加密查詢結果**。依預設，可支援 SSE-S3。若要搭配查詢結果位置使用 SSE-KMS 和 CSE-KMS，請從 Amazon S3 存取授權向 **IAM Identity Center 的服務角色**提供授權。如需詳細資訊，請參閱[範例角色政策](#workgroups-identity-center-access-grant-location-sample-role-policy)。

1. (選用) 選擇**建立以使用者身分為基礎的 S3 字首**。

   當您建立啟用 IAM Identity Center 的工作群組時，預設會選取**啟用 S3 Access Grants** 選項。您可使用 Amazon S3 Access Grants，來控制對 Amazon S3 中 Athena 查詢結果位置 (字首) 的存取權。如需有關 Amazon S3 Access Grants 的詳細資訊，請參閱[使用 Amazon S3 Access Grants 管理存取權](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html)。

   在使用 IAM Identity Center 身分驗證的 Athena 工作群組中，您可建立由 Amazon S3 Access Grants 管控的以身分為基礎的查詢結果位置。藉助這些以使用者身分為基礎的 Amazon S3 字首，Athena 工作群組中的使用者可將查詢結果與相同工作群組中的其他使用者隔離。

   啟用使用者字首選項時，Athena 會將使用者 ID 做為 Amazon S3 路徑字首附加至工作群組的查詢結果輸出位置 (例如 `s3://amzn-s3-demo-bucket/${user_id}`)。若要使用此功能，您必須將 Access Grants 設定為僅允許使用者存取具有 `user_id` 字首的位置。如需限制存取 Athena 查詢結果的 Amazon S3 存取授權位置角色政策的範例，請參閱 [範例角色政策](#workgroups-identity-center-access-grant-location-sample-role-policy)。
**注意**  
選取使用者身分 S3 字首選項，會自動啟用工作群組的「覆寫用戶端設定」選項，如下一個步驟所述。「覆寫用戶端設定」選項是使用者身分字首功能的必要條件。

1. 展開**設定**，然後確認選取**覆寫用戶端設定**。

   如果選取**覆寫用戶端設定**，則會在工作群組層級，強制工作群組中所有用戶端執行工作群組設定。如需詳細資訊，請參閱[Override client-side settings (覆寫用戶端設定)](workgroups-settings-override.md)。

1. (選用) 如 [建立工作群組](creating-workgroups.md) 中所述，進行需要的任何其他組態設定。

1. 選擇**建立工作群組**。

1. 使用 Athena 主控台的**工作群組**區段，將 IAM Identity Center 目錄中的使用者或群組指派給啟用 IAM Identity Center 的 Athena 工作群組。

## 範例角色政策
<a name="workgroups-identity-center-access-grant-location-sample-role-policy"></a>

下列範例說明要連接至 Amazon S3 存取授權位置的角色的政策，以限制對 Athena 查詢結果的存取權。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "s3:*"
            ],
            "Condition": {
                "ArnNotEquals": {
                    "s3:AccessGrantsInstanceArn": "arn:aws:s3:us-east-1:111122223333:access-grants/default"
                },
                "StringNotEquals": {
                    "aws:ResourceAccount": "111122223333"
                }
            },
            "Effect": "Deny",
            "Resource": "*",
            "Sid": "ExplicitDenyS3"
        },
        {
            "Action": [
                "kms:*"
            ],
            "Effect": "Deny",
            "NotResource": "arn:aws:kms:us-east-1:111122223333:key/${keyid}",
            "Sid": "ExplictDenyKMS"
        },
        {
            "Action": [
                "s3:ListMultipartUploadParts",
                "s3:GetObject"
            ],
            "Condition": {
                "ArnEquals": {
                    "s3:AccessGrantsInstanceArn": "arn:aws:s3:us-east-1:111122223333:access-grants/default"
                },
                "StringEquals": {
                    "aws:ResourceAccount": "111122223333"
                }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::ATHENA-QUERY-RESULT-LOCATION/${identitystore:UserId}/*",
            "Sid": "ObjectLevelReadPermissions"
        },
        {
            "Action": [
                "s3:PutObject",
                "s3:AbortMultipartUpload"
            ],
            "Condition": {
                "ArnEquals": {
                    "s3:AccessGrantsInstanceArn": "arn:aws:s3:us-east-1:111122223333:access-grants/default"
                },
                "StringEquals": {
                "aws:ResourceAccount": "111122223333"
                }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::ATHENA-QUERY-RESULT-LOCATION/${identitystore:UserId}/*",
            "Sid": "ObjectLevelWritePermissions"
        },
        {
            "Action": "s3:ListBucket",
            "Condition": {
                "ArnEquals": {
                    "s3:AccessGrantsInstanceArn": "arn:aws:s3:us-east-1:111122223333:access-grants/default"
                },
                "StringEquals": {
                    "aws:ResourceAccount": "111122223333"
                },
                "StringLikeIfExists": {
                    "s3:prefix": [
                        "${identitystore:UserId}",
                        "${identitystore:UserId}/*"
                    ]
                }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::ATHENA-QUERY-RESULT-LOCATION",
            "Sid": "BucketLevelReadPermissions"
        },
        {
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/${keyid}",
            "Sid": "KMSPermissions"
        }
    ]
}
```

------

# 為工作群組設定最低加密
<a name="workgroups-minimum-encryption"></a>

身為 Athena SQL 工作群組的管理員，您可以在 Amazon S3 對工作群組的所有查詢結果強制執行最低層級的加密。您可以使用此功能，確保查詢結果絕不會儲存在處於未加密狀態的 Amazon S3 儲存貯體中。

若使用者位於啟用最低加密的工作群組中，則當其提交查詢時，只能將加密設定為您設定的最低層級，或將加密設定為較高層級 (如果有的話)。Athena 會在使用者執行查詢時，指定的層級或工作群組中設定的層級加密查詢結果。

以下為可用的層級：
+ **基本** – 使用 Amazon S3 受管金鑰 (SSE-S3) 的 Amazon S3 伺服器端加密 (**SSE\$1S3**)。
+ **中級** – 使用 KMS 受管金鑰的伺服器端加密 (**SSE\$1KMS**)。
+ **進階** – 使用 KMS 受管金鑰的用戶端加密 (**CSE\$1KMS**)。

## 考量和限制
<a name="workgroups-minimum-encryption-considerations-and-limitations"></a>
+ 最低加密功能不適用於已啟用 Apache Spark 的工作群組。
+ 只有當工作群組未啟用**[覆寫用戶端設定](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html)**選項時，最低加密功能才能正常運作。
+ 如果工作群組已啟用**覆寫用戶端設定**選項，則會採用工作群組加密設定，且最低加密設定不會造成任何影響。
+ 啟用此功能無需付費。

## 為工作群組啟用最低加密
<a name="workgroups-minimum-encryption-enabling"></a>

您可以在建立或更新工作群組時，為 Athena SQL 工作群組的查詢結果啟用最低加密層級。若要這樣做，您可以使用 Athena 主控台、Athena API 或 AWS CLI。

### 使用 Athena 主控台啟用最低加密
<a name="workgroups-minimum-encryption-enabling-using-the-athena-console"></a>

若要開始使用 Athena 主控台建立或編輯工作群組，請參閱[建立工作群組](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html#creating-workgroups)或[編輯工作群組](https://docs.aws.amazon.com/athena/latest/ug/workgroups-create-update-delete.html#editing-workgroups)。設定工作群組時，請使用下列步驟來啟用最低加密。

**若要為工作群組查詢結果設定最低加密層級**

1. 清除**覆寫用戶端設定**選項，或確認未選取該選項。

1. 選取**加密查詢結果**選項。

1. 針對**加密類型**，請選取您希望 Athena 用於工作群組查詢結果的加密方法 (**SSE\$1S3**、**SSE\$1KMS** 或 **CSE\$1KMS**)。這些加密類型對應至基本、中級和進階安全層級。

1. 若要針對所有使用者強制執行您選擇作為最低加密層級的加密方法，請選取**將 *encryption\$1method* 設定為最低加密**。

   選取此選項時，資料表會顯示，當您選擇的加密類型變為最低時，使用者將允許的加密階層和加密層級。

1. 建立工作群組或更新工作群組組態後，請選擇**建立工作群組**或**儲存變更**。

### 使用 Athena API 或 AWS CLI 啟用最低加密
<a name="workgroups-minimum-encryption-enabling-using-the-athena-api-or-cli"></a>

當您使用 [CreateWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateWorkGroup.html) 或 [UpdateWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_UpdateWorkGroup.html) API 建立或更新 Athena SQL 工作群組時，請將 [EnforceWorkGroupConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroupConfiguration.html#athena-Type-WorkGroupConfiguration-EnforceWorkGroupConfiguration) 設定為 `false`、將 [EnableMinimumEncryptionConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroupConfiguration.html#athena-Type-WorkGroupConfiguration-EnableMinimumEncryptionConfiguration) 設定為 `true`，並使用 [EncryptionOption](https://docs.aws.amazon.com/athena/latest/APIReference/API_EncryptionConfiguration.html#athena-Type-EncryptionConfiguration-EncryptionOption) 來指定加密類型。

在 中 AWS CLI，使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/create-work-group.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/create-work-group.html)或 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/update-work-group.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/update-work-group.html)命令搭配 `--configuration`或 `--configuration-updates` 參數，並指定與 API 對應的選項。

# 設定存取預備陳述式
<a name="security-iam-athena-prepared-statements"></a>

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

如需有關預備陳述式的詳細資訊，請參閱[使用參數化查詢](querying-with-prepared-statements.md)。

建立、管理和執行預備陳述式時，需要下列 IAM 許可。

```
athena:CreatePreparedStatement
athena:UpdatePreparedStatement
athena:GetPreparedStatement
athena:ListPreparedStatements
athena:DeletePreparedStatement
```

如以下資料表所示方式使用這些許可。


****  

| 若要執行此作業 | 使用這些許可 | 
| --- | --- | 
| 執行 PREPARE 查詢 | athena:StartQueryExecution athena:CreatePreparedStatement | 
| 重新執行 PREPARE 查詢以更新現有的預備陳述式 | athena:StartQueryExecution athena:UpdatePreparedStatement | 
| 執行 EXECUTE 查詢 | athena:StartQueryExecution athena:GetPreparedStatement | 
| 執行 DEALLOCATE PREPARE 查詢 | athena:StartQueryExecution athena:DeletePreparedStatement | 

## 範例
<a name="security-iam-athena-prepared-statements-example"></a>

以下 IAM 政策範例授予許可，以在指定的帳戶 ID 和工作群組上管理和執行預備陳述式。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:CreatePreparedStatement",
                "athena:UpdatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:DeletePreparedStatement",
                "athena:ListPreparedStatements"
            ],
            "Resource": [
                "arn:aws:athena:*:111122223333:workgroup/<workgroup-name>"
            ]
        }
    ]
}
```

------

# 針對 Athena 使用 CalledVia 內容索引鍵
<a name="security-iam-athena-calledvia"></a>

當[委託](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)人向 提出[請求](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-request)時 AWS， 會將請求資訊 AWS 收集到評估和授權請求的*請求內容*中。您可以使用 JSON 政策的 `Condition` 元素，來比較請求內容中的鍵和您在政策中指定的鍵值。*全域條件內容索引鍵*為帶有 `aws:` 字首的條件索引鍵。

## 關於 aws:CalledVia 內容索引鍵
<a name="security-iam-athena-calledvia-the-awscalledvia-context-key"></a>

您可以使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia) 全域條件內容索引鍵，以將政策中的服務與代表 IAM 主體 (使用者或角色) 提出請求的服務進行比較。當委託人向 提出請求時 AWS 服務，該服務可能會使用委託人的登入資料向其他 服務提出後續請求。`aws:CalledVia` 鍵包含代表主體提出請求的鏈結中，每個服務的排序清單。

透過指定`aws:CalledVia`內容金鑰的服務主體名稱，您可以將內容金鑰設為 AWS 服務特定。例如，您可以使用 `aws:CalledVia` 條件索引鍵來限制僅能有從 Athena 進行的請求。若要搭配 Athena 使用政策中的 `aws:CalledVia` 條件索引鍵，您需指定 Athena 服務主體名稱 `athena.amazonaws.com`，如下列範例所示。

```
 ...
    "Condition": {
        "ForAnyValue:StringEquals": { 
            "aws:CalledVia": "athena.amazonaws.com"
        }
    }
...
```

您可以使用 `aws:CalledVia` 內容索引鍵，以確保如果呼叫者從 Athena 呼叫資源，則其僅能存取一項資源 (如 Lambda 函數)。

**注意**  
`aws:CalledVia` 內容索引鍵與受信任的身分傳播功能不相容。

## 新增 CalledVia 內容索引鍵，以存取 Lambda 函式
<a name="security-iam-athena-calledvia-example-policy-to-add-an-optional-calledvia-context-key-for-fine-grained-access-to-a-lambda-function"></a>

Athena 要求呼叫者需具有 `lambda:InvokeFunction` 許可，以呼叫與查詢相關聯的 Lambda 函數。下列陳述式指定使用者只能從 Athena 調用 Lambda 函式。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-1:111122223333:function:OneAthenaLambdaFunction",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:CalledVia": "athena.amazonaws.com"
                }
            }
        }
    ]
}
```

------

以下範例會說明如何在政策中加入先前的陳述式，以允許使用者執行並讀取聯合查詢。獲准執行這些動作的主體在其執行的查詢中，可以指定與聯合資料來源相關聯的 Athena 目錄。不過，除非透過 Athena 呼叫函數，否則主體無法存取相關聯的 Lambda 函數。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0", 
            "Effect": "Allow",
            "Action": [ 
                "athena:GetWorkGroup", 
                "s3:PutObject", 
                "s3:GetObject", 
                "athena:StartQueryExecution", 
                "s3:AbortMultipartUpload",  
                "athena:StopQueryExecution", 
                "athena:GetQueryExecution", 
                "athena:GetQueryResults", 
                "s3:ListMultipartUploadParts" 
            ], 
            "Resource": [ 
                "arn:aws:athena:*:111122223333:workgroup/WorkGroupName",
                "arn:aws:s3:::MyQueryResultsBucket/*", 
                "arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"
            ] 
        }, 
        {
            "Sid": "VisualEditor1", 
            "Effect": "Allow", 
            "Action": "athena:ListWorkGroups", 
            "Resource": "*" 
        }, 
        {
            "Sid": "VisualEditor2", 
            "Effect": "Allow", 
            "Action": 
                [ 
                "s3:ListBucket", 
                "s3:GetBucketLocation" 
                ], 
            "Resource": "arn:aws:s3:::MyLambdaSpillBucket" 
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:OneAthenaLambdaFunction", 
                "arn:aws:lambda:*:111122223333:function:AnotherAthenaLambdaFunction"
            ], 
            "Condition": {
                "ForAnyValue:StringEquals": { 
                    "aws:CalledVia": "athena.amazonaws.com"
                }
            }
        }            
    ]
}
```

------

如需有關 `CalledVia` 條件索引鍵的詳細資訊，請參閱《IAM 使用者指南》**中的 [AWS 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

# 允許存取外部 Hive 中繼存放區的 Athena 資料連接器
<a name="hive-metastore-iam-access"></a>

本主題中的許可政策範例示範需要允許的動作，以及允許這些動作的資源。將類似的許可政策連接至 IAM 身分之前，請仔細檢查這些政策，並根據您的需求進行修改。
+  [Example Policy to Allow an IAM Principal to Query Data Using Athena Data Connector for External Hive Metastore](#hive-using-iam) 
+  [Example Policy to Allow an IAM Principal to Create an Athena Data Connector for External Hive Metastore](#hive-creating-iam) 

**Example - 允許 IAM 主體使用外部 Hive 中繼存放區的 Athena 資料連接器來查詢資料**  
除了授權完整存取 Athena 動作的 [AWS 受管政策：AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy)，下列政策也會連接至 IAM 委託人。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "lambda:GetFunction",
                "lambda:GetLayerVersion",
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:MyAthenaLambdaFunction",
                "arn:aws:lambda:*:111122223333:function:AnotherAthenaLambdaFunction",
                "arn:aws:lambda:*:111122223333:layer:MyAthenaLambdaLayer:*"
            ]
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
            "Resource": "arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillLocation"
        }
    ]
}
```


**許可說明**  

| 允許的動作 | 說明 | 
| --- | --- | 
|  <pre>"s3:GetBucketLocation",<br />"s3:GetObject",<br />"s3:ListBucket",<br />"s3:PutObject",<br />"s3:ListMultipartUploadParts",<br />"s3:AbortMultipartUpload"</pre>  |  `s3` 動作允許讀取和寫入指定為 `"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillLocation"` 的資源，其中 *MyLambdaSpillLocation* 會識別一或多個叫用的 Lambda 函數的組態中所指定的溢出儲存貯體。只有在您使用 Lambda 層建立自訂執行時間相依性，以在部署時間減少函數成品規模時，才需要 *arn:aws:lambda:\$1:*MyAWSAcctId*:layer:*MyAthenaLambdaLayer*:\$1* 資源識別碼。最後面的 `*` 是層版本的萬用字元。  | 
|  <pre>"lambda:GetFunction",<br />"lambda:GetLayerVersion",<br />"lambda:InvokeFunction"</pre>  | 允許查詢叫用 Resource區塊中指定的 AWS Lambda 函數。例如，arn:aws:lambda:\$1:MyAWSAcctId:function:MyAthenaLambdaFunction，其中 MyAthenaLambdaFunction 會指定要叫用的 Lambda 函數的名稱。如範例所示，可以指定多個函數。 | 

**Example - 允許 IAM 主體建立外部 Hive 中繼存放區的 Athena 資料連接器**  
除了授權完整存取 Athena 動作的 [AWS 受管政策：AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy)，下列政策也會連接至 IAM 委託人。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:GetFunction",
                "lambda:ListFunctions",
                "lambda:GetLayerVersion",
                "lambda:InvokeFunction",
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:PublishLayerVersion",
                "lambda:DeleteLayerVersion",
                "lambda:UpdateFunctionConfiguration",
                "lambda:PutFunctionConcurrency",
                "lambda:DeleteFunctionConcurrency"
            ],
            "Resource": "arn:aws:lambda:*:111122223333: function: MyAthenaLambdaFunctionsPrefix*"
        }
    ]
}
```
 **許可說明**   
允許查詢叫用 `Resource` 區塊中指定 AWS Lambda 函數的 AWS Lambda 函數。例如，`arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunction`，其中 *MyAthenaLambdaFunction* 會指定要叫用的 Lambda 函數的名稱。如範例所示，可以指定多個函數。

# 允許 Lambda 函數存取外部 Hive 中繼存放區
<a name="hive-metastore-iam-access-lambda"></a>

若要在帳戶中呼叫 Lambda 函數，您必須建立具有下列許可的角色：
+ `AWSLambdaVPCAccessExecutionRole` - [AWS Lambda 執行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)許可，用於管理將您的函數連接到 VPC 的彈性網路介面。請確定您有足夠數量的網路界面和 IP 地址可用。
+ `AmazonAthenaFullAccess` - [AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy) 受管政策會授予 Athena 的完整存取權。
+ 允許 Lambda 函數寫入 S3 並允許 Athena 從 S3 讀取的 Amazon S3 政策。

例如，下列政策定義溢出位置 `s3:\\mybucket\spill` 的許可。

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

****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Effect": "Allow", "Action": [
    "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/spill" ] } ] }
```

------

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

## 建立 Lambda 函式
<a name="hive-metastore-iam-access-lambda-creating-lambda-functions"></a>

若要在您的帳戶中建立 Lambda 函數，需具備函數開發許可或 `AWSLambdaFullAccess` 角色。如需詳細資訊，請參閱 [AWS Lambda身分型 IAM 政策](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)。

由於 Athena 使用 AWS Serverless Application Repository 來建立 Lambda 函數，因此建立 Lambda 函數的超級使用者或管理員也應該具有 IAM 政策[，以允許 Athena 聯合查詢](federated-query-iam-access.md)。

## 設定目錄註冊和中繼資料 API 操作的許可
<a name="hive-metastore-iam-access-lambda-catalog-registration-and-metadata-api-operations"></a>

若要 API 存取目錄註冊和中繼資料操作，您可以使用 [AmazonAthenaFullAccess 受管政策](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy)。如果您不使用 `AmazonAthenaFullAccess` 政策，請將下列 API 操作新增至您的 Athena 政策：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:GetDataCatalog",
                "athena:CreateDataCatalog",
                "athena:UpdateDataCatalog",
                "athena:DeleteDataCatalog",
                "athena:GetDatabase",
                "athena:ListDatabases",
                "athena:GetTableMetadata",
                "athena:ListTableMetadata"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

## 跨區域呼叫 Lambda 函式
<a name="hive-metastore-iam-access-lambda-cross-region-invocation"></a>

依預設，Athena 會叫用在相同區域中定義的 Lambda 函數。若要在執行 Athena 查詢的區域 AWS 區域 以外的 中叫用 Lambda 函數，請使用 Lambda 函數的完整 ARN。

下列範例說明了歐洲 (法蘭克福) 區域中的目錄如何在美國東部 (維吉尼亞北部) 區域中指定 Lambda 函式，以從歐洲 (法蘭克福) 區域中的 Hive 中繼存放區擷取資料。

```
arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new     
```

當您以這種方式指定完整的 ARN 時，Athena 可以在 `us-east-1` 呼叫 `external-hms-service-new` Lambda 函數，從 `eu-central-1` 擷取 Hive 中繼存放區資料。

**注意**  
目錄應該在您 AWS 區域 用來執行 Athena 查詢的相同 中註冊。

## 跨帳戶呼叫 Lambda 函式
<a name="hive-metastore-iam-access-lambda-cross-account-invocation"></a>

有時您可能需要從不同的帳戶存取 Hive 中繼存放區。例如，若要執行 Hive 中繼存放區，您可以使用與用於 Athena 查詢的帳戶不同的帳戶。不同的群組或團隊可能會在其 VPC 內使用不同的帳戶來執行 Hive 中繼存放區。或者，您可能想要存取來自不同群組或團隊的不同 Hive 中繼存放區的中繼資料。

Athena 會使用 [AWS Lambda 支援進行跨帳戶存取](https://aws.amazon.com/blogs/compute/easy-authorization-of-aws-lambda-functions/)，以啟用 Hive 中繼存放區的跨帳戶存取。

**注意**  
請注意，Athena 的跨帳戶存取通常意味著可跨帳戶存取 Amazon S3 中的中繼資料和資料。

想像下列案例：
+ 帳戶 `111122223333` 在 Athena 中的 us-east-1 上設定 Lambda 函數 `external-hms-service-new`，以存取 EMR 叢集上執行的 Hive 中繼存放區。
+ 帳戶 `111122223333` 想要允許帳戶 444455556666 存取 Hive 中繼存放區資料。

若要授予帳戶`444455556666`存取 Lambda 函數 的權限`external-hms-service-new`，帳戶`111122223333`會使用下列 AWS CLI `add-permission`命令。為了方便閱讀，命令已經過格式化處理。

```
$ aws --profile perf-test lambda add-permission
      --function-name external-hms-service-new
      --region us-east-1
      --statement-id Id-ehms-invocation2
      --action "lambda:InvokeFunction"
      --principal arn:aws:iam::444455556666:user/perf1-test
{
    "Statement": "{\"Sid\":\"Id-ehms-invocation2\",
                   \"Effect\":\"Allow\",
                   \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"},
                   \"Action\":\"lambda:InvokeFunction\",
                   \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}"
}
```

若要檢查 Lambda 許可，請使用 `get-policy` 命令，如下列範例所示。為了方便閱讀，命令已經過格式化處理。

```
$ aws --profile perf-test lambda get-policy 
      --function-name arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new 
      --region us-east-1
{
    "RevisionId": "711e93ea-9851-44c8-a09f-5f2a2829d40f",
    "Policy": "{\"Version\":\"2012-10-17\",		 	 	 
                \"Id\":\"default\",
                \"Statement\":[{\"Sid\":\"Id-ehms-invocation2\",
                                \"Effect\":\"Allow\",
                                \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"},
                                \"Action\":\"lambda:InvokeFunction\",
                                \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}]}"
}
```

新增許可後，您可以在定義目錄 `ehms` 時，在 `us-east-1` 上使用 Lambda 函數的完整 ARN，如下所示：

```
arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new
```

如需跨區域呼叫的相關資訊，請參閱本主題稍早的[跨區域呼叫 Lambda 函式](#hive-metastore-iam-access-lambda-cross-region-invocation)。

### 授予資料的跨帳戶存取權
<a name="hive-metastore-iam-access-lambda-granting-cross-account-access-to-data"></a>

在執行 Athena 查詢之前，您必須授予對 Amazon S3 中資料的跨帳戶存取。您可採用下列其中一種方式來這麼做：
+ 使用[正式使用者 ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html) 來更新 Amazon S3 儲存貯體的存取控制清單政策。
+ 將跨帳戶存取新增至 Amazon S3 儲存貯體政策。

例如，將下列政策新增至帳戶 `111122223333` 中的 Amazon S3 儲存貯體政策，以允許帳戶 `444455556666` 從指定的 Amazon S3 位置讀取資料。

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

****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Sid": "Stmt1234567890123", "Effect":
    "Allow", "Principal": { "AWS":
        "arn:aws:iam::444455556666:user/perf1-test"
    }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::athena-test/lambda/dataset/*" } ]
    }
```

------

**注意**  
您可能不只需要將資料的跨帳戶存取授予 Amazon S3，也需要授予 Amazon S3 溢出位置的跨帳戶存取。當回應物件的大小超過指定閾值時，您的 Lambda 函數會將額外的資料溢出到溢出位置。請參閱本主題開頭的範例政策。

在目前的範例中，將跨帳戶存取授予 `444455556666,` 後，`444455556666` 可以在自己的 `ehms` 中使用目錄 `account` 來查詢帳戶 `111122223333` 中定義的資料表。

在下列範例中，SQL Workbench 設定檔 `perf-test-1` 適用於帳戶 `444455556666`。查詢使用目錄 `ehms` 來存取 Hive 中繼存放區和帳戶 `111122223333` 中的 Amazon S3 資料。

![\[在 SQL Workbench 中跨帳戶存取 Hive 中繼存放區和 Amazon S3 資料。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/hive-metastore-iam-access-lambda-1.png)


# 建立連接器和 Athena 目錄所需的許可
<a name="athena-catalog-access"></a>

若要調用 Athena `CreateDataCatalog`，您必須建立具有下列許可的角色：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
  {
  "Sid": "ECR",
  "Effect": "Allow",
  "Action": [
  "ecr:BatchGetImage",
  "ecr:GetDownloadUrlForLayer"
  ],
  "Resource": "arn:aws:ecr:*:*:repository/*"
  },
  {
  "Effect": "Allow",
  "Action": [
  "s3:GetObject",
  "glue:TagResource",
  "glue:GetConnection",
  "glue:CreateConnection",
  "glue:DeleteConnection",
  "glue:UpdateConnection",
  "serverlessrepo:CreateCloudFormationTemplate",
  "serverlessrepo:GetCloudFormationTemplate",
  "cloudformation:CreateStack",
  "cloudformation:DeleteStack",
  "cloudformation:DescribeStacks",
  "cloudformation:CreateChangeSet",
  "cloudformation:DescribeAccountLimits",
  "cloudformation:CreateStackSet",
  "cloudformation:ValidateTemplate",
  "cloudformation:CreateUploadBucket",
  "cloudformation:DescribeStackDriftDetectionStatus",
  "cloudformation:ListExports",
  "cloudformation:ListStacks",
  "cloudformation:EstimateTemplateCost",
  "cloudformation:ListImports",
  "lambda:InvokeFunction",
  "lambda:GetFunction",
  "lambda:DeleteFunction",
  "lambda:CreateFunction",
  "lambda:TagResource",
  "lambda:ListFunctions",
  "lambda:GetAccountSettings",
  "lambda:ListEventSourceMappings",
  "lambda:ListVersionsByFunction",
  "lambda:GetFunctionConfiguration",
  "lambda:PutFunctionConcurrency",
  "lambda:UpdateFunctionConfiguration",
  "lambda:UpdateFunctionCode",
  "lambda:DeleteFunctionConcurrency",
  "lambda:RemovePermission",
  "lambda:AddPermission",
  "lambda:ListTags",
  "lambda:GetAlias",
  "lambda:GetPolicy",
  "lambda:ListAliases",
  "ec2:DescribeSecurityGroups",
  "ec2:DescribeSubnets",
  "ec2:DescribeVpcs",
  "secretsmanager:ListSecrets",
  "glue:GetCatalogs"
  ],
  "Resource": "*"
  },
  {
  "Effect": "Allow",
  "Action": [
  "iam:AttachRolePolicy",
  "iam:DetachRolePolicy",
  "iam:DeleteRolePolicy",
  "iam:PutRolePolicy",
  "iam:GetRolePolicy",
  "iam:CreateRole",
  "iam:TagRole",
  "iam:DeleteRole",
  "iam:GetRole",
  "iam:PassRole",
  "iam:ListRoles",
  "iam:ListAttachedRolePolicies",
  "iam:ListRolePolicies",
  "iam:GetPolicy",
  "iam:UpdateRole"
  ],
  "Resource": [
  "arn:aws:iam::*:role/RoleName",
  "arn:aws:iam::111122223333:policy/*"
  ]
  }
  ]
  }
```

------

# 允許存取 Athena 聯合查詢：範例政策
<a name="federated-query-iam-access"></a>

本主題中的許可政策範例示範需要允許的動作，以及允許這些動作的資源。將這些政策連接至 IAM 身分之前，請仔細檢查政策，並根據您的需求進行修改。

如需有關將政策連接至 IAM 身分的資訊，請參閱《[IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)》中的[新增和移除 IAM 身分許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+  [Example policy to allow an IAM principal to run and return results using Athena Federated Query](#fed-using-iam) 
+  [Example Policy to Allow an IAM Principal to Create a Data Source Connector](#fed-creating-iam) 

**Example - 允許 IAM 主體使用 Athena 聯合查詢執行並傳回結果**  
在下列以身分識別為基礎的許可政策中，允許使用者或其他 IAM 委託人需要的動作，有這些動作才能使用 Athena 聯合查詢。獲准執行這些動作的委託人在其執行的查詢中，可以指定與聯合資料來源相關聯的 Athena 目錄。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Athena",
            "Effect": "Allow",
            "Action": [
                "athena:GetDataCatalog",
                "athena:GetQueryExecution",
                "athena:GetQueryResults",
                "athena:GetWorkGroup",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution"
            ],
            "Resource": [
                "arn:aws:athena:*:111122223333:workgroup/WorkgroupName",
                "arn:aws:athena:us-east-1:111122223333:datacatalog/DataCatalogName"
            ]
        },
        {
            "Sid": "ListAthenaWorkGroups",
            "Effect": "Allow",
            "Action": "athena:ListWorkGroups",
            "Resource": "*"
        },
        {
            "Sid": "Lambda",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:OneAthenaLambdaFunction",
                "arn:aws:lambda:*:111122223333:function:AnotherAthenaLambdaFunction"
            ]
        },
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListMultipartUploadParts",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::MyLambdaSpillBucket",
                "arn:aws:s3:::MyLambdaSpillBucket/*",
                "arn:aws:s3:::MyQueryResultsBucket",
                "arn:aws:s3:::MyQueryResultsBucket/*"
            ]
        }
    ]
}
```


**許可說明**  

| 允許的動作 | 說明 | 
| --- | --- | 
|  <pre> "athena:GetQueryExecution", <br /> "athena:GetQueryResults",<br /> "athena:GetWorkGroup",<br /> "athena:StartQueryExecution",<br /> "athena:StopQueryExecution"</pre>  |  執行聯合查詢所需的 Athena 許可。  | 
|  <pre> "athena:GetDataCatalog",<br /> "athena:GetQueryExecution,"<br /> "athena:GetQueryResults",<br /> "athena:GetWorkGroup",<br /> "athena:StartQueryExecution",<br /> "athena:StopQueryExecution"</pre>  |  執行聯合檢視查詢所需的 Athena 許可。檢視需要 `GetDataCatalog` 動作。  | 
|  <pre>"lambda:InvokeFunction"</pre>  | 允許查詢叫用 Resource 區塊中指定 AWS Lambda 函數的 AWS Lambda 函數。例如，arn:aws:lambda:\$1:MyAWSAcctId:function:MyAthenaLambdaFunction，其中 MyAthenaLambdaFunction 會指定要叫用的 Lambda 函數的名稱。如範例所示，可以指定多個函式。 | 
|  <pre>"s3:AbortMultipartUpload",<br />"s3:GetBucketLocation",<br />"s3:GetObject",<br />"s3:ListBucket",<br />"s3:ListMultipartUploadParts",<br />"s3:PutObject"</pre>  |  需要 `s3:ListBucket` 和 `s3:GetBucketLocation` 許可才能存取執行 `StartQueryExecution` 的 IAM 主體的查詢輸出儲存貯體。 `s3:PutObject`、`s3:ListMultipartUploadParts` 和 `s3:AbortMultipartUpload` 允許將查詢結果寫入 `arn:aws:s3:::MyQueryResultsBucket/*` 資源識別碼指定的查詢結果儲存貯體的所有子資料夾，其中 *MyQueryResultsBucket* 是 Athena 查詢結果儲存貯體。如需詳細資訊，請參閱[使用查詢結果和近期查詢](querying.md)。 `s3:GetObject` 針對指定為 `arn:aws:s3:::MyQueryResultsBucket` 的資源，允許讀取查詢結果和查詢歷史記錄，其中 *MyQueryResultsBucket* 是 Athena 查詢結果儲存貯體。 `s3:GetObject` 還允許從指定為 `"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"` 的資源讀取，其中 *MyLambdaSpillPrefix* 是在一或多個叫用的 Lambda 函數的組態中指定。  | 

**Example - 允許 IAM 主體建立資料來源連接器**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:ListVersionsByFunction",
                "iam:CreateRole",
                "lambda:GetFunctionConfiguration",
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy",
                "lambda:PutFunctionConcurrency",
                "iam:PassRole",
                "iam:DetachRolePolicy",
                "lambda:ListTags",
                "iam:ListAttachedRolePolicies",
                "iam:DeleteRolePolicy",
                "lambda:DeleteFunction",
                "lambda:GetAlias",
                "iam:ListRolePolicies",
                "iam:GetRole",
                "iam:GetPolicy",
                "lambda:InvokeFunction",
                "lambda:GetFunction",
                "lambda:ListAliases",
                "lambda:UpdateFunctionConfiguration",
                "iam:DeleteRole",
                "lambda:UpdateFunctionCode",
                "s3:GetObject",
                "lambda:AddPermission",
                "iam:UpdateRole",
                "lambda:DeleteFunctionConcurrency",
                "lambda:RemovePermission",
                "iam:GetRolePolicy",
                "lambda:GetPolicy"
            ],
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:MyAthenaLambdaFunctionsPrefix*",
                "arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/*",
                "arn:aws:iam::*:role/RoleName",
                "arn:aws:iam::111122223333:policy/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateUploadBucket",
                "cloudformation:DescribeStackDriftDetectionStatus",
                "cloudformation:ListExports",
                "cloudformation:ListStacks",
                "cloudformation:ListImports",
                "lambda:ListFunctions",
                "iam:ListRoles",
                "lambda:GetAccountSettings",
                "ec2:DescribeSecurityGroups",
                "cloudformation:EstimateTemplateCost",
                "ec2:DescribeVpcs",
                "lambda:ListEventSourceMappings",
                "cloudformation:DescribeAccountLimits",
                "ec2:DescribeSubnets",
                "cloudformation:CreateStackSet",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "cloudformation:*",
            "Resource": [
                "arn:aws:cloudformation:*:111122223333:stack/aws-serverless-repository-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:111122223333:stack/serverlessrepo-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:*:transform/Serverless-*",
                "arn:aws:cloudformation:*:111122223333:stackset/aws-serverless-repository-MyCFStackPrefix*:*",
                "arn:aws:cloudformation:*:111122223333:stackset/serverlessrepo-MyCFStackPrefix*:*"
            ]
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "serverlessrepo:*",
            "Resource": "arn:aws:serverlessrepo:*:*:applications/*"
        },
        {
            "Sid": "ECR",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/*"
        }
    ]
}
```


**許可說明**  

| 允許的動作 | 說明 | 
| --- | --- | 
|  <pre>"lambda:CreateFunction",<br />"lambda:ListVersionsByFunction",<br />"lambda:GetFunctionConfiguration",<br />"lambda:PutFunctionConcurrency",<br />"lambda:ListTags",<br />"lambda:DeleteFunction",<br />"lambda:GetAlias",<br />"lambda:InvokeFunction",<br />"lambda:GetFunction",<br />"lambda:ListAliases",<br />"lambda:UpdateFunctionConfiguration",<br />"lambda:UpdateFunctionCode",<br />"lambda:AddPermission",<br />"lambda:DeleteFunctionConcurrency",<br />"lambda:RemovePermission",<br />"lambda:GetPolicy"<br />"lambda:GetAccountSettings",<br />"lambda:ListFunctions",<br />"lambda:ListEventSourceMappings",<br /></pre>  |  允許建立和管理列為資源的 Lambda 函數。在範例中，資源識別符 `arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*` 中使用名稱字首，其中 `MyAthenaLambdaFunctionsPrefix` 是 Lambda 函式群組的名稱中使用的共同字首，因此不需要個別指定為資源。您可以指定一或多個 Lambda 函數資源。  | 
|  <pre>"s3:GetObject"</pre>  | 允許讀取資源識別符 所指定 AWS Serverless Application Repository 需要 的儲存貯體arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/\$1。此儲存貯體可能專屬於您的帳戶。 | 
|  <pre>"cloudformation:*"</pre>  |  允許建立和管理資源 指定的 CloudFormation 堆疊`MyCFStackPrefix`。這些堆疊和堆疊集是部署連接器和 UDFs AWS Serverless Application Repository 的方式。  | 
|  <pre>"serverlessrepo:*"</pre>  | 允許搜尋、檢視、發佈和更新 中由資源識別符 AWS Serverless Application Repository指定的應用程式arn:aws:serverlessrepo:\$1:\$1:applications/\$1。 | 
|  <pre>"ecr:BatchGetImage",<br />"ecr:GetDownloadUrlForLayer"</pre>  |  允許已建立的 Lambda 函式存取聯合連接器 ECR 映像。  | 

# 允許存取 Athena UDF：範例政策
<a name="udf-iam-access"></a>

本主題中的許可政策範例示範需要允許的動作，以及允許這些動作的資源。將類似的許可政策連接至 IAM 身分之前，請仔細檢查這些政策，並根據您的需求進行修改。
+  [Example Policy to Allow an IAM Principal to Run and Return Queries that Contain an Athena UDF Statement](#udf-using-iam) 
+  [Example Policy to Allow an IAM Principal to Create an Athena UDF](#udf-creating-iam) 

**Example - 允許 IAM 主體執行並傳回包含 Athena UDF 陳述式的查詢**  
在下列以身分識別為基礎的許可政策中，允許使用者或其他 IAM 委託人需要的動作，有這些動作才能執行使用 Athena UDF 陳述式的查詢。  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "lambda:InvokeFunction",
                "athena:GetQueryResults",
                "s3:ListMultipartUploadParts",
                "athena:GetWorkGroup",
                "s3:PutObject",
                "s3:GetObject",
                "s3:AbortMultipartUpload",
                "athena:StopQueryExecution",
                "athena:GetQueryExecution",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:athena:*:MyAWSAcctId:workgroup/MyAthenaWorkGroup",
                "arn:aws:s3:::MyQueryResultsBucket/*",
                "arn:aws:lambda:*:MyAWSAcctId:function:OneAthenaLambdaFunction",
                "arn:aws:lambda:*:MyAWSAcctId:function:AnotherAthenaLambdaFunction"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "athena:ListWorkGroups",
            "Resource": "*"
        }
    ]
}
```


**許可說明**  

| 允許的動作 | 說明 | 
| --- | --- | 
|  <pre>"athena:StartQueryExecution",<br /> "athena:GetQueryResults",<br /> "athena:GetWorkGroup",<br /> "athena:StopQueryExecution",<br /> "athena:GetQueryExecution",<br /></pre>  |  在 `MyAthenaWorkGroup` 工作群組中執行查詢所需的 Athena 許可。  | 
|  <pre>"s3:PutObject",<br />"s3:GetObject",<br />"s3:AbortMultipartUpload"</pre>  |  `s3:PutObject` 和 `s3:AbortMultipartUpload` 允許將查詢結果寫入 `arn:aws:s3:::MyQueryResultsBucket/*` 資源識別碼指定的查詢結果儲存貯體的所有子資料夾，其中 *MyQueryResultsBucket* 是 Athena 查詢結果儲存貯體。如需詳細資訊，請參閱[使用查詢結果和近期查詢](querying.md)。 `s3:GetObject` 針對指定為 `arn:aws:s3:::MyQueryResultsBucket` 的資源，允許讀取查詢結果和查詢歷史記錄，其中 *MyQueryResultsBucket* 是 Athena 查詢結果儲存貯體。如需詳細資訊，請參閱[使用查詢結果和近期查詢](querying.md)。 `s3:GetObject` 還允許從指定為 `"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"` 的資源讀取，其中 *MyLambdaSpillPrefix* 是在一或多個叫用的 Lambda 函數的組態中指定。  | 
|  <pre>"lambda:InvokeFunction"</pre>  | 允許查詢叫用 Resource區塊中指定的 AWS Lambda 函數。例如，arn:aws:lambda:\$1:MyAWSAcctId:function:MyAthenaLambdaFunction，其中 MyAthenaLambdaFunction 會指定要叫用的 Lambda 函數的名稱。如範例所示，可以指定多個函數。 | 

**Example - 允許 IAM 主體建立 Athena UDF**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:ListVersionsByFunction",
                "iam:CreateRole",
                "lambda:GetFunctionConfiguration",
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy",
                "lambda:PutFunctionConcurrency",
                "iam:PassRole",
                "iam:DetachRolePolicy",
                "lambda:ListTags",
                "iam:ListAttachedRolePolicies",
                "iam:DeleteRolePolicy",
                "lambda:DeleteFunction",
                "lambda:GetAlias",
                "iam:ListRolePolicies",
                "iam:GetRole",
                "iam:GetPolicy",
                "lambda:InvokeFunction",
                "lambda:GetFunction",
                "lambda:ListAliases",
                "lambda:UpdateFunctionConfiguration",
                "iam:DeleteRole",
                "lambda:UpdateFunctionCode",
                "s3:GetObject",
                "lambda:AddPermission",
                "iam:UpdateRole",
                "lambda:DeleteFunctionConcurrency",
                "lambda:RemovePermission",
                "iam:GetRolePolicy",
                "lambda:GetPolicy"
            ],
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:MyAthenaLambdaFunctionsPrefix*",
                "arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/*",
                "arn:aws:iam::*:role/RoleName",
                "arn:aws:iam::111122223333:policy/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateUploadBucket",
                "cloudformation:DescribeStackDriftDetectionStatus",
                "cloudformation:ListExports",
                "cloudformation:ListStacks",
                "cloudformation:ListImports",
                "lambda:ListFunctions",
                "iam:ListRoles",
                "lambda:GetAccountSettings",
                "ec2:DescribeSecurityGroups",
                "cloudformation:EstimateTemplateCost",
                "ec2:DescribeVpcs",
                "lambda:ListEventSourceMappings",
                "cloudformation:DescribeAccountLimits",
                "ec2:DescribeSubnets",
                "cloudformation:CreateStackSet",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "cloudformation:*",
            "Resource": [
                "arn:aws:cloudformation:*:111122223333:stack/aws-serverless-repository-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:111122223333:stack/serverlessrepo-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:*:transform/Serverless-*",
                "arn:aws:cloudformation:*:111122223333:stackset/aws-serverless-repository-MyCFStackPrefix*:*",
                "arn:aws:cloudformation:*:111122223333:stackset/serverlessrepo-MyCFStackPrefix*:*"
            ]
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "serverlessrepo:*",
            "Resource": "arn:aws:serverlessrepo:*:*:applications/*"
        },
        {
            "Sid": "ECR",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/*"
        }
    ]
}
```


**許可說明**  

| 允許的動作 | 說明 | 
| --- | --- | 
|  <pre>"lambda:CreateFunction",<br />"lambda:ListVersionsByFunction",<br />"lambda:GetFunctionConfiguration",<br />"lambda:PutFunctionConcurrency",<br />"lambda:ListTags",<br />"lambda:DeleteFunction",<br />"lambda:GetAlias",<br />"lambda:InvokeFunction",<br />"lambda:GetFunction",<br />"lambda:ListAliases",<br />"lambda:UpdateFunctionConfiguration",<br />"lambda:UpdateFunctionCode",<br />"lambda:AddPermission",<br />"lambda:DeleteFunctionConcurrency",<br />"lambda:RemovePermission",<br />"lambda:GetPolicy"<br />"lambda:GetAccountSettings",<br />"lambda:ListFunctions",<br />"lambda:ListEventSourceMappings",<br /></pre>  |  允許建立和管理列為資源的 Lambda 函數。在該範例中，資源識別碼 `arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*` 中使用名稱字首，其中 *MyAthenaLambdaFunctionsPrefix* 是 Lambda 函數群組的名稱中使用的共同字首，因此不需要個別指定為資源。您可以指定一或多個 Lambda 函數資源。  | 
|  <pre>"s3:GetObject"</pre>  | 允許讀取資源識別符 所指定 AWS Serverless Application Repository 需要 的儲存貯體arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/\$1。 | 
|  <pre>"cloudformation:*"</pre>  |  允許建立和管理資源 *MyCFStackPrefix* 指定的 CloudFormation 堆疊。這些堆疊和堆疊集是部署連接器和 UDFs AWS Serverless Application Repository 的方式。  | 
|  <pre>"serverlessrepo:*"</pre>  | 允許搜尋、檢視、發佈和更新 中由資源識別符 AWS Serverless Application Repository指定的應用程式arn:aws:serverlessrepo:\$1:\$1:applications/\$1。 | 

# 允許使用 Athena 存取機器學習
<a name="machine-learning-iam-access"></a>

必須允許執行 Athena 機器學習 (ML) 查詢的 IAM 主體對其使用的 Sagemaker 端點執行 `sagemaker:invokeEndpoint` 動作。在連接至使用者身分的以身分為基礎的許可政策中，加入類似下列的政策陳述式。此外，請連接 [AWS 受管政策：AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy)，以授權完整存取 Athena 動作，或連接已修改的內嵌政策，以允許動作子集。

在範例中，以要在查詢中使用的模型端點的一或多個 ARN，替換 `arn:aws:sagemaker:region:AWSAcctID:ModelEndpoint`。如需詳細資訊，請參閱*服務授權參考*中的 [SageMaker AI 的動作、資源和條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html)。

```
{
            "Effect": "Allow",
            "Action": [
                "sagemaker:invokeEndpoint"
            ],
            "Resource": "arn:aws:sagemaker:us-west-2:123456789012:workteam/public-crowd/default"
}
```

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

# 啟用對 Athena API 的聯合存取
<a name="access-federation-saml"></a>

本節討論的聯合存取，可讓組織中的使用者或用戶端應用程式呼叫 Amazon Athena API 操作。在這種情況下，組織的使用者無法直接存取 Athena。反之，您可以在 Microsoft Active Directory AWS 中管理 外部的使用者登入資料。Active Directory 支援 [SAML 2.0](https://wiki.oasis-open.org/security) (安全聲明標記語言 2.0)。

若要在此案例中驗證使用者，請使用支援 SAML.2.0 的 JDBC 或 ODBC 驅動程式，以存取 Active Directory Federation Services (ADFS) 3.0，並讓用戶端應用程式能夠呼叫 Athena API 操作。

如需 上 SAML 2.0 支援的詳細資訊 AWS，請參閱《*IAM 使用者指南*》中的[關於 SAML 2.0 聯合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html)。

**注意**  
特定類型的身分提供者 (IdP)，即 Active Directory Federation Service (ADFS 3.0) (Windows Server 的一部分) 支援對 Athena API 的聯合存取。聯合存取與 IAM Identity Center 信任身分傳播功能不相容。透過支援 SAML 2.0 的 JDBC 或 ODBC 驅動程式版本建立存取權。如需詳細資訊，請參閱 [使用 JDBC 連接到 Amazon Athena](connect-with-jdbc.md) 及 [使用 ODBC 連接到 Amazon Athena](connect-with-odbc.md)。

**Topics**
+ [開始之前](#access-federation-before-you-begin)
+ [了解身分驗證程序](#access-federation-diagram)
+ [程序：啟用對 Athena API 的 SAML 型聯合存取](#access-federation-procedure)

## 開始之前
<a name="access-federation-before-you-begin"></a>

 開始之前，請先完成以下先決條件：
+ 在您的組織內，安裝 ADFS 3.0 並將其設定為您的 IdP。
+ 在用來存取 Athena 的用戶端上，安裝和設定最新可用版本的 JDBC 或 ODBC 驅動程式。此驅動程式必須支援與 SAML 2.0 相容的聯合身分存取。如需詳細資訊，請參閱 [使用 JDBC 連接到 Amazon Athena](connect-with-jdbc.md) 及 [使用 ODBC 連接到 Amazon Athena](connect-with-odbc.md)。

## 了解身分驗證程序
<a name="access-federation-diagram"></a>

下列圖表說明聯合存取 Athena API 的身分驗證程序。

![\[Athena API 的聯合存取圖表。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/athena-saml-based-federation.png)


1. 組織中的使用者會使用用戶端應用程式搭配 JDBC 或 ODBC 驅動程式，請求獲得組織 IdP 的身分驗證。IdP 是 ADFS 3.0。

1. IdP 根據 Active Directory (組織的身分存放區) 對使用者進行身分驗證。

1. IdP 會建構一個具有使用者相關資訊的 SAML 聲明，並將此聲明經由 JDBC 或 ODBC 驅動程式發送到用戶端應用程式。

1. JDBC 或 ODBC 驅動程式會呼叫 AWS Security Token Service [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) API 操作，並傳遞下列參數：
   + SAML 供應商的 ARN
   + 要擔任的角色 ARN
   + 來自 IdP 的 SAML 聲明

   如需詳細資訊，請參閱《AWS Security Token Service API 參考》**中的 [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)。

1. API 透過 JDBC 或 ODBC 驅動程式傳給用戶端應用程式的回應，包含臨時安全登入資料。

1. 用戶端應用程式使用臨時安全憑證呼叫 Athena API 操作，讓您的使用者可以存取 Athena API 操作。

## 程序：啟用對 Athena API 的 SAML 型聯合存取
<a name="access-federation-procedure"></a>

此程序會在組織的 IdP 和 AWS 您的帳戶之間建立信任，以啟用對 Amazon Athena API 操作的 SAML 型聯合存取。

**若要啟用對 Athena API 的聯合存取：**

1. 在您的組織中，在您的 IdP 中註冊 AWS 為服務提供者 (SP)。這個程序稱為*依賴方信任*。如需詳細資訊，請參閱《IAM 使用者指南》**中的[使用依賴方信任設定您的 SAML 2.0 IdP](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html)。請執行以下步驟，做為此任務的一部分：

   1. 從這個 URL 取得範例 SAML 中繼資料文件：[https://signin.aws.amazon.com/static/saml-metadata.xml](https://signin.aws.amazon.com/static/saml-metadata.xml)。

   1. 在您組織的 IdP (ADFS) 中， 會產生同等的中繼資料 XML 檔案，將 IdP 描述為身分提供者 AWS。您的中繼資料檔案必須包含發行者名稱、建立日期、過期日期，以及 AWS 用於驗證組織中身分驗證回應 （聲明） 的金鑰。

1. 在 IAM 主控台中，您可以建立一個 SAML 身分提供者實體。如需詳細資訊，請參閱《IAM 使用者指南》**中的[建立 SAML 身分提供者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html)。執行以下操作，做為此步驟的一部分：

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

   1. 上傳在本程序步驟 1 中 IdP (ADFS) 產生的 SAML 中繼資料文件。

1. 在 IAM 主控台中為您的 IdP 建立一或多個 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html)。執行以下操作，做為此步驟的一部分：
   + 在該角色的許可政策中，列出允許組織的使用者在 AWS中執行的動作。
   + 在角色的信任政策中，將您在此程序步驟 2 中建立的 SAML 提供者實體設定為主體。

   這會在您的組織與 之間建立信任關係 AWS。

1. 在組織的 IdP (ADFS) 中，定義可將組織中的使用者或群組映射到 IAM 角色的聲明。使用者和群組對 IAM 角色的映射也稱為*宣告規則*。請注意，組織中不同的使用者和群組可能映射到不同的 IAM 角色。

   如需有關在 ADFS 中設定映射的資訊，請參閱部落格文章：[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/)

1. 安裝並設定具 SAML 2.0 支援的 JDBC 和 ODBC 驅動程式。如需詳細資訊，請參閱 [使用 JDBC 連接到 Amazon Athena](connect-with-jdbc.md) 及 [使用 ODBC 連接到 Amazon Athena](connect-with-odbc.md)。

1. 指定從您的應用程式到 JDBC 和 ODBC 驅動程式的連接字串。如需有關應用程式應使用之連線字串的資訊，請參閱《JDBC 驅動器安裝和設定指南**》中的*「使用 Active Directory Federation Services (ADFS) 憑證提供者」*，或《ODBC 驅動器安裝和設定指南**》中的類似主題，可透過 PDF 形式從 [使用 JDBC 連接到 Amazon Athena](connect-with-jdbc.md) 和 [使用 ODBC 連接到 Amazon Athena](connect-with-odbc.md) 主題中下載。

   以下是設定驅動程式連接字串的高階彙總：

   1. 在 `AwsCredentialsProviderClass configuration` 中，設定 `com.simba.athena.iamsupport.plugin.AdfsCredentialsProvider` 以表示您想要透過 ADFS IdP 使用的 SAML 2.0 身分驗證。

   1. 在 `idp_host` 提供 ADFS IdP 伺服器的主機名稱。

   1. 在 `idp_port` 提供 ADFS IdP 監聽 SAML 聲明請求的連接埠號碼。

   1. 在 `UID` 和 `PWD` 提供 AD 網域使用者登入資料。在 Windows 上使用驅動程式時，若未提供 `UID` 和 `PWD`，驅動程式會嘗試取得登入該 Windows 機器之使用者的使用者登入資料。

   1. 您可以選擇將 `ssl_insecure` 設定為 `true`。在這種情況下，驅動程式不會檢查 ADFS IdP 伺服器的 SSL 憑證真偽。如果未將 ADFS IdP 的 SSL 憑證設定為受驅動程式信任，則必須設定為 `true`。

   1. 若要啟用 Active Directory 網域使用者或群組到一個或多個 IAM 角色的映射 (如本程式庫步驟 4 中所述)，在 JDBC 或 ODBC 連接的 `preferred_role` 中，指定驅動程式連接中要擔任的 IAM 角色 (ARN)。指定 `preferred_role` 為選擇性，但如果角色不是宣告規則中列出的第一個角色，則非常有用。

   由於此程序，發生下列動作：

   1. JDBC 或 ODBC 驅動程式會呼叫 AWS STS [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) API，並傳遞宣告，如[架構圖](#access-federation-diagram)的步驟 4 所示。

   1. AWS 會確保擔任角色的請求來自 SAML 提供者實體中參考的 IdP。

   1. 如果請求成功， AWS STS [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) API 操作會傳回一組臨時安全登入資料，您的用戶端應用程式會使用此登入資料向 Athena 提出已簽署的請求。

      您的應用程式現在已具有目前使用者相關資訊，且能以程式設計的方式存取 Athena。

# 記錄並監控 Athena
<a name="security-logging-monitoring"></a>

若要偵測事件，在事件發生時收到提醒，以及回應它們，請搭配 Amazon Athena 使用這些選項：
+ **使用 監控 Athena AWS CloudTrail** – [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)提供使用者、角色或 Athena AWS 服務 中 所採取動作的記錄。其會從 Athena 主控台擷取呼叫，並將 Athena API 操作的呼叫編碼為事件。其允許您判斷向 Athena 提出的請求、提出請求的 IP 地址、提出請求的人員、提出請求的時間，以及其他詳細資訊。如需詳細資訊，請參閱[使用 記錄 Amazon Athena API 呼叫 AWS CloudTrail](monitor-with-cloudtrail.md)。

  您也可以使用 Athena 查詢 Athena 和其他 AWS 服務的 CloudTrail 日誌檔案。如需詳細資訊，請參閱[查詢 AWS CloudTrail 日誌](cloudtrail-logs.md)。
+ **使用 CloudTrail 和 Amazon Quick 監控 Athena 使用情況** – [Amazon Quick](https://aws.amazon.com/quicksight/) 是一項全受管、雲端驅動的商業智慧服務，可讓您建立互動式儀表板，讓您的組織可以從任何裝置存取。如需使用 CloudTrail 和 Amazon Quick 監控 Athena 用量的解決方案範例，請參閱 AWS 大數據部落格文章 [Realtor.com 如何使用 AWS CloudTrail 和 Quick 監控 Amazon Athena 用量](https://aws.amazon.com/blogs/big-data/analyzing-amazon-athena-usage-by-teams-within-a-real-estate-company/)。
+ **搭配 Athena 使用 EventBridge ** – Amazon EventBridge 提供近乎即時的系統事件串流，說明 AWS 資源的變更。EventBridge 會察覺這些操作變更的發生，回應它們並視需要採取更正動作，方法為傳送訊息來回應環境、啟用功能、執行變更和擷取狀態資訊。盡可能發出事件。如需詳細資訊，請參閱 *《Amazon EventBridge 使用者指南》*中的 [Amazon EventBridge 入門](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html)。
+ **使用工作群組來區隔使用者、團隊、應用程式或工作負載，以及設定查詢限制並控制查詢成本** - 您可以檢視 Amazon CloudWatch 中的查詢相關指標，對掃描的資料量設定限制來控制查詢成本，建立閾值，以及在超過這些閾值時觸發動作，例如 Amazon SNS 警示。如需詳細資訊，請參閱[使用工作群組來控制查詢存取和成本](workgroups-manage-queries-control-costs.md)。使用資源層級 IAM 許可來控制特定群組的存取。如需詳細資訊，請參閱[使用 IAM 政策來控制工作群組存取](workgroups-iam-policy.md)及[使用 CloudWatch 和 EventBridge 來監控查詢和控制成本](workgroups-control-limits.md)。

**Topics**
+ [使用 記錄 Amazon Athena API 呼叫 AWS CloudTrail](monitor-with-cloudtrail.md)

# 使用 記錄 Amazon Athena API 呼叫 AWS CloudTrail
<a name="monitor-with-cloudtrail"></a>

Athena 已與 整合 AWS CloudTrail，此服務提供 Athena AWS 服務 中使用者、角色或 所採取動作的記錄。

CloudTrail 會擷取 Athena 的 API 呼叫當作事件。擷取的呼叫包括從 Athena 主控台進行的呼叫，以及針對 Athena API 操作的程式碼呼叫。如果您建立線索，就可以將 CloudTrail 事件持續交付到 Amazon S3 儲存貯體，包括 Athena 的事件。即使您未設定線索，依然可以透過 CloudTrail 主控台中的 **Event history ** (事件歷史記錄) 檢視最新事件。

您可以利用 CloudTrail 所收集的資訊來判斷向 Athena 發出的請求，以及發出請求的 IP 地址、人員、時間和其他詳細資訊。

若要進一步了解 CloudTrail，請參閱[《AWS CloudTrail 使用者指南》](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

您可以使用 Athena 從 Athena 本身和其他 查詢 CloudTrail 日誌檔案 AWS 服務。如需詳細資訊，請參閱 [查詢 AWS CloudTrail 日誌](cloudtrail-logs.md)、 [Hive JSON SerDe](hive-json-serde.md)和 AWS 大數據部落格文章 [使用 CTAS 陳述式搭配 Amazon Athena 來降低成本和改善效能](https://aws.amazon.com/blogs/big-data/using-ctas-statements-with-amazon-athena-to-reduce-cost-and-improve-performance/)，這會使用 CloudTrail 來深入了解 Athena 用量。

## 關於 CloudTrail 中的 Athena 資訊
<a name="athena-info-in-cloudtrail"></a>

在您建立帳戶時，系統即會在 Amazon Web Services 帳戶中啟用 CloudTrail。當活動發生於 Athena 中時，系統便會將該活動記錄於 CloudTrail 事件中，並將其他 AWS 服務事件記錄至 **Event history** (事件歷史記錄) 中。您可以檢視、搜尋和下載 Amazon Web Services 帳戶中的最近事件。如需詳細資訊，請參閱[使用 CloudTrail 事件歷史記錄檢視事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

如需 Amazon Web Services 帳戶中正在進行事件的記錄 (包含 Athena 的事件)，請建立線索。*線索*能讓 CloudTrail 將日誌檔案交付至 Amazon S3 儲存貯體。依預設，當您在主控台中建立追蹤時，該追蹤會套用至所有的 AWS 區域。線索會記錄 AWS 分割區中所有區域的事件，並將日誌檔案傳送到您指定的 Amazon S3 儲存貯體。此外，您可以設定其他 AWS 服務 來進一步分析和處理 CloudTrail 日誌中收集的事件資料。如需詳細資訊，請參閱下列內容：
+ [建立追蹤的概觀](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支援的服務和整合](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [設定 CloudTrail 的 Amazon SNS 通知](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [接收多個區域的 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)和[接收多個帳戶的 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

所有 Athena 動作都由 CloudTrail 記錄，並以文件載明於 [Amazon Athena API 參考](https://docs.aws.amazon.com/athena/latest/APIReference/)中。例如，對 [StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html) 和 [GetQueryResults](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html) 動作的呼叫會在 CloudTrail 日誌檔案中產生相關項目。

每一筆事件或日誌專案都會包含產生請求者的資訊。身分資訊可協助您判斷下列事項：
+ 是否使用根或 AWS Identity and Access Management (IAM) 使用者登入資料提出請求。
+ 提出該請求時，是否使用了特定角色或聯合身分使用者的暫時安全憑證。
+ 該請求是否由另一項 AWS 服務服務提出。

如需詳細資訊，請參閱 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

## 了解 Athena 日誌檔案項目
<a name="understanding-ate-log-file-entries"></a>

追蹤是一種組態，能讓事件以日誌檔案的形式交付到您指定的 Amazon S3 儲存貯體。CloudTrail 日誌檔案包含一或多個日誌專案。一個事件為任何來源提出的單一請求，並包含請求動作、請求的日期和時間、請求參數等資訊。CloudTrail 日誌檔並非依公有 API 呼叫的堆疊追蹤排序，因此不會以任何特定順序出現。

**注意**  
為了防止意外揭露敏感資訊，`StartQueryExecution` 和 `CreateNamedQuery` 日誌中的 `queryString` 項目的值都為 `***OMITTED***`。這是設計本身所致。若要存取實際的查詢字串，您可以使用 Athena [GetQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html) API，並從 CloudTrail 日誌傳入 `responseElements.queryExecutionId` 的值。

以下範例會示範個別 CloudTrail 日誌項目：
+  [StartQueryExecution (Successful)](#startqueryexecution-successful) 
+  [StartQueryExecution (Failed)](#startqueryexecution-failed) 
+  [CreateNamedQuery](#createnamedquery) 

### StartQueryExecution (successful)
<a name="startqueryexecution-successful"></a>

```
{
 "eventVersion":"1.05",
 "userIdentity":{
    "type":"IAMUser",
    "principalId":"EXAMPLE_PRINCIPAL_ID",
    "arn":"arn:aws:iam::123456789012:user/johndoe",
    "accountId":"123456789012",
    "accessKeyId":"EXAMPLE_KEY_ID",
    "userName":"johndoe"
 },
 "eventTime":"2017-05-04T00:23:55Z",
 "eventSource":"athena.amazonaws.com",
 "eventName":"StartQueryExecution",
 "awsRegion":"us-east-1",
 "sourceIPAddress":"77.88.999.69",
 "userAgent":"aws-internal/3",
 "requestParameters":{
    "clientRequestToken":"16bc6e70-f972-4260-b18a-db1b623cb35c",
    "resultConfiguration":{
       "outputLocation":"s3://amzn-s3-demo-bucket/test/"
    },
    "queryString":"***OMITTED***"
 },
 "responseElements":{
    "queryExecutionId":"b621c254-74e0-48e3-9630-78ed857782f9"
 },
 "requestID":"f5039b01-305f-11e7-b146-c3fc56a7dc7a",
 "eventID":"c97cf8c8-6112-467a-8777-53bb38f83fd5",
 "eventType":"AwsApiCall",
 "recipientAccountId":"123456789012"
}
```

### StartQueryExecution (failed)
<a name="startqueryexecution-failed"></a>

```
{
 "eventVersion":"1.05",
 "userIdentity":{
  "type":"IAMUser",
  "principalId":"EXAMPLE_PRINCIPAL_ID",
  "arn":"arn:aws:iam::123456789012:user/johndoe",
  "accountId":"123456789012",
  "accessKeyId":"EXAMPLE_KEY_ID",
  "userName":"johndoe"
  },
 "eventTime":"2017-05-04T00:21:57Z",
 "eventSource":"athena.amazonaws.com",
 "eventName":"StartQueryExecution",
 "awsRegion":"us-east-1",
 "sourceIPAddress":"77.88.999.69",
 "userAgent":"aws-internal/3",
 "errorCode":"InvalidRequestException",
 "errorMessage":"Invalid result configuration. Should specify either output location or result configuration",
 "requestParameters":{
  "clientRequestToken":"ca0e965f-d6d8-4277-8257-814a57f57446",
  "queryString":"***OMITTED***"
  },
 "responseElements":null,
 "requestID":"aefbc057-305f-11e7-9f39-bbc56d5d161e",
 "eventID":"6e1fc69b-d076-477e-8dec-024ee51488c4",
 "eventType":"AwsApiCall",
 "recipientAccountId":"123456789012"
}
```

### CreateNamedQuery
<a name="createnamedquery"></a>

```
{
  "eventVersion":"1.05",
  "userIdentity":{
     "type":"IAMUser",
     "principalId":"EXAMPLE_PRINCIPAL_ID",
     "arn":"arn:aws:iam::123456789012:user/johndoe",
     "accountId":"123456789012",
     "accessKeyId":"EXAMPLE_KEY_ID",
     "userName":"johndoe"
  },
  "eventTime":"2017-05-16T22:00:58Z",
  "eventSource":"athena.amazonaws.com",
  "eventName":"CreateNamedQuery",
  "awsRegion":"us-west-2",
  "sourceIPAddress":"77.88.999.69",
  "userAgent":"aws-cli/1.11.85 Python/2.7.10 Darwin/16.6.0 botocore/1.5.48",
  "requestParameters":{
     "name":"johndoetest",
     "queryString":"***OMITTED***",
     "database":"default",
     "clientRequestToken":"fc1ad880-69ee-4df0-bb0f-1770d9a539b1"
     },
  "responseElements":{
     "namedQueryId":"cdd0fe29-4787-4263-9188-a9c8db29f2d6"
     },
  "requestID":"2487dd96-3a83-11e7-8f67-c9de5ac76512",
  "eventID":"15e3d3b5-6c3b-4c7c-bc0b-36a8dd95227b",
  "eventType":"AwsApiCall",
  "recipientAccountId":"123456789012"
},
```

# 的合規驗證
<a name="security-compliance-validation"></a>

在多個合規計畫中，第三方稽核人員會評估 的安全與 AWS 合規。這些計劃包括 SOC、PCI、FedRAMP 等等。

如需特定合規計劃 AWS 服務 範圍內的 清單，請參閱[AWS 服務 合規計劃範圍內](https://aws.amazon.com/compliance/services-in-scope/)的 。如需一般資訊，請參閱 [AWS 合規計劃](https://aws.amazon.com/compliance/programs/)。

您可以使用 下載第三方稽核報告 AWS Artifact。如需詳細資訊，請參閱[在 中下載報告 AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)。

您使用 時的合規責任取決於資料的機密性、您公司的合規目標，以及適用的法律和法規。 AWS 提供下列資源來協助合規：
+ [安全與合規快速入門指南](https://aws.amazon.com/quickstart/?awsf.quickstart-homepage-filter=categories%23security-identity-compliance) – 這些部署指南討論架構考量，並提供在其中部署以安全與合規為重心的基準環境的步驟 AWS。
+ [Amazon Web Services 上的 HIPAA 安全與合規架構](https://docs.aws.amazon.com/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.html) – 本白皮書說明公司如何使用 AWS 來建立符合 HIPAA 規範的應用程式。
+ [AWS 合規資源](https://aws.amazon.com/compliance/resources/) – 此工作手冊和指南集合可能適用於您的產業和位置。
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html) – 這會 AWS 服務 評估您的資源組態符合內部實務、產業準則和法規的程度。
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) – 這 AWS 服務 可讓您全面檢視 內的安全狀態 AWS ，協助您檢查是否符合安全產業標準和最佳實務。

# Athena 中的復原功能
<a name="security-resilience"></a>

 AWS 全球基礎設施是以 AWS 區域 和 可用區域為基礎建置。 AWS 區域 提供多個實體隔離和隔離的可用區域，這些可用區域與低延遲、高輸送量和高備援聯網連接。透過可用區域，您所設計與操作的應用程式和資料庫，就能夠在可用區域之間自動容錯移轉，而不會發生中斷。可用區域的可用性、容錯能力和擴充能力，均較單一或多個資料中心的傳統基礎設施還高。

如需 AWS 區域 和可用區域的詳細資訊，請參閱 [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/)。

除了 AWS 全球基礎設施之外， 還提供數種功能，以協助支援您的資料彈性和備份需求。

Athena 為無伺服器，無須設定或管理任何基礎設施。Athena 具有高可用性，並跨多個可用區域使用運算資源來執行查詢，如果無法連線特定可用區域，便會自動適當地路由查詢。Athena 會使用 Amazon S3 作為其基礎資料存放區，讓您的資料具有高可用性和耐用性。Amazon S3 會提供耐用的基礎設施來存放重要資料，其旨在提供 99.999999999% 的物件耐用性。您的資料會以冗餘方式存放在多個設施以及每個設施的多個裝置。

# Athena 中的基礎設施安全
<a name="security-infrastructure"></a>

作為受管服務， 受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及如何 AWS 保護基礎設施的資訊，請參閱[AWS 雲端安全](https://aws.amazon.com/security/)。若要使用基礎設施安全的最佳實務來設計您的 AWS 環境，請參閱*安全支柱 AWS Well-Architected Framework* 中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 。使用者端必須支援下列專案：
+ Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 具備完美轉送私密(PFS)的密碼套件，例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。

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

Athena [受管政策](security-iam-awsmanpol.md)不但易於使用，且會隨著服務的演進以所需動作自動更新。客戶受管政策和內嵌政策允許您透過在政策內指定更精密的 Athena 動作來微調這些政策。授予對資料的 Amazon S3 位置之適當存取權。如需有關如何授予 Amazon S3 存取權的詳細資訊和案例，請參閱《Amazon Simple Storage Service 開發人員指南》**中的[演練範例：管理存取權](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access.html)。如需詳細資訊以及允許哪些 Amazon S3 動作的範例，請參閱[跨帳戶存取](cross-account-permissions.md)中的儲存貯體政策範例。

**Topics**
+ [使用界面 VPC 端點連接至 Amazon Athena](interface-vpc-endpoint.md)

# 使用界面 VPC 端點連接至 Amazon Athena
<a name="interface-vpc-endpoint"></a>

在虛擬私有雲端 (VPC) 中使用[介面 VPC 端點 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html) 和 [AWS Glue VPC 端點](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoint.html)，改善 VPC 的安全狀態。介面 VPC 端點可讓您控制從 VPC 內部到達哪些目的地，從而提高安全性。每個 VPC 端點皆會由一個或多個具私有 IP 地址[彈性網路介面](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) (ENI) 來表示，而該介面位於 VPC 子網路中。

介面 VPC 端點會將您的 VPC 直接連接到 Athena，無需網際網路閘道、NAT 裝置、VPN 連接或 Direct Connect 連線。VPC 中的執行個體不需要公有 IP 地址，就能與 Athena API 進行通訊。

若要透過 VPC 來使用 Athena，您必須從 VPC 中的執行個體來連接，或使用 Amazon Virtual Private Network (VPN) 或 Direct Connect將私有網路連接至 VPC。如需有關 Amazon VPN 的資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的 [VPN 連接](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)。如需 的詳細資訊 AWS Direct Connect，請參閱*Direct Connect 《 使用者指南*》中的[建立連線](https://docs.aws.amazon.com/directconnect/latest/UserGuide/create-connection.html)。

Athena 在所有提供 Amazon VPC 和 [Athena](https://docs.aws.amazon.com/general/latest/gr/rande.html#athena) AWS 區域 的所有 中都支援 VPC 端點。 [https://docs.aws.amazon.com/general/latest/gr/rande.html#vpc_region](https://docs.aws.amazon.com/general/latest/gr/rande.html#vpc_region)

您可以使用 AWS 管理主控台 或 AWS Command Line Interface (AWS CLI) 命令建立介面 VPC 端點以連線至 Athena。如需詳細資訊，請參閱[建立介面端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)。

在建立界面 VPC 端點之後，如果您啟用端點的[私有 DNS](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#vpce-private-dns) 主機名稱，則預設 Athena 端點 (https://athena.*Region*.amazonaws.com) 會解析為您的 VPC 端點。

如果您尚未啟用私有 DNS 主機名稱，Amazon VPC 會透過以下格式提供一個 DNS 端點名稱，供您使用：

```
VPC_Endpoint_ID.athena.Region.vpce.amazonaws.com
```

如需詳細資訊，請參閱*《Amazon VPC 使用者指南》*中的 [介面 VPC 端點 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)。

Athena 會支援在您的 VPC 內呼叫其所有 [API 動作](https://docs.aws.amazon.com/athena/latest/APIReference/API_Operations.html)。

## 為 Athena 建立 VPC 端點政策
<a name="api-private-link-policy"></a>

您可以為 Athena 的 Amazon VPC 端點建立政策，以指定下列限制：
+ **主體** – 可執行動作的主體。
+ **動作** – 可執行的動作。
+ **資源** – 可供執行動作的資源。
+ **僅受信任的身分** – 使用 `aws:PrincipalOrgId`條件來限制僅存取屬於您 AWS 組織一部分的登入資料。這有助於防止非預期的主體存取。
+ **僅可信資源** – 使用 `aws:ResourceOrgId` 條件，以防止存取非預期的資源。
+ **僅可信身分和資源** – 為 VPC 端點建立組合政策，以協助防止存取非預期的主體和資源。

如需詳細資訊，請參閱《*Amazon* [VPC 使用者指南》中的使用 VPC 端點控制對服務的存取](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)，以及 AWS 《白皮書*建置資料周邊 AWS*》中的[附錄 2 – VPC 端點政策範例](https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/appendix-2-vpc-endpoint-policy-examples.html)。

**Example – VPC 端點政策**  
下列範例允許組織身分對組織資源的請求，並允許 AWS 服務主體的請求。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsByOrgsIdentitiesToOrgsResources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "my-org-id",
                    "aws:ResourceOrgID": "my-org-id"
                }
            }
        },
        {
            "Sid": "AllowRequestsByAWSServicePrincipals",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "aws:PrincipalIsAWSService": "true"
                }
            }
        }
    ]
}
```

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

## 關於共用子網路中的 VPC 端點
<a name="interface-vpc-endpoint-shared-subnets"></a>

無法在與您共用的子網路中建立、描述、修改或刪除 VPC 端點。不過，可以在與您共用的子網路中使用 VPC 端點。如需有關 VPC 子網路共用的資訊，請參閱《*Amazon VPC 使用者指南*》中的[與其他帳戶共用 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html)。

# Athena 中的組態與漏洞分析
<a name="security-vulnerability-management"></a>

Athena 是無伺服器，因此沒有可設定或管理的基礎設施。 會 AWS 處理基本安全任務，例如訪客作業系統 (OS) 和資料庫修補、防火牆組態和災難復原。這些程序已由適當的第三方進行檢閱並認證。如需詳細資訊，請參閱下列 AWS資源：
+  [共同的責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/) 
+ [安全性、身分與合規的最佳實務](https://aws.amazon.com/architecture/security-identity-compliance/)

# 使用 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/)