AWS CloudTrail で AWS KMS を使用する方法 - AWS CloudTrail

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

AWS CloudTrail で AWS KMS を使用する方法

このセクションでは、AWS KMS が SSE-KMS キーで暗号化された CloudTrail 証跡とどのように連携するかについて説明します。

重要

AWS CloudTrail および Amazon S3 は、対称 AWS KMS keys のみをサポートします。非対称 KMS キーを使用して CloudTrail ログを暗号化することはできません。KMS キーが対称か非対称かを判断する方法については、「AWS Key Management Service デベロッパーガイド」の「さまざまなキータイプの特定」を参照してください。

CloudTrail では、SSE-KMS キーで暗号化されたログファイルで読み取りまたは書き込みをする場合、キー利用料金は発生しません。ただし、SSE-KMS キーで暗号化された CloudTrail ログファイルにアクセスする場合は、キー利用料金が発生します。AWS KMS の料金については、AWS Key Management Service の料金を参照してください。CloudTrail の料金については、「AWS CloudTrail の料金」を参照してください。

証跡のために KMS キーを使用するタイミングを理解する

AWS KMS を使用した CloudTrail ログファイルの暗号化は、AWS KMS key によるサーバー側の暗号化 (SSE-KMS) と呼ばれる Amazon S3 機能を基盤としています。SSE-KMS に関する詳細は、「Amazon Simple Storage Service ユーザーガイド」の「AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用」を参照してください。

SSE-KMS を使用してログファイルを暗号化するように AWS CloudTrail を設定すると、CloudTrail と Amazon S3 はそれらのサービスで特定のアクションを実行するときに AWS KMS keys を使用します。以下のセクションでは、これらのサービスが KMS キーをいつ、どのように使用するかについて説明し、この説明を検証するために使用できる追加情報を示します。

AWS KMS key でログファイルを暗号化するように CloudTrail を設定する

KMS キーを使用するように CloudTrail の設定を更新すると、CloudTrail は AWS KMS に GenerateDataKey リクエストを送信して、KMS キーが存在し、CloudTrail が KMS キーを暗号化に使用する許可を持っていることを検証します。CloudTrail は、結果のデータキーを使用しません。

GenerateDataKey リクエストには、暗号化コンテキストの次の情報が含まれています。

GenerateDataKey リクエストの結果、CloudTrail ログに次の例のようなエントリが作成されます。このようなログエントリが表示された場合は、CloudTrail が AWS KMS GenerateDataKey オペレーションを特定の証跡のために呼び出したことを特定できます。AWS KMS は特定の KMS キーの下でデータキーを作成しました。

