Amazon Simple Notification Service
開発者ガイド

Controlling User Access to Your AWS Account

Amazon Simple Notification Service は AWS Identity and Access Management(IAM)と統合されているため、AWS アカウントのユーザーが Amazon SNS リソースで実行できる Amazon SNS アクションを指定することができます。ポリシーで特定のトピックを指定できます。たとえば、Publish アクションを AWS のアカウントの特定のトピックで使用するアクセス許可を組織の特定のユーザーに付与する IAM ポリシーを作成するときに、変数を使用できます。詳細については、『 IAM の使用』ガイドの「ポリシー変数」を参照してください。

重要

IAM で Amazon SNS を使用する場合でも、その使用方法に変更はありません。Amazon SNSAmazon SNS アクションに変更はなく、ユーザーおよびアクセスコントロールに関連する新しい Amazon SNS アクションはありません。

Amazon SNS アクションおよびリソースに対応するポリシーの例については、Amazon SNS のポリシー例 を参照してください。

IAM ポリシーと Amazon SNS ポリシーの連携

IAM ポリシーを使用して、Amazon SNS アクションおよびトピックへのユーザーのアクセスを制限します。IAM ポリシーでは、他の AWS アカウントではなく、自分の AWS アカウント内のユーザーにのみに対してアクセスを制限できます。

特定のトピックに関連付ける Amazon SNS ポリシーにより、そのトピックを操作できるユーザー (トピックにメッセージを発行できるユーザー、サブスクライブできるユーザーなど) を制限できます。Amazon SNS ポリシーで、他の AWS アカウントにまたは自分の AWS アカウントのユーザーにトピックに対するアクセス許可を付与できます。

ユーザーに Amazon SNS トピックのアクセス許可を付与するには、IAM ポリシー、Amazon SNS ポリシー、またはその両方を使用できます。ほとんどの場合、どちらでも同じ結果が得られます。たとえば、以下の図は、同じ働きを持つ IAM ポリシーと Amazon SNS ポリシーを示しています。IAM ポリシーでは、AWS アカウントの topic_xyz というトピックに対して Amazon SNS の Subscribe アクションを許可します。IAM ポリシーは、ユーザー Bob と Susan にアタッチされています(つまり、Bob と Susan はポリシーに記述されているアクセス許可を持っています)。同様に、Amazon SNS ポリシーでも topic_xyz の Subscribe にアクセスする許可を Bob と Susan に付与します。


						等価な IAM ポリシーと Amazon SNS ポリシー

注記

先の例では、条件のない単純なポリシーを示しました。どちらのポリシーでも特定の条件を指定して、同じ結果を得ることができます。

AWS IAM ポリシーと Amazon SNS ポリシーには、Amazon SNS ポリシーシステムでは他の AWS アカウントにアクセス許可を付与できますが、IAM ポリシーではできないという違いが 1 つあります。

両方のシステムを同時に使用してどのようにアクセス許可を管理するかは、ニーズに応じて決めてください。以下の例では、2 つのポリシーシステムがどのように連携するかを示しています。

例 1

この例では、IAM ポリシーおよび Amazon SNS ポリシーの両方が Bob に適用されます。IAM ポリシーは、いずれの AWS アカウントのトピックに対しても Bob に Subscribe のアクセス許可を付与しますが、Amazon SNS ポリシーは特定のトピック(topic_xyz)Publish を使用するアクセス許可を Bob に付与します。以下の図に、そのコンセプトを示します。


							Bob の IAM ポリシーと Amazon SNS ポリシー

Bob が AWS アカウントの任意のトピックを受信登録するリクエストを送信した場合、そのアクションは IAM ポリシーで許可されます。Bob が topic_xyz にメッセージを発行するリクエストを送信すると、そのアクションは Amazon SNS ポリシーで許可されます。

例 2

