メニュー
Amazon Simple Notification Service
開発者ガイド (API バージョン 2010-03-31)

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

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

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

Amazon SNS システムにトピックがあるとします。最も簡単なケースとして、特定のトピックアクション (パブリッシュなど) へのアクセスを 1 つ以上の AWS アカウントに許可するとします。

これは、 Amazon SNS API アクション AddPermission を使用することによって行うことができます。これには、トピック、AWS アカウント ID リスト、アクションリスト、ラベルが必要ですが、トピックのアクセスコントロールポリシー内に新規ステートメントが自動的に作成されます。この場合、 Amazon SNS により新規ポリシーステートメントが自動的に作成されます。手動でポリシーを記述する必要はありません。ラベルと共に RemovePermission を呼び出すことによって、後日ポリシーステートメントを削除することができます。

たとえば、トピック arn:aws:sns:us-east-1:444455556666:MyTopic を対象に AddPermission を呼び出す場合 (AWS アカウント ID1111-2222-3333、Publish アクション、ラベル give-1234-publish を使用)、Amazon SNS が以下のアクセスコントロールポリシーステートメントを作成し、挿入します。

{ "Version":"2012-10-17", "Id":"AWSAccountTopicAccess", "Statement" :[ { "Sid":"give-1234-publish", "Effect":"Allow", "Principal" :{ "AWS":"111122223333" }, "Action":["sns:Publish"], "Resource":"arn:aws:sns:us-east-1:444455556666:MyTopic" } ] }

一度このステートメントが追加されてしまえば、AWS アカウント 1111-2222-3333 のユーザーはトピックへのメッセージをパブリッシュすることができます。

HTTPS へのサブスクリプション制限

このユースケースでは、セキュリティのため HTTPS によってのみトピックに対するサブスクリプションリクエストを与えます。

Amazon SNS AddPermission アクションでは、トピックへのアクセスを許可できるだけです。プロトコル制限を指定するには、独自のポリシーを記述する必要があります。つまり、独自のポリシーを記述し、Policy アクションを使用してトピックの SetTopicAttributes 属性をその新しいポリシーに設定します。

以下の全ポリシーの用例は、AWS アカウント ID 1111-2222-3333 にトピックからの通知サブスクリプション能力を与えるものです。

{ "Version":"2012-10-17", "Id":"SomePolicyId", "Statement" :[ { "Sid":"Statement1", "Effect":"Allow", "Principal" :{ "AWS":"111122223333" }, "Action":["sns:Subscribe"], "Resource": "arn:aws:sns:us-east-1:444455556666:MyTopic", "Condition" :{ "StringEquals" :{ "sns:Protocol":"https" } } } ] }

Amazon SQS キューへのパブリッシュ

このユースケースでは、トピックから Amazon SQS キューへのメッセージをパブリッシュするものとします。 Amazon SNS のように、Amazon SQS も Amazon のアクセスコントロールポリシー言語を使用します。 Amazon SNS からのメッセージ送信許可するには、キューにおいてポリシーを設定するために Amazon SQS アクション SetQueueAttributes を使用することが必要となります。

Amazon SQS AddPermission アクションでは、条件付きポリシーステートメントを作成できません。これを作成するには、独自のポリシーを記述する必要があります。

以下の用例は、Amazon SQS ポリシー (キューへのアクセスコントロール) を示したもので、 Amazon SNS ポリシー (トピックへのアクセスコントロール) を示したものではありませんので、ご注意ください。アクションとは Amazon SQS アクションのことで、リソースとはキューの Amazon Resource Name (ARN) のことです。アクションと共にキューの属性を QueueArn 取得することにより、GetQueueAttributes キューの ARN を決定する事ができます。

{ "Version":"2012-10-17", "Id":"MyQueuePolicy", "Statement" :[ { "Sid":"Allow-SNS-SendMessage", "Effect":"Allow", "Principal" :"*", "Action":["sqs:SendMessage"], "Resource": "arn:aws:sqs:us-east-1:444455556666:MyQueue", "Condition" :{ "ArnEquals" :{ "aws:SourceArn":"arn:aws:sns:us-east-1:444455556666:MyTopic" } } } ] }

