AWS CloudTrail
ユーザーガイド (Version 1.0)

CloudTrail の Amazon SNS トピックポリシー

SNS トピックに通知を送信するには、CloudTrail が必要なアクセス許可を持っている必要があります。次を実行する場合、CloudTrail は、自動的にトピックに必要なアクセス権限をアタッチします。

  • CloudTrail コンソールで証跡を作成または更新する操作の一部として、SNS トピックを作成する。

  • AWS CLI の create-subscription コマンドと update-subscription コマンドを使用して、SNS トピックを作成する。

CloudTrail は、ポリシーに以下のフィールドを追加します。

  • 許可された SID。

  • CloudTrail のサービスプリンシパル名。

  • SNS トピック (リージョン、アカウント ID、およびトピック名を含む)。

次のポリシーを使用すると、CloudTrail はサポートされているリージョンからログファイルの配信に関する通知を送信できるようになります。詳細については、「CloudTrail がサポートされているリージョン」を参照してください。

SNS トピックポリシー

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:region:SNSTopicOwnerAccountId:SNSTopicName" } ] }

AWS KMS で暗号化された Amazon SNS トピックを使用して通知を送信するには、次のステートメントをカスタマーマスターキー (CMK) のポリシーに追加して、イベントソース (CloudTrail) と暗号化されたトピックの間の互換性も保つ必要があります。

CMK ポリシー

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" } ] }

詳細については、「AWS サービスと暗号化されたトピックのイベントソース間の互換性を保つ」を参照してください。

通知の送信用に既存のトピックを指定する

Amazon SNS コンソールで Amazon SNS トピックポリシーへのアクセス許可を手動で追加した後、CloudTrail コンソールでトピックを指定できます。

SNS トピックポリシーを手動で更新するには

  1. https://console.aws.amazon.com/sns/v2/home にある Amazon SNS コンソールを開きます。

  2. [Topics] を選択し、トピックを選択します。

  3. [Other topic actions]、[Edit topic policy] の順に選択します。

  4. [Advanced view] を選択し、リージョン、アカウント ID、およびトピック名の適切な値を使用して、SNS トピックポリシー からステートメントを追加します。

  5. [ポリシーの更新] を選択します。

  6. トピックが暗号化されたトピックの場合は、kms:GenerateDataKey* および kms:Decrypt のアクセス許可を CloudTrail に付与する必要があります。詳細については、「暗号化された SNS トピックの CMK ポリシー」を参照してください。

  7. CloudTrail コンソールに戻り、証跡のトピックを指定します。

SNS トピックポリシーのトラブルシューティング

以下のセクションでは、SNS トピックポリシーをトラブルシューティングする方法について説明します。

一般的な SNS ポリシー設定のエラー

証跡を作成または更新する操作の一部として新しいトピックを作成した場合、CloudTrail によって必要なアクセス許可がトピックにアタッチされます。トピックポリシーでは、"cloudtrail.amazonaws.com" というサービスプリンシパル名が使用され、これにより、CloudTrail がすべてのリージョンについて通知を送信できるようになります。

CloudTrail が特定のリージョンについて通知を送信していない場合は、そのトピックで、リージョンごとに CloudTrail アカウント ID を指定する古いポリシーが使用されている可能性があります。このポリシーでは、指定されたリージョンについてのみ通知を送信できる CloudTrail アクセス許可が付与されます。

次のトピックポリシーを使用した場合、CloudTrail は、指定された 9 つのリージョンについてのみ、通知を送信できるようになります。

例 アカウント ID を使用したトピックポリシー

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::903692715234:root", "arn:aws:iam::035351147821:root", "arn:aws:iam::859597730677:root", "arn:aws:iam::814480443879:root", "arn:aws:iam::216624486486:root", "arn:aws:iam::086441151436:root", "arn:aws:iam::388731089494:root", "arn:aws:iam::284668455005:root", "arn:aws:iam::113285607260:root" ]}, "Action": "SNS:Publish", "Resource": "aws:arn:sns:us-east-1:123456789012:myTopic" }] }

このポリシーは、個々の CloudTrail アカウント ID に基づいたアクセス権限を使用します。新しいリージョンについて通知を配信するには、ポリシーを手動で更新して、そのリージョンの CloudTrail アカウント ID を含める必要があります。たとえば、CloudTrail が 米国東部 (オハイオ) リージョン のサポートを追加したので、そのリージョンのアカウント ID ARN "arn:aws:iam::475085895292:root" を追加してポリシーを更新する必要があります。

ベストプラクティスとして、CloudTrail サービスプリンシパルでアクセス権限を使用するようにポリシーを更新します。これを行うには、アカウント ID ARN をサービスプリンシパル名 "cloudtrail.amazonaws.com" に置き換えます。

これにより、現在のリージョンと新しいリージョンについて通知を送信するためのアクセス許可が CloudTrail に付与されます。以下に示しているのは、以前のポリシーの最新バージョンです。

例 サービスプリンシパル名を使用したトピックポリシー

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": {Service": "cloudtrail.amazonaws.com"}, "Action": "SNS:Publish", "Resource": arn:aws:sns:us-east-1:123456789012:myTopic" }] }

ポリシーの値が正しいことを確認します。

  • [Resource] フィールドに、トピックの所有者のアカウント番号を指定します。自分で作成したトピックについては、自分のアカウント番号を指定します。

  • リージョンと SNS トピック名の適切な値を指定します。

その他のリソース

SNS トピックとそのサブスクライブの詳細については、「Amazon Simple Notification Service 開発者ガイド」を参照してください。