翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS でのアイデンティティベースのポリシーを使用する
Amazon Simple Notification Service は AWS Identity and Access Management (IAM) と統合されているため、 のユーザーが Amazon SNS リソースで AWS アカウント 実行できる Amazon SNS アクションを指定できます。ポリシーで特定のトピックを指定できます。例えば、Publish
アクションを AWS アカウントの特定のトピックで使用するアクセス権限を組織の特定のユーザーに付与する IAM ポリシーを作成するときに、変数を使用できます。詳細については、『IAM の使用』ガイドの「ポリシー変数」を参照してください。
重要
IAM で Amazon SNS を使用しても、Amazon SNS の使用方法は変わりません。Amazon 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 ポリシーは、「」の「topic_xyz」というトピックの Amazon SNS Subscribe
アクションを許可します。IAM ポリシーは Bob と Susan のユーザーにアタッチされます (つまり、Bob と Susan はポリシーに記載されているアクセス許可を持っていることを意味します)。 AWS アカウント 同様に、Amazon SNS ポリシーは topic_xyz の Subscribe
にアクセスする許可をボブとスーザンに付与します。

注記
先の例では、条件のない単純なポリシーを示しました。どちらのポリシーでも特定の条件を指定して、同じ結果を得ることができます。
AWS IAM ポリシーと Amazon SNS ポリシーには 1 つの違いがあります。Amazon SNS ポリシーシステムでは他のポリシーにアクセス許可を付与できますが AWS アカウント、IAM ポリシーでは付与されません。
両方のシステムを同時に使用してどのようにアクセス許可を管理するかは、ニーズに応じて決めてください。以下の例では、2 つのポリシーシステムがどのように連携するかを示しています。
例 1
この例では、IAM ポリシーおよび Amazon SNS ポリシーの両方がボブに適用されます。IAM ポリシーは、 のいずれかのトピックSubscribe
に対する AWS アカウントのアクセス許可を付与しますが、Amazon SNS ポリシーは、特定のトピック (topic_xyz) Publish
で使用するアクセス許可を付与します。以下の図に、そのコンセプトを示します。

Bob が AWS アカウントの任意のトピックにサブスクライブするリクエストを送信する場合、IAM ポリシーは アクションを許可します。ボブが topic_xyz にメッセージを発行するリクエストを送信すると、そのアクションは Amazon SNS ポリシーで許可されます。
例 2
この例は、例 1 で示した、ボブに 2 つのポリシーが適用されている状態に基づいています。ボブは、必要のない topic_xyz にメッセージを発行しているため、トピックに発行する機能を完全に削除するとします。最も簡単な方法は、すべてのトピックに対するボブの Publish
アクションを拒否するような IAM ポリシーを追加することです。この 3 番目のポリシーは、topic_xyz に発行するアクセス権限を最初にボブに与えた 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-2 リージョンのMyTopic」というトピックの ARN で、 AWS アカウント 123456789012「」に属するものです。
arn:aws:sns:us-east-2:123456789012:MyTopic
Amazon SNS によりサポートされる各リージョンに MyTopic という名前のトピックがある場合、次の ARN を使用してトピックを指定できます。
arn:aws:sns:*:123456789012:MyTopic
トピック名にはワイルドカード * および ? を使用できます。例えば、以下では、ボブが bob_
をプレフィックスとして付けて作成したすべてのトピックを参照します。
arn:aws:sns:*:123456789012:bob_*
利便性を高めるため、トピックを作成すると、Amazon SNS は応答でトピックの ARN を返します。
Amazon SNS API アクション
IAM ポリシーでは、Amazon SNS で提供されている任意のアクションを指定できます。ただし、ConfirmSubscription
および Unsubscribe
アクションでは認証を必要としません。つまり、ポリシーでこれらのアクションを指定しても、IAM はこれらのアクションへのユーザーのアクセスを制限しません。
ポリシーで指定する各アクションには、小文字の文字列 sns:
をプレフィックスとして付ける必要があります。例えば、すべての Amazon SNS アクションを指定するには、sns:*
を使用します。アクションのリストについては、「Amazon Simple Notification Service API リファレンス」にアクセスしてください。
Amazon SNS ポリシーキー
Amazon SNS は、以下の AWS ワイドポリシーキーと、一部のサービス固有のキーを実装します。
各 でサポートされている条件キーのリストについては AWS のサービス、IAM ユーザーガイドの「 のアクション、リソース、および条件キー AWS のサービス」を参照してください。複数の で使用できる条件キーのリストについては AWS のサービス、「IAM ユーザーガイド」の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: グループでトピックの作成と管理を許可する
この例では、CreateTopic
、ListTopics
、SetTopicAttributes
、および DeleteTopic
へのアクセスを付与するポリシーを作成します。
{ "Statement": [{ "Effect": "Allow", "Action": ["sns:CreateTopic", "sns:ListTopics", "sns:SetTopicAttributes", "sns:DeleteTopic"], "Resource": "*" }] }
例 2: IT グループが特定のトピックにメッセージを発行することを許可する
この例では、IT のグループを作成し、対象の特定のトピックで Publish
へのアクセスを付与するポリシーを割り当てます。
{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:*:123456789012:MyTopic" }] }
例 3: トピックをサブスクライブする AWS アカウント 機能をユーザーに付与する
この例では、sns:Protocol
および sns:Endpoint
ポリシーキーの文字列一致条件を使って Subscribe
アクションにアクセスを付与するポリシーを作成します。
{ "Statement": [{ "Effect": "Allow", "Action": ["sns:Subscribe"], "Resource": "*", "Condition": { "StringLike": { "sns:Endpoint": "*@example.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 への幅広いアクセスをユーザーに付与する広範なポリシーが存在する場合にのみ必要です。
{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic" }, { "Effect": "Deny", "NotAction": "sns:Publish", "NotResource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic" } ] }