Amazon SQSのデータイベントがCloudTrailで記録可能になりました

Amazon SQS のデータイベント、メッセージ操作のログ記録をサポートした CloudTrail を試してみました。
2023.11.17

2023年11月16日付けのアップデートで、AWS CloudTrail が Amazon SQS (Simple Queue Service) のデータイベントのログ記録をサポートしました。

SQSを対象としたCloudTrailを設定、そのログ出力を確認する機会がありましたので、紹介させていただきます。

CloudTrail設定

検証のため、SQS データイベントのみを記録する証跡を新規に作成しました。

  • イベントタイプ は、「データタイプ」のみとしました。

CloudTrail_ログイベント設定

  • データイベント設定で、「データイベントタイプ」はSQSを選択しました。

CloudTrail_ログイベント選択

動作確認

以下のSQSデータイベントが CloudTrailで記録可能になりました。

  • ChangeMessageVisibility
  • ChangeMessageVisibilityBatch
  • DeleteMessage
  • DeleteMessageBatch
  • ReceiveMessage
  • SendMessage
  • SendMessageBatch

今回、CLIを利用、SendMessage、ReceiveMessage、DeleteMessage操作時のログ確認を試みました。

SQS_URL='https://sqs.us-west-1.amazonaws.com/00000000/0000'
aws sqs send-message --queue-url ${SQS_URL} --message-body "test"
aws sqs receive-message --queue-url ${SQS_URL}
RECEIPT_HANDLE="00000000"
aws sqs delete-message --queue-url ${SQS_URL} --receipt-handle ${RECEIPT_HANDLE}

ログ結果

  • CloudTrailログ出力先として設定した、CloudWatch Logsで確認を試みました。
  • 今回、SQSの操作を実施した約5分後、CloudWatch Logs にログが記録されました。

send-message

{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "0000:xxxx",
        "arn": "arn:aws:sts::00000000:assumed-role/xxxx/xxxx",
        "accountId": "00000000",
        "accessKeyId": "00000000",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "0000",
                "arn": "arn:aws:iam::00000000:role/xxxx",
                "accountId": "00000000",
                "userName": "xxxx"
            },
            "attributes": {
                "creationDate": "2023-11-17T03:45:34Z",
                "mfaAuthenticated": "true"
            }
        }
    },
    "eventTime": "2023-11-17T05:23:23Z",
    "eventSource": "sqs.amazonaws.com",
    "eventName": "SendMessage",
    "awsRegion": "us-west-1",
    "sourceIPAddress": "54.215.xx.xx",
    "userAgent": "aws-cli/2.13.32 Python/3.11.6 Linux/5.10.198-187.748.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off command/sqs.send-message",
    "requestParameters": {
        "messageBody": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "queueUrl": "https://sqs.us-west-1.amazonaws.com/00000000/0000"
    },
    "responseElements": {
        "messageId": "0000-0000-0000-0000-ff97c87f20df",
        "mD5OfMessageBody": "098f6bcd4621d373cade4e832627b4f6"
    },
    "requestID": "0000-0000-0000-0000-2d2296f1d470",
    "eventID": "0000-0000-0000-0000-48e5fe12c6ef",
    "readOnly": false,
    "resources": [
        {
            "accountId": "00000000",
            "type": "AWS::SQS::Queue",
            "ARN": "arn:aws:sqs:us-west-1:00000000:0000"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": false,
    "recipientAccountId": "00000000",
    "eventCategory": "Data",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "sqs.us-west-1.amazonaws.com"
    },
    "sessionCredentialFromConsole": "true"
}

receive-message

{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "0000:xxxx",
        "arn": "arn:aws:sts::00000000:assumed-role/xxxx/xxxx",
        "accountId": "00000000",
        "accessKeyId": "00000000",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "0000",
                "arn": "arn:aws:iam::00000000:role/xxxx",
                "accountId": "00000000",
                "userName": "xxxx"
            },
            "attributes": {
                "creationDate": "2023-11-17T03:45:34Z",
                "mfaAuthenticated": "true"
            }
        }
    },
    "eventTime": "2023-11-17T05:23:25Z",
    "eventSource": "sqs.amazonaws.com",
    "eventName": "ReceiveMessage",
    "awsRegion": "us-west-1",
    "sourceIPAddress": "54.215.xx.xx",
    "userAgent": "aws-cli/2.13.32 Python/3.11.6 Linux/5.10.198-187.748.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off command/sqs.receive-message",
    "requestParameters": {
        "queueUrl": "https://sqs.us-west-1.amazonaws.com/00000000/0000"
    },
    "responseElements": null,
    "requestID": "0000-0000-0000-0000-541f9c0a8b88",
    "eventID": "0000-0000-0000-0000-9315d686f17d",
    "readOnly": true,
    "resources": [
        {
            "accountId": "00000000",
            "type": "AWS::SQS::Queue",
            "ARN": "arn:aws:sqs:us-west-1:00000000:0000"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": false,
    "recipientAccountId": "00000000",
    "eventCategory": "Data",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "sqs.us-west-1.amazonaws.com"
    },
    "sessionCredentialFromConsole": "true"
}

delete-message

{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "0000:xxxx",
        "arn": "arn:aws:sts::00000000:assumed-role/xxxx/xxxx",
        "accountId": "00000000",
        "accessKeyId": "00000000",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "0000",
                "arn": "arn:aws:iam::00000000:role/xxxx",
                "accountId": "00000000",
                "userName": "xxxx"
            },
            "attributes": {
                "creationDate": "2023-11-17T03:45:34Z",
                "mfaAuthenticated": "true"
            }
        }
    },
    "eventTime": "2023-11-17T05:23:49Z",
    "eventSource": "sqs.amazonaws.com",
    "eventName": "DeleteMessage",
    "awsRegion": "us-west-1",
    "sourceIPAddress": "54.215.xx.xx",
    "userAgent": "aws-cli/2.13.32 Python/3.11.6 Linux/5.10.198-187.748.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off command/sqs.delete-message",
    "requestParameters": {
        "receiptHandle": "00000000",
        "queueUrl": "https://sqs.us-west-1.amazonaws.com/00000000/0000"
    },
    "responseElements": null,
    "requestID": "0000-0000-0000-0000-6ad0acfb9dd9",
    "eventID": "0000-0000-0000-0000-fb4ede9cc8d4",
    "readOnly": false,
    "resources": [
        {
            "accountId": "00000000",
            "type": "AWS::SQS::Queue",
            "ARN": "arn:aws:sqs:us-west-1:00000000:0000"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": false,
    "recipientAccountId": "00000000",
    "eventCategory": "Data",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "sqs.us-west-1.amazonaws.com"
    },
    "sessionCredentialFromConsole": "true"
}

まとめ

Amazon SQS の データイベントのログが利用可能になりました。

SQSのアクセス元について詳細な情報を確認可能になった事で、古いSDKや、アクセスキーを利用したアクセス元の特定などに役立つと予想されます。

なお、一部の項目は記録対象から除外、「HIDDEN_DUE_TO_SECURITY_REASONS」となる事が確認できました。 こちらは 2023年9月にログ記録がサポートされていた SNSと同様の仕様と推測されます。 監査証跡としてSQSのメッセージ本文まで残す必要がある場合にはご注意ください。