

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Keyspaces の保管データ暗号化
<a name="EncryptionAtRest"></a>

Amazon Keyspaces (Apache Cassandra 向け) の*保管データ暗号化*では、[AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/) に保存されている暗号化キーを使用して保管中のすべてのデータを暗号化することで、セキュリティを強化します。この機能は、機密データの保護における負担と複雑な作業を減らすのに役立ちます。保管されているデータを暗号化することで、データ保護に関する厳格なコンプライアンスと規制要件を満たしたセキュリティ重視のアプリケーションを構築できます。

 Amazon Keyspaces の保管データ暗号化では、256 ビット高度暗号化基準 (AES-256) を使用してデータを暗号化します。この機能は、ストレージへの不正アクセスからデータを保護するのに役立ちます。

Amazon Keyspaces は、テーブルとストリーム内のデータを透過的に暗号化および復号します。Amazon Keyspaces では、データ暗号化にエンベロープ暗号化とキー階層が使用されます。ルート暗号化キーの保存と管理のために AWS KMS に統合されます。暗号化キー階層の詳細については、「[保管データ暗号化: Amazon Keyspaces での動作](encryption.howitworks.md)」を参照してください。エンベロープ暗号化などの AWS KMS 概念の詳細については、「 *AWS Key Management Service デベロッパーガイド*」の[AWS KMS 「 管理サービスの概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)」を参照してください。

 新しいテーブルを作成するとき、以下のいずれかの *AWS KMS キー (KMS キー)* を選択できます。
