View a markdown version of this page

を使用して CloudWatch Logs のルックアップテーブルを暗号化する AWS Key Management Service - Amazon CloudWatch Logs

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

を使用して CloudWatch Logs のルックアップテーブルを暗号化する AWS Key Management Service

ルックアップテーブルデータは常に CloudWatch Logs で暗号化されます。デフォルトでは、CloudWatch Logs は 256 ビット Advanced Encryption Standard Galois/Counter Mode (AES-GCM) によるサーバー側の暗号化を使用して、保管中のルックアップテーブルデータを暗号化します。別の方法として、この暗号化には AWS Key Management Service を使用できます。その場合、暗号化は AWS KMS キーを使用して行われます。を使用した暗号化 AWS KMS は、ルックアップテーブルの作成時または更新時に、KMS キーをルックアップテーブルに関連付けることで、ルックアップテーブルレベルで有効になります。

重要

CloudWatch Logs は、対称 KMS キーのみをサポートします。非対称キーを使用してルックアップテーブル内のデータを暗号化しないでください。詳細については、「対称キーと非対称キーの使用」を参照してください。

KMS キーをルックアップテーブルに関連付けると、ルックアップテーブルに保存されているすべてのデータがこのキーを使用して暗号化されます。CloudWatch Logs は、リクエストがあればいつでもこのデータを復号化します。暗号化されたデータがリクエストされた場合、CloudWatch Logs に KMS キーのアクセス許可が必要です。

後でルックアップテーブルから KMS キーの関連付けを解除すると、CloudWatch Logs は CloudWatch Logs のデフォルトの暗号化方法を使用してデータを暗号化します。ただし、関連付けを解除する前にキーが無効または削除されている場合、CloudWatch Logs はそのキーで暗号化されたデータを読み取ることができません。

CloudWatch Logs が AWS KMS を使用してログデータを暗号化する方法の一般的な情報については、「」を参照してくださいを使用して CloudWatch Logs のログデータを暗号化する AWS Key Management Service

CloudWatch Logs がルックアップテーブル AWS KMS に使用する方法

CloudWatch Logs は、エン AWS KMS ベロープ暗号化を使用してルックアップテーブルデータを保護します。KMS キーをルックアップテーブルに関連付けると、CloudWatch Logs はGenerateDataKeyリクエストを に送信します AWS KMS。 は一意のデータ暗号化キー (DEK) AWS KMS を生成し、プレーンテキストコピーと DEK の暗号化されたコピーの両方を返します。CloudWatch Logs は、プレーンテキスト DEK を使用してルックアップテーブルデータを暗号化し、暗号化された DEK を暗号化されたデータとともに保存します。プレーンテキスト DEK は保存されず、使用後にメモリから破棄されます。

CloudWatch Logs がルックアップテーブルデータを読み取る必要がある場合、暗号化された DEK AWS KMS を使用して にDecryptリクエストを送信します。 は DEK を AWS KMS 復号し、プレーンテキストの DEK を CloudWatch Logs に返し、これを使用してルックアップテーブルデータを復号します。

CloudWatch Logs は、次の暗号化コンテキストを使用してリクエストを行います AWS KMS。

{ "aws:logs:arn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name" }

この暗号化コンテキストを IAM ポリシーと AWS KMS キーポリシーで使用して、KMS キーへのアクセスを制御できます。詳細については、「AWS KMS キーと暗号化コンテキスト」を参照してください。

必要な アクセス許可

ルックアップテーブルで AWS KMS 暗号化を使用するには、IAM プリンシパルに KMS キーに対する次の AWS KMS アクセス許可が必要です。

  • kms:Decrypt

  • kms:GenerateDataKey

