

# 保管中の暗号化
<a name="encryption"></a>

Amazon Athena では、同じリージョン内、および限られた数のリージョン間で Amazon S3 内の暗号化されたデータに対するクエリを実行できます。Amazon S3 内のクエリ結果、および AWS Glue データカタログ内のデータを暗号化することもできます。

Athena では、以下のアセットを暗号化できます。
+ Amazon S3 内にあるすべてのクエリ結果。Athena は、これらを Amazon S3 の結果の場所と呼ばれる場所に保存します。Amazon S3 に保存されたクエリ結果は、基盤となるデータセットが Amazon S3 で暗号化されているかどうかにかかわらず、暗号化できます。詳細については、「[Amazon S3 に保存された Athena クエリ結果を暗号化する](encrypting-query-results-stored-in-s3.md)」を参照してください。
+ AWS Glue データカタログのデータ。詳細については、「[AWS Glue データカタログの暗号化されたメタデータに対するアクセス許可](#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 データカタログの暗号化されたメタデータに対するアクセス許可](#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 は、Amazon S3 内のデータセットとクエリ結果について、以下の暗号化オプションをサポートしています。


| 暗号化タイプ | 説明 | クロスリージョンサポート | 
| --- | --- | --- | 
| [SSE-S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) | 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 では、このオプションには、`'has_encrypted_data'='true'` または `'encryption_option'='CSE_KMS'` と `'kms_key'='kms_key_arn'`を指定する `TBLPROPERTIES` 句を含む `CREATE TABLE` ステートメントの使用が必要になります。詳細については、「[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-S3 や CSE-KMS 暗号化方法ではなく SSE-KMS 暗号化を使用することをお勧めします。SSE-KMS は、制御、シンプルさ、パフォーマンスのバランスを備えているため、データ暗号化にマネージド KMS キーを使用する場合に推奨される方法です。

**SSE-S3 と比較した場合の SSE-KMS のメリット**
+ SSE-KMS では、独自のキーを指定および管理できるため、よりきめ細かい制御が可能です。キーポリシーの定義、キーライフサイクルの監督、キーの使用状況のモニタリングを行うことができます。

**CSE-KMS と比較した場合の SSE-KMS のメリット**
+ S3 暗号化クライアントの継続的なメンテナンスを必要とする CSE-KMS とは異なり、SSE-KMS では、データを暗号化および復号するための追加のインフラストラクチャは必要ありません。
+ 進化する暗号化アルゴリズムが原因で、SSE-KMS では、新しい S3 暗号化クライアントと古い 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>

 クライアント側の暗号化には、以下の 2 つのツールを利用できることに留意してください。
+ [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) – この SDK は、AWS のどこでもデータを暗号化するために使用できますが、Athena では直接サポートされていません。

これらのツールには互換性がなく、一方のツールで暗号化されたデータをもう一方のツールで復号化することはできません。Athena が直接サポートするのは Amazon S3 暗号化クライアントのみです。SDK を使用してデータを暗号化する場合、Athena からクエリを実行することはできますが、データが暗号化されたテキストとして返されます。

AWS Encryption SDK で暗号化されたデータを Athena を使用してクエリする場合は、データをダウンロードして復号化してから、Amazon S3 暗号化クライアントを使用して再度暗号化する必要があります。

## Amazon S3 の暗号化されたデータに対する許可
<a name="permissions-for-encrypting-and-decrypting-data"></a>

Amazon S3 で使用する暗号化のタイプに応じて、Athena で使用されるポリシーに「Allow」アクションとしても知られる許可を追加することが必要になることがあります。
+ **SSE-S3** – 暗号化に SSE-S3 を使用する場合、Athena ユーザーのポリシーに追加の許可は必要ありません。適切な Amazon S3 の場所、および Athena のアクションに対する適切な Amazon S3 許可を持っているだけで十分です。適切な Athena および Amazon S3 の許可を可能にするポリシーの詳細については、「[AWSAmazon Athena の 管理ポリシー](security-iam-awsmanpol.md)」および「[Athena から Amazon S3 へのアクセスを制御する](s3-permissions.md)」を参照してください。
+ **AWS KMS** – 暗号化に AWS KMS を使用する場合、Athena ユーザーには、Athena と Amazon S3 へのアクセス許可に加えて、特定の AWS KMS アクションの実行が許可されている必要があります。これらのアクションは、Amazon S3 内のデータの暗号化に使用されるカスタマーマネージドキーのキーポリシーを編集することによって許可します。適切な AWS KMS キーポリシーにキーユーザーを追加するには、AWS KMS コンソール ([https://console.aws.amazon.com/kms](https://console.aws.amazon.com/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 への呼び出し数を減らすのも 1 つの方法です。詳細については、「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 で Amazon S3 を使用する場合の許可に関するトラブルシューティング情報については、「[Athena の問題をトラブルシューティングする](troubleshooting-athena.md)」トピックの「[アクセス許可](troubleshooting-athena.md#troubleshooting-athena-permissions)」セクションを参照してください。

## AWS Glue データカタログの暗号化されたメタデータに対するアクセス許可
<a name="glue-encryption"></a>

[AWS Glue Data Catalog のメタデータを暗号化](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html)する場合は、Athena へのアクセスに使用する ポリシーに `"kms:GenerateDataKey"`、`"kms:Decrypt"`、および `"kms:Encrypt"` アクションを追加する必要があります。詳細については、「[AWS Glue Data Catalog で Athena から暗号化されたメタデータへのアクセスを構成する](access-encrypted-data-glue-data-catalog.md)」を参照してください。