翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS アクセスコントロールのケース例
このセクションでは、アクセスコントロールの一般的なユースケース例をいくつか紹介します。
トピック AWS アカウント へのアクセスを許可する
Amazon SNS にトピックがあり、メッセージの発行など、そのトピックに対して特定のアクションを実行 AWS アカウント することを 1 つ以上許可するとします。これは、Amazon SNS API アクション AddPermission
を使用して実行できます。
AddPermission
アクションでは、トピック、 AWS アカウント ID のリスト、アクションのリスト、ラベルを指定できます。これによって、Amazon SNS は新しいポリシーステートメントを自動的に生成し、トピックのアクセスコントロールポリシーに追加します。ポリシーステートメントを自分で作成する必要はありません。Amazon SNS が自動的に作成します。後でポリシーを削除する必要がある場合は、RemovePermission
を呼び出して、アクセス許可の追加時に使用したラベルを指定して削除できます。
たとえば、トピック arn:aws:sns:us-east-2:444455556666:MyTopic AddPermission
で を呼び出す場合、 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 SNS の AddPermission
アクションでは、トピックへのアクセスを許可するときにプロトコル制限を指定することはできません。したがって、この制限を適用するポリシーを手動で作成し、SetTopicAttributes
アクションを使用してポリシーをトピックに適用する必要があります。
サブスクリプションを HTTPS に制限するポリシーを作成する方法は次のとおりです。
-
ポリシーを作成します。ポリシーは、アクセスを許可する AWS アカウント ID を指定し、HTTPS サブスクリプションのみを許可する条件を適用する必要があります。以下は、使用されるプロトコルが HTTPS である場合にのみ、トピックをサブスクライブするアクセス許可を AWS アカウント ID 1111-2222-3333 に付与するポリシーの例です。
{ "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 SNS API の
SetTopicAttributes
アクションを使用して、このポリシーをトピックに適用します。トピックの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 SQS はどちらも AWSアクセスコントロールポリシー言語を使用しますが、Amazon SNS トピックからのメッセージの送信を許可するポリシーを Amazon SQS Amazon SNS キューに明示的に設定する必要があります。
これを実現するには、SetQueueAttributes
アクションを使用して Amazon SQS キューにカスタムポリシーを適用します。Amazon SNS とは異なり、Amazon SQS は AddPermission
アクションによる条件付きポリシーステートメントの作成をサポートしていません。したがって、ポリシーを手動で作成する必要があります。
以下は、キューにメッセージを送信するアクセス許可を Amazon SNS に付与する 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" } } }] }
このポリシーは、送信されるメッセージのソースに基づいて、SQS キューへのアクセスを制限する aws:SourceArn
条件を使用します。これにより、指定された SNS トピック (この場合は、arn:aws:sns:us-east-2:444455556666:MyTopic) から発信されたメッセージのみがキューに配信されます。
追加情報:
-
キュー ARN。
GetQueueAttributes
アクションを使用して、Amazon SQS キューの正しい ARN を取得していることを確認します。この ARN は、正しいアクセス許可を設定するために不可欠です。 -
セキュリティのベストプラクティス。ポリシーを設定するときは、常に最小特権の原則に従います。Amazon SQS キューとやり取りするために必要な権限のみを Amazon SNS トピックに付与し、ポリシーを定期的にレビューして、ポリシーが最新かつ安全であることを確認します。
-
Amazon SNS のデフォルトポリシー。Amazon SNS は、他の AWS のサービス またはアカウントが新しく作成されたトピックにアクセスすることを許可するデフォルトのポリシーを自動的に付与しません。デフォルトでは、Amazon SNS トピックはアクセス許可なしで作成されます。つまり、トピックはプライベートであり、トピックを作成したアカウントのみがアクセスできます。他の、アカウント AWS のサービス、またはプリンシパルのアクセスを有効にするには、アクセスポリシーを明示的に定義し、トピックにアタッチする必要があります。これは最小特権の原則と一致しており、デフォルトで意図しないアクセスが付与されることはありません。
-
テストと検証。ポリシーを設定したら、Amazon SNS トピックにメッセージを発行し、それらが Amazon SQS キューに正常に配信されることを確認して、統合をテストします。これにより、ポリシーが正しく設定されていることを確認できます。
Amazon S3 イベント通知がトピックに発行することを許可する
別の の Amazon S3 バケット AWS アカウント が Amazon SNS トピックにイベント通知を発行できるようにするには、それに応じてトピックのアクセスポリシーを設定する必要があります。そのためには、特定の AWS アカウント から Amazon S3 サービスにアクセス許可を付与するカスタムポリシーを作成し、そのポリシーを Amazon SNS トピックに適用します。
設定の方法は次のとおりです。
-
ポリシーを作成します。ポリシーは、Amazon SNS トピックに発行するために必要なアクセス許可を Amazon S3 サービス (s3.amazonaws.com) に付与します。
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 SNS
-
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 DevOps Guru
-
Amazon EventBridge
-
Amazon GameLift サーバー
-
Amazon Pinpoint SMS および音声 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
ステートメントは、トピック所有者のアカウント ID 444455556666 を含むトピック ARN を提供します。"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 DevOps Guru
-
Amazon GameLift サーバー
-
Amazon Pinpoint SMS および音声 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
は廃止されました。新しいサービスを Amazon SNS と統合できるのは、aws:SourceArn
と aws:SourceAccount
を使用した場合のみです。Amazon SNS は、現在 aws:SourceOwner
をサポートしている既存のサービスとの下位互換性を引き続き維持しています。
aws:SourceAccount
条件キーと aws:SourceOwner
条件キーは、一部の AWS のサービス が Amazon SNS トピックに発行するときに、それぞれ設定されます。サポートされている場合、値はサービスがデータを発行する の 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 アラームを使用して Amazon SNS トピックを呼び出すには、次のステップを使用します AWS アカウント。この例では、次の 2 つのアカウントを使用します。
-
アカウント A は CloudWatch アラームの作成に使用されます。
-
アカウント B は SNS トピックの作成に使用されます。
アカウント B で SNS トピックを作成する
Amazon SNS コンソール
にサインインします。 -
ナビゲーションペインで、[Topics (トピック)]、[Create topic (トピックの作成)] の順に選択してください。
-
トピックタイプの標準 を選択し、トピックの名前を作成します。
-
トピックの作成を選択し、トピックの ARN をコピーします。
-
ナビゲーションペインで、[Subscriptions] (サブスクリプション) を選択して、[Create subscription] (サブスクリプションの作成) を選択します。
-
トピック ARN セクションにトピックの ARN を追加し、プロトコルとして E メールを選択し、E メールアドレスを入力します。
-
サブスクリプションの作成を選択し、E メールを確認してサブスクリプションを確認します。
アカウント A で CloudWatch アラームを作成する
CloudWatch コンソールの https://console.aws.amazon.com/cloudwatch/
を開いてください。 -
ナビゲーションペインで、アラームを選択し、アラームの作成を選択します。
-
アラームをまだ作成していない場合は、今すぐ作成してください。それ以外の場合は、メトリクスを選択し、しきい値と比較パラメータの詳細を指定します。
-
「アクションの設定」の「通知」で「トピック ARN を使用して他のアカウントに通知する」を選択し、「アカウント B」からトピック ARN を入力します。
-
アラームの名前を作成し、アラームの作成を選択します。
アカウント B の SNS トピックのアクセスポリシーを更新する
Amazon SNS コンソール
にサインインします。 -
ナビゲーションペインでトピックを選択し、トピックを選択します。
-
編集を選択し、ポリシーに以下を追加します。
注記
以下のポリシーの例の値を独自の値に置き換えます。
{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:GetTopicAttributes", "SNS:SetTopicAttributes", "SNS:AddPermission", "SNS:RemovePermission", "SNS:DeleteTopic", "SNS:Subscribe", "SNS:ListSubscriptionsByTopic", "SNS:Publish" ], "Resource": "example-topic-arn-account-b", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:example-region:111122223333:alarm:" } } } ] }
アラームをテストする
アラームをテストするには、メトリクスデータポイントに基づいてアラームのしきい値を変更するか、アラームの状態を手動で変更します。アラームのしきい値またはアラーム状態を変更すると、E メール通知が送信されます。
ローカル Amazon SNS トピックを使用してメッセージを転送するための回避策
次の手順を使用して、CloudWatch アラームのクロスアカウント Amazon SNS 通知を有効にします。
-
CloudWatch アラーム (111122223333「」と同じアカウントに Amazon SNS トピックを作成します)。
-
Lambda 関数または Amazon EventBridge ルールをその Amazon SNS トピックにサブスクライブします。
-
Lambda 関数または EventBridge ルールは、ターゲットアカウント (444455556666「」の Amazon SNS トピックにメッセージを発行できます。
Amazon SNS トピックの発行を特定の VPC エンドポイントのみからに制限する
この場合、アカウント 444455556666 内のトピックは、ID vpce-1ab2c34d
の VPC エンドポイントのみからの発行を許可されます。
{ "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1ab2c34d" } } }] }