CloudTrail を使用した Amazon SNS API コールのログ記録
Amazon SNS は AWS CloudTrail と統合されています。このサービスは、ユーザーやロール、または Amazon SNS の AWS のサービスによって実行されたアクションを記録するサービスです。CloudTrail は、Amazon SNS の API コールをイベントとしてキャプチャします。キャプチャされた呼び出しには、Amazon SNS コンソールからの呼び出しと、Amazon SNS API オペレーションへのコード呼び出しが含まれます。証跡を作成する場合は、Amazon S3 のイベントなど、Amazon SNS バケットへの CloudTrail イベントの継続的な配信を有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの [Event history] で最新のイベントを表示できます。CloudTrail で収集された情報を使用して、Amazon SNS に対するリクエスト、リクエスト元の IP アドレス、リクエスト者、リクエスト日時などの詳細を確認できます。
設定や有効化の方法など、CloudTrail の詳細については、「AWS CloudTrail ユーザーガイド」を参照してください。
CloudTrail の Amazon SNS 情報
CloudTrail は、アカウント作成時に AWS アカウント で有効になります。Amazon SNS でサポートされているイベントアクティビティが発生すると、そのアクティビティは [Event history] の他の AWS のサービスのイベントとともに CloudTrail イベントに記録されます。最近のイベントは、AWS アカウント で表示、検索、ダウンロードできます。詳細については、「CloudTrail イベント履歴でイベントを表示する」を参照してください。
Amazon SNS のイベントなどの、AWS アカウント におけるイベントを継続的に記録するには、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成すると、すべての AWS リージョンに証跡が適用されます。証跡は、AWSパーティションのすべてのリージョンからのイベントをログに記録し、指定した Amazon S3 バケットにログファイルを配信します。さらに、CloudTrail ログで収集したイベントデータをより詳細に分析し、それに基づいて対応するため、他の AWS サービスを構成できます。詳細については、次を参照してください:
CloudTrail のコントロールプレーンイベント
Amazon SNS は、CloudTrail ログファイルのイベントとして以下のアクションのログ付けをサポートします。
注記
Amazon Web Services にログインしていないとき (非認証モード)、ConfirmSubscription または Unsubscribe アクションが呼び出されても、そのアクションは CloudTrail に記録されません。例えば、E メール通知内のリンクを選択して、あるトピックへの保留中のサブスクリプションを確認したとき、ConfirmSubscription
アクションが非認証モードで呼び出されたとします。この場合、ConfirmSubscription
アクションは CloudTrail に記録されません。
各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。アイデンティティ情報は、以下を判別するのに役立ちます:
-
リクエストが、ルート認証情報と AWS Identity and Access Management (IAM) ユーザー認証情報のどちらを使用して送信されたか。
-
リクエストがロールまたはフェデレーションユーザーのテンポラリなセキュリティ認証情報を使用して行われたかどうか。
-
リクエストが別の AWS サービスによって行われたかどうか。
詳細については、「CloudTrail userIdentity Element」(CloudTrail userIdentity 要素) を参照してください。
CloudTrail のデータプレーンイベント
CloudTrail ファイルで以下の API アクションのロギングを有効にするには、CloudTrail でデータプレーン API アクティビティのログ記録を有効にする必要があります。詳細については、「AWS CloudTrail ユーザーガイド」の「データイベントをログ記録する」を参照してください。
データプレーンイベントは、リソースタイプ別にフィルタリングすることもできます。これにより、どの DynamoDB API コールを選択して CloudTrail でログに記録し、支払うかをきめ細かく制御できます。例えば、AWS::SNS::Topic
をリソースタイプとして指定することで、トピックの Publish
や PublishBatch
API アクションへのコールをログに記録できます。同様に、AWS::SNS::PlatformEndpoint
をリソースタイプとして指定することで、プラットフォームエンドポイントの Publish API アクションへのコールをログに記録できます。詳細については、「AWS CloudTrail API リファレンス」の「AdvancedEventSelector
」を参照してください。
注記
Amazon SNS リソースタイプ AWS::SNS::PhoneNumber
は、CloudTrail によってログに記録されません。
Amazon SNS データプレーン API
例: Amazon SNS ログファイルのエントリ
「トレイル」は、指定した Amazon S3 バケットにイベントをログファイルとして配信するように設定できます。CloudTrail のログファイルは、単一か複数のログエントリを含みます。イベントは任意ソースからの単一リクエストを表し、リクエストされたアクション、アクションの日時、リクエストパラメータなどの情報を含みます。CloudTrail ログファイルは、パブリック API 呼び出しの順序付けられたスタックトレースではないため、特定の順序では表示されません。
次は、ListTopics
、CreateTopic
、および DeleteTopic
のアクションを示す CloudTrail ログエントリの例です。
{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type":"IAMUser", "userName":"Bob" "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Bob", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE" }, "eventTime": "2014-09-30T00:00:00Z", "eventSource": "sns.amazonaws.com", "eventName": "ListTopics", "awsRegion": "us-west-2", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version", "requestParameters": { "nextToken": "ABCDEF1234567890EXAMPLE==" }, "responseElements": null, "requestID": "example1-b9bb-50fa-abdb-80f274981d60", "eventID": "example0-09a3-47d6-a810-c5f9fd2534fe", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, { "eventVersion": "1.02", "userIdentity": { "type":"IAMUser", "userName":"Bob" "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Bob", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE" }, "eventTime": "2014-09-30T00:00:00Z", "eventSource": "sns.amazonaws.com", "eventName": "CreateTopic", "awsRegion": "us-west-2", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version", "requestParameters": { "name": "hello" }, "responseElements": { "topicArn": "arn:aws:sns:us-west-2:123456789012:hello-topic" }, "requestID": "example7-5cd3-5323-8a00-f1889011fee9", "eventID": "examplec-4f2f-4625-8378-130ac89660b1", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, { "eventVersion": "1.02", "userIdentity": { "type":"IAMUser", "userName":"Bob" "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Bob", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE" }, "eventTime": "2014-09-30T00:00:00Z", "eventSource": "sns.amazonaws.com", "eventName": "DeleteTopic", "awsRegion": "us-west-2", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version", "requestParameters": { "topicArn": "arn:aws:sns:us-west-2:123456789012:hello-topic" }, "responseElements": null, "requestID": "example5-4faa-51d5-aab2-803a8294388d", "eventID": "example8-6443-4b4d-abfd-1b867280d964", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, ] }
以下の例は、Publish
アクションと PublishBatch
アクションを示す CloudTrail ログエントリです。
公開
{ "eventVersion": "1.09", "userIdentity": { "type": "AssumedRole", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Bob", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:role/Admin", "accountId": "123456789012", "userName": "ExampleUser" }, "attributes": { "creationDate": "2023-08-21T16:44:05Z", "mfaAuthenticated": "false" } } }, "eventTime": "2023-08-21T16:48:37Z", "eventSource": "sns.amazonaws.com", "eventName": "Publish", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.29.16 md/Botocore#1.31.16 ua/2.0 os/linux#5.4.250-173.369.amzn2int.x86_64 md/arch#x86_64 lang/python#3.8.17 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.31.16", "requestParameters": { "topicArn": "arn:aws:sns:us-east-1:123456789012:ExampleSNSTopic", "message": "HIDDEN_DUE_TO_SECURITY_REASONS", "subject": "HIDDEN_DUE_TO_SECURITY_REASONS", "messageStructure": "json", "messageAttributes": "HIDDEN_DUE_TO_SECURITY_REASONS" }, "responseElements": { "messageId": "0787cd1e-d92b-521c-a8b4-90434e8ef840" }, "requestID": "0a8ab208-11bf-5e01-bd2d-ef55861b545d", "eventID": "bb3496d4-5252-4660-9c28-3c6aebdb21c0", "readOnly": false, "resources": [{ "accountId": "123456789012", "type": "AWS::SNS::Topic", "ARN": "arn:aws:sns:us-east-1:123456789012:ExampleSNSTopic" }], "eventType": "AwsApiCall", "managementEvent": false, "recipientAccountId": "123456789012", "eventCategory": "Data", "tlsDetails": { "tlsVersion": "TLSv1.2", "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256", "clientProvidedHostHeader": "sns.us-east-1.amazonaws.com" } }
PublishBatch
{ "eventVersion": "1.09", "userIdentity": { "type": "AssumedRole", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Bob", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:role/Admin", "accountId": "123456789012", "userName": "ExampleUser" }, "attributes": { "creationDate": "2023-08-21T19:20:49Z", "mfaAuthenticated": "false" } } }, "eventTime": "2023-08-21T19:22:01Z", "eventSource": "sns.amazonaws.com", "eventName": "PublishBatch", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.29.16 md/Botocore#1.31.16 ua/2.0 os/linux#5.4.250-173.369.amzn2int.x86_64 md/arch#x86_64 lang/python#3.8.17 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.31.16", "requestParameters": { "topicArn": "arn:aws:sns:us-east-1:123456789012:ExampleSNSTopic", "publishBatchRequestEntries": [{ "id": "1", "message": "HIDDEN_DUE_TO_SECURITY_REASONS" }, { "id": "2", "message": "HIDDEN_DUE_TO_SECURITY_REASONS" } ] }, "responseElements": { "successful": [{ "id": "1", "messageId": "30d68101-a64a-5573-9e10-dc5c1dd3af2f" }, { "id": "2", "messageId": "c0aa0c5c-561d-5455-b6c4-5101ed84de09" } ], "failed": [] }, "requestID": "e2cdf7f3-1b35-58ad-ac9e-aaaea0ace2f1", "eventID": "10da9a14-0154-4ab6-b3a5-1825b229a7ed", "readOnly": false, "resources": [{ "accountId": "123456789012", "type": "AWS::SNS::Topic", "ARN": "arn:aws:sns:us-east-1:123456789012:ExampleSNSTopic" }], "eventType": "AwsApiCall", "managementEvent": false, "recipientAccountId": "123456789012", "eventCategory": "Data", "tlsDetails": { "tlsVersion": "TLSv1.2", "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256", "clientProvidedHostHeader": "sns.us-east-1.amazonaws.com" } }