

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

# Amazon SNS でのアイデンティティベースのポリシーを使用する
<a name="sns-using-identity-based-policies"></a>

Amazon Simple Notification Service は AWS Identity and Access Management (IAM) と統合されているため、 のユーザーが Amazon SNS リソースで AWS アカウント 実行できる Amazon SNS アクションを指定できます。ポリシーで特定のトピックを指定できます。例えば、`Publish` アクションを AWS アカウントの特定のトピックで使用するアクセス権限を組織の特定のユーザーに付与する IAM ポリシーを作成するときに、変数を使用できます。詳細については、『*IAM の使用*』ガイドの「[ポリシー変数](https://docs.aws.amazon.com/IAM/latest/UserGuide/PolicyVariables.html)」を参照してください。

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

Amazon SNS アクションおよびリソースに対応するポリシーの例については、「[Amazon SNS のポリシーの例](#sns-example-policies)」を参照してください。

## IAM ポリシーと Amazon SNS ポリシーを一緒に使う
<a name="iam-and-sns-policies"></a>

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` にアクセスする許可をボブとスーザンに付与します。

![IAM ポリシーと Amazon SNS ポリシーを比較します。どちらのポリシーも、ボブとスーザンの 2 人のユーザーに同等のアクセス許可を付与しており、 AWS アカウントの特定の Amazon SNS トピックにサブスクライブできることを示しています。主な違いは、Amazon SNS ポリシーは異なる のユーザーに許可を付与できるのに対し AWS アカウント、IAM ポリシーでは許可を付与できないことです。](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/SNS_EquivalentPolicies.png)


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

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

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

**Example 1**  
この例では、IAM ポリシーおよび Amazon SNS ポリシーの両方がボブに適用されます。IAM ポリシーは、 のいずれかのトピック`Subscribe`に対する AWS アカウントのアクセス許可をユーザーに付与しますが、Amazon SNS ポリシーは、特定のトピック (topic\_xyz) `Publish` で使用するアクセス許可をユーザーに付与します。以下の図に、そのコンセプトを示します。  

![IAM ポリシーと Amazon SNS ポリシーの両方がユーザー Bob にどのように適用されるかを示し、IAM ポリシーは の任意のトピックへのサブスクライブを許可し AWS アカウント、Amazon SNS ポリシーは「topic_xyz」という名前の特定のトピックにメッセージを発行するアクセス許可を Bob に付与します。この図は、IAM ポリシーによって付与される一般的なアクセス許可と、Amazon SNS ポリシーによって付与される特定のトピックへの特定のアクセス許可の区別を強調しています。](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/SNS_UnionOfPolicies.png)

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

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

![すべてのトピックの「発行」アクションを拒否する IAM ポリシーを追加して、ユーザー (ボブ) に特定のトピック「Topic_xyz」への発行を許可する既存の Amazon SNS ポリシーを上書きすることを示す図。IAM 拒否ポリシーは Amazon SNS ポリシーよりも優先されるため、ボブによる「topic_xyz」を含むあらゆるトピックへの発行を効果的に防止できます。](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/SNS_DenyOverride.png)


Amazon SNS アクションおよびリソースに対応するポリシーの例については、「[Amazon SNS のポリシーの例](#sns-example-policies)」を参照してください。

## Amazon SNS リソース ARN 形式
<a name="sns-arn-format"></a>

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

```
arn:aws:sns:{{region}}:{{account_ID}}:{{topic_name}}
```

ARN の詳細については、『*IAM ユーザーガイド*』の「[ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html#Identifiers_ARNs)」を参照してください。

**Example**  
以下は、 AWS アカウント 123456789012 に属する us-east-2 リージョンの MyTopic という名前のトピックの ARN です。  

```
arn:aws:sns:us-east-2:123456789012:MyTopic
```

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

```
arn:aws:sns:*:123456789012:MyTopic
```

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

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

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

## Amazon SNS API アクション
<a name="sns-api-actions"></a>

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

ポリシーで指定する各アクションには、小文字の文字列 `sns:` をプレフィックスとして付ける必要があります。例えば、すべての Amazon SNS アクションを指定するには、`sns:*` を使用します。アクションのリストについては、「[Amazon Simple Notification Service API リファレンス](https://docs.aws.amazon.com/sns/latest/api/)」にアクセスしてください。

## Amazon SNS ポリシーキー
<a name="sns-policy-keys"></a>

Amazon SNS は、以下の AWS ワイドポリシーキーと、いくつかのサービス固有のキーを実装します。

各 でサポートされている条件キーのリストについては AWS のサービス、*IAM ユーザーガイド*の「 [のアクション、リソース、および条件キー AWS のサービス](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)」を参照してください。複数の で使用できる条件キーのリストについては AWS のサービス、*「IAM ユーザーガイド*」の[AWS 「グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

Amazon SNS では以下のサービス固有のキーを使用します。`Subscribe` リクエストへのアクセスを制限するポリシーで、これらのキーを使用します。
+ **sns:Endpoint - **`Subscribe` リクエストからの URL、E メールアドレス、または ARN、あるいは以前に確認されたサブスクリプション。文字列条件とともに使用 (「[Amazon SNS のポリシーの例](#sns-example-policies)」を参照) して特定のエンドポイント (\*@yourcompany.com など) へのアクセスを制限します。
+ **sns:Protocol -** `Subscribe` リクエストまたは以前に確認されたサブスクリプションからの `protocol` 値。文字列条件とともに使用 (「[Amazon SNS のポリシーの例](#sns-example-policies)」を参照) して、特定の配信プロトコル (https など) への発行を制限します。

## Amazon SNS のポリシーの例
<a name="sns-example-policies"></a>

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

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

**Example 1: グループでトピックの作成と管理を許可する**  
この例では、`CreateTopic`、`ListTopics`、`SetTopicAttributes`、および `DeleteTopic` へのアクセスを付与するポリシーを作成します。  

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": ["sns:CreateTopic", "sns:ListTopics", "sns:SetTopicAttributes", "sns:DeleteTopic"],
    "Resource": "*"
  }]
}
```

**Example 2: IT グループが特定のトピックにメッセージを発行することを許可する**  
この例では、IT のグループを作成し、対象の特定のトピックで `Publish` へのアクセスを付与するポリシーを割り当てます。  

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:*:123456789012:MyTopic"
  }]
}
```

**Example 3: ユーザーがトピックをサブスクライブ AWS アカウント できるようにする**  
この例では、`sns:Protocol` および `sns:Endpoint` ポリシーキーの文字列一致条件を使って `Subscribe` アクションにアクセスを付与するポリシーを作成します。  

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": ["sns:Subscribe"],
    "Resource": "*",
    "Condition": {
      "StringLike": {
        "sns:Endpoint": "*@example.com"
      },
      "StringEquals": {
        "sns:Protocol": "email"
      }
    }
  }]
}
```

