カスタマー管理キーがどのユーザーにより利用されているのかを確認する方法

困っていた内容

カスタマー管理キーがどのユーザーにより利用されているのかを確認したいです。
確認方法を教えてください。

どう対応すればいいの?

どのユーザーが利用しているかについては、CloudTrail イベントの userIdentityuserName より確認いただくことが可能となります。
キーの暗号化については、下記 API のイベントより確認することができます。

  • Encrypt
  • GenerateDataKey
  • GenerateDataKeyWithoutPlaintext

キーの復号については、下記 API のイベントより確認することができます。

  • Decrypt

やってみた

実際にどのように、CloudTrail イベントに記録されるのかを確認していきます。
今回は カスタマー管理キーを、S3 バケットの暗号化タイプとして、利用します。
その後、下記の操作を行い、CloudTrail でどのユーザーが暗号化/復号しているのかを確認します。

  • ファイルのアップロードでどのユーザーにより暗号化されているのか
  • ファイルのダウンロードをどのユーザーにより復号しているのか

事前に利用する IAMユーザーをキーの管理者およびキーのユーザーとして選択いただき、カスタマー管理キーを作成します。
その後、S3 バケットを作成します。
S3 バケットの設定はデフォルトのままとし、「デフォルトの暗号化」を「AWS Key Management Service キーを使用したサーバー側の暗号化 (SSE-KMS)」と選択して、作成したカスタマー管理キーを選択します。

その後、任意のファイルをアップロードします。

アップロードしたファイルをダウンロードします。

まずは、ファイルのアップロードでどのユーザーにより暗号化されているのかについて、CloudTrail のイベント履歴から確認します。
CloudTrail のイベント履歴から、フィルター機能を利用して、イベント名:GenerateDataKey として検索します。
結果を確認しますと、下記のイベントが記録されていることが分かります。
userIdentity の userName を確認しますと、暗号化をしたユーザーを特定することができます。

====一部抜粋====
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "XXXXXXXXXX",
        "arn": "arn:aws:iam::XXXXXXXXXXX:user/test-user",
        "accountId": "XXXXXXXX",
        "accessKeyId": "XXXXXXXXXXX",
        "userName": "test-user",
        "sessionContext": {
            "attributes": {
                "creationDate": "2024-05-12T08:32:17Z",
                "mfaAuthenticated": "true"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-05-12T08:44:34Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "keySpec": "AES_256",
        "keyId": "arn:aws:kms:ap-northeast-1:XXXXXXXXXXX:key/XXXXXXXX",
        "encryptionContext": {
            "aws:s3:arn": "arn:aws:s3:::test-s3-kms-for-blog"
        }
    },
====一部抜粋====

続いて、ファイルのダウンロードをどのユーザーにより復号しているのかについても、CloudTrail のイベント履歴から確認します。
フィルター機能をイベント名:Decrypt として検索します。
下記のイベントが記録されており、userIdentityuserName を確認しますと、復号したユーザーを確認することができます。

====一部抜粋====
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "XXXXXXXXXXX",
        "arn": "arn:aws:iam::XXXXXXXXXXX:user/test-user",
        "accountId": "XXXXXXXXXXX",
        "accessKeyId": "XXXXXXXXXXX",
        "userName": "test-user",
        "sessionContext": {
            "attributes": {
                "creationDate": "2024-05-12T08:32:17Z",
                "mfaAuthenticated": "true"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-05-12T08:44:54Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "encryptionContext": {
            "aws:s3:arn": "arn:aws:s3:::test-s3-kms-for-blog"
        },
====一部抜粋====

以上で、どのユーザーが暗号化/復号を行っているのかを確認しました。
どのユーザーにより操作されているのかが不明な際にご活用ください。

参考情報