Amazon SNS でのアイデンティティベースのポリシーを使用する - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SNS でのアイデンティティベースのポリシーを使用する

お客様の AWS アカウント のユーザーが Amazon SNS リソースで実行できる Amazon SNS アクションを指定できるよう、Amazon Simple Notification Service は AWS Identity and Access Management (IAM) と統合します。ポリシーで特定のトピックを指定できます。例えば、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 ポリシーでは、AWS アカウントの topic_xyz というトピックに対して Amazon SNS Subscribe アクションを許可します。IAM ポリシーは、ユーザーのボブとスーザンに添付されています (つまり、ボブとスーザンはポリシーに記述されているアクセス権限を持っています)。同様に、Amazon SNS ポリシーは topic_xyz の Subscribe にアクセスする許可をボブとスーザンに付与します。


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

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

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

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

例 1

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


            ボブの IAM ポリシーと Amazon SNS ポリシー

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

例 2

この例は、例 1 で示した、ボブに 2 つのポリシーが適用されている状態に基づいています。ボブは、必要のない topic_xyz にメッセージを発行しているため、トピックに発行する機能を完全に削除するとします。最も簡単な方法は、すべてのトピックに対するボブの Publish アクションを拒否するような IAM ポリシーを追加することです。この 3 番目のポリシーは、topic_xyz に発行するアクセス権限を最初にボブに与えた 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」を参照してください。

以下は、123456789012 に属する米国東部 2 リージョン MyTopic の という名前のトピックの ARN AWS アカウント です。

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: グループでトピックの作成と管理を許可する

この例では、CreateTopicListTopicsSetTopicAttributes、および 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 グループがトピックに対して他の操作を実行できないようにしたいため、 以外のトピックPublishに対する 以外の Amazon SNS アクションへのアクセス許可を拒否するステートメントを追加します WidgetPartnerTopic。これは、システム内の他の場所に、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" } ] }