Amazon SNS アクセスコントロールの例 - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SNS アクセスコントロールの例

このセクションでは、アクセスコントロールの一般的なユースケース例をいくつか紹介します。

トピック AWS アカウント へのアクセスを許可する

Amazon にトピックがありSNS、メッセージの公開など、そのトピックに対して 1 つ以上の AWS アカウント 特定のアクションを実行することを許可するとします。これを行うには、Amazon SNSAPIアクション を使用しますAddPermission

AddPermission アクションを使用すると、トピック、 のリスト AWS アカウント IDs、アクションのリスト、ラベルを指定できます。SNS その後、Amazon は新しいポリシーステートメントを自動的に生成し、トピックのアクセスコントロールポリシーに追加します。ポリシーステートメントを自分で記述する必要はありません。Amazon がSNSこれを処理します。後でポリシーを削除する必要がある場合は、 を呼び出しRemovePermission、アクセス許可の追加時に使用したラベルを指定することで削除できます。

例えば、トピック arn:aws:sns:us-east-2:444455556666: AddPermissionを呼び出しMyTopic、 AWS アカウント ID 1111-2222-3333、 Publishアクション、および ラベル を指定するとgrant-1234-publish、Amazon SNSはトピックのアクセスコントロールポリシーに次のポリシーステートメントを生成して挿入します。

{ "Statement": [{ "Sid": "grant-1234-publish", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Publish"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic" }] }

このステートメントが追加されると、 AWS アカウント 1111-2222-3333 にはトピックにメッセージを公開するアクセス許可が付与されます。

追加情報:

  • カスタムポリシー管理: アクセス許可の付与には便利ですAddPermissionが、条件の追加や特定のIAMロールやサービスへのアクセス許可の付与など、より複雑なシナリオに備えてトピックのアクセスコントロールポリシーを手動で管理することは便利です。これを行うには、 SetTopicAttributes API を使用してポリシー属性を直接更新します。

  • セキュリティのベストプラクティス: アクセス許可を付与する場合は、信頼できる AWS アカウント またはエンティティのみが Amazon SNSトピックにアクセスできるように注意してください。セキュリティを維持するために、トピックにアタッチされているポリシーを定期的に確認および監査します。

  • ポリシーの制限: Amazon SNSポリシーのサイズと複雑さには制限があることに注意してください。多くのアクセス許可や複雑な条件を追加する必要がある場合は、ポリシーがこれらの制限内に収まっていることを確認してください。

サブスクリプションを に制限する HTTPS

Amazon SNSトピックの通知配信プロトコルを に制限するにはHTTPS、カスタムポリシーを作成する必要があります。Amazon の AddPermissionアクションSNSでは、トピックへのアクセスを許可するときにプロトコルの制限を指定することはできません。したがって、この制限を適用するポリシーを手動で作成し、 SetTopicAttributesアクションを使用してポリシーをトピックに適用する必要があります。