アクセスkms:Decrypt許可は、CloudWatch Logs がユーザーに代わってデータを復号化できるように、KMS キーで暗号化されたルックアップテーブルGetLookupTableで を呼び出すときに必要です。暗号化されたルックアップテーブルで lookup コマンドを使用するクエリStartQueryで を呼び出す場合、 キー (ルックアップテーブルの暗号化に使用される KMS キー) にも アクセスkms:Decrypt許可が必要です。アクセスkms:GenerateDataKey許可は、CloudWatch Logs がルックアップテーブルデータを暗号化するためのデータ暗号化キーを生成できるように、KMS キーUpdateLookupTableを使用して CreateLookupTableまたは を呼び出すときに必要です。

さらに、CloudWatch Logs サービスには KMS キーを使用するアクセス許可が必要です。次のセクションで説明するように、KMS キーポリシーにポリシーステートメントを追加して、これらのアクセス許可を付与します。

ステップ 1: AWS KMS キーを作成する

対称 KMS キーを作成するには、次の create-key コマンドを使用します。

aws kms create-key

出力には、キーのキー ID と Amazon リソースネーム (ARN) が含まれます。出力例を次に示します。

{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1478910250.94, "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59", "AWSAccountId": "123456789012", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

キー ARN を記録します。次のステップで必要になります。

ステップ 2: KMS キーでアクセス許可を設定する

デフォルトでは、すべての AWS KMS キーはプライベートです。リソースの所有者のみがその CMK を使用してデータを暗号化および復号できます。キーを使用するためのアクセス許可を CloudWatch Logs サービスプリンシパルに付与し、キーを使用するためのアクセス許可を呼び出し元ロールに付与する必要があります。

まず、get-key-policy コマンドを使用して、KMS キーのデフォルトポリシーを policy.json として保存します。

aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json

テキストエディタで policy.json ファイルを開き、次のステートメントを追加して、CloudWatch Logs サービスプリンシパルにキーを使用するアクセス許可を付与します。この例では、暗号化コンテキストに一致するConditionセクションを使用して、キーを特定のルックアップテーブルに制限します。

{ "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name", "aws:SourceAccount": "account-id", "aws:SourceArn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name" } } }

次に、CloudWatch Logs CreateLookupTableまたは UpdateLookupTable APIs を呼び出すロールにアクセス許可を追加します。CloudWatch Logs は を使用してkms:ViaService、お客様に代わって を AWS KMS 呼び出します。詳細については、「kms:ViaService」を参照してください。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/role-name" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "logs.region.amazonaws.com" ] } } }

最後に、次の put-key-policy コマンドを使用して更新されたポリシーを追加します。

aws kms put-key-policy --key-id key-id --policy-name default --policy file://policy.json

ステップ 3: KMS キーをルックアップテーブルに関連付ける

API を使用して KMS キーを作成するとき、または CreateLookupTable API を使用して既存のルックアップテーブルを更新するときに、KMS キーをルックアップテーブルに関連付けることができますUpdateLookupTable。どちらの APIs AWSLogsConfigService の一部です。

作成時に KMS キーをルックアップテーブルに関連付けるには

CreateLookupTable API を使用して、KMS キーの ARN で kmsKeyArnパラメータを指定します。

aws logs create-lookup-table \ --lookup-table-name my-lookup-table \ --kms-key-arn "arn:aws:kms:region:account-id:key/key-id"
KMS キーを既存のルックアップテーブルに関連付けるには

UpdateLookupTable API を使用して、KMS キーの ARN で kmsKeyArnパラメータを指定します。

aws logs update-lookup-table \ --lookup-table-name my-lookup-table \ --kms-key-arn "arn:aws:kms:region:account-id:key/key-id"

考慮事項

  • ルックアップテーブルから KMS キーを関連付けるか関連付けを解除すると、オペレーションが有効になるまでに最大 5 分かかることがあります。

  • 関連付けられたキーへの CloudWatch Logs アクセスを取り消すか、関連付けられた KMS キーを削除すると、CloudWatch Logs の暗号化されたルックアップテーブルデータを取得できなくなります。

  • このトピックの手順を実行するには、、kms:CreateKeykms:GetKeyPolicykms:PutKeyPolicy、および CreateLookupTableまたは を呼び出すための適切な CloudWatch Logs アクセス許可が必要ですUpdateLookupTable