

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

# 受管查詢結果
<a name="managed-results"></a>

利用受管查詢結果，您可以執行 SQL 查詢，而無需提供用於儲存查詢結果的 Amazon S3 儲存貯體。這樣，您就無需佈建、管理、控制存取和清除自己的 S3 儲存貯體。若要開始使用，請建立新的工作群組或編輯現有的工作群組。在**查詢結果組態**下，選取 **Athena 受管**。

**主要功能**
+ 為簡化工作流程，執行查詢前，請先移除選擇 S3 儲存貯體位置的需求。
+ 使用受管查詢結果無需額外付費，自動刪除查詢結果則可降低管理開銷，而且也不需要單獨的 S3 儲存貯體清除程序。
+ 簡單入門：可以輕鬆設定新的和既有的工作群組，以使用受管查詢結果。您可以在 AWS 帳戶中混合使用 Athena 受管和客戶受管查詢結果。
+ 簡化了 IAM 許可，允許透過繫結至個別工作群組的 `GetQueryResults` 和 `GetQueryResultsStream` 讀取結果。
+ 查詢結果會使用您選擇的 AWS 擁有金鑰或客戶擁有的金鑰自動加密。

## 考量和限制
<a name="managed-results-considerations"></a>

****
+ 在 Athena 中，對查詢結果的存取權會在工作群組級別進行管理。因此，對於特定工作群組，您需要 `GetQueryResults` 和 `GetQueryResultsStream` IAM 動作的明確許可。`GetQueryResults` 動作將決定誰能以分頁格式擷取已完成查詢的結果，而 `GetQueryResultsStream` 動作將決定誰可以串流已完成查詢的結果 (通常由 Athena 驅動器使用)。
+ 您無法從主控台下載大於 200 MB 的查詢結果檔案。使用 `UNLOAD` 陳述式，將大於 200 MB 的結果寫入您可以單獨下載的位置。
+ 受管查詢結果功能不支援[查詢結果重複使用](reusing-query-results.md)。
+ 查詢結果可以保留 24 小時。在此期間，可免費存放查詢結果。在此期間之後，查詢結果會自動刪除。

## 建立或編輯具有受管查詢結果的工作群組
<a name="using-managed-query-results"></a>

若要從主控台建立工作群組或更新具有受管查詢結果的現有工作群組：

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

1. 從左側導覽窗格，選擇**工作群組**。

1. 選擇**建立工作群組**以建立新的工作群組，或從清單中編輯現有工作群組。

