翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
保管データ暗号化: カスタマーマネージドキーを使用して Amazon Keyspaces のテーブルを暗号化する方法
コンソールまたは CQLステートメントを使用して、新しいテーブル AWS KMS key の を指定し、Amazon Keyspaces の既存のテーブルの暗号化キーを更新できます。次のトピックでは、新規および既存のテーブルにカスタマーマネージドキーを実装する方法について説明します。
トピック
前提条件: を使用してカスタマーマネージドキーを作成し AWS KMS 、Amazon Keyspaces にアクセス許可を付与する
Amazon Keyspaces テーブルをカスタマーマネージドキーで保護する前に、まず AWS Key Management Service (AWS KMS) でキーを作成し、Amazon Keyspaces がそのキーを使用するように承認する必要があります。
ステップ 1: AWS KMSを使用してカスタマーマネージドキーを作成する
Amazon Keyspaces テーブルの保護に使用するカスタマーマネージドキーを作成するには、「 コンソールまたは を使用して対称暗号化KMSキーを作成する」の手順に従います AWS API。
ステップ 2: カスタマーマネージドキーの使用を認可する
カスタマーマネージドキーを選択して Amazon Keyspaces テーブルを保護できるようにするには、あらかじめ、そのカスタマーマネージドキーに関するポリシーにより、そのキーの使用許可を Amazon Keyspaces に付与する必要があります。カスタマーマネージドキーに関するポリシーと権限については、ユーザーが完全に制御します。これらのアクセス許可は、キーポリシー、IAM ポリシー、または 許可で指定できます。
Amazon Keyspaces では、デフォルトの AWS 所有のキー を使用して AWS アカウント内で Amazon Keyspaces テーブルを保護する場合、追加の認可は必要ありません。
以下のトピックでは、Amazon Keyspaces テーブルがカスタマーマネージドキーを使用できるようにするIAMポリシーと許可を使用して、必要なアクセス許可を設定する方法について説明します。
カスタマーマネージドキーのキーポリシー
カスタマーマネージドキーを選択して Amazon Keyspaces テーブルを保護する場合、Amazon Keyspaces には、選択を行うプリンシパルの代わって KMS キーを使用する許可が付与されます。そのプリンシパル (ユーザーまたはロール) は、Amazon Keyspaces で必要となるカスタマーマネージドキーに対する許可を取得しておく必要があります。
Amazon Keyspaces には、少なくとも、カスタマーマネージドキーに対する次の許可が必要です。
kms:ReEncrypt* ( kms:ReEncryptFrom および の場合 kms:ReEncryptTo)
kms:GenerateDataKey* (kms:GenerateDataKey および kms:GenerateDataKeyWithoutPlaintext の場合)
キーポリシーの例
例えば、次のキーポリシーの例では、必要なアクセス許可のみを提供します。このポリシーには、以下の影響があります。
-
Amazon Keyspaces に対して、暗号化オペレーションでのそのカスタマーマネージドキーの使用と、権限の作成を許可します。ただしこれは、Amazon Keyspaces の使用許可を持つアカウント内のプリンシパルに代わって Amazon Keyspaces により処理が行われている場合に限られます。ポリシーステートメントで指定されたプリンシパルが Amazon Keyspaces の使用許可を持っていない場合、Amazon Keyspaces サービスからのコールであっても、コールは失敗します。
-
kms:ViaService 条件キーは、ポリシーステートメントにリストされているプリンシパルに代わってリクエストが Amazon Keyspaces から送信された場合にのみ、アクセス許可を許可します。これらのプリンシパルは、これらのオペレーションを直接呼び出すことはできません。
kms:ViaService
の値であるcassandra.*.amazonaws.com
は、リージョンの位置にアスタリスク (*) が付いていることに注意してください。Amazon Keyspaces では、特定の から独立したアクセス許可が必要です AWS リージョン。 -
カスタマーマネージドキー管理者 (
db-team
ロールを引き受けることができるユーザー) に、カスタマーマネージドキーへの読み取り専用アクセス権と、権限 (テーブルを保護するために Amazon Keyspaces で必要となる権限を含む) を取り消す許可を与えます。 -
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 の認可への権限の使用
Amazon Keyspaces は、キーポリシーに加え、権限を使ってカスタマーマネージドキーに対しアクセス許可を設定できます。アカウントにあるカスタマーマネージドキーへの権限付与を表示するには、ListGrants オペレーションを使用します。Amazon Keyspaces では、AWS 所有のキー を使用してテーブルを保護する場合に、権限や追加のアクセス許可は必要ありません。
Amazon Keyspaces は、バックグラウンドシステムメンテナンスと継続的なデータ保護タスクを実行するときに、権限のアクセス許可を使用します。また、テーブルキーの生成にグラントを使用します。
各グラントは、テーブルに固有です。アカウントに、同じカスタマーマネージドキーを使って暗号化された複数のテーブルがある場合、テーブルごとに、各タイプの権限があります。許可は、テーブル名と AWS アカウント ID を含む Amazon Keyspaces 暗号化コンテキストによって制約されます。この権限には、権限が不要になった場合に権限の使用停止を行うための許可が含まれています。
権限を作成するには、暗号化されたテーブルを作成したユーザーに代わって CreateGrant
を呼び出すアクセス許可が Amazon Keyspaces に必要です。
キーポリシーは、アカウントがカスタマーマネージドキーの権限を取り消すことも許可できます。ただし、アクティブな暗号化テーブルで権限トを取り消すと、Amazon Keyspaces はテーブルを保護して維持することはできません。
ステップ 3: 新規テーブルのカスタマーマネージドキーを指定する
Amazon Keyspaces コンソールまたは を使用して、新しいテーブルでカスタマーマネージドキーを指定するには、次の手順に従いますCQL。
カスタマーマネージドキーを使用して暗号化されたテーブルを作成する (コンソール)
にサインインし AWS Management Console、https://console.aws.amazon.com/keyspaces/Amazon
Keyspaces コンソールをホームで開きます。 -
ナビゲーションペインで [Tables] (テーブル) を選択して、[Create table (テーブルの作成)] を選択します。
-
[Table details (テーブルの詳細)] セクションの [Create table (テーブルの作成)] ページで、キースペースを選択し、新しいテーブルに名前を付けます。
-
[Schema (スキーマ)] セクションで、テーブルのスキーマを作成します。
[Table settings (テーブルの設定)] セクションで、[Customize settings (設定のカスタマイズ)] を選択します。
-
[Encryption settings (暗号化設定)] に進みます。
このステップでは、テーブルの暗号化設定を選択します。
「 を選択」の「保管時の暗号化」セクションで、「別のKMSキーを選択 (アドバンスト)」オプションを選択し、検索フィールドに「」を選択する AWS KMS key か、「Amazon リソースネーム ()」を入力しますARN。 AWS KMS key
注記
選択したキーにアクセスできない場合、または必要なアクセス許可がない場合は、「 AWS Key Management Service デベロッパーガイド」の「キーアクセスのトラブルシューティング」を参照してください。
-
[Create (作成)] を選択して暗号化テーブルを作成します。
保管時の暗号化にカスタマーマネージドキーを使用して新しいテーブルを作成する (CQL)
保管データ暗号化にカスタマーマネージドキーが使用される新しいテーブルを作成するには、次の例に示すように、CREATE TABLE
ステートメントを使用します。Amazon Keyspaces に付与されたアクセス許可を持つ有効なキーARNARNについては、キーを に置き換えてください。
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 デベロッパーガイド」の「キーアクセスのトラブルシューティング」を参照してください。
ステップ 4: 既存のテーブルの暗号化キーを更新する
Amazon Keyspaces コンソールまたは を使用してCQL、 AWS 所有のキー とカスタマーマネージドキーの間で既存のテーブルの暗号化KMSキーをいつでも変更できます。
新しいカスタマーマネージドキーで既存のテーブルを更新する (コンソール)
にサインインし AWS Management Console、Amazon Keyspaces コンソールをhttps://console.aws.amazon.com/keyspaces/ホーム
で開きます。 -
ナビゲーションペインで、[Tables (テーブル)] を選択します。
-
更新するテーブルを選択し、次に [Additional settings (追加設定)] タブを選択します。
-
[Encryption at rest (保管データ暗号化)] セクションで、[Manage Encryption (暗号化の管理)] を選択してテーブルの暗号化設定を編集します。
を選択 AWS KMS key で、別のKMSキーを選択 (詳細) オプションを選択し、検索フィールドに を選択する AWS KMS key か、Amazon リソースネーム () を入力しますARN。
注記
選択したキーが有効でない場合は、「 AWS Key Management Service デベロッパーガイド」の「キーアクセスのトラブルシューティング」を参照してください。
または、カスタマーマネージドキーで暗号化された AWS 所有のキー テーブルの を選択することもできます。
-
[Save changes (変更を保存)] を選択して、テーブルに加えた変更内容を保存します。
既存のテーブルに使用される暗号化キーを更新する
既存のテーブルの暗号化キーを変更するには、ALTER
TABLE
ステートメントを使用して、保管データ暗号化に使用するカスタマーマネージドキーを指定します。Amazon Keyspaces に付与されたアクセス許可を持つ有効なキーARNARNについては、キーを に置き換えてください。
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 デベロッパーガイド」の「キーアクセスのトラブルシューティング」を参照してください。
を使用して暗号化キーをデフォルトの保管時の暗号化オプションに戻すには AWS 所有のキー、次の例に示すように ALTER TABLE
ステートメントを使用できます。
ALTER TABLE
my_keyspace.my_table
WITH CUSTOM_PROPERTIES = { 'encryption_specification':{ 'encryption_type' : 'AWS_OWNED_KMS_KEY' } };
ステップ 5: ログで Amazon Keyspaces 暗号化コンテキストを使用する
暗号化コンテキスト は、一連のキー値のペアおよび任意非シークレットデータを含みます。データを暗号化するリクエストに暗号化コンテキストを含めると、 は暗号化コンテキストを暗号化されたデータに AWS KMS 暗号化バインドします。データを復号するには、同じ暗号化コンテキストに渡す必要があります。
Amazon Keyspaces は、すべての暗号化オペレーションで同じ AWS KMS 暗号化コンテキストを使用します。カスタマーマネージドキーを使用して Amazon Keyspaces テーブルを保護する場合は、暗号化コンテキストを使用して、監査の記録やログ内でカスタマーマネージドキーの使用を特定することができます。また、 AWS CloudTrailや Amazon CloudWatch Logs のログなど、ログにプレーンテキストで表示されます。
へのリクエストでは 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
カスタマーマネージドキーを使用して Amazon Keyspaces テーブルを保護する場合は、 AWS CloudTrail ログを使用して、Amazon Keyspaces が AWS KMS ユーザーに代わって に送信するリクエストを追跡できます。
このセクションでは、GenerateDataKey
、DescribeKey
、Decrypt
、および CreateGrant
の各リクエストについて説明します。さらに、Amazon Keyspaces は、テーブルを削除するときに RetireGrantオペレーションを使用して許可を削除します。
- GenerateDataKey
-
Amazon Keyspaces では、保管中のデータを暗号化するために一意のテーブルキーが作成します。テーブルのKMSキー AWS KMS を指定するGenerateDataKeyリクエストを に送信します。
GenerateDataKey
演算を記録するイベントは、次のようなサンプルイベントになります。ユーザーは Amazon Keyspaces サービスアカウントです。パラメータには、カスタマーマネージドキーの Amazon リソースネーム (ARN)、256 ビットキーを必要とするキー指定子、キースペース、テーブル、および を識別する暗号化コンテキストが含まれます AWS アカウント。{ "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オペレーションを使用して、選択した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 リクエストを に送信します。
Decrypt
演算を記録するイベントは、次のようなサンプルイベントになります。ユーザーは、テーブルにアクセスする のプリンシパル AWS アカウント です。パラメータには、暗号化されたテーブルキー (暗号文 BLOB として) と、テーブルを識別する暗号化コンテキストが含まれ、 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
-
カスタマーマネージドキーを使用して Amazon Keyspaces テーブルを保護する場合、Amazon Keyspaces では、権限を使用して、サービスによるデータの継続的保護とメンテナンスおよび耐久タスクの実行を許可します。これらの権限は、AWS 所有のキー では不要です。
Amazon Keyspaces により作成される権限はテーブルごとに固有となります。CreateGrant リクエストのプリンシパルは、テーブルを作成したユーザーです。
CreateGrant
演算を記録するイベントは、次のようなサンプルイベントになります。パラメータには、テーブルのカスタマーマネージドキーARNの 、被付与者プリンシパルと廃止プリンシパル (Amazon Keyspaces サービス)、および付与の対象となるオペレーションが含まれます。また、指定された暗号化コンテキストを使用するすべての暗号化オペレーションを必要とする制約も含まれています。{ "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" }