サブスクリプションを に制限するポリシーを作成する方法は次のとおりですHTTPS。

  1. ポリシーを記述します。ポリシーは、アクセスを許可する AWS アカウント ID を指定し、HTTPSサブスクリプションのみを許可する条件を適用する必要があります。以下は、使用されるプロトコルが である場合にのみ、トピックをサブスクライブするアクセス許可を AWS アカウント ID 1111-2222-3333 に付与するポリシーの例ですHTTPS。

    { "Statement": [{ "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Subscribe"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "sns:Protocol": "https" } } }] }
  2. ポリシーを適用します。Amazon の SetTopicAttributesアクションSNSAPIを使用して、このポリシーをトピックに適用します。トピックの Policy 属性を、作成したJSONポリシーに設定します。

    snsClient.setTopicAttributes(SetTopicAttributesRequest.builder() .topicArn("arn:aws:sns:us-east-2:444455556666:MyTopic") .attributeName("Policy") .attributeValue(jsonPolicyString) // The JSON policy as a string .build());

追加情報:

  • アクセス制御のカスタマイズ。このアプローチにより、サブスクリプションプロトコルの制限など、よりきめ細かなアクセスコントロールを適用できます。これは、AddPermissionアクションだけでは実行できません。カスタムポリシーは、プロトコルの強制や IP アドレスの制限など、特定の条件を必要とするシナリオに柔軟性を提供します。

  • セキュリティのベストプラクティス。サブスクリプションを制限して、転送中のデータが暗号化されるようにすることで、通知のセキュリティHTTPSを強化します。トピックポリシーを定期的に確認し、セキュリティとコンプライアンスの要件を満たしていることを確認します。

  • ポリシーテスト。ポリシーを本番環境に適用する前に、開発環境でテストして、期待どおりに動作することを確認します。これにより、偶発的なアクセスの問題や意図しない制限を防ぐことができます。

Amazon SQSキューにメッセージを発行する

Amazon SNSトピックから Amazon SQSキューにメッセージを公開するには、Amazon SQSキューに正しいアクセス許可を設定する必要があります。Amazon SNSと Amazon はどちらも AWSのアクセスコントロールポリシー言語SQSを使用していますが、Amazon SNSトピックからメッセージを送信できるように、Amazon SQSキューにポリシーを明示的に設定する必要があります。

これを実現するには、 SetQueueAttributesアクションを使用して Amazon SQSキューにカスタムポリシーを適用します。Amazon とは異なりSNS、Amazon SQSは条件付きポリシーステートメントを作成するためのAddPermissionアクションをサポートしていません。したがって、ポリシーを手動で記述する必要があります。

以下は、キューにメッセージを送信するSNSアクセス許可を Amazon に付与する Amazon SQSポリシーの例です。このポリシーは Amazon SNSトピックではなく Amazon SQSキューに関連付けられていることに注意してください。指定されたアクションは Amazon SQSアクションで、リソースはキューの Amazon リソースネーム (ARN) です。GetQueueAttributes アクションARNを使用してキューを取得できます。

{ "Statement": [{ "Sid": "Allow-SNS-SendMessage", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": ["sqs:SendMessage"], "Resource": "arn:aws:sqs:us-east-2:444455556666:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:444455556666:MyTopic" } } }] }

このポリシーは、 aws:SourceArn条件を使用して、送信されるメッセージのソースに基づいてSQSキューへのアクセスを制限します。これにより、指定されたSNSトピック (この場合は、arn:aws:sns:us-east-2:444455556666:MyTopic) から発信されたメッセージのみをキューに配信できます。

追加情報:

  • キュー ARN。GetQueueAttributes アクションを使用して、Amazon SQSキューARNが正しいことを確認します。これはARN、正しいアクセス許可を設定するために不可欠です。

  • セキュリティのベストプラクティス。ポリシーを設定するときは、常に最小権限の原則に従います。Amazon SQSキューを操作するために必要なアクセス許可のみを Amazon SNSトピックに付与し、ポリシーを定期的にレビューして、ポリシーが up-to-date安全で安全であることを確認します。

  • Amazon のデフォルトポリシーSNS。一部の誤解とは対照的に、Amazon SNSは新しく作成されたトピックへの他の AWS のサービス アクセスを許可するデフォルトのポリシーを自動的に付与しません。Amazon SNSトピックへのアクセスを制御するポリシーを明示的に定義してアタッチする必要があります。

  • テストと検証。ポリシーを設定したら、Amazon SNSトピックにメッセージを公開し、Amazon SQSキューに正常に配信されたことを確認することで統合をテストします。これにより、ポリシーが正しく設定されていることを確認できます。

Amazon S3 イベント通知がトピックに発行することを許可する

Amazon S3 バケット AWS アカウント を別のバケットから Amazon SNSトピックにイベント通知を発行できるようにするには、それに応じてトピックのアクセスポリシーを設定する必要があります。これには、特定の から Amazon S3 サービスにアクセス許可を付与するカスタムポリシーを作成し AWS アカウント 、このポリシーを Amazon SNSトピックに適用します。

設定方法は次のとおりです。

  1. ポリシーを記述します。ポリシーは Amazon S3 サービス (s3.amazonaws.com) Amazon SNSトピックに発行するために必要なアクセス許可。SourceAccount 条件を使用して AWS アカウント、Amazon S3 バケットを所有する指定された のみがトピックに通知を発行できるようにします。

    次に、ポリシーの例を示します。

    { "Statement": [{ "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic", "Condition": { "StringEquals": { "AWS:SourceAccount": "444455556666" } } }] }
    • トピック所有者 – 111122223333 は Amazon SNSトピックを所有する AWS アカウント ID です。

    • Amazon S3 バケット所有者 – 444455556666 は、Amazon S3 バケット送信通知を所有する AWS アカウント ID です。 Amazon S3

  2. ポリシーを適用します。SetTopicAttributes アクションを使用して、Amazon SNSトピックにこのポリシーを設定します。これにより、トピックのアクセスコントロールが更新され、カスタムポリシーで指定されたアクセス許可が含まれます。

    snsClient.setTopicAttributes(SetTopicAttributesRequest.builder() .topicArn("arn:aws:sns:us-east-2:111122223333:MyTopic") .attributeName("Policy") .attributeValue(jsonPolicyString) // The JSON policy as a string .build());

追加情報:

  • SourceAccount条件の使用。このSourceAccount条件により、この場合は指定された AWS アカウント (444455556666) から発信されたイベントのみが Amazon SNSトピックをトリガーできます。これは、不正なアカウントがトピックに通知を送信できないようにするセキュリティ対策です。

  • をサポートするその他のサービスSourceAccountこのSourceAccount条件は、次のサービスでサポートされています。発信元アカウントに基づいて Amazon SNSトピックへのアクセスを制限する場合は、この条件を使用することが重要です。

    • Amazon API Gateway

    • Amazon CloudWatch

    • Amazon DevOpsGuru

    • Amazon EventBridge

    • Amazon GameLift

    • Amazon Pinpoint SMSと Voice API

    • Amazon RDS

    • Amazon Redshift

    • Amazon S3 Glacier

    • Amazon SES

    • Amazon Simple Storage Service

    • AWS CodeCommit

    • AWS Directory Service

    • AWS Lambda

    • AWS Systems Manager Incident Manager

  • テストと検証。ポリシーを適用したら、Amazon S3 バケットでイベントをトリガーしてセットアップをテストし、Amazon SNSトピックに正常に発行されることを確認します。これにより、ポリシーが正しく設定されるようになります。

  • セキュリティのベストプラクティス。Amazon SNSトピックポリシーを定期的に確認し、監査して、セキュリティ要件に準拠していることを確認します。安全なオペレーションを維持するには、信頼できるアカウントとサービスのみへのアクセスを制限することが不可欠です。

Amazon が別のアカウントが所有するトピックSESに発行することを許可する

別の が所有するトピック AWS のサービス に別の に発行することを許可できます AWS アカウント。111122223333 アカウントにサインインし、Amazon を開きSES、E メールを作成したとします。この E メールに関する通知を 444455556666 アカウントが所有する Amazon SNSトピックに発行するには、次のようなポリシーを作成します。そのためには、プリンシパル (他のサービス) と各リソースの所有権に関する情報を提供する必要があります。Resource ステートメントにはARN、トピック所有者のアカウント ID を含むトピック が用意されています444455556666。"aws:SourceOwner": "111122223333" ステートメントは、アカウントがその E メールを所有することを指定します。

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "Service": "ses.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:SourceOwner": "111122223333" } } } ] }