{ "eventVersion": "1.09", "userIdentity": { "type": "AWSService", "invokedBy": "cloudtrail.amazonaws.com" }, "eventTime": "2024-12-06T20:14:46Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "cloudtrail.amazonaws.com", "userAgent": "cloudtrail.amazonaws.com", "requestParameters": { "keySpec": "AES_256", "keyId": "arn:aws:kms:us-east-1:123456789012:key/example1-6736-4661-bf00-exampleeb770", "encryptionContext": { "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-east-1:123456789012:trail/management-events", "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-logging-bucket-123456789012-9af1fb49/AWSLogs/123456789012/CloudTrail/us-east-1/2024/12/06/123456789012_CloudTrail_us-east-1_20241206T2010Z_TO50OLMG1hIQ1png.json.gz" } }, "responseElements": null, "requestID": "a0555e85-7e8a-4765-bd8f-2222295558e1", "eventID": "e4f3557e-7dbd-4e37-a00a-d86c137d1111", "readOnly": true, "resources": [ { "accountId": "123456789012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:123456789012:key/example1-6736-4661-bf00-exampleeb770" }], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "123456789012", "sharedEventID": "ce71d6be-0846-498e-851f-111a1af9078f", "eventCategory": "Management" }

CloudTrail は S3 バケットにログファイルを格納します

CloudTrail が S3 バケットにログファイルを格納するたびに、Amazon S3 は CloudTrail に代わって AWS KMS に GenerateDataKey リクエストを送信します。このリクエストに応じて、AWS KMS は一意のデータキーを生成し、データキーの 2 つのコピーを Amazon S3 に送信します。1 つはプレーンテキストで、もう 1 つは指定された KMS キーで暗号化されます。Amazon S3 は、プレーンテキストデータキーを使用して CloudTrail ログファイルを暗号化し、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。Amazon S3 は、暗号化されたデータキーをメタデータとして暗号化された CloudTrail ログファイルとともに保存します。

GenerateDataKey リクエストには、暗号化コンテキストの次の情報が含まれています。

GenerateDataKey リクエストごとに、CloudTrail ログに次の例のようなエントリが作成されます。このようなログエントリが表示された場合は、CloudTrail が AWS KMS GenerateDataKey オペレーションを特定の証跡のために呼び出して、特定のログファイルを保護したことを特定できます。AWS KMS は指定された KMS キーで、同じログエントリの中で 2 回表示されるデータキーを作成しました。

{ "eventVersion": "1.09", "userIdentity": { "type": "AWSService", "invokedBy": "cloudtrail.amazonaws.com" }, "eventTime": "2024-12-06T21:49:28Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "cloudtrail.amazonaws.com", "userAgent": "cloudtrail.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-east-1::trail/insights-trail", "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-logging-bucket1-123456789012-7867ab0c/AWSLogs/123456789012/CloudTrail/us-east-1/2024/12/06/123456789012_CloudTrail_us-east-1_20241206T2150Z_hVXmrJzjZk2wAM2V.json.gz" }, "keySpec": "AES_256", "keyId": "arn:aws:kms:us-east-1:123456789012:key/example9-16ef-48ba-9163-example67a5a" }, "responseElements": null, "requestID": "11117d14-9232-414a-b3d1-01bab4dc9f99", "eventID": "999e9a50-512c-4e2a-84a3-111a5f511111", "readOnly": true, "resources": [ { "accountId": "123456789012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:123456789012:key/example9-16ef-48ba-9163-example67a5a" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "123456789012", "sharedEventID": "5e663acc-b7fd-4cdd-8328-0eff862952fa", "eventCategory": "Management" }

S3 バケットから暗号化されたログファイルを取得する

S3 バケットから暗号化された CloudTrail ログファイルを取得するたびに、Amazon S3 はユーザーの代わりに AWS KMS に Decrypt リクエストを送信し、ログファイルの暗号化されたデータキーを復号します。このリクエストに応じて、AWS KMS は KMS キーを使用してデータキーを復号し、プレーンテキストのデータキーを Amazon S3 に送信します。Amazon S3 は、プレーンテキストデータキーを使用して CloudTrail ログファイルを復号化し、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。

Decrypt リクエストには、暗号化コンテキストの次の情報が含まれています。

Decrypt リクエストごとに、CloudTrail ログに次の例のようなエントリが作成されます。このようなログエントリが表示された場合は、引き受けたロールが AWS KMS Decrypt オペレーションを特定の証跡および特定のログファイルのために呼び出したことを特定できます。AWS KMS は特定の KMS キーでデータキーを復号化しました。

{ "eventVersion": "1.09", "userIdentity": { "type": "AssumedRole", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:sts::123456789012:assumed-role/Admin", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::123456789012:role/Admin", "accountId": "123456789012", "userName": "Admin" }, "attributes": { "creationDate": "2024-12-06T22:04:04Z", "mfaAuthenticated": "false" } }, "invokedBy": "AWS Internal" }, "eventTime": "2024-12-06T22:26:34Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "encryptionContext": { "aws:cloudtrail:arn": "arn:aws:cloudtrail:us-east-1:123456789012:trail/insights-trail", "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-logging-bucket1-123456789012-7867ab0c/AWSLogs/123456789012/CloudTrail/us-east-1/2024/12/06/123456789012_CloudTrail_us-east-1_20241206T0000Z_aAAsHbGBdye3jp2R.json.gz" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "1ab2d2d2-111a-2222-a59b-11a2b3832b53", "eventID": "af4d4074-2849-4b3d-1a11-a1aaa111a111", "readOnly": true, "resources": [ { "accountId": "123456789012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:123456789012:key/example9-16ef-48ba-9163-example67a5a" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "123456789012", "eventCategory": "Management", "sessionCredentialFromConsole": "true" }