この例は、例 1 で示した、Bob に 2 つのポリシーが適用されている状態に基づいています。Bob は、必要のない topic_xyz にメッセージを発行しているため、トピックに発行する機能を完全に削除するとします。最も簡単な方法は、すべてのトピックに対する Bob の Publish アクションを拒否するような IAM ポリシーを追加することです。この 3 番目のポリシーは、topic_xyz に発行するアクセス許可を Bob に与えた元の Amazon SNS ポリシーより優先されます。明示的な拒否は、常に許可よりも優先されるためです(ポリシー評価のロジックの詳細については、「評価論理」を参照)。以下の図に、そのコンセプトを示します。


							「拒否」ポリシーは Amazon SNS ポリシーより優先される

Amazon SNS アクションおよびリソースに対応するポリシーの例については、Amazon SNS のポリシー例 を参照してください。Amazon SNS ポリシーの記述の詳細については、「Amazon SNS の技術文書」を参照してください。

Amazon SNS ARN

Amazon SNS では、トピックはポリシーで指定できる唯一のリソースタイプです。トピックの Amazon リソースネーム(ARN)形式を以下に示します。

arn:aws:sns:region:account_ID:topic_name

ARN の詳細については、『IAM ユーザーガイド』の「ARN」を参照してください。

以下に示しているのは、us-east-1 リージョンにあり、AWS アカウント 123456789012 に属する、my_topic というトピックの ARN です。

arn:aws:sns:us-east-1:123456789012:my_topic

Amazon SNS によりサポートされる各リージョンに my_topic という名前のトピックがある場合、次の ARN を使用してトピックを指定できます。

arn:aws:sns:*:123456789012:my_topic

トピック名にはワイルドカード * および ? を使用できます。たとえば、以下では、bob_ をプレフィックスとして付けて Bob によって作成されたすべてのトピックを参照します。

arn:aws:sns:*:123456789012:bob_*

利便性を高めるため、トピックを作成すると、Amazon SNS は応答でトピックの ARN を返します。

Amazon SNS アクション

IAM ポリシーでは、Amazon SNS で提供されている任意のアクションを指定できます。ただし、ConfirmSubscription および Unsubscribe アクションでは認証を必要としません。つまり、ポリシーでこれらのアクションを指定しても、IAM はこれらのアクションへのユーザーのアクセスを制限しません。

ポリシーで指定する各アクションには、小文字の文字列 sns: をプレフィックスとして付ける必要があります。たとえば、すべての Amazon SNS アクションを指定するには、sns:* を使用します。アクションのリストについては、「Amazon Simple Notification Service API Reference」を参照してください。

Amazon SNS のキー

Amazon SNS は、以下の AWS 全体のポリシーキーに加えて、いくつかのサービス固有のキーを実装しています。

各 AWS サービスでサポートされるコンテキストキーと AWS 全体のポリシーキーのリストについては、IAM ユーザーガイド の「AWS サービスのアクション、リソース、条件キー」および「AWS グローバル条件コンテキストキー」を参照してください。

Amazon SNS では以下のサービス固有のキーを使用します。Subscribe リクエストへのアクセスを制限するポリシーで、これらのキーを使用します。

  • sns:Endpoint — Subscribe リクエストまたは以前に確認されたサブスクリプションからの URL、E メールアドレス、または ARN。文字列条件とともに使用 (「Amazon SNS のポリシー例」を参照) して特定のエンドポイント (*@yourcompany.com など) へのアクセスを制限します。

  • sns:Protocol — Subscribe リクエストまたは以前に確認されたサブスクリプションからの protocol 値。文字列条件とともに使用 (「Amazon SNS のポリシー例」を参照) して、特定の配信プロトコル (https など) への発行を制限します。

Amazon SNS のポリシー例

このセクションでは、Amazon SNS へのユーザーアクセスをコントロールするための簡単なポリシーをいくつか紹介します。

注記

将来的には、Amazon SNS に新しいアクションが追加される可能性があります。これらは、以下のポリシーのいずれかに論理的に含まれ、ポリシーに記載された目的に基づいている必要があります。

例 1: グループでトピックの作成と管理を許可する

この例では、CreateTopicListTopicsSetTopicAttributes、および DeleteTopic へのアクセスを許可するポリシーを作成します。