+ AWS 所有のキー – これはデフォルトの暗号化タイプです。キーは Amazon Keyspaces により所有されます (追加料金なし)。
+ カスタマーマネージドキー – このキーはアカウントに保存され、ユーザーによって作成、所有、管理されます。カスタマーマネージドキーを完全に制御できます (AWS KMS 料金が適用されます）。

Amazon Keyspaces は、基になるテーブルと同じキーを使用して変更データキャプチャ (CDC) ストリームを自動的に暗号化します。CDC の詳細については、「」を参照してください[Amazon Keyspaces での変更データキャプチャ (CDC) ストリームの使用](cdc.md)。

 AWS 所有のキー とカスタマーマネージドキーはいつでも切り替えることができます。新しいテーブルを作成するときや、コンソールの使用またはプログラムによる CQL ステートメントの使用により、既存のテーブルの KMS キーを変更するときに、カスタマーマネージドポリシーを指定することができます。この方法の詳細は、「[保管データ暗号化: カスタマーマネージドキーを使用して Amazon Keyspaces のテーブルを暗号化する方法](encryption.customermanaged.md)」を参照してください。

 のデフォルトオプションを使用した保管時の暗号化 AWS 所有のキー は、追加料金なしで提供されます。ただし、カスタマーマネージドキーには AWS KMS の料金がかかります。料金の詳細については、「[AWS KMS の料金](https://aws.amazon.com/kms/pricing)」を参照してください。

保管時の Amazon Keyspaces 暗号化は AWS リージョン、 AWS 中国 (北京) および AWS 中国 (寧夏) リージョンを含むすべての で使用できます。詳細については、「[保管データ暗号化: Amazon Keyspaces での動作](encryption.howitworks.md)」を参照してください。

**Topics**
+ [保管データ暗号化: Amazon Keyspaces での動作](encryption.howitworks.md)
+ [保管データ暗号化: カスタマーマネージドキーを使用して Amazon Keyspaces のテーブルを暗号化する方法](encryption.customermanaged.md)

# 保管データ暗号化: Amazon Keyspaces での動作
<a name="encryption.howitworks"></a>

Amazon Keyspaces (Apache Cassandra 向け) の*保管データ暗号化*では、256 ビット高度暗号化基準 (AES-256) を使用してデータを暗号化します。この機能は、ストレージへの不正アクセスからデータを保護するのに役立ちます。デフォルトでは、Amazon Keyspaces テーブルのすべての顧客データが保管時に暗号化され、サーバー側の暗号化が透過的であるため、アプリケーションに変更を加える必要はありません。

保管時の暗号化は、テーブルの暗号化に使用される暗号化キーを管理するために AWS Key Management Service （AWS KMS) と統合されます。新規テーブルの作成時や、既存テーブルの更新時に、以下の *AWS KMS キー*オプションのいずれかを選択できます。
+ AWS 所有のキー – これはデフォルトの暗号化タイプです。キーは Amazon Keyspaces により所有されます (追加料金なし)。
+ カスタマーマネージドキー – このキーはアカウントに保存され、ユーザーによって作成、所有、管理されます。カスタマーマネージドキーを完全に制御できます (AWS KMS 料金が適用されます）。

**AWS KMS キー (KMS キー）**  
保管時の暗号化は、すべての Amazon Keyspaces データを AWS KMS キーで保護します。Amazon Keyspaces ではデフォルトで [AWS 所有のキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) が使用されます。これは、Amazon Keyspaces サービスアカウントで作成して管理するマルチテナント暗号化キーです。  
ただし、Amazon Keyspaces テーブルの暗号化には AWS アカウントの[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)を使用できます。キースペース内のテーブルごとに異なる KMS キーを選択することができます。テーブルに対して選択した KMS キーは、すべてのメタデータと復元可能なバックアップの暗号化にも使用されます。  
テーブルを作成または更新するときは、テーブル用の KMS キーを選択します。テーブルの KMS キーは、Amazon Keyspaces コンソールまたは [ALTER TABLE](cql.ddl.keyspace.md#cql.ddl.keyspace.alter) ステートメントを使用していつでも変更できます。KMS キーの切り替えプロセスはシームレスであり、ダウンタイムが必要になることもなく、サービスの低下を招くこともありません。

**キー階層**  
Amazon Keyspaces では、キー階層を使用してデータを暗号化します。このキー階層において KMS キーはルートキーです。これは Amazon Keyspaces テーブル暗号化キーの暗号化と復号化に使用されます。テーブル暗号化キーは、読み取り操作と書き込み操作の実行時にデータの暗号化と復号化のために Amazon Keyspaces で内部的に使用される暗号化キーを暗号化するために使用されます。  
暗号化キー階層を使用すると、データを再暗号化する必要もなく、アプリケーションや継続的なデータ操作に影響を与えることもなく、KMS キーに変更を加えることができます。  

![\[保管データ暗号化に使用されるルートキー、テーブル暗号化キー、およびデータ暗号化キーを示すキー階層。\]](http://docs.aws.amazon.com/ja_jp/keyspaces/latest/devguide/images/keyspaces_encryption.png)


**テーブルキー**  
Amazon Keyspaces のテーブルキーは、キー暗号化用のキーとして使用されます。Amazon Keyspaces では、テーブルキーを使用して、テーブルやログファイルや復元可能なバックアップに保存されたデータを暗号化するために使用される内部データ暗号化キーを保護します。Amazon Keyspaces により、テーブル内の基本構造ごとに一意のデータ暗号化キーが生成されます。ただし、複数のテーブル行が同じデータ暗号化キーで保護されていることがあります。  
KMS キーをカスタマーマネージドキーに初めて設定すると、 は*データキー* AWS KMS を生成します。 AWS KMS データキーは、Amazon Keyspaces のテーブルキーを参照します。  
暗号化されたテーブルにアクセスすると、Amazon Keyspaces は AWS KMS KMS キーを使用してテーブルキーを復号するリクエストを に送信します。その後、プレーンテキストテーブルキーを使用して Amazon Keyspaces データ暗号化キーが復号化され、プレーンテキストデータ暗号化キーを使用してテーブルデータが復号化されます。  
Amazon Keyspaces は、テーブルキーとデータ暗号化キーを の外部で使用および保存します AWS KMS。これによって、[Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) 暗号化および 256 ビット暗号化キーのすべてのキーが保護されます。続いて、暗号化されたキーを暗号化されたデータと一緒に保存します。これらのキーおよびデータは、必要なときにテーブルデータの暗号化に使用できます。

**テーブルキーのキャッシュ**  
Amazon Keyspaces オペレーション AWS KMS ごとに が呼び出されないように、Amazon Keyspaces は各接続のプレーンテキストテーブルキーをメモリにキャッシュします。Amazon Keyspaces は、5 分間非アクティブ状態が続いた後にキャッシュされたテーブルキーのリクエストを取得すると、テーブルキーを復号 AWS KMS するための新しいリクエストを に送信します。この呼び出しは、テーブルキーを復号する最後のリクエスト以降に AWS KMS または AWS Identity and Access Management (IAM) で KMS キーのアクセスポリシーに加えられた変更をキャプチャします。

**エンベロープ暗号化**  
テーブルのカスタマーマネージドキーを変更すると、Amazon Keyspaces によって新しいテーブルキーが生成されます。次に、新しいテーブルキーを使用してデータ暗号化キーの再暗号化が行われます。また、新しいテーブルキーを使用して過去のテーブルキーが暗号化され、それを復元可能なバックアップの保護に使用します。このプロセスはエンベロープ暗号化と呼ばれます。これにより、カスタマーマネージドキーをローテーションしても、復元可能なバックアップにアクセスできるようになります。エンベロープ暗号化の仕組みの詳細については、*「AWS Key Management Service デベロッパーガイド」*の[「Envelope Encryption」](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)(エンベロープ暗号化) を参照してください。

**Topics**
+ [AWS 所有キー](#keyspaces-owned)
+ [カスタマーマネージドキー](#customer-managed)
+ [保管データ暗号化の使用に関する注意事項](#encryption.usagenotes)

## AWS 所有キー
<a name="keyspaces-owned"></a>

AWS 所有のキー は に保存されません AWS アカウント。これらは、multiple. AWS services で使用するために が AWS 所有および管理する KMS キーのコレクションの一部です AWS アカウント。サービスは、 AWS 所有のキー を使用してデータを保護します。

表示、管理、使用 AWS 所有のキー、またはそれらの使用を監査することはできません。ただし、データを暗号化するキーを保護するための作業やプログラムを操作したり変更したりする必要はありません。

の使用に対して月額料金や使用料金は請求されず AWS 所有のキー、アカウントの AWS KMS クォータにもカウントされません。

## カスタマーマネージドキー
<a name="customer-managed"></a>

カスタマーマネージドキーは、 AWS アカウント ユーザーが作成、所有、管理する のキーです。ユーザーは、この KMS キーに関する完全なコントロール権を持ちます。

カスタマーマネージドキーを使用して次の機能を取得します。
+ カスタマーマネージドキーの作成と管理を行います。これには、[キーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)、[IAM ポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)、カスタマーマネージドキーへのアクセスを制御する[権限](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)の設定および維持が含まれます。カスタマーマネージドキーの[有効化と無効化](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html)、[自動キーローテーション](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)の有効化と無効化、使用しなくなった[カスタマーマネージドキーの削除](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html)のスケジューリングを行うことができます。管理するカスタマーマネージドキーのタグとエイリアスを作成できます。
+ [インポートされたキーマテリアル](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html)を持つカスタマーマネージドキー、またはユーザーが所有して管理する[カスタムキーストア](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html)で、カスタマーマネージドキーを使用できます。
+  AWS CloudTrail と Amazon CloudWatch Logs を使用して、Amazon Keyspaces が AWS KMS ユーザーに代わって に送信するリクエストを追跡できます。詳細については、「[ステップ 6: でモニタリングを設定する AWS CloudTrail](encryption.customermanaged.md#encryption-cmk-trail)」を参照してください。

カスタマーマネージドキー[には API コールごとに料金が発生し](https://aws.amazon.com/kms/pricing/)、これらの AWS KMS KMS キーにはクォータが適用されます。詳細については、「[AWS KMS resource or request quotas](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)」(KMS リソースクォータまたはリクエストクォータ) を参照してください。

テーブルのルート暗号化キーとしてカスタマーマネージドポリシーを指定すると、復元可能なバックアップは、バックアップの作成時にテーブルに対して指定されている暗号化キーと同じものを使用して暗号化されます。テーブルの KMS キーをローテーションすると、キーエンベロープにより、最新の KMS キーが復元可能なすべてのバックアップにアクセスできるようになります。

Amazon Keyspaces には、テーブルデータへのアクセスが可能になるカスタマーマネージドキーへのアクセス権が必要です。暗号化キーの状態が無効に設定されているか、削除がスケジュールされている場合、Amazon Keyspaces ではデータの暗号化と復号化を実行できません。そのため、テーブルで読み取り/書き込みオペレーションを実行できません。暗号化キーにアクセスできないことが検出されると、Amazon Keyspaces からアラートメール通知が送信されます。

その場合、7 日以内に暗号化キーへのアクセスを復元しないと、Amazon Keyspaces によりテーブルが自動的に削除されます。ただし、Amazon Keyspaces では、テーブルが削除される前にテーブルデータの復元可能なバックアップが作成されます。その復元可能なバックアップは Amazon Keyspaces で 35 日間維持されます。35 日を過ぎるとそのテーブルデータは復元できなくなります。復元可能なバックアップの料金はかかりませんが、標準的な[復元料金はかかります](https://aws.amazon.com/keyspaces/pricing)。

この復元可能なバックアップを使用すれば、データを新しいテーブルに復元できます。復元を開始するには、そのテーブルに対して最後に使用したカスタマーマネージドキーを有効にし、Amazon Keyspaces からのアクセスを確立する必要があります。

**注記**  
作成プロセスが完了する前の時点で、アクセスできない、または削除がスケジュールされているカスタマーマネージドキーを使用して、暗号化されたテーブルを作成すると、エラーが発生します。テーブルの作成オペレーションが失敗し、電子メール通知が送信されます。

## 保管データ暗号化の使用に関する注意事項
<a name="encryption.usagenotes"></a>

Amazon Keyspaces で保管データの暗号化を使用する場合は、以下の点を考慮してください。
+ サーバー側の保管データ暗号化は、すべての Amazon Keyspaces テーブルデータで有効になり、無効にできません。テーブル全体の保管データが暗号化されます。特定の列または行を選択して暗号化することはできません。
+ Amazon Keyspaces のデフォルトでは、単一サービスのデフォルトキー (AWS 所有のキー) を使用して、すべてのテーブルで暗号化が行われます。このキーは、存在しなければ自動的に作成されます。サービスデフォルトキーは無効にできません。
+ 保管時の暗号化では、永続的ストレージメディアの静的 (保管時) データのみが暗号化されます。転送中のデータあるいは使用中のデータのデータ安全性に対する懸念がある場合には、追加の対策を実行する必要があります。
  + 転送中のデータ: Amazon Keyspaces 内のすべてのデータが転送中に暗号化されます。デフォルトでは、Amazon Keyspaces との通信が、Secure Sockets Layer (SSL)/Transport Layer Security (TLS) 暗号化を使用して保護されます。
  + 使用中のデータ: データを保護したうえで Amazon Keyspaces に送信するには、クライアント側暗号化を使用します。
  + カスタマーマネージドキー: テーブル内の保管中のデータは、常にカスタマーマネージドキーを使用して暗号化されます。ただし、複数の行のアトミック更新を実行するオペレーションは、処理 AWS 所有のキー 中に を使用してデータを一時的に暗号化します。これには、range delete オペレーションと、静的データと非静的データに同時にアクセスするオペレーションが含まれます。
+ 1 つのカスタマーマネージドキーにより、最大 50,000 の[権限](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)が可能です。カスタマーマネージドキーに関連付けられている各 Amazon Keyspaces テーブルでは、2 つの権限が消費されます。テーブルが削除されると、1 つの権限が解放されます。2番目の権限はテーブルの自動スナップショットの作成に使用されます。これは、Amazon Keyspaces によるカスタマーマネージドキーへのアクセス権が意図せず失われた場合に、データが失われないように保護するためです。この権限は、テーブルが削除されてから 42 日後にリリースされます。

# 保管データ暗号化: カスタマーマネージドキーを使用して Amazon Keyspaces のテーブルを暗号化する方法
<a name="encryption.customermanaged"></a>

コンソールまたは CQL ステートメントを使用して、新しいテーブル AWS KMS key の を指定し、Amazon Keyspaces の既存のテーブルの暗号化キーを更新できます。次のトピックでは、新規および既存のテーブルにカスタマーマネージドキーを実装する方法について説明します。

**Topics**
+ [前提条件: を使用してカスタマーマネージドキーを作成し AWS KMS 、Amazon Keyspaces にアクセス許可を付与する](#encryption.createCMKMS)
+ [ステップ 3: 新規テーブルのカスタマーマネージドキーを指定する](#encryption.tutorial-creating)
+ [ステップ 4: 既存のテーブルの暗号化キーを更新する](#encryption.tutorial-update)
+ [ステップ 5: ログで Amazon Keyspaces 暗号化コンテキストを使用する](#encryption-context)
+ [ステップ 6: でモニタリングを設定する AWS CloudTrail](#encryption-cmk-trail)

## 前提条件: を使用してカスタマーマネージドキーを作成し AWS KMS 、Amazon Keyspaces にアクセス許可を付与する
<a name="encryption.createCMKMS"></a>

[カスタマーマネージドキー](encryption.howitworks.md#customer-managed)を使用して Amazon Keyspaces テーブルを保護する前に、まず AWS Key Management Service (AWS KMS) でキーを作成し、Amazon Keyspaces にそのキーの使用を許可する必要があります。

### ステップ 1: を使用してカスタマーマネージドキーを作成する AWS KMS
<a name="encryption-create-key"></a>

Amazon Keyspaces テーブルの保護に使用するカスタマーマネージドキーを作成するには、「 コンソールまたは AWS API [を使用して対称暗号化 KMS キーを作成する](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)」の手順に従います。

### ステップ 2: カスタマーマネージドキーの使用を認可する
<a name="encryption-authz"></a>

[カスタマーマネージドキー](encryption.howitworks.md#customer-managed)を選択して Amazon Keyspaces テーブルを保護できるようにするには、あらかじめ、そのカスタマーマネージドキーに関するポリシーにより、そのキーの使用許可を Amazon Keyspaces に付与する必要があります。カスタマーマネージドキーに関するポリシーと権限については、ユーザーが完全に制御します。これらのアクセス権限は、[キーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)、[IAM ポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)、または [許可](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)で指定できます。

Amazon Keyspaces では、デフォルトの [AWS 所有のキー](encryption.howitworks.md#keyspaces-owned) を使用して AWS アカウント内で Amazon Keyspaces テーブルを保護する場合、追加の認可は必要ありません。

以下のトピックでは、Amazon Keyspaces テーブルでカスタマーマネージドキーを使用できるようにする IAM ポリシーと権限を使用して、必要な許可を設定する方法を示します。

**Topics**
+ [カスタマーマネージドキーのキーポリシー](#encryption-customer-managed-policy)
+ [キーポリシーの例](#encryption-customer-managed-policy-sample)
+ [Amazon Keyspaces の認可への権限の使用](#encryption-grants)

#### カスタマーマネージドキーのキーポリシー
<a name="encryption-customer-managed-policy"></a>

[カスタマーマネージドキー](encryption.howitworks.md#customer-managed)を選択して Amazon Keyspaces テーブルを保護する場合、Amazon Keyspaces には、選択を行うプリンシパルの代わって KMS キーを使用する許可が付与されます。そのプリンシパル (ユーザーまたはロール) は、Amazon Keyspaces で必要となるカスタマーマネージドキーに対する許可を取得しておく必要があります。

Amazon Keyspaces には、少なくとも、カスタマーマネージドキーに対する次の許可が必要です。
+ [kms:Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
+ [kms:ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)\$1 (for kms:ReEncryptFrom および kms:ReEncryptTo 向け)
+ kms:GenerateDataKey\$1 (for [kms:GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) および [kms:GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) 向け)
+ [kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [kms:CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)

#### キーポリシーの例
<a name="encryption-customer-managed-policy-sample"></a>

例えば、次のキーポリシーの例では、必要なアクセス許可のみを提供します。このポリシーには、以下の影響があります。
+ Amazon Keyspaces に対して、暗号化オペレーションでのそのカスタマーマネージドキーの使用と、権限の作成を許可します。ただしこれは、Amazon Keyspaces の使用許可を持つアカウント内のプリンシパルに代わって Amazon Keyspaces により処理が行われている場合に限られます。ポリシーステートメントで指定されたプリンシパルが Amazon Keyspaces の使用許可を持っていない場合、Amazon Keyspaces サービスからのコールであっても、コールは失敗します。
+ [kms:ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) 条件キーは、ポリシーステートメントにリストされているプリンシパルの代わりに Amazon Keyspaces からリクエストが送信された場合にのみアクセス許可を受け入れます。これらのプリンシパルは、これらのオペレーションを直接呼び出すことはできません。`kms:ViaService` の値である `cassandra.*.amazonaws.com` は、リージョンの位置にアスタリスク (\$1) が付いていることに注意してください。Amazon Keyspaces では、特定の から独立したアクセス許可が必要です AWS リージョン。
+ カスタマーマネージドキー管理者 (`db-team` ロールを引き受けることができるユーザー) に、カスタマーマネージドキーへの読み取り専用アクセス権と、権限 (テーブルを保護するために [Amazon Keyspaces で必要となる権限](#encryption-grants)を含む) を取り消す許可を与えます。
+ Amazon Keyspaces に、カスタマーマネージドキーへの読み取り専用アクセス権を付与します。この場合、Amazon Keyspaces によりこれらのオペレーションが直接呼び出されます。アカウントプリンシパルに代わって処理する必要はありません。

サンプルキーポリシーを使用する前に、サンプルプリンシパルを の実際のプリンシパルに置き換えます AWS アカウント。

```
{
  "Id": "key-policy-cassandra",
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid" : "Allow access through Amazon Keyspaces for all principals in the account that are authorized to use Amazon Keyspaces",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:user/db-lead"},
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey",
        "kms:CreateGrant"
      ],
      "Resource": "*",      
      "Condition": { 
         "StringLike": {
           "kms:ViaService" : "cassandra.*.amazonaws.com"
         }
      }
    },
    {
      "Sid":  "Allow administrators to view the customer managed key and revoke grants",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/db-team"
       },
      "Action": [
        "kms:Describe*",
        "kms:Get*",
        "kms:List*",
        "kms:RevokeGrant"
      ],
      "Resource": "*"
    }
  ]
}
```

#### Amazon Keyspaces の認可への権限の使用
<a name="encryption-grants"></a>

Amazon Keyspaces は、キーポリシーに加え、権限を使ってカスタマーマネージドキーに対しアクセス許可を設定できます。アカウントにあるカスタマーマネージドキーへの権限を表示するには、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを使用します。Amazon Keyspaces では、[AWS 所有のキー](encryption.howitworks.md#keyspaces-owned) を使用してテーブルを保護する場合に、権限や追加のアクセス許可は必要ありません。

Amazon Keyspaces は、バックグラウンドシステムメンテナンスと継続的なデータ保護タスクを実行するときに、権限のアクセス許可を使用します。また、テーブルキーの生成にグラントを使用します。

各グラントは、テーブルに固有です。アカウントに、同じカスタマーマネージドキーを使って暗号化された複数のテーブルがある場合、テーブルごとに、各タイプの権限があります。許可は、テーブル名と AWS アカウント ID を含む [Amazon Keyspaces 暗号化コンテキスト](https://docs.aws.amazon.com/kms/latest/developerguide/encryption-context.html)によって制約されます。この権限には、権限が不要になった場合に[権限の使用停止](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)を行うための許可が含まれています。

権限を作成するには、暗号化されたテーブルを作成したユーザーに代わって `CreateGrant` を呼び出すアクセス許可が Amazon Keyspaces に必要です。

キーポリシーは、アカウントがカスタマーマネージドキーの[権限を取り消す](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)ことも許可できます。ただし、アクティブな暗号化テーブルで権限トを取り消すと、Amazon Keyspaces はテーブルを保護して維持することはできません。

## ステップ 3: 新規テーブルのカスタマーマネージドキーを指定する
<a name="encryption.tutorial-creating"></a>

以下の手順に従って、Amazon Keyspaces コンソールまたは CQL を使用して新しいテーブルでカスタマーマネージドキーを指定します。

### カスタマーマネージドキーを使用して暗号化されたテーブルを作成する (コンソール)
<a name="encryption.tutorial-console"></a>

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/keyspaces/home](https://console.aws.amazon.com/keyspaces/home) で Amazon Keyspaces コンソールを開きます。

1. ナビゲーションペインで [**Tables]** (テーブル) を選択して、[**Create table (テーブルの作成)**] を選択します。

1. [**Table details (テーブルの詳細)**] セクションの [**Create table (テーブルの作成)**] ページで、キースペースを選択し、新しいテーブルに名前を付けます。

1. [**Schema (スキーマ)**] セクションで、テーブルのスキーマを作成します。

1. [**Table settings (テーブルの設定)**] セクションで、[**Customize settings (設定のカスタマイズ)**] を選択します。

1. [**Encryption settings (暗号化設定)**] に進みます。

   このステップでは、テーブルの暗号化設定を選択します。

   **「 の選択」の「保管時の暗号化**」セクションで、**「別の KMS キーの選択 (アドバンスド)**」オプションを選択し、検索フィールドで「」を選択する AWS KMS key か、「Amazon リソースネーム (ARN) を入力します。 ** AWS KMS key**
**注記**  
選択したキーにアクセスできない場合、または必要なアクセス許可がない場合は、「 AWS Key Management Service デベロッパーガイド」の[「キーアクセスのトラブルシューティング](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html)」を参照してください。

1. [**Create (作成)**] を選択して暗号化テーブルを作成します。

### 保管データ暗号化 (CQL) にカスタマーマネージドキーが使用される新しいテーブルを作成する
<a name="encryption.tutorial-cql"></a>

保管データ暗号化にカスタマーマネージドキーが使用される新しいテーブルを作成するには、次の例に示すように、`CREATE TABLE` ステートメントを使用します。キー ARN を、Amazon Keyspaces に付与されたアクセス許可がある有効キーの ARN に置き換えてください。

```
CREATE TABLE my_keyspace.my_table(id bigint, name text, place text STATIC, PRIMARY KEY(id, name)) WITH CUSTOM_PROPERTIES = {
        'encryption_specification':{
                'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 
                'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111'
            }
    };
```

`Invalid Request Exception` を受け取った場合、カスタマーマネージドキーが有効であり Amazon Keyspaces に必要な許可が付与されていることを確認する必要があります。キーが正しく設定されていることを確認するには、「 AWS Key Management Service デベロッパーガイド」の[「キーアクセスのトラブルシューティング](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html)」を参照してください。

## ステップ 4: 既存のテーブルの暗号化キーを更新する
<a name="encryption.tutorial-update"></a>

Amazon Keyspaces コンソールまたは CQL を使用して、 AWS 所有のキー とカスタマーマネージド KMS キーの間で既存のテーブルの暗号化キーをいつでも変更できます。

### 新しいカスタマーマネージドキーで既存のテーブルを更新する (コンソール)
<a name="encryption.tutorial-update-console"></a>

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/keyspaces/home](https://console.aws.amazon.com/keyspaces/home) で Amazon Keyspaces コンソールを開きます。

1.  ナビゲーションペインで、[**Tables (テーブル)**] を選択します。

1. 更新するテーブルを選択し、次に [**Additional settings (追加設定)**] タブを選択します。

1. [**Encryption at rest (保管データ暗号化)**] セクションで、[**Manage Encryption (暗号化の管理)**] を選択してテーブルの暗号化設定を編集します。

   **「 の選択 AWS KMS key****」で、「別の KMS キーの選択 (詳細)**」オプションを選択し、検索フィールドに「」を選択する AWS KMS key か、「Amazon リソースネーム (ARN) を入力します。
**注記**  
選択したキーが有効でない場合は、「 AWS Key Management Service デベロッパーガイド」の[「キーアクセスのトラブルシューティング](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html)」を参照してください。

   または、カスタマーマネージドキーで暗号化された AWS 所有のキー テーブルの を選択することもできます。

1. [**Save changes (変更を保存)**] を選択して、テーブルに加えた変更内容を保存します。

### 既存のテーブルに使用される暗号化キーを更新する
<a name="encryption.tutorial-update-cql"></a>

既存のテーブルの暗号化キーを変更するには、`ALTER TABLE` ステートメントを使用して、保管データ暗号化に使用するカスタマーマネージドキーを指定します。キー ARN を、Amazon Keyspaces に付与されたアクセス許可がある有効キーの ARN に置き換えてください。

```
ALTER TABLE my_keyspace.my_table WITH CUSTOM_PROPERTIES = {     
              'encryption_specification':{ 
                      'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 
                      'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111'     
                  } 
         };
```

`Invalid Request Exception` を受け取った場合、カスタマーマネージドキーが有効であり Amazon Keyspaces に必要な許可が付与されていることを確認する必要があります。キーが正しく設定されていることを確認するには、「 AWS Key Management Service デベロッパーガイド」の[「キーアクセスのトラブルシューティング](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html)」を参照してください。

を使用して暗号化キーをデフォルトの保管時の暗号化オプションに戻すには AWS 所有のキー、次の例に示すように `ALTER TABLE`ステートメントを使用できます。

```
ALTER TABLE my_keyspace.my_table WITH CUSTOM_PROPERTIES = {
                'encryption_specification':{
                      'encryption_type' : 'AWS_OWNED_KMS_KEY' 
                    } 
         };
```

## ステップ 5: ログで Amazon Keyspaces 暗号化コンテキストを使用する
<a name="encryption-context"></a>

[暗号化コンテキスト](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)は、一連のキー値のペアおよび任意非シークレットデータを含みます。データを暗号化するリクエストに暗号化コンテキストを含めると、 は暗号化コンテキストを暗号化されたデータに AWS KMS 暗号化バインドします。データを復号するには、同じ暗号化コンテキストに渡す必要があります。

Amazon Keyspaces は、すべての暗号化オペレーションで同じ AWS KMS 暗号化コンテキストを使用します。[カスタマーマネージドキー](encryption.howitworks.md#customer-managed)を使用して Amazon Keyspaces テーブルを保護する場合は、暗号化コンテキストを使用して、監査の記録やログ内でカスタマーマネージドキーの使用を特定することができます。これは、[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) のログや [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) などのログにもプレーンテキストで表示されます。

へのリクエストでは AWS KMS、Amazon Keyspaces は 3 つのキーと値のペアを持つ暗号化コンテキストを使用します。

```
"encryptionContextSubset": {
    "aws:cassandra:keyspaceName": "my_keyspace",
    "aws:cassandra:tableName": "mytable"
    "aws:cassandra:subscriberId": "111122223333"
}
```
+ **Keyspace (キー空間)** — 1 つ目のキーバリューペアは、Amazon Keyspaces により暗号化されるテーブルが含まれているキー空間を識別します。キーは、`aws:cassandra:keyspaceName` です。この値は、このキー空間の名前です。

  ```
  "aws:cassandra:keyspaceName": "<keyspace-name>"
  ```

  例:

  ```
  "aws:cassandra:keyspaceName": "my_keyspace"
  ```
+ **Table (テーブル)** － 2 つ目のキーバリューペアは、Amazon Keyspaces により暗号化されるテーブルを識別します。キーは、`aws:cassandra:tableName` です。この値は、テーブルの名前です。

  ```
  "aws:cassandra:tableName": "<table-name>"
  ```

  例えば、次のようになります。

  ```
  "aws:cassandra:tableName": "my_table"
  ```
+ **アカウント** － 3 番目のキーバリューペアは、 AWS アカウントを識別します。キーは、`aws:cassandra:subscriberId` です。値は、アカウント ID です。

  ```
  "aws:cassandra:subscriberId": "<account-id>"
  ```

  例えば、次のようになります。

  ```
  "aws:cassandra:subscriberId": "111122223333"
  ```

## ステップ 6: でモニタリングを設定する AWS CloudTrail
<a name="encryption-cmk-trail"></a>

[カスタマーマネージドキー](encryption.howitworks.md#customer-managed)を使用して Amazon Keyspaces テーブルを保護する場合は、 AWS CloudTrail ログを使用して、Amazon Keyspaces が AWS KMS ユーザーに代わって に送信するリクエストを追跡できます。

このセクションでは、`GenerateDataKey`、`DescribeKey`、`Decrypt`、および `CreateGrant` の各リクエストについて説明します。さらに、Amazon Keyspaces では、テーブルを削除するときに [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) オペレーションを使用して権限を削除します。

**注記**  
Amazon Keyspaces を使用する場合、オペレーションによっては、 `invokedBy`フィールドが の CloudTrail イベントを生成する場合があります`dynamodb.amazonaws.com`。これは想定され、Amazon Keyspaces が Amazon DynamoDB と統合してサービスを提供するため発生します。

**GenerateDataKey**  
Amazon Keyspaces では、保管中のデータを暗号化するために一意のテーブルキーが作成します。テーブルの KMS キー AWS KMS を指定する *[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)* リクエストを に送信します。  
`GenerateDataKey` 演算を記録するイベントは、次のようなサンプルイベントになります。ユーザーは Amazon Keyspaces サービスアカウントです。このパラメータには、カスタマーマネージドキーの Amazon リソースネーム (ARN)、256 ビットキーを必要とするキー指定子、および、キー空間とテーブルと AWS アカウントを識別する[暗号化コンテキスト](#encryption-context)が含まれます。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2021-04-16T04:56:05Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "keySpec": "AES_256",
        "encryptionContext": {
            "aws:cassandra:keyspaceName": "my_keyspace",
            "aws:cassandra:tableName": "my_table",
            "aws:cassandra:subscriberId": "123SAMPLE012"
        },
        "keyId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111"
    },
    "responseElements": null,
    "requestID": "5e8e9cb5-9194-4334-aacc-9dd7d50fe246",
    "eventID": "49fccab9-2448-4b97-a89d-7d5c39318d6f",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123SAMPLE012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "123SAMPLE012",
    "sharedEventID": "84fbaaf0-9641-4e32-9147-57d2cb08792e"
}
```

**DescribeKey**  
Amazon Keyspaces では、[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) オペレーションを使用して、選択した KMS キーがアカウントとリージョンに存在するかどうかが判断されます。  
`DescribeKey` 演算を記録するイベントは、次のようなサンプルイベントになります。ユーザーは Amazon Keyspaces サービスアカウントです。このパラメータには、カスタマーマネージドキーの ARN と、256 ビットキーを要求するキー識別子が含まれます。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AIDAZ3FNIIVIZZ6H7CFQG",
        "arn": "arn:aws:iam::123SAMPLE012:user/admin",
        "accountId": "123SAMPLE012",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "userName": "admin",
        "sessionContext": {
            "sessionIssuer": {},
            "webIdFederationData": {},
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2021-04-16T04:55:42Z"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2021-04-16T04:55:58Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DescribeKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "keyId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111"
    },
    "responseElements": null,
    "requestID": "c25a8105-050b-4f52-8358-6e872fb03a6c",
    "eventID": "0d96420e-707e-41b9-9118-56585a669658",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123SAMPLE012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "123SAMPLE012"
}
```

**Decrypt**  
Amazon Keyspaces のテーブルにアクセスすると、階層内でそのテーブルキーの下のキーの復号化を可能にするために、Amazon Keyspaces によりテーブルキーが復号化される必要があります。次に、テーブル内のデータを復号化します。テーブルキーを復号するために、Amazon Keyspaces はテーブルの KMS キー AWS KMS を指定する [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) リクエストを に送信します。  
`Decrypt` 演算を記録するイベントは、次のようなサンプルイベントになります。ユーザーは、テーブルにアクセスする のプリンシパル AWS アカウント です。パラメータには、暗号化されたテーブルキー (暗号文 BLOB として) と、テーブルを識別する[暗号化コンテキスト](#encryption-context)が含まれ、 AWS アカウント. は暗号文からカスタマーマネージドキーの ID AWS KMS を取得します。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2021-04-16T05:29:44Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "encryptionContext": {
            "aws:cassandra:keyspaceName": "my_keyspace",
            "aws:cassandra:tableName": "my_table",
            "aws:cassandra:subscriberId": "123SAMPLE012"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "50e80373-83c9-4034-8226-5439e1c9b259",
    "eventID": "8db9788f-04a5-4ae2-90c9-15c79c411b6b",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123SAMPLE012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "123SAMPLE012",
    "sharedEventID": "7ed99e2d-910a-4708-a4e3-0180d8dbb68e"
}
```

**CreateGrant**  
[カスタマーマネージドキー](encryption.howitworks.md#customer-managed)を使用して Amazon Keyspaces テーブルを保護する場合、Amazon Keyspaces では、[権限](#encryption-grants)を使用して、サービスによるデータの継続的保護とメンテナンスおよび耐久タスクの実行を許可します。これらの権限は、[AWS 所有のキー](encryption.howitworks.md#keyspaces-owned) では不要です。  
Amazon Keyspaces により作成される権限はテーブルごとに固有となります。[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) リクエストのプリンシパルは、テーブルを作成したユーザーです。  
`CreateGrant` 演算を記録するイベントは、次のようなサンプルイベントになります。このパラメータには、そのテーブルのカスタマーマネージドキーの ARN、被付与 (グランティー) プリンシパルと使用停止プリンシパル (Amazon Keyspaces サービス)、およびこの権限の対象となるオペレーションが含まれます。また、指定された[暗号化コンテキスト](#encryption-context)を使用するすべての暗号化オペレーションを必要とする制約も含まれています。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AIDAZ3FNIIVIZZ6H7CFQG",
        "arn": "arn:aws:iam::arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111:user/admin",
        "accountId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "userName": "admin",
        "sessionContext": {
            "sessionIssuer": {},
            "webIdFederationData": {},
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2021-04-16T04:55:42Z"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2021-04-16T05:11:10Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "keyId": "a7d328af-215e-4661-9a69-88c858909f20",
        "operations": [
            "DescribeKey",
            "GenerateDataKey",
            "Decrypt",
            "Encrypt",
            "ReEncryptFrom",
            "ReEncryptTo",
            "RetireGrant"
        ],
        "constraints": {
            "encryptionContextSubset": {
                "aws:cassandra:keyspaceName": "my_keyspace",
                "aws:cassandra:tableName": "my_table",
                "aws:cassandra:subscriberId": "123SAMPLE012"
            }
        },
        "retiringPrincipal": "cassandratest.us-east-1.amazonaws.com",
        "granteePrincipal": "cassandratest.us-east-1.amazonaws.com"
    },
    "responseElements": {
        "grantId": "18e4235f1b07f289762a31a1886cb5efd225f069280d4f76cd83b9b9b5501013"
    },
    "requestID": "b379a767-1f9b-48c3-b731-fb23e865e7f7",
    "eventID": "29ee1fd4-28f2-416f-a419-551910d20291",
    "readOnly": false,
    "resources": [
        {
            "accountId": "123SAMPLE012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "123SAMPLE012"
}
```