翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS アクセスコントロールの例
このセクションでは、アクセスコントロールの一般的なユースケース例をいくつか紹介します。
トピック
- トピック AWS アカウント へのアクセスを許可する
- サブスクリプションを に制限する HTTPS
- Amazon SQSキューにメッセージを発行する
- Amazon S3 イベント通知がトピックに発行することを許可する
- Amazon が別のアカウントが所有するトピックSESに発行することを許可する
- aws:SourceAccount と aws:SourceOwner
- の組織内のアカウントが別のアカウントのトピックに発行 AWS Organizations することを許可する
- CloudWatch アラームを別のアカウントのトピックに発行することを許可する
- 特定のVPCエンドポイントからのみ 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。
-
ポリシーを記述します。ポリシーは、アクセスを許可する 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" } } }] }
-
ポリシーを適用します。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トピックに適用します。
設定方法は次のとおりです。
-
ポリシーを記述します。ポリシーは 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
-
-
ポリシーを適用します。
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:SourceAccount
と aws:SourceOwner
重要
aws:SourceOwner
は廃止され、新しいサービスは aws:SourceArn
および を通じてSNSのみ Amazon と統合できますaws:SourceAccount
。Amazon SNSは、現在 をサポートしている既存のサービスに対して下位互換性を維持しますaws:SourceOwner
。
aws:SourceAccount
および aws:SourceOwner
条件キーは、Amazon SNSトピックに発行 AWS のサービス するときに、それぞれ によって設定されます。サポートされている場合、値は、サービスがデータを発行する 12 桁の AWS アカウント ID になります。サービスによってサポートするものは変わります。
-
Amazon S3 通知の使用方法
aws:SourceAccount
と、その条件をサポートする AWS サービスのリストAmazon S3 イベント通知がトピックに発行することを許可するについては、「」を参照してください。 -
Amazon がどのように SES を使用するか、
aws:SourceOwner
およびその条件をサポートする AWS サービスのリストAmazon が別のアカウントが所有するトピックSESに発行することを許可するについては、「」を参照してください。
の組織内のアカウントが別のアカウントのトピックに発行 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" } } }] }