1. 在**查詢結果組態**下，選擇 **Athena 受管**。  
![\[查詢結果組態選單。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/athena-managed.png)

1. 對於**加密查詢結果**，選擇您想要的加密選項。如需詳細資訊，請參閱[選擇查詢結果加密](#managed-query-results-encryption-at-rest)。

1. 填寫所有其他必要的詳細資訊，然後選擇**儲存變更**。

## 選擇查詢結果加密
<a name="managed-query-results-encryption-at-rest"></a>

加密組態時有兩種選項：
+ **使用 AWS 擁有的金鑰加密** – 當您使用受管查詢結果時，這是預設選項。如果您想要使用 AWS 擁有的金鑰加密查詢結果，請選擇此選項。
+ **使用客戶自管金鑰加密** – 如果您想要使用客戶自管金鑰對查詢結果進行加密和解密，請選擇此選項。若要使用客戶自管金鑰，請在金鑰政策區段的主體元素中新增 Athena 服務。如需詳細資訊，請參閱[為受管查詢結果設定 AWS KMS 金鑰政策](#managed-query-results-set-up)。若要成功執行查詢，執行查詢的使用者需要存取 AWS KMS 金鑰的許可。

## 為受管查詢結果設定 AWS KMS 金鑰政策
<a name="managed-query-results-set-up"></a>

金鑰政策的 `Principal` 區段指定誰可以使用此金鑰。受管查詢結果功能引入了主體 `encryption.athena.amazonaws.com`，而您必須在 `Principal` 區段中指定該主體。此服務主體專門用於存取非 Athena 擁有的金鑰。您還必須將 `kms:Decrypt`、`kms:GenerateDataKey` 和 `kms:DescribeKey` 動作新增至用於存取受管結果的金鑰政策。這三個動作是允許的最低動作。

受管查詢結果會將您的工作群組 ARN 用於[加密內容](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)。由於 `Principal`區段是 AWS 服務，因此您也需要將 `aws:sourceArn`和 `aws:sourceAccount` 新增至金鑰政策條件。下列範例顯示對單一工作群組具有最低許可的 AWS KMS 金鑰政策。

```
 {
    "Sid": "Allow athena service principal to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "encryption.athena.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:DescribeKey"
      ],
    "Resource": "arn:aws:kms:us-east-1:{account-id}:key/{key-id}",
    "Condition": {
    "ArnLike": {
        "kms:EncryptionContext:aws:athena:arn": "arn:aws:athena:us-east-1:{account-id}:workgroup/{workgroup-name}",
        "aws:SourceArn": "arn:aws:athena:us-east-1:{account-id}:workgroup/{workgroup-name}"
    },
    "StringEquals": {
        "aws:SourceAccount": "{account-id}"
    }
}
```

下列範例 AWS KMS 金鑰政策允許相同*帳戶 ID *中的所有工作群組使用相同的 AWS KMS 金鑰。

```
{
    "Sid": "Allow athena service principal to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "encryption.athena.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:DescribeKey"
    ],
    "Resource": "arn:aws:kms:us-east-1:account-id:key/{key-id}",
    "Condition": {
        "ArnLike": {
          "kms:EncryptionContext:aws:athena:arn": "arn:aws:athena:us-east-1:account-id:workgroup/*",
          "aws:SourceArn": "arn:aws:athena:us-east-1:account-id:workgroup/*"
        },
        "StringEquals": {
          "aws:SourceAccount": "account-id"
        }
    }
}
```

除了 Athena 和 Amazon S3 許可之外，您還必須取得執行 `kms:GenerateDataKey` 和 `kms:Decrypt` 動作的許可。如需詳細資訊，請參閱[Amazon S3 中加密資料的許可](encryption.md#permissions-for-encrypting-and-decrypting-data)。

如需有關受管查詢結果加密的詳細資訊，請參閱 [加密受管查詢結果](encrypting-managed-results.md)。

# 加密受管查詢結果
<a name="encrypting-managed-results"></a>

Athena 提供下列選項，以對 [受管查詢結果](managed-results.md) 進行加密。

## 使用 AWS 擁有的金鑰加密
<a name="encrypting-managed-results-aws-owned-key"></a>

當您使用受管查詢結果時，此為預設選項。此選項表示您想要使用 AWS 擁有的金鑰來加密查詢結果。 AWS 擁有的金鑰不會儲存在 AWS 您的帳戶中，並且是 AWS 擁有的 KMS 金鑰集合的一部分。當您使用 AWS 擁有的金鑰時，不會向您收取費用，而且它們不會計入您帳戶的 AWS KMS 配額。

## 使用 AWS KMS 客戶受管金鑰加密
<a name="encrypting-managed-results-customer-managed-key"></a>

客戶受管金鑰是您帳戶中建立、擁有和管理 AWS 的 KMS 金鑰。您可以完全控制這些 KMS 金鑰，包括建立和維護其金鑰政策、IAM 政策和授與、啟用和停用金鑰、輪換其密碼編譯材料、新增標籤、建立參考別名，以及排程供刪除。如需詳細資訊，請參閱[客戶自管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

## Athena 如何使用客戶自管金鑰來對結果進行加密
<a name="encrypting-managed-results-how-ate-uses-cmk"></a>

當您指定客戶受管金鑰時，Athena 會使用它來對存放在自管查詢結果中的查詢結果進行加密。呼叫 `GetQueryResults` 時，需要使用相同的金鑰來對結果進行解密。當您將客戶自管金鑰的狀態設定為停用或排程刪除時，可避免 Athena 和所有使用者使用該金鑰對結果進行加密或解密。

Athena 使用封套加密和金鑰階層來加密資料。您的 AWS KMS 加密金鑰是用來產生和解密此金鑰階層的根金鑰。

每個結果都會使用加密時在工作群組中設定的客戶自管金鑰進行加密。將金鑰切換到不同的客戶受管金鑰或 AWS 擁有的金鑰不會使用新金鑰重新加密現有結果。刪除和停用特定客戶自管金鑰只會影響對金鑰加密結果的解密。

Athena 需要存取您的加密金鑰，才能執行 `kms:Decrypt`、`kms:GenerateDataKey` 和 `kms:DescribeKey` 操作，以對結果進行加密和解密。如需詳細資訊，請參閱[Amazon S3 中加密資料的許可](encryption.md#permissions-for-encrypting-and-decrypting-data)。

使用 `StartQueryExecution` API 提交查詢並使用 `GetQueryResults` 讀取結果的主體，除了 Athena 和 Amazon S3 許可之外，還必須擁有對客戶自管金鑰的許可，以便進行 `kms:Decrypt`、`kms:GenerateDataKey` 和 `kms:DescribeKey` 操作。如需詳細資訊，請參閱 [中的金鑰政策 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)。