{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":["sns:CreateTopic","sns:ListTopics","sns:SetTopicAttributes","sns:DeleteTopic"], "Resource":"*" } ] }

例 2: IT グループが特定のトピックにメッセージを発行することを許可する

この例では、IT のグループを作成し、対象の特定のトピックで Publish へのアクセスを許可するポリシーを割り当てます。

{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":"sns:Publish", "Resource":"arn:aws:sns:*:123456789012:topic_xyz" } ] }

例 3: AWS アカウントのユーザーが、トピックを受信登録できるようにする

この例では、Subscribe および sns:Protocol ポリシーキーの文字列一致条件を使って sns:Endpoint アクションにアクセスを許可するポリシーを作成します。

{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":["sns:Subscribe"], "Resource":"*", "Condition":{ "StringLike": { "SNS:Endpoint":"*@yourcompany.com" }, "StringEquals":{ "sns:Protocol":"email" } } } ] }

例 4: パートナーが特定のトピックにメッセージを発行することを許可する

Amazon SNS ポリシーまたは IAM ポリシーを使用して、パートナーが特定のトピックに発行することを許可できます。パートナーに AWS アカウントがある場合は、Amazon SNS ポリシーを使用した方が簡単になる可能性があります。ただし、AWS のセキュリティ認証情報を所有するパートナー会社のユーザーは、トピックにメッセージを発行できます。この例では、特定のユーザー (またはアプリケーション) へのアクセスを制限するとします。そのためには、パートナーを自社内のユーザーのように扱い、Amazon SNS ポリシーの代わりに IAM ポリシーを使用する必要があります。

この例では、パートナー企業を表す WidgetCo というグループを作成し、パートナー企業でアクセス許可が必要な特定の人(またはアプリケーション)に対してユーザーを作成し、そのユーザーをグループに入れます。

次に、Publish グループに、WidgetPartnerTopic という名前の特定のトピックへのアクセスを許可するポリシーをアタッチします。

また、WidgetCo グループがトピックに対して他の操作を実行できないようにするため、WidgetPartnerTopic 以外のトピックで Publish 以外の Amazon SNS アクションへのアクセス許可を拒否するステートメントを追加します。これは、システム内の他の場所に、Amazon SNS への幅広いアクセスをユーザーに許可する広範なポリシーが存在する場合にのみ必要です。

{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":"sns:Publish", "Resource":"arn:aws:sns:*:123456789012:WidgetPartnerTopic" }, { "Effect":"Deny", "NotAction":"sns:Publish", "NotResource":"arn:aws:sns:*:123456789012:WidgetPartnerTopic" } ] }

一時的なセキュリティ認証情報の使用

IAM では、IAM ユーザーが独自のセキュリティ認証情報を使用して作成されるのに加えて、AWS サービスおよびリソースへのアクセスを許可するユーザーに一時的なセキュリティ認証情報を付与することもできます。AWS アカウントを持つユーザー (つまり、IAM ユーザー) を管理できます。AWS アカウントを持たないシステムのユーザー (つまり、統合ユーザー) を管理することもできます。さらに「ユーザー」を、AWS リソースにアクセスするために作成するアプリケーションにすることもできます。

Amazon SNS に対するリクエストを作成するときに、これらの一時的なセキュリティ認証情報を使用できます。API ライブラリによって、これらの認証情報を使用して必要な署名値が計算されて、リクエストが認証されます。期限の切れた認証情報を使用してリクエストを送信すると、Amazon SNS によってリクエストが拒否されます。

一時的なセキュリティ証明書の IAM サポートの詳細については、『IAM の使用』の「AWS リソースに一時的なアクセスを許可する」を参照してください。

例 一時的なセキュリティ認証情報を使用した Amazon SNS リクエストの認証

以下の例は、一時的なセキュリティ認証情報を取得して Amazon SNS リクエストを認証する方法を示しています。

http://sns.us-east-1.amazonaws.com/ ?Name=My-Topic &Action=CreateTopic &Signature=gfzIF53exFVdpSNb8AiwN3Lv%2FNYXh6S%2Br3yySK70oX4%3D &SignatureVersion=2 &SignatureMethod=HmacSHA256 &Timestamp=2010-03-31T12%3A00%3A00.000Z &SecurityToken=SecurityTokenValue &AWSAccessKeyId=Access Key ID provided by AWS Security Token Service