**Example 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"
    }
  ]
}
```

## E メールエンドポイントの Amazon SNS ポリシー
<a name="sns-email-endpoints"></a>

Amazon SNS は、先頭と末尾の空白を削除し、すべての文字を小文字に変換し、特殊文字とエスケープシーケンスを正規化することで、エンドポイントアクセスポリシーの E メールアドレスを正規化します。そのため、サブスクリプションリクエストを正しく照合するには、ポリシー定義で小文字の E メールアドレスを使用する必要があります。

ポリシーの例:

```
{
    "Condition": {
        "StringEquals": {
            "sns:Endpoint": "user.name@example.com"
        }
    }
}
```

次の E メールアドレスは上記の条件に一致します。
+ `user.name@example.com`
+ `USER.NAME@EXAMPLE.COM`
+ `User.N\ame@Example.com`

## HTTP/HTTPS エンドポイントの Amazon SNS ポリシー
<a name="sns-http-https-endpoints"></a>

Amazon SNS は、ポート、パス、クエリパラメータ、フラグメントを正確に保持しながら、スキームとホスト名を小文字に変換することで、エンドポイントアクセスポリシーの HTTP/HTTPS エンドポイントを正規化します。そのため、サブスクリプションリクエストを正しく照合するには、ポリシー定義で小文字のスキームとホスト名を使用する必要があります。

```
{
    "Condition": {
        "StringEquals": {
            "sns:Endpoint": "https://example.com:443/path?A=B"
        }
    }
}
```

次の HTTP/HTTPS は上記の条件に一致します。
+ `HTTPS://EXAMPLE.COM:443/path?A=B`
+ `HTTPS://example.com:443/path?A=B`
+ `HTTPS://ExAmPlE.cOm:443/path?A=B`