Amazon にイベントを発行する場合SNS、次のサービスが をサポートしますaws:SourceOwner

  • Amazon API Gateway

  • Amazon CloudWatch

  • Amazon DevOpsGuru

  • Amazon GameLift

  • Amazon Pinpoint SMSと Voice API

  • Amazon RDS

  • Amazon Redshift

  • Amazon SES

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

aws:SourceAccountaws:SourceOwner

重要

aws:SourceOwner は廃止され、新しいサービスは aws:SourceArn および を通じてSNSのみ Amazon と統合できますaws:SourceAccount。Amazon SNSは、現在 をサポートしている既存のサービスに対して下位互換性を維持しますaws:SourceOwner

aws:SourceAccount および aws:SourceOwner条件キーは、Amazon SNSトピックに発行 AWS のサービス するときに、それぞれ によって設定されます。サポートされている場合、値は、サービスがデータを発行する 12 桁の AWS アカウント ID になります。サービスによってサポートするものは変わります。

の組織内のアカウントが別のアカウントのトピックに発行 AWS Organizations することを許可する

この AWS Organizations サービスは、請求を一元管理し、アクセスとセキュリティを制御し、 間でリソースを共有するのに役立ちます AWS アカウント。

組織 ID は Organizations コンソールで確認できます。詳細については、「管理アカウントからの組織の詳細の表示」を参照してください。

この例では、組織 AWS アカウント 内の任意の がアカウント MyTopicの Amazon SNSトピックに発行myOrgIdできます444455556666。ポリシーでは、aws:PrincipalOrgID グローバル条件キーを使用して組織 ID 値を確認します。

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "myOrgId" } } } ] }

CloudWatch アラームを別のアカウントのトピックに発行することを許可する

この場合、アカウントの CloudWatch アラーム111122223333は、アカウント の Amazon SNSトピックに発行できます444455556666

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" } } } ] }

特定のVPCエンドポイントからのみ Amazon SNSトピックへの発行を制限する

この場合、アカウント 444455556666 のトピックは、 ID が のVPCエンドポイントからのみ公開できますvpce-1ab2c34d

{ "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1ab2c34d" } } }] }