このポリシーには、aws:SourceArn キューへ送信されたメッセージのソースに基づいたキューへのアクセス制限のための条件が使用されます。組織の所有するトピックの 1 つから送信されたメッセージであった場合、 Amazon SNS に対し、キューからのメッセージ送信を許可するために、このタイプのポリシーを使用することができます。この場合、ARN は arn:aws:sns:us-east-1:444455556666:MyTopic であるトピックの 1 つを特定します。

前述のポリシーを例として、Amazon SQS ポリシーを記述したり、特定のキューに追加することができます。 Amazon SNS、およびその他の AWS 製品へのアクセスを許可しています。新規作成されたすべてのトピックに対し、 Amazon SNS からデフォルトポリシーが与えられます。デフォルトポリシーによって、その他のすべての AWS 製品に対し、トピックへのアクセスが与えられます。このデフォルトポリシーは、お客様所有の AWS リソースに代わり aws:SourceArn AWS 製品が、トピックのみへのアクセスするものであることを保証するための条件です。

AWS リソースに対するトピックへのパブリッシュ許可

この場合、他の AWS アカウントのリソース (Amazon S3 バケット、Amazon EC2 インスタンス、Amazon SQS キューなど) がお客様のトピックへのパブリッシュができるように、トピックのポリシーを設定します。この用例は、お客様が自身でポリシーの記述をするものと仮定され、お客様の新規ポリシーへの SetTopicAttributes トピックの属性を設定するためのアクション Policy として使用されます。

以下のステートメント例では、前述のポリシーのトピック所有者は 1111-2222-3333、また AWS リソース所有者は 4444-5555-6666 となっています。この例では、AWS アカウント ID4444-5555-6666 には、アカウントによって所有されている、いかなる AWS リソースからでも、マイトピックへのパブリッシュを行うことのできる能力が与えられています。

{ "Version":"2012-10-17", "Id":"MyAWSPolicy", "Statement" :[ { "Sid":"My-statement-id", "Effect":"Allow", "Principal" :"*", "Action":"sns:Publish", "Resource":"arn:aws:sns:us-east-1:111122223333:My-Topic", "Condition":{ "StringEquals":{ "AWS:SourceAccount":"444455556666" } } } ] }

Amazon S3 バケットに対するトピックへのパブリッシュ許可

この場合、他の AWS アカウントの Amazon S3 バケットがお客様のトピックへのパブリッシュができるよう、トピックのポリシーを設定します。Amazon S3 からの通知の発行の詳細については、「バケットイベントの通知の設定」を参照してください。

この用例は、お客様が自身でポリシーの記述をするものと仮定され、お客様の新規ポリシーへの SetTopicAttributes トピックの属性を設定するためのアクション Policy として使用されます。

以下のステートメント例では、ArnLike リクエストの (AWS:SourceARN) を作成するリソースの ARN が、Amazon S3 ARN であることを確認するための条件が使用されています。Amazon S3 バケットのセット、または特定のバケットにおいてもアクセス権限を制限するための同様の条件を使用する事ができます。この例では、トピック所有者は 1111-2222-3333、また Amazon S3 所有者は 4444-5555-6666 となっています。例によって明示されているように、4444-5555-6666 によって所有されている、いかなる Amazon S3 バケットに対してもマイトピックへのパブリッシュが許可されます。

{ "Version":"2012-10-17", "Id":"MyAWSPolicy", "Statement" :[ { "Sid":"My-statement-id", "Effect":"Allow", "Principal" :"*", "Action":"sns:Publish", "Resource":"arn:aws:sns:us-east-1:111122223333:My-Topic", "Condition":{ "StringEquals":{ "AWS:SourceAccount":"444455556666" } , "ArnLike": {"AWS:SourceArn": "arn:aws:s3:*:*:*" } } } ] }