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

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

SNS トピックに通知を送信するには、CloudTrail が必要なアクセス許可を持っている必要があります。Amazon SNS トピックを CloudTrail コンソールでの証跡の作成あるいは更新の一部として作成するとき、CloudTrail はバケットに必要なアクセス権限を自動的にアタッチします。

重要

セキュリティのベストプラクティスとして、SNS トピックへのアクセスを制限するために、SNS 通知を送信する証跡を作成または更新した後、SNS トピックにアタッチされている IAM ポリシーを手動で編集して条件キーを追加することを強くお勧めします。詳細については、このトピックの「SNS トピックポリシーのセキュリティのベストプラクティス」を参照してください。

CloudTrail は、次のフィールドを使用して、ポリシーに次のステートメントを追加します。

  • 許可された SID。

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

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

次のポリシーを使用すると、CloudTrail はサポートされているリージョンからログファイルの配信に関する通知を送信できるようになります。詳細については、「CloudTrail がサポートされているリージョン」を参照してください。これは、証跡を作成または更新し、SNS 通知を有効にするときに新規または既存の SNS トピックポリシーにアタッチされるデフォルトのポリシーです。

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 トピックを使用して通知を送信するには、以下のステートメントを AWS KMS key のポリシーに追加して、イベントソース (CloudTrail) と暗号化されたトピックの間の互換性も保つ必要があります。

KMS キーポリシー

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

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

SNS トピックポリシーのセキュリティのベストプラクティス

デフォルトでは、CloudTrail が Amazon SNS トピックにアタッチする IAM ポリシーステートメントにより、CloudTrail サービスプリンシパルが ARN によって識別される SNS トピックに発行できるようになります。攻撃者が SNS トピックにアクセスしたり、CloudTrail に代わってトピック受信者に通知を送信したりすることを防ぐには、CloudTrail SNS トピックポリシーを手動で編集して、aws:SourceArn 条件キーを CloudTrail によってアタッチされたポリシーステートメントに追加します。このキーの値は、証跡の ARN、または SNS トピックを使用している証跡 ARN の配列です。特定の証跡 ID と証跡を所有するアカウント ID の両方が含まれているため、SNS トピックへのアクセスは証跡を管理するアクセス許可を持つアカウントのみに制限されます。SNS トピックポリシーに条件キーを追加する前に、CloudTrail コンソールの証跡の設定から SNS トピック名を取得します。

aws:SourceAccount 条件キーもサポートされていますが、推奨されません。

aws:SourceArn 条件キーを SNS トピックポリシーに追加するには

  1. Amazon SNS コンソール(https://console.aws.amazon.com/sns/v3/home)を開きます。

  2. ナビゲーションペインで、[トピック] を選択します。

  3. 証跡設定に表示される SNS トピックを選択し、[編集] を選択します。

  4. [アクセスポリシー] を展開します。

  5. アクセスポリシー JSON エディタで、次の例のようなブロックを探します。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496" }
  6. 次の例に示すように、条件 aws:SourceArn 用の新しいブロックを追加します。の値aws:SourceArnは、SNS に通知を送信するトレイルの ARN です。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:us-west-2:123456789012:trail/Trail3" } } }
  7. SNS トピックポリシーの編集が終了したら、[変更の保存] を選択します。

aws:SourceAccount 条件キーを SNS トピックポリシーに追加するには

  1. Amazon SNS コンソール(https://console.aws.amazon.com/sns/v3/home)を開きます。

  2. ナビゲーションペインで、[トピック] を選択します。

  3. 証跡設定に表示される SNS トピックを選択し、[編集] を選択します。

  4. [アクセスポリシー] を展開します。

  5. アクセスポリシー JSON エディタで、次の例のようなブロックを探します。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496" }
  6. 次の例に示すように、条件 aws:SourceAccount 用の新しいブロックを追加します。aws:SourceAccount の値は CloudTrail 証跡を所有するアカウントの ID です。この例では、SNS トピックへのアクセスを、AWS アカウント123456789012 にサインインできるユーザーのみです。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } }
  7. SNS トピックポリシーの編集が終了したら、[変更の保存] を選択します。

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

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

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

  1. Amazon SNS コンソール (https://console.aws.amazon.com/sns/v3/home) を開きます。

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

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

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

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

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

  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-west-2:123456789012:myTopic" }] }

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

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

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

その他のリソース

Amazon SNS トピックおよびそのサブスクライブの詳細については、「Amazon Simple Notification Service デベロッパーガイド」を参照してください。