

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

# Amazon SNS セキュリティ
<a name="security"></a>

責任 AWS [共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)、 でのデータ保護に適用されます。このモデルで説明されているように、 AWS はすべての を実行するグローバルインフラストラクチャを保護する責任があります AWS クラウド。ユーザーは、このインフラストラクチャでホストされるコンテンツに対する管理を維持する責任があります。このコンテンツには、使用する AWS サービスのセキュリティ設定および管理タスクが含まれます。データプライバシーの詳細については、[データプライバシーに関するよくある質問](https://aws.amazon.com/compliance/data-privacy-faq)を参照してください。欧州でのデータ保護の詳細については、*AWS セキュリティブログ*に投稿された「[AWS 責任共有モデルおよび GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」のブログ記事を参照してください。

データ保護の目的で、 ( AWS Identity and Access Management IAM) を使用して AWS アカウント 認証情報を保護し、個々のユーザーアカウントを設定することをお勧めします。この方法により、それぞれのジョブを遂行するために必要なアクセス許可のみを各ユーザーに付与できます。また、次の方法でデータを保護することをお勧めします。
+ 各アカウントで多要素認証 (MFA) を使用します。
+ SSL/TLS を使用して AWS リソースと通信します。TLS 1.2 以降が推奨されます。
+ で API とユーザーアクティビティのログ記録を設定します AWS CloudTrail。
+  AWS 暗号化ソリューションと、 サービス内のすべての AWS デフォルトのセキュリティコントロールを使用します。
+ Amazon Macie などのアドバンストマネージドセキュリティサービスを使用します。これは、Amazon S3 に保存されている個人データの検出と保護を支援します。
+ コマンドラインインターフェイスまたは API AWS を介して にアクセスするときに FIPS 140-2 検証済みの暗号化モジュールが必要な場合は、FIPS エンドポイントを使用します。利用可能な FIPS エンドポイントの詳細については、「[連邦情報処理規格 (FIPS) 140-2](https://aws.amazon.com/compliance/fips/)」を参照してください。
+ メッセージデータ保護
  + メッセージデータ保護は Amazon SNS の新しい主要機能です
  + MDP を使用してメッセージをスキャンして機密情報または重要情報がないか調べる
  + トピック内を流れるすべてのコンテンツにメッセージ監査を提供する
  + トピックに公開されたメッセージおよびトピックによって配信されるメッセージへのコンテンツアクセス制御を提供する

**重要**  
顧客の E メールアドレスなどの機密情報やセンシティブ情報は、タグや 名前 フィールドなどの自由形式のフィールドに配置しないことを強くお勧めします。これは、コンソール、API、 AWS CLIまたは AWS SDK を使用して Amazon SNS または他の Amazon Web Services を使用する場合も同様です。 SDKs タグまたは名前に使用する自由記入欄に入力したデータは、課金や診断ログに使用される場合があります。外部サーバーに URL を提供する場合、そのサーバーへのリクエストを検証できるように、認証情報を URL に含めないことを強くお勧めします。

# Amazon SNS データ暗号化
<a name="sns-data-encryption"></a>

データ保護には、転送時 (Amazon SNS との間でデータを送受信するとき) のデータを保護するものと、保管時 (Amazon SNS データセンター内のディスクに格納されているとき) のデータを保護するものがあります。Secure Sockets Layer (SSL)またはクライアント側の暗号化を使用して、転送時のデータを保護できます。デフォルトでは、Amazon SNS は、ディスク暗号化を使用してメッセージとファイルを保存します。保管中のデータを保護するには、Amazon SNS にメッセージの暗号化をリクエストしてから、メッセージをデータセンターの暗号化されたファイルシステムに保存します。Amazon SNS では、SSE を使用してデータ暗号化を最適化することをお勧めします。

# サーバー側の暗号化を使用した Amazon SNS データの保護
<a name="sns-server-side-encryption"></a>

サーバー側の暗号化 (SSE) では、 AWS Key Management Service () で管理されるキーを使用して Amazon SNS トピック内のメッセージの内容を保護することで、暗号化されたトピックに機密データを保存できますAWS KMS。

Amazon SNS が受信したメッセージはすぐに、SSE によって暗号化されます。メッセージは暗号化された形式で保存され、送信された場合のみ解読されます。
+  AWS マネジメントコンソール または ( `[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)`および `[SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)` API アクションを使用して `KmsMasterKeyId` 属性を設定 AWS SDK for Java ) を使用して SSE を管理する方法については、「」を参照してください[サーバー側の暗号化を使用した Amazon SNS トピック暗号化のセットアップ](sns-enable-encryption-for-topic.md)。
+ ( `[AWS::SNS::Topic](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)`リソースを使用して `KmsMasterKeyId`プロパティを設定 CloudFormation して) を使用して暗号化されたトピックを作成する方法については、 *AWS CloudFormation ユーザーガイド*を参照してください。

**重要**  
SSE が有効なトピックへのリクエストでは必ず、HTTPS と[署名バージョン 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) を使用する必要があります。  
暗号化されたトピックとの他のサービスとの互換性については、サービスのドキュメントを参照してください。  
Amazon SNS は、対称暗号化 KMS キーのみをサポートします。他のタイプの KMS キーを使用してサービスリソースを暗号化することはできません。KMS キーが対称暗号化キーかどうかを判別するには、「[非対称 KMS キーを識別する](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)」を参照してください。

AWS KMS は、安全で可用性の高いハードウェアとソフトウェアを組み合わせて、クラウド向けにスケーリングされたキー管理システムを提供します。で Amazon SNS を使用すると AWS KMS、メッセージデータを暗号化する[データキー](#sse-key-terms)も暗号化され、保護するデータとともに保存されます。

 AWS KMSを使用する利点は次のとおりです。
+ お客様自身で [AWS KMS key](#sse-key-terms) を作成および管理できます。
+ Amazon SNS には、アカウントとリージョンごとに一意の AWSマネージド KMS キーを使用することもできます。
+  AWS KMS セキュリティ標準は、暗号化関連のコンプライアンス要件を満たすのに役立ちます。

詳細については、「 *AWS Key Management Service デベロッパーガイド*」の[「What is AWS Key Management Service?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)」を参照してください。

## 暗号化スコープ
<a name="what-does-sse-encrypt"></a>

SSE では、Amazon SNS トピック内のメッセージの本文が暗号化されます。

SSEでは、以下は暗号化されません。
+ トピックのメタデータ (トピック名と属性)
+ メッセージのメタデータ (件名、メッセージ ID、タイムスタンプ、属性)
+ データ保護ポリシー 
+ トピックごとのメトリクス

**注記**  
メッセージが暗号化されるのは、トピックの暗号化が有効になった後に送信される場合のみです。Amazon SNS は、バックログされたメッセージを暗号化しません。
トピックの暗号化が無効になっても、暗号化されたメッセージは暗号化された状態で維持されます。

## 重要な用語
<a name="sse-key-terms"></a>

以下の重要なキーは、SSEの機能を理解するうえで役立ちます。詳細については、「*[Amazon Simple Notification Service API リファレンス](https://docs.aws.amazon.com/sns/latest/api/)*」を参照してください。

**データキー**  
データ暗号化キー (DEK) は、Amazon SNS メッセージの内容を暗号化します。  
詳細については、『*AWS Key Management Service デベロッパーガイド*』の「[データキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys)」と、『*AWS Encryption SDK デベロッパーガイド*」の「[エンベロープ暗号化](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/how-it-works.html#envelope-encryption)」を参照してください。

**AWS KMS key ID**  
 AWS KMSアカウントまたは別のアカウントの またはカスタムのエイリアス、エイリアス ARN、キー ID AWS KMS key、またはキー ARN。Amazon SNS AWS KMS で AWS 管理される のエイリアスは常に ですが`alias/aws/sns`、カスタムのエイリアスは など AWS KMS です`alias/MyAlias`。これらの AWS KMS キーを使用して、Amazon SNS トピック内のメッセージを保護することができます。  
以下に留意してください。  
+  AWS マネジメントコンソール を使用してトピックの Amazon SNS の AWS マネージド KMS を初めて指定すると、 は Amazon SNS の AWS マネージド KMS AWS KMS を作成します。
+ または、SSE が有効になっているトピックで `Publish`アクションを初めて使用すると、 は Amazon SNS の AWS マネージド KMS AWS KMS を作成します。
 AWS KMS コンソールの **AWS KMS keys**セクション AWS KMS または `[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)` AWS KMS アクションを使用して、キーの作成、 AWS KMS キーの使用方法を制御するポリシーの定義、 AWS KMS 使用状況の監査を行うことができます。詳細については、「[AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)」および「*AWS Key Management Service デベロッパーガイド*」の「[キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)」を参照してください。 AWS KMS 識別子のその他の例については、 *AWS Key Management Service API リファレンス*の[KeyId](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters)」を参照してください。 AWS KMS 識別子の検索の詳細については、「 *AWS Key Management Service デベロッパーガイド*[」の「キー ID と ARN](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html#find-cmk-id-arn) の検索」を参照してください。  
の使用には追加料金がかかります AWS KMS。詳細については、「[AWS KMS コストの見積もり](sns-key-management.md#sse-estimate-kms-usage-costs)」と「[AWS Key Management Service 料金表](https://aws.amazon.com/kms/pricing)」を参照してください。

# Amazon SNS 暗号化キーとコストの管理
<a name="sns-key-management"></a>

次のセクションでは、 AWS Key Management Service (AWS KMS) で管理されるキーの操作方法について説明します。

**注記**  
Amazon SNS は、対称暗号化 KMS キーのみをサポートします。他のタイプの KMS キーを使用してサービスリソースを暗号化することはできません。KMS キーが対称暗号化キーかどうかを判別するには、「[非対称 KMS キーを識別する](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)」を参照してください。

## AWS KMS コストの見積もり
<a name="sse-estimate-kms-usage-costs"></a>

コストを予測し、 AWS 請求をよりよく理解するために、Amazon SNS が を使用する頻度を知りたい場合があります AWS KMS key。

**注記**  
コストは下の計算式でかなり正確に予測できますが、Amazon SNS の分散性により、実際のコストの方が高くなることがあります。

API リクエスト (`R`) *トピックごと*の数を計算する場合は、次の式を使用します。

```
R = B / D * (2 * P)
```

`B` は請求期間(秒)です。

`D` は、データキー再利用期間 (秒単位で、 Amazon SNS では、最大 5 分間データキーを再利用します) を表します。

`P` は、Amazon SNS トピックに送信する[プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Principal)発行数です。

以下は計算の例です。正確な料金については、「[AWS Key Management Service 料金表](https://aws.amazon.com/kms/pricing/)」を参照してください。

### 例 1: 1 つのパブリッシャーと 1 つのトピックの AWS KMS API コールの数を計算する
<a name="example-1-topic-1-publisher"></a>

この例では、以下を想定しています。
+ 請求期間は1月1日から31日(2,678,400秒)です。
+ データキー再利用期間は 5 分 (300 秒) です。
+ 1 トピックあります。
+ 公開中のプリンシパルが 1 つあります。

```
2,678,400 / 300 * (2 * 1) = 17,856
```

### 例 2: 複数のパブリッシャーと 2 つのトピックの AWS KMS API コールの数を計算する
<a name="example-2-topics-multiple-publishers"></a>

この例では、以下を想定しています。
+ 請求期間は2月1日から28日(2,419,200秒) です。
+ データキー再利用期間は 5 分 (300 秒) です。
+ 2 トピックあります。
+ 最初のトピックには、公開中のプリンシパルが 3 つあります。
+ 2 つめのトピックには、公開中のプリンシパルが 5 つあります。

```
(2,419,200 / 300 * (2 * 3)) + (2,419,200 / 300 * (2 * 5)) = 129,024
```

## AWS KMS アクセス許可の設定
<a name="sns-what-permissions-for-sse"></a>

SSE を使用する前に、トピックの暗号化とメッセージの暗号化と復号を許可するように AWS KMS key ポリシーを設定する必要があります。 AWS KMS アクセス許可の詳細については、『*AWS Key Management Service デベロッパーガイド*』の「[AWS KMS API アクセス許可: アクションとリソースのリファレンス](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html)」を参照してください。サーバー側の暗号化を使用して Amazon SNS トピックを設定する方法の詳細については、「[追加情報](sns-enable-encryption-for-topic.md#set-up-topic-with-sse)」を参照してください。

**注記**  
IAM ポリシーを使用して対称暗号化 KMS キーのアクセス許可を管理することもできます。詳細については、「 [での IAM ポリシーの使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)」を参照してください。  
Amazon SNS との間の送受信のグローバルなアクセス許可を設定できますが、 AWS KMS では IAM ポリシーの `Resource` セクションにおいて、特定リージョンで KMS の完全 ARN を明示的に指定することが求められます。

また、 のキーポリシーで必要なアクセス許可が AWS KMS key 付与されていることを確認する必要があります。そのためには、Amazon SNS で暗号化されたメッセージを作成するプリンシパルと消費するプリンシパルをユーザーとして KMS キーポリシーで指定します。

または、Amazon SNS で暗号化されたメッセージを受信するために発行およびサブスクライブするプリンシパルに割り当てられた IAM ポリシーで、必要な AWS KMS アクションと KMS ARN を指定することもできます。詳細については、*AWS Key Management Service デベロッパーガイド*の「[AWS KMSへのアクセス管理](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#managing-access)」を参照してください。

Amazon SNS トピックのカスタマー管理キーを選択し、エイリアスを使用して IAM ポリシーまたは KMS キーポリシーと条件キー `kms:ResourceAliases` により KMS キーへのアクセスを制御している場合は、選択したカスタマー管理キーにもエイリアスが関連付けられていることを確認してください。エイリアスを使用して KMS キーへのアクセスを制御する方法の詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[エイリアスを使用して KMS キーへのアクセスを制御する](https://docs.aws.amazon.com/kms/latest/developerguide/alias-authorization.html)」を参照してください。

### SSE を使用したトピックへのメッセージの送信をユーザーに許可する
<a name="send-to-encrypted-topic"></a>

パブリッシャーには、 AWS KMS keyに対する `kms:GenerateDataKey*` および `kms:Decrypt` アクセス許可が必要です。

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "kms:GenerateDataKey*",
      "kms:Decrypt"
    ],
    "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }, {
    "Effect": "Allow",
    "Action": [
      "sns:Publish"
    ],
    "Resource": "arn:aws:sns:*:123456789012:MyTopic"
  }]
}
```

### AWS サービスからのイベントソースと暗号化されたトピック間の互換性を有効にする
<a name="compatibility-with-aws-services"></a>

いくつかの AWS サービスはAmazon SNSトピックにイベントを発行します。これらのイベントソースで暗号化されたトピックを操作できるようにするには、以下のステップを実行します。

1. カスタマーマネージドキーを使用します。詳細については、*AWS Key Management Service デベロッパーガイド*の[キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)を参照してください。

1.  AWS サービスに `kms:GenerateDataKey*`および アクセス`kms:Decrypt`許可を付与するには、KMS ポリシーに次のステートメントを追加します。

   ```
   {
     "Statement": [{
       "Effect": "Allow",
       "Principal": {
         "Service": "service.amazonaws.com"
       },
       "Action": [
         "kms:GenerateDataKey*",
         "kms:Decrypt"
       ],
       "Resource": "*"
     }]
   }
   ```    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-key-management.html)
**注記**  
一部の Amazon SNS イベントソースでは、 AWS KMS key ポリシーで (サービスプリンシパルではなく) IAM ロールを指定する必要があります。  
[Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ASGettingNotifications.html)
[Amazon Elastic Transcoder](https://docs.aws.amazon.com/elastictranscoder/latest/developerguide/notifications.html)
[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals.html#approvals-configuration-options)
[AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/notifications-for-AWS-Config.html)
[AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.sns.html)
[AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sns-rule.html)
[EC2 イメージビルダー](https://docs.aws.amazon.com/imagebuilder/latest/userguide/ibhow-integrations.html#integ-sns-encrypted)

1. KMS リソースポリシーに `aws:SourceAccount` キーと `aws:SourceArn` 条件キーを追加して、[混乱した代理](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)攻撃から KMS キーをさらに保護します。それぞれの場合の正確な詳細については、サービス固有のドキュメントリスト (上記) を参照してください。
**重要**  
 AWS KMS ポリシー`aws:SourceOrgID`への `aws:SourceAccount`、`aws:SourceArn`、 の追加は、EventBridge-to-encryptedトピックではサポートされていません。

   ```
   {
     "Effect": "Allow",
     "Principal": {
       "Service": "service.amazonaws.com"
     },
     "Action": [
       "kms:GenerateDataKey*",
       "kms:Decrypt"
     ],
     "Resource": "*",
     "Condition": {
       "StringEquals": {
         "aws:SourceAccount": "customer-account-id"
       },
       "ArnLike": {
         "aws:SourceArn": "arn:aws:service:region:customer-account-id:resource-type:customer-resource-id"
       }
     }
   }
   ```

1. KMS を使用して、[トピックの SSE を有効化](sns-enable-encryption-for-topic.md)します。

1. 暗号化されたトピックの ARN をイベントソースに追加します。

## AWS KMS エラー
<a name="sse-troubleshooting-errors"></a>

Amazon SNS と を使用すると AWS KMS、エラーが発生する可能性があります。次のリストは、エラーおよび考えられるトラブルシューティング策を示しています。

**KMSAccessDeniedException**  
暗号化テキストは、存在しないキーまたはアクセス権限のないキーを参照しています。  
HTTP ステータスコード: 400

**KMSDisabledException**  
指定された KMS が有効ではないため、リクエストが拒否されました。  
HTTP ステータスコード: 400

**KMSInvalidStateException**  
指定されたリソースの状態がこのリクエストに対して有効ではないため、リクエストが拒否されました。詳細については、「*AWS Key Management Service 開発者ガイド*」の「[AWS KMS keysのキーステータス](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)」を参照してください。  
HTTP ステータスコード: 400

**KMSNotFoundException**  
指定されたエンティティまたはリソースが見つからないため、リクエストが拒否されました。  
HTTP ステータスコード: 400

**KMSOptInRequired**  
 AWS アクセスキー ID には、サービスのサブスクリプションが必要です。  
HTTP ステータスコード: 403

**KMSThrottlingException**  
リクエストのスロットリングにより、リクエストが拒否されました。スロットリングの詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[クォータ](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second)」を参照してください。  
HTTP ステータスコード: 400

# サーバー側の暗号化を使用した Amazon SNS トピック暗号化のセットアップ
<a name="sns-enable-encryption-for-topic"></a>

Amazon SNS は、サーバー側の暗号化 (SSE) をサポートし、 AWS Key Management Service (AWS KMS) を使用してメッセージの内容を保護します。Amazon SNS コンソールまたは CDK を使用して SSE を有効にするには、次の手順に従います。

## オプション 1: を使用して暗号化を有効にする AWS マネジメントコンソール
<a name="enable-encryption-console"></a>

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

1. **[トピック]** ページに移動し、**[トピック]** を選択して、**[編集]** を選択します。

1. [**暗号化**] セクションを展開し、以下の操作を実行します。
   + 暗号化を **[有効]** に切り替えます。
   + **[AWS マネージド SNS キー**] (alias/aws/sns) を暗号化キーとして選択します。これはデフォルトで選択されています。

1. **[Save changes]** (変更の保存) をクリックします。

**注記**  
が存在しない場合 AWS マネージドキー 、 は自動的に作成されます。
キーが表示されない場合、またはアクセス許可が不十分な場合は、管理者に `kms:ListAliases` と `kms:DescribeKey` のアクセス許可を依頼してください。

## オプション 2: を使用して暗号化を有効にする AWS CDK
<a name="enable-encryption-cdk"></a>

CDK アプリケーションで AWS マネージドSNS キーを使用するには、次のスニペットを追加します。

```
import software.amazon.awscdk.services.sns.*;
import software.amazon.awscdk.services.kms.*;
import software.amazon.awscdk.core.*;

public class SnsEncryptionExample extends Stack {
    public SnsEncryptionExample(final Construct scope, final String id) {
        super(scope, id);

        // Define the managed SNS key
        IKey snsKey = Alias.fromAliasName(this, "helloKey", "alias/aws/sns");

        // Create the SNS Topic with encryption enabled
        Topic.Builder.create(this, "MyEncryptedTopic")
            .masterKey(snsKey)
            .build();
    }
}
```

## 追加情報
<a name="set-up-topic-with-sse"></a>
+ **カスタム KMS キー** – 必要に応じてカスタムキーを指定できます。Amazon SNS コンソールで、リストからカスタム KMS キーを選択するか、ARN を入力します。
+ **カスタム KMS キーのアクセス許可** – カスタム KMS キーを使用する場合は、Amazon SNS がメッセージを暗号化および復号化できるように、キーポリシーに以下を含めます。

```
{ 
    "Effect": "Allow", 
    "Principal": { 
        "Service": "sns.amazonaws.com" 
     },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition": {
        "ArnLike": { 
            "aws:SourceArn": "arn:aws:service:region:customer-account-id:resource-type/customer-resource-id" 
        },
        "StringEquals": { 
            "kms:EncryptionContext:aws:sns:topicArn": "arn:aws:sns:your_region:customer-account-id:your_sns_topic_name" 
        }
    }
}
```

## コンシューマーへの影響
<a name="enable-encryption-impact-on-consumers"></a>

SSE を有効にしても、サブスクライバーがメッセージを使用する方法は変わりません。 は暗号化と復号を透過的に AWS 管理します。メッセージは保管中も暗号化されたままになり、サブスクライバーに配信する前に自動的に復号されます。セキュリティを最適化するために、 AWS では、すべてのエンドポイントで HTTPS を有効にして、メッセージを確実かつ安全に送信することを推奨しています。

# 暗号化された Amazon SQS キューサブスクリプションによる Amazon SNS トピック暗号化の設定
<a name="sns-enable-encryption-for-topic-sqs-queue-subscriptions"></a>

トピックのサーバー側の暗号化 (SSE) を有効にしてトピックのデータを保護できます。暗号化された Amazon SQS キューにメッセージを送信することを Amazon SNS に許可するには、Amazon SQS キューに関連付けられたカスタマーマネージドキーのポリシーステートメントにより、 AWS KMS API アクション (`GenerateDataKey` と `Decrypt`) へのアクセス権を Amazon SNS サービスプリンシパルに付与する必要があります。SSE の使用の詳細については、「[サーバー側の暗号化を使用した Amazon SNS データの保護](sns-server-side-encryption.md)」を参照してください。

このトピックでは、 AWS マネジメントコンソールを使用して、暗号化された Amazon SQS キューサブスクリプションを持つ Amazon SNS トピックの SSE を有効にする方法について説明します。

## ステップ 1: カスタム KMS キーを作成する
<a name="create-custom-cmk"></a>

1. 少なくとも `AWSKeyManagementServicePowerUser` ポリシーを持つユーザーで [AWS KMS コンソール](https://console.aws.amazon.com/kms/)にサインインします。

1. [**キーの作成**] を選択します。

1. 対称暗号化 KMS キーを作成するには、**[Key type]**] (キーのタイプ) で **[Symmetric]** (対称) を選択します。

    AWS KMS コンソールで非対称 KMS キーを作成する方法については、「[非対称 KMS キーを作成する (コンソール)](https://docs.aws.amazon.com/kms/latest/developerguide/asymm-create-key.html#create-asymmetric-keys-console)」を参照してください。

1. **[Key usage]** (キーの使用) では、**[Encrypt and decrypt]** (暗号化および復号) オプションがすでに選択されています。

   MAC コードを生成して検証する KMS キーの作成方法については、「[HMAC KMS キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/hmac-create-key.html)」を参照してください。

   **[詳細オプション]** については、「[特定用途のキー](https://docs.aws.amazon.com/kms/latest/developerguide/key-types.html)」を参照してください。

1. [**次へ**] を選択します。

1. KMS キーのエイリアスを入力します。エイリアス名の先頭を **aws/** にすることはできません。**aws/** プレフィックスは、アカウント AWS マネージドキー で を表すために Amazon Web Services によって予約されています。
**注記**  
エイリアスを追加、削除、更新すると、KMS キーに対するアクセス許可が許可または拒否される可能性があります。詳細については、「[AWS KMSの ABAC](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html)」および「[エイリアスを使用して KMS キーへのアクセスを制御する](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#hmac-key-concept)」を参照してください。

   エイリアスは KMS キーを識別するために使用する表示名です。保護する予定のデータタイプ、または KMS キーで使用する予定のアプリケーションを示すエイリアスを選択することをお勧めします。

   エイリアスは AWS マネジメントコンソールで KMS キーを作成するときに必要です。[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) オペレーションを使用する場合、これらのオペレーションはオプションです。

1. (オプション) KMS キーの説明を入力します。

   今すぐ説明を追加するか、[キーの状態](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)が `Pending Deletion` または `Pending Replica Deletion` でない限り、後でいつでも更新できます。既存のカスタマーマネージドキーの説明を追加、変更、または削除するには、 で[説明を編集する](https://docs.aws.amazon.com/kms/latest/developerguide/editing-keys.html) AWS マネジメントコンソール か、[UpdateKeyDescription](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html) オペレーションを使用します。

1. (オプション) タグキーとオプションのタグ値を入力します。KMS キーに複数のタグを追加するには、[**Add tag**] (タグを追加) を選択します。
**注記**  
KMS キーのタグ付けまたはタグ解除により、KMS キーに対するアクセス許可が許可または拒否される可能性があります。詳細については、「[AWS KMSの ABAC](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html)」および「[タグを使用してKMS キーへのアクセスを制御する](https://docs.aws.amazon.com/kms/latest/developerguide/tag-authorization.html)」を参照してください。

    AWS リソースにタグを追加すると、 AWS は使用量とコストをタグ別に集計したコスト配分レポートを生成します。タグは、KMS キーへのアクセスの制御にも使用できます。KMS キーのタグ付けについては、「[キーのタグ付け](https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html)」および「[AWS KMSの ABAC](https://docs.aws.amazon.com/kms/latest/developerguide/abac.html)」を参照してください。

1. [**次へ**] を選択します。

1. KMS キーを管理できる IAM ユーザーとロールを選択します。
**注記**  
このキーポリシーは、この KMS キー AWS アカウント を完全に制御します。これにより、アカウント管理者は IAM ポリシーを使用して、他のプリンシパルに KMS キーを管理する許可を付与できます。詳細については、「[デフォルトのキーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)」を参照してください。  
   
IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

1. (オプション) 選択した IAM ユーザーとロールがこの KMS キーを削除しないようにするには、ページの下部にある [**Key deletion**] (キーの削除) セクションで、[**Allow key administrators to delete this key**] (キー管理者にこのキーの削除を許可する) のチェックボックスをオフにします。

1. [**次へ**] を選択します。

1. [暗号化オペレーション](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations)でキーを使用できる IAM ユーザーとロールを選択します。[**次へ**] を選択します。

1. [**キーポリシーの表示と編集**] ページで、次のステートメントをキーポリシーに追加し、[**完了**] を選択します。

   ```
   {
       "Sid": "Allow Amazon SNS to use this key",
       "Effect": "Allow",
       "Principal": {
           "Service": "sns.amazonaws.com"
       },
       "Action": [
           "kms:Decrypt",
           "kms:GenerateDataKey*"
       ],
       "Resource": "*"
   }
   ```

新しいカスタマーマネージドキーがキーのリストに表示されます。

## ステップ 2: 暗号化された Amazon SNS トピックを作成する
<a name="create-encrypted-topic"></a>

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

1. ナビゲーションパネルで、[**トピック**] を選択します。

1. **[トピックを作成]** を選択します。

1. [**新しいトピックの作成**] ダイアログボックスの [**トピック名**] に、トピックの名前 (例: `MyEncryptedTopic`) を入力し、[**トピックの作成**] を選択します。

1. [**暗号化**] セクションを展開し、以下の操作を実行します。

   1. [**サーバー側の暗号化を有効にする**] を選択します。

   1. カスタマーマネージドキーを指定します。詳細については、「[重要な用語](sns-server-side-encryption.md#sse-key-terms)」を参照してください。

      カスタマーマネージドキーのタイプごとに、**説明**、**アカウント**、およびカスタマーマネージドキー **ARN** が表示されます。
**重要**  
カスタマーマネージドキーの所有者ではない場合、または `kms:ListAliases` および `kms:DescribeKey` の許可がないアカウントでログインした場合、Amazon SNS コンソールでカスタマーマネージドキーに関する情報を表示できません。  
これらの許可を付与するように、カスタマーマネージドキーの所有者へ依頼してください。詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[AWS KMS API アクセス権限: アクションとリソースのリファレンス](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html)」を参照してください。

   1. **[カスタマーマネージドキー]** で、[以前に作成した](#create-custom-cmk) **[MyCustomKey]** を選択してから、**[サーバー側の暗号化を有効化]** を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

   トピックの SSE が有効になり、[**マイトピック**] ページが表示されます。

   トピックの**暗号化**ステータス、 AWS **アカウント**、**カスタマーマネージドキー**、カスタマーマネージドキーの **ARN**、および**説明**が **[暗号化]** タブに表示されます。

暗号化された新しいトピックが、トピックのリストに表示されます。

## ステップ 3: 暗号化された Amazon SQS キューを作成してサブスクライブする
<a name="create-encrypted-queue"></a>

1. [Amazon SQS コンソール](https://console.aws.amazon.com/sqs/)にサインインします。

1. [**新しいキューの作成**] を選択します。

1. [**新しいキューの作成**] ページで、次の操作を実行します。

   1. [**キュー名**] (例: `MyEncryptedQueue1`) を入力します。

   1. [**標準キュー**]、[**キューの設定**] の順に選択します。

   1. [**SSE の使用**] を選択します。

   1. **[AWS KMS key]** で、[以前に作成した](#create-custom-cmk) **[MyCustomKey]** を選択してから、**[キューの作成]** を選択します。

1. プロセスを繰り返して、2 つめのキュー (例えば、`MyEncryptedQueue2`) を作成します。

   暗号化された新しいキューがキューのリストに表示されます。

1. Amazon SQS コンソールで、`MyEncryptedQueue1` および `MyEncryptedQueue2` を選択して、[**キューのアクション**]、[**SNS トピックへのキューのサブスクライブ**] の順に選択します。

1. [**トピックへのサブスクライブ**] ダイアログボックスの [**トピックの選択**] で、[**MyEncryptedTopic**]、[**サブスクライブ**] の順に選択します。

   暗号化されたトピックに対する暗号化されたキューのサブスクリプションは、[**トピックのサブスクリプション結果**] ダイアログボックスに表示されます。

1. [**OK**] を選択してください。

## ステップ 4: 暗号化されたトピックにメッセージを発行する
<a name="publish-to-encrypted-topic"></a>

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

1. ナビゲーションパネルで、[**トピック**] を選択します。

1. トピックのリストから [**MyEncryptedTopic**] を選択し、[**メッセージの発行**] を選択します。

1. [**メッセージの発行**] ページで、次の操作を行います。

   1. (オプション) [**メッセージの詳細**] セクションで、[**件名**] (`Testing message publishing` など) を入力します。

   1. [**メッセージの本文**] セクションで、メッセージの本文 (`My message body is encrypted at rest.` など) を入力します。

   1. [**メッセージの発行**] を選択します。

メッセージは、サブスクライブされた暗号化キューに発行されます。

## ステップ 5: メッセージの配信を確認する
<a name="verify-message-delivery"></a>

1. [Amazon SQSコンソール](https://console.aws.amazon.com/sqs/)にサインインします。

1. キューのリストから **[MyEncryptedQueue1]** を選択し、次に **[Send and receive messages]** (メッセージの送受信) を選択します。

1. **[Send and receive messages in MyEncryptedQueue1]** (MyEncryptedQueue1 のメッセージの送信と受信) ページで、**[Poll for messages]** (メッセージのポーリング) を選択します。

   [先ほど送信した](#publish-to-encrypted-topic)メッセージが表示されます。

1. メッセージを表示するには、[**詳細**] を選択します。

1. 完了したら、[**閉じる**] をクリックします。

1. [**MyEncryptedQueue2**] に対してこの処理を繰り返します。

# VPC エンドポイントによる Amazon SNS トラフィックの保護
<a name="sns-internetwork-traffic-privacy"></a>

Amazon SNS の Amazon Virtual Private Cloud (Amazon VPC) エンドポイントは、Amazon SNS への接続のみを許可する VPC 内の論理エンティティです。VPC はリクエストを Amazon SNS にルーティングし、レスポンスを VPC にルーティングします。以下のセクションでは、VPC エンドポイントの使用と VPC エンドポイントポリシーの作成について説明します。

Amazon Virtual Private Cloud (Amazon VPC) を使用して AWS リソースをホストする場合は、VPC と Amazon SNS の間にプライベート接続を確立できます。この接続では、メッセージをパブリックインターネット経由で送信せずに、Amazon SNS トピックに発行できます。

Amazon VPC は、定義した仮想ネットワークで AWS リソースを起動するために使用できる AWS サービスです。VPC を使用することで、IP アドレス範囲、サブネット、ルートテーブル、ネットワークゲートウェイなどのネットワーク設定を制御できます。VPC を Amazon SNS に接続するには、*インターフェイス VPC エンドポイント*を定義します。このタイプのエンドポイントを使用すると、VPC を AWS サービスに接続できます。このエンドポイントは、インターネットゲートウェイ、ネットワークアドレス変換 (NAT) インスタンス、または VPN 接続を必要とせず、信頼性が高くスケーラブルな Amazon SNS への接続を提供します。詳細については、*「Amazon* [VPC ユーザーガイド」の「インターフェイス VPC エンドポイント AWS のサービス を使用して にアクセスする](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)」を参照してください。

このセクションの情報は、Amazon VPC のユーザーを対象にしています。VPC の詳細を確認したり、作成を開始したりするには、「*Amazon VPC ユーザーガイド*」の「[VPC のプランニング](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html)」を参照してください。

**注記**  
VPC エンドポイントでは、Amazon SNS トピックをプライベート IP アドレスにサブスクライブすることはできません。

# Amazon SNS 用の Amazon VPC エンドポイントの作成
<a name="sns-vpc-create-endpoint"></a>

Amazon VPC から Amazon SNS トピックにメッセージを発行するには、インターフェイス VPC エンドポイントを作成します。次に、VPC で管理するネットワーク内でトラフィックを維持しながら、トピックにメッセージを発行できます。

次の情報を使用してエンドポイントを作成し、VPC と Amazon SNS 間の接続をテストします。一から開始する作業に役立つチュートリアルについては、「[Amazon VPC から Amazon SNS メッセージを発行する](sns-vpc-tutorial.md)」を参照してください。

## エンドポイントの作成
<a name="sns-vpc-endpoint-create"></a>

VPC に Amazon SNS エンドポイントを作成するには、AWS マネジメントコンソール、AWS CLI、AWS SDK、Amazon SNS API、または AWS CloudFormation を使用します。

Amazon VPC コンソールまたは AWS CLI を使用して、エンドポイントを作成および設定する方法については、『*Amazon VPC ユーザーガイド*』の「[インターフェイスエンドポイントの作成](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)」を参照してください。

**重要**  
Amazon Virtual Private Cloud は HTTPS Amazon SNS エンドポイントでのみ使用できます。  
エンドポイントを作成するとき、VPC の接続先のサービスとして Amazon SNS を指定します。Amazon VPC コンソールで、このサービス名は選択したリージョンによって異なります。例えば、米国東部 (バージニア北部) を選択した場合、サービス名は **com.amazonaws.us-east-1.states**になります。  
Amazon VPC からメッセージを送信するように Amazon SNS を設定する場合、プライベート DNS を有効にして、`sns.us-east-2.amazonaws.com` の形式でエンドポイントを指定する必要があります。  
プライベートDNS は、`queue.amazonaws.com`や`us-east-2.queue.amazonaws.com`などのレガシーエンドポイントをサポートしていません。

AWS CloudFormation を使用してエンドポイントを作成および設定する方法については、『*AWS CloudFormation ユーザーガイド*』の「[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html) リソース」を参照してください。

## VPC と Amazon SNS との間の接続をテストする
<a name="sns-vpc-publish"></a>

Amazon SNS のエンドポイントを作成したら、VPC から Amazon SNS トピックにメッセージを発行できます。この接続をテストするには、以下の手順を実行します。

1. VPC にある Amazon EC2 インスタンスに接続します。接続の詳細については、Amazon EC2 ドキュメントの [Linux インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/DeveloperGuide/AccessingInstances.html)または [Windows インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html)を参照してください。

   例えば、SSH クライアントを使用して Linux インスタンスに接続するには、ターミナルから以下のコマンドを実行します。

   ```
   $ ssh -i ec2-key-pair.pem ec2-user@instance-hostname
   ```

   実行する条件は以下の通りです。
   + *ec2-key-pair.pem* は、インスタンスの作成時に Amazon EC2 から提供されたキーペアを含むファイルです。
   + *instance-hostname* は、インスタンスのパブリックホスト名です。[Amazon EC2 コンソール](https://console.aws.amazon.com/ec2)でホスト名を取得するには、**[インスタンス]** を選択してから、目的のインスタンスを選び、**[パブリック DNS]** の値を見つけます。

1. インスタンスから、AWS CLI で Amazon SNS [https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html](https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html) コマンドを使用します。以下のコマンドを使用して、シンプルなメッセージをトピックに送信できます。

   ```
   $ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"
   ```

   コードの説明は以下のとおりです。
   + *aws-region* は、トピックがある AWS リージョンです。
   + *sns-topic-arn* は、トピックの Amazon リソースネーム (ARN) です。[Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)から ARN を取得するには: [**トピック**] を選択し、自分のトピックを検索して、[**ARN**] カラムでその値を見つけます。

   メッセージが Amazon SNS によって正常に受信された場合、ターミナルには以下のようなメッセージ ID が表示されます。

   ```
   {
      "MessageId": "6c96dfff-0fdf-5b37-88d7-8cba910a8b64"
   }
   ```

# Amazon SNS 用の VPC エンドポイントポリシーを作成する
<a name="sns-vpc-endpoint-policy"></a>

Amazon SNS の Amazon VPC エンドポイントに対するポリシーを作成して、以下を指定することができます。
+ アクションを実行できるプリンシパル。
+ 実行可能なアクション。
+ このアクションを実行できるリソース。

詳細については、『*Amazon VPC ユーザーガイド*』の「[VPC エンドポイントでサービスへのアクセスを制御する](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)」を参照してください。

以下の例の VPC エンドポイントポリシーでは、Amazon SNS トピック `MyTopic` に対する発行を IAM ユーザー `MyUser` に許可することを指定します。

```
{
  "Statement": [{
    "Action": ["sns:Publish"],
    "Effect": "Allow",
    "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic",
    "Principal": {
      "AWS": "arn:aws:iam:123456789012:user/MyUser"
    }
  }]
}
```

以下は拒否されます:
+ 他の Amazon SNS API アクション (`sns:Subscribe` や `sns:Unsubscribe` など)。
+ この VPC エンドポイントを使用しようとする IAM の他のユーザーおよびルール。
+ `MyUser`別の Amazon SNS トピックに発行する 。

**注記**  
IAM ユーザーはさらに、他の Amazon SNS API アクションを VPC の*外側* から使用します。

# Amazon VPC から Amazon SNS メッセージを発行する
<a name="sns-vpc-tutorial"></a>

このセクションでは、プライベートネットワークでメッセージを安全に保ちながら、Amazon SNS トピックに発行する方法について説明します。Amazon Virtual Private Cloud (Amazon VPC) でホストされている Amazon EC2 インスタンスからメッセージを発行します。メッセージは、パブリックインターネットを経由せずに AWS ネットワーク内に留まります。VPC からプライベートにメッセージを発行することにより、アプリケーションと Amazon SNS 間のトラフィックのセキュリティを強化できます。このセキュリティは、顧客に関する個人を特定できる情報 (PII) を公開する場合や、アプリケーションが市場規制の対象となる場合に重要になります。例えば、プライベートな発行は、Health Insurance Portability and Accountability Act (HIPAA) に準拠する必要があるヘルスケアシステムや、Payment Card Industry Data Security Standard (PCI DSS) に準拠する必要がある財務システムがある場合に役立ちます。

一般的なステップは次のとおりです。
+  AWS CloudFormation テンプレートを使用して、 に一時的なプライベートネットワークを自動的に作成します AWS アカウント。
+ VPC を Amazon SNS に接続する VPC エンドポイントを作成します。
+ Amazon EC2 インスタンスにログインし、Amazon SNS トピックに対してプライベートにメッセージを発行します。
+ メッセージが正常に配信されたことを確認します。
+ このプロセス中に作成したリソースを削除して、 に残らないようにします AWS アカウント。

次の図は、これらのステップを完了する際に AWS アカウントで作成するプライベートネットワークを示しています。

![\[このステップで作成するプライベートネットワークのアーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-architecture.png)


このネットワークは、Amazon EC2 インスタンスを含む VPC で構成されます。インスタンスは、*インターフェイス VPC エンドポイント*を介して Amazon SNS に接続します。このタイプのエンドポイントは、 AWS PrivateLink を使用するサービスに接続します。この接続が確立されたら、ネットワークがパブリックインターネットから切断されている場合でも、Amazon EC2 インスタンスにログインして Amazon SNS トピックにメッセージを発行できます。トピックは、受信したメッセージを 2 つのサブスクライブ AWS Lambda 関数にファンアウトします。これらの関数は、受け取ったメッセージを Amazon CloudWatch Logs に記録します。

このステップの完了には 20 分ほどかかります。

**Topics**
+ [[開始する前に]](#sns-vpc-prereqs)
+ [ステップ 1: キーペアを作成する](#sns-vpc-keypair)
+ [ステップ2:リソースを作成する](#sns-vpc-resources)
+ [ステップ 3: インスタンスのインターネット接続を確認する](#sns-vpc-connection)
+ [ステップ 4: エンドポイントを作成する](#sns-vpc-endpoint)
+ [ステップ 5: メッセージを発行する](#sns-vpc-publish)
+ [ステップ 6: 確認する](#sns-vpc-verify)
+ [ステップ 7: クリーンアップする](#sns-vpc-delete)
+ [関連リソース](#sns-vpc-resources-related)

## [開始する前に]
<a name="sns-vpc-prereqs"></a>

開始する前に、Amazon Web Services (AWS) アカウントが必要です。サインアップすると、Amazon SNS や Amazon VPC を含む AWSのすべてのサービスにアカウントが自動的にサインアップされます。アカウントをまだ作成していない場合は、[https://aws.amazon.com/](https://aws.amazon.com/) に移動し、[**まずは無料で始める**] を選択します。

## ステップ 1: Amazon EC2 キーペアを作成する
<a name="sns-vpc-keypair"></a>

Amazon EC2 インスタンスへのログインには、*キーペア*が使用されます。これは、ログイン情報の暗号化に使用されるパブリックキーと、その復号に使用されるプライベートキーで構成されます。キーペアを作成するときは、プライベートキーのコピーをダウンロードします。後で、キーペアを使用して Amazon EC2 インスタンスにログインします。ログインするには、キーペアの名前を指定し、プライベートキーを指定します。

**キーペアを作成するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) で Amazon EC2 コンソールを開きます。

1. 左のナビゲーションメニューで、[**ネットワーク & セキュリティ**] セクションを見つけます。次に、[**キーペア**] を選択します。

1. [**キーペアの作成**] を選択します。

1. [**キーペアの作成**] ウィンドウで、[**キーペア名**] に「**VPCE-Tutorial-KeyPair**」と入力します。続いて、[**作成**] を選択します。  
![\[キーペア名フィールドに「VPCE-Tutorial-KeyPair」というテキストが含まれる、キーペアの作成ウィンドウ。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-key-pair.png)

1. ブラウザによってプライベートキーファイルが自動的にダウンロードされます。これを安全な場所に保存します。Amazon EC2 により、ファイルに拡張子 `.pem` が付けられます。

1. (オプション) Mac または Linux コンピュータで SSH クライアントを使用してインスタンスに接続している場合は、`chmod` コマンドを使用してプライベートキーファイルの権限を設定すると、お客様のみがそれを読み取ることができます。

   1. ターミナルを開き、プライベートキーを含むディレクトリに移動します。

      ```
      $ cd /filepath_to_private_key/
      ```

   1. 次のコマンドを使用してアクセス権限を設定します。

      ```
      $ chmod 400 VPCE-Tutorial-KeyPair.pem
      ```

## ステップ 2: AWS リソースを作成する
<a name="sns-vpc-resources"></a>

インフラストラクチャを設定するには、 CloudFormation *テンプレート*を使用します。テンプレートは、Amazon EC2 インスタンスや Amazon SNS トピックなどの AWS リソースを構築するための設計図として機能するファイルです。このプロセスのテンプレートは GitHub で提供されていて、ダウンロードできます。

テンプレートを に提供し CloudFormation、 で*スタック*として必要なリソースを CloudFormation プロビジョニングします AWS アカウント。スタックは、単一のユニットとして管理できるリソースのコレクションです。これらのステップを完了すると、 CloudFormation を使用してスタック内のすべてのリソースを一度に削除できます。これらのリソースは、必要でない限り AWS アカウント、 に残りません。

このプロセスのスタックには、次のリソースが含まれます。
+ VPC および関連するネットワーキングリソース (サブネット、セキュリティグループ、インターネットゲートウェイ、およびルートテーブルを含む)。
+ VPC 内のサブネットに起動された Amazon EC2 インスタンス。
+ Amazon SNS トピック
+ 2 つの AWS Lambda 関数。これらの関数は、Amazon SNS トピックに発行されたメッセージを受け取り、CloudWatch Logs にイベントを記録します。
+ Amazon CloudWatch メトリクスおよびログ
+ Amazon EC2 インスタンスに Amazon SNSの使用を許可する IAM ロール、および CloudWatch Logs への書き込みを Lambda 関数に許可する IAM ロール。

**AWS リソースを作成するには**

1. GitHub ウェブサイトから[テンプレート ファイル](https://github.com/aws-samples/aws-sns-samples/blob/master/templates/SNS-VPCE-Tutorial-CloudFormation.template)をダウンロードします。

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation) にサインインします。

1. [**スタックの作成**] を選択します。

1. [**テンプレートの選択**] ページで、[**テンプレートを Amazon S3 にアップロード**] を選択してから、ファイルを選択して [**次へ**] をクリックします。

1. [**詳細の指定**] ページで、スタック名とキー名を指定します。

   1. [**スタックの名前**] に **VPCE-Tutorial-Stack** を入力します。

   1. [**KeyName**] で、[**VPCE-Tutorial-KeyPair**] を選択します。

   1. [**SSHLocation**] で、デフォルト値の **0.0.0.0/0** のままにします。  
![\[スタック名、KeyName、SSHLocation の入力値フィールドが表示されている、詳細の指定ページ。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-stack-name.png)

   1. [**次へ**] を選択します。

1. [**オプション**] ページで、すべてのデフォルト値を受け入れ、[**次へ**] を選択します。

1. [**確認**] ページで、スタックの詳細を確認します。

1. **機能**で、 がカスタム名で IAM リソースを作成する CloudFormation 可能性があることを確認します。

1. **[作成]** を選択します。

    CloudFormation コンソールで **スタックページ**が開きます。VPCE-Tutorial-Stack のステータスは **CREATE\$1IN\$1PROGRESS** です。数分後に作成プロセスが完了し、ステータスが **CREATE\$1COMPLETE** に変わります。  
![\[ステータスが CREATE_COMPLETE の CloudFormation スタック。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-stack-create-complete.png)
**ヒント**  
[**更新**] ボタンを選択して、スタックの最新のステータスを表示します。

## ステップ 3: Amazon EC2 インスタンスにインターネットアクセスがないことを確認する
<a name="sns-vpc-connection"></a>

前のステップの VPC で起動された Amazon EC2 インスタンスにはインターネットアクセスがありません。アウトバウンドトラフィックが禁止されているため、Amazon SNS にメッセージを発行することができません。インスタンスにログインしてこれを確認します。次に、パブリックエンドポイントへの接続と、Amazon SNS へのメッセージの発行を試みます。

この時点では、発行の試みは失敗します。後のステップで、Amazon SNS の VPC エンドポイントを作成すると、発行の試みは成功します。

**Amazon EC2 インスタンスに接続します。**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のナビゲーションメニューで、[**インスタンス**] セクションを見つけます。続いて、[**インスタンス**] を選択します。

1. インスタンスの一覧で、[**VPCE-Tutorial-EC2Instance**] を選択します。

1. **[Public DNS]** 列に示されたホスト名をコピーします。  
![\[によって起動された Amazon EC2 インスタンスに関する詳細 CloudFormation。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-instance-details.png)

1. ターミナルを開きます。キーペアが含まれているディレクトリから、以下のコマンドを使用してインスタンスに接続します。ここで、*instance-hostname* は、Amazon EC2 コンソールからコピーしたホスト名です。

   ```
   $ ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@instance-hostname
   ```

**インスタンスがインターネットに接続されていないことを確認するには**
+ ターミナルで、amazon.com など任意のパブリックエンドポイントへの接続を試します。

  ```
  $ ping amazon.com
  ```

  接続の試行が失敗するため、いつでもキャンセルできます (Windows では Ctrl \$1 C、macOS では Command \$1 C)。

**インスタンスが Amazon SNS に接続されていないことを確認するには**

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

1. 左側のナビゲーションメニューで、[**トピック**] を選択します。

1. [**トピック**] ページで、トピック [**VPCE-Tutorial-Topic**] の Amazon リソースネーム (ARN) をコピーします。

1. ターミナルで、トピックへのメッセージを発行を試みます。

   ```
   $ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"
   ```

   発行の試みが失敗するため、いつでもキャンセルできます。

## ステップ 4: Amazon SNSの Amazon VPC エンドポイントを作成する
<a name="sns-vpc-endpoint"></a>

VPC を Amazon SNS に接続するには、インターフェイス VPC エンドポイントを定義します。エンドポイントを追加したら、VPC の Amazon EC2 インスタンスにログインし、そこから Amazon SNS API を使用できます。トピックにメッセージを発行でき、メッセージはプライベートに発行されます。 AWS ネットワーク内にとどまり、パブリックインターネットは移動しません。

**注記**  
インスタンスは、インターネット上の他の AWS サービスやエンドポイントにアクセスできません。

**エンドポイントを作成するには**

1. Amazon VPC コンソールの [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) を開いてください。

1. 左側のナビゲーションメニューで、[**エンドポイント**] を選択します。

1. [**エンドポイントの作成**] を選択します。

1. [**エンドポイントの作成**] ページの [**サービスカテゴリ**] で、デフォルトの選択である [**AWS サービス**] をそのままにします。

1. [**サービス名**] で、Amazon SNS のサービス名を選択します。

   このサービス名は、選択したリージョンによって異なります。例えば、米国東部 (バージニア北部) を選択した場合、サービス名は **com.amazonaws.*us-east-1*.sns**になります。

1. [**VPC**] で、[**VPCE-Tutorial-VPC**] と言う名前の VPC を選択します。  
![\[[エンドポイントの作成] ページの [VPC] メニュー。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-create-endpoint-vpc.png)

1. [**サブネット**] で、サブネット ID に *VPCE-Tutorial-Subnet* を持つサブネットを選択します。  
![\[[エンドポイントの作成] ページのサブネット。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-create-endpoint-subnet.png)

1. [**プライベート DNS 名を有効にする**] で、[**このエンドポイントで有効にする**] を選択します。

1. [**セキュリティグループ**] で、[**セキュリティグループの選択**] を選択し、[**VPCE-Tutorial-SecurityGroup**] を選択します。  
![\[[エンドポイントの作成] ページの [セキュリティグループ] メニュー。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-create-endpoint-security-group.png)

1. [**エンドポイントの作成**] を選択します。Amazon VPC コンソールで、VPC エンドポイントが作成されたことが確認されます。  
![\[エンドポイントの作成後に表示される確認メッセージ。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-create-endpoint-confirmation.png)

1. [**閉じる**] を選択します。

   Amazon VPC コンソールの **[エンドポイント] ページ**を開きます。新しいエンドポイントのステータスは [**保留中**] です。数分で、作成プロセスが完了すると、ステータスが [**利用可能**] に変わります。  
![\[ステータスが [利用可能] である VPC エンドポイント。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-create-endpoint-status-available.png)

## ステップ 5: Amazon SNS トピックにメッセージを発行する
<a name="sns-vpc-publish"></a>

これで VPC に Amazon SNS のエンドポイントが含まれたので、Amazon EC2 インスタンスにログインし、トピックにメッセージを発行できます。

**メッセージを発行するには**

1. ターミナルが Amazon EC2 インスタンスに接続されていない場合は、再度接続します。

   ```
   $ ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@instance-hostname
   ```

1. 以前の手順と同じコマンドを実行して、Amazon SNS トピックにメッセージを発行します。今回は、発行の試みが成功すると、Amazon SNS はメッセージ ID を返します。

   ```
   $ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"
   
   
   {
       "MessageId": "5b111270-d169-5be6-9042-410dfc9e86de"
   }
   ```

## ステップ 6: メッセージの配信を確認する
<a name="sns-vpc-verify"></a>

Amazon SNS トピックがメッセージを受け取ると、2 つの Lambda サブスクライブ関数に送信して、メッセージをファンアウトします。これらの関数がメッセージを受け取ると、イベントを CloudWatch Logs に記録します。メッセージの配信が成功したことを確認するには、関数が呼び出されたこと、および CloudWatch Logs が更新されたことを確認します。

**Lambda 関数が呼び出されたことを確認するには**

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) で AWS Lambda コンソールを開きます。

1. [**関数**] ページで、[**VPCE-Tutorial-Lambda-1**] を選択します。

1. [**モニタリング**] を選択します。

1. [**呼び出しカウント**] グラフを確認します。このグラフには、Lambda 関数が実行された回数が表示されます。

   呼び出しカウントは、トピックにメッセージを発行した回数に一致します。  
![\[Lambda コンソールの呼び出しカウントのグラフ。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-lambda-invocation-count.png)

**CloudWatch Logs が更新されたことを確認するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. 左側のナビゲーションメニューで [**ログ**] を選択します。

1. Lambda 関数によって書き込まれたログを確認します。

   1. [**/aws/lambda/VPCE-Tutorial-Lambda-1/**] ロググループを選択します。

   1. ログストリームを選択します。

   1. ログにエントリ `From SNS: Hello` が含まれていることを確認します。  
![\[CloudWatch Logs にエントリ「From SNS:Hello」が含まれています。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/vpce-tutorial-cloudwatch-log.png)

   1. コンソール上部の [**ロググループ**] を選択して、[**ロググループ**] ページを表示します。次に、/aws/lambda/VPCE-Tutorial-Lambda-2/ ロググループに対して前のステップを繰り返します。

お疲れ様でした。Amazon SNS のエンドポイントを VPC に追加することにより、VPC で管理されるネットワーク内から、トピックにメッセージを発行することができました。メッセージは、パブリックインターネットに公開されることなくプライベートで発行されました。

## ステップ 7: クリーンアップする
<a name="sns-vpc-delete"></a>

作成したリソースは、保持することを希望しない限り、今すぐ削除できます。使用しなくなった AWS リソースを削除することで、 への不要な課金を防ぐことができます AWS アカウント。

まず、Amazon VPC コンソールを使用して VPC エンドポイントを削除します。次に、 CloudFormation コンソールでスタックを削除して、作成した他のリソースを削除します。スタックを削除すると、 CloudFormation はスタックのリソースを から削除します AWS アカウント。

**VPC エンドポイントを削除するには**

1. Amazon VPC コンソールの [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) を開いてください。

1. 左側のナビゲーションメニューで、[**エンドポイント**] を選択します。

1. 作成したエンドポイントを選択します。

1. [**アクション**] を選択してから、[**エンドポイントの削除**] を選択します。

1. [**エンドポイントの削除**] ウィンドウで、[**はい、削除します**] を選択します。

   エンドポイントのステータスが [**削除中**] に変わります。削除が完了すると、エンドポイントがページから削除されます。

**CloudFormation スタックを削除するには**

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で CloudFormation コンソールを開きます。

1. [**VPCE-Tutorial-Stack**] スタックを選択します。

1. [**アクション**] を選択してから、[**スタックの削除**] を選択します。

1. [**スタックの削除**] ウィンドウで、[**はい、削除します**] を選択します。

   スタックのステータスが **DELETE\$1IN\$1PROGRESS** に変わります。削除が完了すると、スタックがページから削除されます。

## 関連リソース
<a name="sns-vpc-resources-related"></a>

詳細については、以下のリソースを参照してください。
+ [AWS セキュリティブログ: PrivateLink を使用して AWS Amazon SNS に発行されたメッセージを保護する ](https://aws.amazon.com/blogs/security/securing-messages-published-to-amazon-sns-with-aws-privatelink/)
+ [Amazon VPC とは?](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Introduction.html)
+ [VPC エンドポイント](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)
+ [Amazon EC2 とは?](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)
+ [CloudFormation の概念](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-concepts.html)

# デュアルスタック (IPv4 および IPv6) エンドポイントを使用して Amazon SNS に接続する
<a name="sns-dual-stack"></a>

 デュアルスタックエンドポイントは、IPv4 と IPv6 トラフィックの両方をサポートします。デュアルスタックのエンドポイントにリクエストを行うと、エンドポイント URL は IPv4 または IPv6 アドレスに解決されます。デュアルスタックと FIPS エンドポイント詳細については、「[SDK リファレンスガイド](https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html)」を参照してください。

 Amazon SNS はリージョンのデュアルスタックエンドポイントをサポートしています。つまり、エンドポイント名の一部として AWS リージョンを指定する必要があります。デュアルスタックエンドポイント名には、次の命名規則が使用されます。`sns.Region.amazonaws.com`例えば、`eu-west-1` リージョンのデュアルスタックエンドポイント名は、`sns.eu-west-1.amazonaws.com` です。

Amazon SNS エンドポイントの完全なリストについては、「[AWS 全般のリファレンス](https://docs.aws.amazon.com/general/latest/gr/sns.html)」を参照してください。

# メッセージデータ保護による Amazon SNS セキュリティの強化
<a name="sns-message-data-protection"></a>

**重要**  
Amazon SNS メッセージデータ保護は、2026 年 4 月 30 日以降、新規のお客様は利用できなくなります。代替方法の詳細とガイダンスについては、[Amazon SNS メッセージデータ保護の可用性の変更](https://docs.aws.amazon.com/sns/latest/dg/sns-message-data-protection-availability-change.html)」を参照してください。
+ [メッセージデータ保護](message-data-protection.md)は Amazon SNS の機能で、保存中のデータではなく、移動中のデータのコンテンツを監査および管理するための独自のルールとポリシーを定義するために使用されます。
+ メッセージデータ保護は、メッセージ中心のエンタープライズアプリケーションにガバナンス、コンプライアンス、監査サービスを提供するため、Amazon SNS トピックの所有者は、データイングレスおよびエグレスを制御し、コンテンツフローを追跡して記録できます。
+ ペイロードベースのガバナンスルールを記述して、不正なペイロードコンテンツがメッセージストリームに入るのを防ぐことができます。
+ 個々のサブスクライバーに異なるコンテンツアクセス権限を付与し、コンテンツフロープロセス全体を監査できます。

# Amazon SNS での Identity and Access Management
<a name="security-iam"></a>

Amazon SNS にアクセスするには AWS 、 がリクエストの認証に使用できる認証情報が必要です。これらの認証情報には、Amazon SNS トピックやメッセージなどの AWS リソースにアクセスするためのアクセス許可が必要です。次のセクションでは、[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) と Amazon SNS を使用して、リソースにアクセスできるユーザーを制御することで、リソースをセキュリティで保護する方法について詳しく説明します。

AWS Identity and Access Management (IAM) は、管理者が AWS リソースへのアクセスを安全に制御 AWS のサービス するのに役立つ です。IAM 管理者は、誰を*認証* (サインインを許可) し、誰に Amazon SNS リソースの使用を*承認する* (アクセス許可を付与する) かを制御します。IAM は、追加料金なしで使用できる AWS のサービス です。

## オーディエンス
<a name="security_iam_audience"></a>

 AWS Identity and Access Management (IAM) の使用方法は、ロールによって異なります。
+ **サービスユーザー** - 機能にアクセスできない場合は、管理者にアクセス許可をリクエストします (「[Amazon Simple Notification Service アイデンティティとアクセスのトラブルシューティング](security_iam_troubleshoot.md)」を参照)。
+ **サービス管理者** - ユーザーアクセスを決定し、アクセス許可リクエストを送信します (「[Amazon SNS と IAM が連携する仕組み](security_iam_service-with-iam.md)」を参照)
+ **IAM 管理者** - アクセスを管理するためのポリシーを作成します (「[Amazon Simple Notification Service のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照)

## アイデンティティを使用した認証
<a name="security_iam_authentication"></a>

認証は、ID 認証情報 AWS を使用して にサインインする方法です。 AWS アカウント ルートユーザー、IAM ユーザー、または IAM ロールを引き受けることで認証される必要があります。

 AWS IAM アイデンティティセンター (IAM Identity Center)、シングルサインオン認証、Google/Facebook 認証情報などの ID ソースからの認証情報を使用して、フェデレーティッド ID としてサインインできます。サインインの詳細については、「*AWS サインイン ユーザーガイド*」の「[AWS アカウントにサインインする方法](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)」を参照してください。

プログラムによるアクセスの場合、 は SDK と CLI AWS を提供してリクエストを暗号化して署名します。詳細については、「*IAM ユーザーガイド*」の「[API リクエストに対するAWS 署名バージョン 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)」を参照してください。

### AWS アカウント ルートユーザー
<a name="security_iam_authentication-rootuser"></a>

 を作成するときは AWS アカウント、すべての AWS のサービス および リソースへの完全なアクセス権を持つ AWS アカウント *ルートユーザー*と呼ばれる 1 つのサインインアイデンティティから始めます。日常的なタスクには、ルートユーザーを使用しないことを強くお勧めします。ルートユーザー認証情報を必要とするタスクについては、「*IAM ユーザーガイド*」の「[ルートユーザー認証情報が必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)」を参照してください。

### フェデレーテッドアイデンティティ
<a name="security_iam_authentication-federated"></a>

ベストプラクティスとして、人間のユーザーが一時的な認証情報 AWS のサービス を使用して にアクセスするには、ID プロバイダーとのフェデレーションを使用する必要があります。

*フェデレーティッド ID* は、エンタープライズディレクトリ、ウェブ ID プロバイダー、または ID Directory Service ソースの認証情報 AWS のサービス を使用して にアクセスするユーザーです。フェデレーテッドアイデンティティは、一時的な認証情報を提供するロールを引き受けます。

アクセスを一元管理する場合は、 AWS IAM アイデンティティセンターをお勧めします。詳細については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[IAM アイデンティティセンターとは](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)」を参照してください。

### IAM ユーザーとグループ
<a name="security_iam_authentication-iamuser"></a>

*[IAM ユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*は、特定の個人やアプリケーションに対する特定のアクセス許可を持つアイデンティティです。長期認証情報を持つ IAM ユーザーの代わりに一時的な認証情報を使用することをお勧めします。詳細については、*IAM ユーザーガイド*の[「ID プロバイダーとのフェデレーションを使用して にアクセスすることを人間のユーザーに要求する AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)」を参照してください。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、IAM ユーザーの集合を指定し、大量のユーザーに対するアクセス許可の管理を容易にします。詳細については、「*IAM ユーザーガイド*」の「[IAM ユーザーに関するユースケース](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)」を参照してください。

### IAM ロール
<a name="security_iam_authentication-iamrole"></a>

*[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*は、特定のアクセス許可を持つアイデンティであり、一時的な認証情報を提供します。ユーザー[から IAM ロール (コンソール) に切り替えるか、 または API オペレーションを呼び出すことで、ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)を引き受けることができます。 AWS CLI AWS 詳細については、「*IAM ユーザーガイド*」の「[ロールを引き受けるための各種方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)」を参照してください。

IAM ロールは、フェデレーションユーザーアクセス、一時的な IAM ユーザーのアクセス許可、クロスアカウントアクセス、クロスサービスアクセス、および Amazon EC2 で実行するアプリケーションに役立ちます。詳細については、*IAM ユーザーガイド* の [IAM でのクロスアカウントリソースアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) を参照してください。

## ポリシーを使用したアクセスの管理
<a name="security_iam_access-manage"></a>

でアクセスを制御する AWS には、ポリシーを作成し、ID AWS またはリソースにアタッチします。ポリシーは、アイデンティティまたはリソースに関連付けられている場合のアクセス許可を定義します。 は、プリンシパルがリクエストを行うときにこれらのポリシー AWS を評価します。ほとんどのポリシーは JSON ドキュメント AWS として に保存されます。JSON ポリシードキュメントの詳細については、「*IAM ユーザーガイド*」の「[JSON ポリシー概要](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)」を参照してください。

管理者は、ポリシーを使用して、どの**プリンシパル**がどの**リソース**に対して、どのような**条件**で**アクション**を実行できるかを定義することで、誰が何にアクセスできるかを指定します。

デフォルトでは、ユーザーやロールにアクセス許可はありません。IAM 管理者は IAM ポリシーを作成してロールに追加し、このロールをユーザーが引き受けられるようにします。IAM ポリシーは、オペレーションの実行方法を問わず、アクセス許可を定義します。

### アイデンティティベースのポリシー
<a name="security_iam_access-manage-id-based-policies"></a>

アイデンティティベースのポリシーは、アイデンティティ (ユーザー、グループ、またはロール) にアタッチできる JSON アクセス許可ポリシードキュメントです。これらのポリシーは、アイデンティティがどのリソースに対してどのような条件下でどのようなアクションを実行できるかを制御します。アイデンティティベースポリシーの作成方法については、*IAM ユーザーガイド* の [カスタマー管理ポリシーでカスタム IAM アクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) を参照してください。

アイデンティティベースのポリシーは、*インラインポリシー* (単一の ID に直接埋め込む) または*管理ポリシー* (複数の ID にアタッチされたスタンドアロンポリシー) にすることができます。管理ポリシーとインラインポリシーのいずれかを選択する方法については、「*IAM ユーザーガイド*」の「[管理ポリシーとインラインポリシーのいずれかを選択する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)」を参照してください。

### リソースベースのポリシー
<a name="security_iam_access-manage-resource-based-policies"></a>

リソースベースのポリシーは、リソースに添付する JSON ポリシードキュメントです。例としては、IAM *ロール信頼ポリシー*や Amazon S3 *バケットポリシー*などがあります。リソースベースのポリシーをサポートするサービスでは、サービス管理者はポリシーを使用して特定のリソースへのアクセスを制御できます。リソースベースのポリシーでは、[プリンシパルを指定する](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)必要があります。

リソースベースのポリシーは、そのサービス内にあるインラインポリシーです。リソースベースのポリシーでは、IAM の AWS マネージドポリシーを使用できません。

### その他のポリシータイプ
<a name="security_iam_access-manage-other-policies"></a>

AWS は、より一般的なポリシータイプによって付与されるアクセス許可の上限を設定できる追加のポリシータイプをサポートしています。
+ **アクセス許可の境界** – アイデンティティベースのポリシーで IAM エンティティに付与することのできるアクセス許可の数の上限を設定します。詳細については、「*IAM ユーザーガイド*」の「[IAM エンティティのアクセス許可境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)」を参照してください。
+ **サービスコントロールポリシー (SCP)** - AWS Organizations内の組織または組織単位の最大のアクセス許可を指定します。詳細については、「*AWS Organizations ユーザーガイド*」の「[サービスコントロールポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)」を参照してください。
+ **リソースコントロールポリシー (RCP)** – は、アカウント内のリソースで利用できる最大数のアクセス許可を定義します。詳細については、「*AWS Organizations ユーザーガイド*」の「[リソースコントロールポリシー (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)」を参照してください。
+ **セッションポリシー** – ロールまたはフェデレーションユーザーの一時セッションを作成する際にパラメータとして渡される高度なポリシーです。詳細については、「*IAM ユーザーガイド*」の「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」を参照してください。

### 複数のポリシータイプ
<a name="security_iam_access-manage-multiple-policies"></a>

1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに難しくなります。が複数のポリシータイプが関与する場合にリクエストを許可するかどうか AWS を決定する方法については、*「IAM ユーザーガイド*」の[「ポリシー評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。

## アクセスコントロール
<a name="access-control"></a>

Amazon SNS には、 AWS Identity and Access Management (IAM) ポリシーと同じ言語で記述されたポリシーを使用する独自のリソースベースのアクセス許可システムがあります。これは、Amazon SNS ポリシーや IAM ポリシーで同様の結果を達成できることを意味します。

**注記**  
すべての が自分のアカウントのユーザーに権限を委任 AWS アカウント できることを理解することが重要です。クロスアカウントアクセスによって、追加のユーザーを管理しなくても、 AWS リソースへのアクセスを共有することができます。クロスアカウントのアクセスの詳細については、*IAM ユーザーガイド*の「[クロスアカウントアクセスの有効化](https://docs.aws.amazon.com/IAM/latest/UserGuide/Delegation.html)」を参照してください。

# Amazon SNS アクセスコントロールのユースケース
<a name="sns-when-to-use-access-control"></a>

リソースへのアクセス権限やアクセス拒否の方法に高い柔軟性があります。ただし、一般的なユースケースは、次に示すように非常にシンプルなものとなっています。
+ 特定のタイプのトピックアクション (パブリッシュなど) AWS アカウント を別の に付与する場合。詳細については、「[トピック AWS アカウント へのアクセスを許可する](sns-access-policy-use-cases.md#sns-grant-aws-account-access-to-topic)」を参照してください。
+ HTTPS プロトコルに対してのみ、トピックのサブスクリプションを制限します。詳細については、「[HTTPS へのサブスクリプションの制限](sns-access-policy-use-cases.md#sns-limit-subscriptions-to-https)」を参照してください。
+ Amazon SNS が Amazon SQS キューにメッセージを発行することを許可する必要があります。詳細については、「[Amazon SQS キューに発行する。](sns-access-policy-use-cases.md#sns-publish-messages-to-sqs-queue)」を参照してください。

# Amazon SNS アクセスポリシーの主な概念
<a name="sns-access-policy-language-key-concepts"></a>

以下のセクションでは、アクセスポリシー言語を使用するにあたって理解しておくべきコンセプトを説明します。基本的なものから順に分かりやすく説明していきます。

## アクセス許可
<a name="permissions"></a>

*アクセス権限*とは、特定のリソースへのある種のアクセスに対し、許可または拒否をするというコンセプトです。アクセス権限は、基本的に「A は、条件 D に該当する C を対象とするアクション B の実行を許可または禁止されている」という形態をとります。例えば、*ジェーン* (A) は *HTTP プロトコルを使用する場合に限り* (D)、*トピック A* (C) へ*発行すること* (B) が許可されています。ジェーンがトピック A をパブリッシュした時点で、ジェーンにアクセス権限があるかどうか、またそのリクエストが定められているアクセス権限の条件を満たしているかどうかが、サービスによってチェックされます。

## ステートメント
<a name="statement"></a>

*ステートメント*とは、アクセスポリシー言語で使用するアクセス権限を定義する書式です。1 つのステートメントで 1 つのアクセス権限を定義します。*ポリシー* という、より広範囲のコンテナドキュメントの一部としてステートメントを書きます (次のコンセプト参照)。

## ポリシー
<a name="policy"></a>

*ポリシー*とは、1 つ以上のステートメントのコンテナの役目を果たすドキュメント (アクセスポリシー言語で記述) です。例えば、1 つのポリシーには「ジェーンは E メールプロトコルを使用してサブスクライブできる」というステートメントと、「ボブはトピック A を発行することができない」というステートメント、計 2 つのステートメントが含まれることがあります。以下の図に示されているように、同等のシナリオでは、「ジェーンは E メールプロトコルを使用してサブスクライブできる」というポリシーと、「ボブはトピック A を発行することができない」というポリシー、計 2 つのポリシーを含むことができます。

![\[Amazon SNS でポリシーステートメントを整理する 2 つの方法を比較します。左側では、1 つのポリシー (ポリシー A) に 2 つのステートメントが含まれています。右側では、同じ 2 つのステートメントが 2 つのポリシーに分割され、各ポリシーに 1 つのステートメントが含まれています。この図は、アクセス許可の定義と適用の方法に関して、これら 2 つのアプローチが同等であることを示しています。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/AccessPolicyLanguage_Statement_and_Policy.gif)


ポリシードキュメントでは ASCII 文字のみを使用できます。`aws:SourceAccount` と を使用して`aws:SourceOwner`、ASCII 以外の文字を含む他の AWS サービスの ARNs をプラグインする必要があるシナリオを回避できます。[`aws:SourceAccount` と `aws:SourceOwner`](sns-access-policy-use-cases.md#source-account-versus-source-owner) の違いを確認してください。



## Issuer
<a name="issuer"></a>

*発行者*とは、リソース用のアクセス権限についてのポリシーを記述する個人です。発行者 (定義上) は常にリソース所有者です。 AWS は AWS 、サービスユーザーが所有していないリソースのポリシーを作成することを許可しません。John がリソース所有者である場合、 は、そのリソースに対するアクセス許可を付与するために記述されたポリシーを送信するときに、John の ID AWS を認証します。

## Principal
<a name="principal"></a>

*プリンシパル*とは、ポリシーのアクセス権限を適用される個人またはグループを指します。「A は、条件 D に該当する C を対象とするアクション B の実行を許可または禁止されている」というステートメントにおいては、A がプリンシパルに相当します。ポリシーでは、「誰でも」プリンシパルに設定することができます (例えば、ワイルドカードを指定して全員に設定できます)。例えば、リクエスタの実際のアイデンティティをベースにアクセス制限をかけたくなければ、リクエスタの IP アドレスのような、他のアイデンティティの特性をもとにして行うことができます。

## Action
<a name="action"></a>

*アクション*とは、プリンシパルに対し、実行が許可されているアクティビティです。「A は、条件 D に該当する場合 C に対して B を実行することを許可されている」というステートメントにおいては、B がアクションに相当します。通常、 アクションはリクエストの オペレーションにすぎません AWS。例えば、ジェーンが Amazon SNS に `Action` `=Subscribe` というリクエストを送信します。1 つのポリシーに 1 つまたは複数のアクションを指定することができます。

## [リソース]
<a name="resource"></a>

*リソース*とは、プリンシパルがアクセスを要求するオブジェクトのことです。「A は、条件 D に該当する場合 C に対して B を実行することを許可されている」というステートメントにおいては、C がリソースに相当します。

## 条件とキー
<a name="conditions"></a>

*条件*とは、アクセス権限についての制限や詳細のことです。「A は、条件 D に該当する場合 C に対して B を実行することを許可されている」というステートメントにおいては、D が条件に相当します。ポリシーの中でも、記述が最も詳細かつ複雑になるのが、この条件部分です。よく使用される条件の設定項目は以下のとおりです。
+ 日時 (特定の日付以前に到着したリクエストのみ処理するなど)
+ IP アドレス (特定の CIDR 範囲内の IP アドレスからのリクエストのみ処理するなど)

*キー*は、アクセス制限に使用される基本項目です。例えば、リクエストの日時がこれに相当します。

制限は、*条件*と*キー*の両方を使用して定義します。具体例を挙げて説明します。2010 年 5 月 30 日以前のアクセスを制限するには、`DateLessThan` という条件を使用します。`aws:CurrentTime` と呼ばれるキーを使用して それを `2010-05-30T00:00:00Z` の値に設定します。 AWS では使用できる条件やキーを定義します。 AWS サービス自体 (Amazon SQS や Amazon SNS など) も、サービス固有のキーを定義する場合があります。詳細については、「[Amazon SNS API のアクセス許可: アクションとリソースのリファレンス](sns-access-policy-language-api-permissions-reference.md)」を参照してください。

## リクエスタ
<a name="requester"></a>

*リクエスタ*は、 AWS サービスにリクエストを送信し、特定のリソースへのアクセスを要求するユーザーです。リクエスタは、「D が適用される C への B の実行を許可しますか? AWS 」というリクエストを に送信します。

## 評価
<a name="evaluation"></a>

*評価*は、該当するポリシーに基づいて受信リクエストを拒否するか許可するかを判断するために AWS サービスが使用するプロセスです。評価論理の詳細については、「[評価論理](sns-access-policy-language-evaluation-logic.md)」を参照してください。

## エフェクト
<a name="effect"></a>

エフェクトとは、ポリシーのステートメントが評価時に返す結果のことです。この値はポリシーのステートメントを記述するときに指定します。使用可能な値は deny と allow です。

例えば、南極大陸からのすべてのリクエストを拒否するステートメントを含むポリシーを記述できます (リクエストの送信元 IP アドレスが南極大陸に割り当てられている場合、エフェクトの値を deny とします)。または、南極大陸*以外*からのすべてのリクエストを*許可*するステートメントを含むポリシーを記述できます (リクエストの送信元が南極大陸でなければ、エフェクトの値は allow となります)。2 つのステートメントは同じことを行うように見えますが、アクセスポリシー言語の論理上では異なるものです。詳細については、「[評価論理](sns-access-policy-language-evaluation-logic.md)」を参照してください。

エフェクトに特定できる値は allow と deny の 2 つだけですが、ポリシーの評価結果には、*デフォルトで拒否*、*許可*および*明示的拒否*の 3 種類があります。詳細については、以下のコンセプトおよび「[評価論理](sns-access-policy-language-evaluation-logic.md)」を参照してください。

## デフォルトで拒否
<a name="Define_SoftDeny"></a>

*デフォルトで拒否*とは、ポリシーに許可または明示的拒否が指定されていない場合に、デフォルトで適用される拒否のことです。

## 許可
<a name="allow"></a>

*許可*とは、ステートメントに effect=allow が指定されていて、許可条件がすべて満たされている場合に返される結果です。例えば、2010 年 4 月 30 日午後 1 時までに受信されたリクエストが許可されます。許可は、すべてのデフォルトで拒否に優先して適用されますが、明示的拒否が 1 つでもあれば適用されません。

## 明示的拒否
<a name="Define_HardDeny"></a>

*明示的拒否*とは、ステートメントに effect=deny が指定されていて、拒否条件がすべて満たされている場合に返される結果です。例えば、送信元が南極大陸であるすべてのリクエストが拒否されます。その他のポリシーによって許可されている場合においても、南極から来たリクエストに対しては常に拒否します。

# Amazon SNS のアクセスコントロールアーキテクチャの概要
<a name="sns-access-policy-language-architectural-overview"></a>

以下の図と表に、リソースのアクセスコントロールに関与する主要コンポーネントとそのインタラクティブな関わり合いを表します。

![\[AWS のサービスのアクセスコントロールのフロー。リソース所有者が、ポリシーを通じてリソース (Amazon SQS キューなど) を管理する方法を示します。これらのポリシーは、 AWS サービスのアクセスポリシー言語評価コードによって評価され、リクエスタからの受信リクエストにリソースへのアクセスを許可するか拒否するかを決定します。この図に含まれている番号は、リソース所有者、リソース、ポリシー、受信リクエスト、評価ロジックに対応しています。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/AccessPolicyLanguage_Arch_Overview.gif)



|  |  | 
| --- |--- |
| 1 |  お客様＝リソース所有者。  | 
| 2 |  リソース (Amazon SQS キューなど、 AWS サービス内に含まれています）。  | 
| 3 |  ポリシー。 通常、1 つのリソースに 1 つのポリシーを適用しますが、複数のポリシーを適用することも可能です。 AWS サービス自体には、ポリシーのアップロードと管理に使用する API が用意されています。  | 
| 4 |  リクエスタとその AWS サービスへの受信リクエスト。  | 
| 5 |  アクセスポリシー言語の評価コード。 これは、受信リクエストを該当するポリシーと照らし合わせて評価し、リクエスタがリソースへのアクセスを許可するかどうかを決定する AWS サービス内のコードのセットです。このサービスによる判定の詳細については、「[評価論理](sns-access-policy-language-evaluation-logic.md)」を参照してください。  | 

# Amazon SNS でアクセスポリシー言語を使用する
<a name="sns-access-policy-language-using"></a>

以下の図と表は、アクセスコントロールとアクセスポリシー言語の連携方法の通常プロセスを表しています。

![\[AWSにおける、アクセスポリシー言語を使用した、アクセスコントロールの機能を示す 6 段階のプロセス。まず、リソースのポリシーを作成し、システムに追加して、リクエスタがリクエストを行います。 AWS のサービス により適用可能なポリシーが評価され、最後に評価に基づいてリクエストの許可または拒否が行われます。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/AccessPolicyLanguage_Basic_Flow.gif)



**アクセスコントロールをアクセスポリシー言語と使用するプロセス**  

|  |  | 
| --- |--- |
|  1  |  リソース用ポリシーを記述します。 例えば、Amazon SNS トピックのアクセス権限を指定するポリシーを記述します。  | 
|  2  |  ポリシーを にアップロードします AWS。  AWS サービス自体には、ポリシーのアップロードに使用する API が用意されています。例えば、特定の Amazon SNS トピック用のポリシーをアップロードするために Amazon SNS `SetTopicAttributes` アクションを使用します。  | 
|  3  |  ある人物から、リソースの使用許可を求めるリクエストが送信されます。 例えば、ユーザーがトピックの 1 つを利用するために Amazon SNS へリクエストを送信します。  | 
|  4  |   AWS サービスは、リクエストに適用できるポリシーを決定します。 例えば、Amazon SNS がすべての利用可能な Amazon SNS ポリシーを調べ、リソースの内容とリクエスタに基づいて、どのポリシーが適用可能であるかを決定します。  | 
|  5  |   AWS サービスはポリシーを評価します。 例えば、Amazon SNS は、ポリシーを評価し、トピックの使用許可をリクエスタに付与するかどうかを決定します。決定論理の詳細については、「[評価論理](sns-access-policy-language-evaluation-logic.md)」を参照してください。  | 
|  6  |   AWS サービスはリクエストを拒否するか、処理を続行します。 例えば、ポリシーの評価結果に基づいて、サービスによって「アクセス拒否」エラーがリクエスタに返されるか、リクエストのプロセスを継続するかのどちらかが行われます。  | 

# 評価論理
<a name="sns-access-policy-language-evaluation-logic"></a>

評価時の目標は、特定のリクエスト付与を許可するか拒否するかを判断することです。評価論理は、以下の複数の基本ルールに従っています。
+ デフォルトでは、リソースの使用許可を求めるリクエストについては、リクエスタが自分自身である場合を除いて、拒否を適用する
+ 許可はすべてのデフォルトで拒否に優先する
+ 明示的拒否はすべての許可に優先する
+ ポリシー評価の順序は重要ではない

以下のフローチャートと考察では、決定方法についての詳細説明を紹介します。

![\[リソースへのアクセスリクエストを許可または拒否するかどうかを決定する AWS ために で使用される意思決定プロセスを示します。デフォルトの拒否で始まり、適用可能なポリシーによる明示的な拒否がないかを確認し、次に許可の指示を探して、最終的に許可が見つからない場合は、リクエストはデフォルトで拒否されます。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/AccessPolicyLanguage_Evaluation_Flow.gif)



|  |  | 
| --- |--- |
| 1 |  決定はデフォルトで拒否から始まります。  | 
| 2 |   次に、エンフォースメントコードは、リクエストに適用可能なポリシーすべてを、リソース、プリンシパル、アクション、および条件に基づいて評価します。 エンフォースメントコードによるポリシー評価の順序は重要ではありません。  | 
| 3 |   前述のすべてのポリシーにおいて、リクエストに適応する明示的拒否のインストラクションがエンフォースメントコードによって検索されます。 仮に 1 つでも見つかった場合、エンフォースメントコードは「拒否」の決定を返し、プロセスを終了します (これは明示的拒否となります。詳細については、「[明示的拒否](sns-access-policy-language-key-concepts.md#Define_HardDeny)」を参照してください)。  | 
| 4 |  明示的拒否が見つからなかった場合、リクエストに適応する「許可」のインストラクションがエンフォースメントコードによって検索されます。 仮に 1 つでも見つかった場合、エンフォースメントコードは「許可」の決定を返し、プロセスは完了します (サービスはリクエストのプロセスを継続します)。  | 
| 5 |  許可が見つからなかった場合、最終決定は｢拒否｣となります (明示的拒否または許可が見つからない場合、*デフォルトで拒否*として見なされるためです (詳細については、「[デフォルトで拒否](sns-access-policy-language-key-concepts.md#Define_SoftDeny)」を参照してください)。  | 

## 明示的拒否とデフォルトで拒否の相互作用
<a name="denials"></a>

ポリシーがリクエストに直接適用されない場合の結果は、デフォルトで拒否となります。たとえば、ユーザーが Amazon SNS の使用をリクエストしたが、トピックのポリシーがユーザーのポリシーを AWS アカウント まったく参照していない場合、そのポリシーはデフォルトの拒否になります。

ステートメントの条件が満たされていない場合においても、ポリシーの結果としてデフォルトで拒否となります。ステートメントのすべての条件が満たされている場合、ポリシーのエフェクトエレメントの値に基づいて、ポリシーの結果は許可または明示的拒否のどちらかとなります。条件が満たされていない際にポリシーが行為を特定していない場合、デフォルトの結果としてデフォルトで拒否となります。

例えば、南極大陸から来るリクエストを防ぐとします。その場合、南極大陸から来ていないリクエストにのみ許可を与えるポリシー (ポリシー A1 とする) を記述します。以下の図はポリシーについて解説しています。

![\[南極から来ていないリクエストに許可を与えるポリシー (ポリシー A1) を示します。これは「許可」を適用するためには、リクエストは南極から発信されていてはならないという条件を示しています。条件が満たされない場合、デフォルトのアクションはリクエストを拒否することです。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/AccessPolicyLanguage_Allow_Override_1.gif)


リクエストがアメリカから送られてきた場合、条件を満たしています (リクエストが南極大陸からのものでないため)。従って、そのリクエストは許可されます。しかし、リクエストが南極大陸から送られてきた場合、条件を満たしていないため、ポリシーの結果としてデフォルトで拒否となります。

以下の図のとおり、ポリシー (ポリシー A2 とする) を書き換えることにより、結果を明示的拒否に変えることができます。南極大陸から送られてきた場合、ポリシーによってリクエストが明示的に拒否されます。

![\[南極からのリクエストを明示的に拒否するポリシー (ポリシー A2) を示します。条件が満たされた場合 (リクエストが南極から発信された場合）にポリシーによって明示的な拒否が行われることを示しています。つまり、これらの状況ではリクエストは常に拒否されます。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/AccessPolicyLanguage_Allow_Override_2.gif)


リクエストが南極大陸から送られてきた場合、条件を満たしているため、ポリシーの結果として明示的な拒否となります。

デフォルトで拒否と明示的拒否の区別は重要です。許可によってデフォルトで拒否は上書きできますが、明示的拒否は上書きできないためです。例えば、リクエストが 2010 年 6 月 1 日に到着すれば許可するという別のポリシーがあるとしましょう。このポリシーが、南極大陸からのアクセスを制限しているポリシーと併用されている場合、全体の結果にどのような影響を及ぼすでしょうか? 日付ベースのポリシー (ポリシー B とする) が前述のポリシー A1 および A2 と併用されている場合、全体の結果が比較されます。シナリオ 1 は、ポリシー A1 とポリシー B が併用されている場合、シナリオ 2 は、ポリシー A2 とポリシー B が併用されている場合です。以下の図と考察は、2010 年 6 月 1 日に南極大陸からリクエストが来た場合についての結果を示しています。

![\[リクエストの送信元 (南極) とリクエスト日 (2010 年 6 月 1 日) に基づいて、ポリシーによってアクセスが制限される 2 つのシナリオを比較します。シナリオ 1 では、ポリシーの組み合わせにより、デフォルトの拒否が許可によって上書きされ、リクエストは許可されます。シナリオ 2 では、あるポリシーによる明示的な拒否によって別のポリシーによる許可が上書きされ、結果としてリクエストは拒否されます。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/AccessPolicyLanguage_Allow_Override.gif)


このセクションの最初に説明したとおり、シナリオ 1 においては、ポリシー A1 はデフォルトで拒否を返します。2010 年 6 月 1 日に到着したリクエストは、当然のことながら許可されるため、ポリシー B は許可を返します。ポリシー B による許可は、ポリシー A1 のデフォルトで拒否に優先するため、結果としてリクエストは許可されます。

このセクションの最初に説明したとおり、シナリオ 2 においては、ポリシー A2 は明示的拒否を返します。再度、ポリシー B は許可を返します。ポリシー A2 による明示的拒否は、ポリシー B の許可に優先するため、結果としてリクエストは拒否されます。

# Amazon SNS アクセスコントロールのケース例
<a name="sns-access-policy-use-cases"></a>

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

## トピック AWS アカウント へのアクセスを許可する
<a name="sns-grant-aws-account-access-to-topic"></a>

Amazon SNS にトピックがあり、メッセージの発行など、そのトピックに対して特定のアクションを実行 AWS アカウント することを 1 つ以上の に許可するとします。これは、Amazon SNS API アクション `AddPermission` を使用して実行できます。

`AddPermission` アクションでは、トピック、 AWS アカウント ID のリスト、アクションのリスト、ラベルを指定できます。これによって、Amazon SNS は新しいポリシーステートメントを自動的に生成し、トピックのアクセスコントロールポリシーに追加します。ポリシーステートメントを自分で作成する必要はありません。Amazon SNS が自動的に作成します。後でポリシーを削除する必要がある場合は、`RemovePermission` を呼び出して、アクセス許可の追加時に使用したラベルを指定して削除できます。

たとえば、トピック arn:aws:sns:us-east-2:444455556666:MyTopic `AddPermission`で を呼び出す場合、 AWS アカウント ID 1111-2222-3333、 `Publish`アクション、ラベル を指定すると`grant-1234-publish`、Amazon SNS は次のポリシーステートメントを生成し、トピックのアクセスコントロールポリシーに挿入します。

```
{
  "Statement": [{
    "Sid": "grant-1234-publish",
    "Effect": "Allow",
    "Principal": {
      "AWS": "111122223333"
    },
    "Action": ["sns:Publish"],
    "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic"
  }]
}
```

このステートメントが追加されると、 AWS アカウント 1111-2222-3333 にはトピックにメッセージを発行するアクセス許可が付与されます。

**追加情報:**
+ **カスタムポリシー管理:** `AddPermission` はアクセス許可の付与には便利ですが、条件の追加や特定の IAM ロールまたはサービスへのアクセス許可の付与など、より複雑なシナリオでは、多くの場合、トピックのアクセスコントロールポリシーを手動で管理すると便利です。これを行うには、`SetTopicAttributes` API を使用して、ポリシー属性を直接更新します。
+ **セキュリティのベストプラクティス:** アクセス許可を付与する場合は、信頼できる AWS アカウント またはエンティティのみが Amazon SNS トピックにアクセスできるように注意してください。セキュリティを維持するには、トピックにアタッチされているポリシーを定期的に確認および監査します。
+ **ポリシーの制限:** Amazon SNS ポリシーのサイズと複雑さには制限があることに注意してください。多くのアクセス許可や複雑な条件を追加する必要がある場合は、ポリシーがこれらの制限内に収まるようにしてください。

## HTTPS へのサブスクリプションの制限
<a name="sns-limit-subscriptions-to-https"></a>

Amazon SNS トピックの通知配信プロトコルを HTTPS に制限するには、カスタムポリシーを作成する必要があります。Amazon SNS の `AddPermission` アクションでは、トピックへのアクセスを許可するときにプロトコル制限を指定することはできません。したがって、この制限を適用するポリシーを手動で作成し、`SetTopicAttributes` アクションを使用してポリシーをトピックに適用する必要があります。

サブスクリプションを HTTPS に制限するポリシーを作成する方法は次のとおりです。

1. **ポリシーを作成します。**ポリシーは、アクセスを許可する AWS アカウント ID を指定し、HTTPS サブスクリプションのみを許可する条件を適用する必要があります。以下は、使用されるプロトコルが HTTPS である場合にのみ、トピックをサブスクライブするアクセス許可を AWS アカウント ID 1111-2222-3333 に付与するポリシーの例です。

   ```
   {
     "Statement": [{
       "Sid": "Statement1",
       "Effect": "Allow",
       "Principal": {
         "AWS": "111122223333"
       },
       "Action": ["sns:Subscribe"],
       "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
       "Condition": {
         "StringEquals": {
           "sns:Protocol": "https"
         }
       }
     }]
   }
   ```

1. **ポリシーを適用します。**Amazon SNS API の `SetTopicAttributes`アクションを使用して、このポリシーをトピックに適用します。トピックの `Policy` 属性を、作成した JSON ポリシーに設定します。

   ```
   snsClient.setTopicAttributes(SetTopicAttributesRequest.builder()
           .topicArn("arn:aws:sns:us-east-2:444455556666:MyTopic")
           .attributeName("Policy")
           .attributeValue(jsonPolicyString)  // The JSON policy as a string
           .build());
   ```

**追加情報:**
+ **アクセスコントロールのカスタマイズ。**このアプローチにより、サブスクリプションプロトコルの制限など、`AddPermission` アクションだけでは実行できない、より詳細なアクセスコントロールを適用できます。カスタムポリシーは、プロトコルの強制や IP アドレスの制限など、特定の条件を必要とするシナリオに柔軟性を提供します。
+ **セキュリティのベストプラクティス。**サブスクリプションを HTTPS に制限すると、転送中のデータが暗号化され、通知のセキュリティが向上します。トピックポリシーを定期的に確認し、セキュリティとコンプライアンスの要件を満たしていることを確認します。
+ **ポリシーのテスト。**ポリシーを本番環境に適用する前に、開発環境でテストし、想定どおりに動作することを確認します。これにより、偶発的なアクセスの問題や意図しない制限を防ぐことができます。

## Amazon SQS キューに発行する。
<a name="sns-publish-messages-to-sqs-queue"></a>

Amazon SNS トピックから Amazon SQS キューにメッセージを発行するには、Amazon SQS キューに適切なアクセス許可を設定する必要があります。Amazon SNS と Amazon SQS はどちらも AWSアクセスコントロールポリシー言語を使用しますが、Amazon SQS Amazon SNS キューにポリシーを明示的に設定する必要があります。

これを実現するには、`SetQueueAttributes` アクションを使用して Amazon SQS キューにカスタムポリシーを適用します。Amazon SNS とは異なり、Amazon SQS は `AddPermission` アクションによる条件付きポリシーステートメントの作成をサポートしていません。したがって、ポリシーを手動で作成する必要があります。

以下は、キューにメッセージを送信するアクセス許可を Amazon SNS に付与する Amazon SQS ポリシーの例です。このポリシーは、Amazon SNS トピックではなく、Amazon SQS キューに関連付けられていることに注意してください。指定されたアクションは Amazon SQS アクションであり、リソースはキューの Amazon リソースネーム (ARN) です。`GetQueueAttributes` アクションを使用して、キューの ARN を取得できます。

```
{
  "Statement": [{
    "Sid": "Allow-SNS-SendMessage",
    "Effect": "Allow",
    "Principal": {
      "Service": "sns.amazonaws.com"
    },
    "Action": ["sqs:SendMessage"],
    "Resource": "arn:aws:sqs:us-east-2:444455556666:MyQueue",
    "Condition": {
      "ArnEquals": {
        "aws:SourceArn": "arn:aws:sns:us-east-2:444455556666:MyTopic"
      }
    }
  }]
}
```

このポリシーは、送信されるメッセージのソースに基づいて、SQS キューへのアクセスを制限する `aws:SourceArn` 条件を使用します。これにより、指定された SNS トピック (この場合は、arn:aws:sns:us-east-2:444455556666:MyTopic) から発信されたメッセージのみがキューに配信されます。

**追加情報:**
+ **キュー ARN。**`GetQueueAttributes` アクションを使用して、Amazon SQS キューの正しい ARN を取得していることを確認します。この ARN は、正しいアクセス許可を設定するために不可欠です。
+ **セキュリティのベストプラクティス。**ポリシーを設定するときは、常に最小特権の原則に従います。Amazon SQS キューとやり取りするために必要な権限のみを Amazon SNS トピックに付与し、ポリシーを定期的にレビューして、ポリシーが最新かつ安全であることを確認します。
+ **Amazon SNS のデフォルトポリシー。**Amazon SNS は、他の AWS のサービス または アカウントが新しく作成されたトピックにアクセスすることを許可するデフォルトのポリシーを自動的に付与しません。デフォルトでは、Amazon SNS トピックはアクセス許可なしで作成されます。つまり、それらのトピックはプライベートであり、トピックを作成したアカウントのみがアクセスできます。他の、アカウント AWS のサービス、またはプリンシパルのアクセスを有効にするには、 トピックにアクセスポリシーを明示的に定義してアタッチする必要があります。これは最小特権の原則に従い、意図しないアクセスがデフォルトで付与されないようにするための措置です。
+ **テストと検証。**ポリシーを設定したら、Amazon SNS トピックにメッセージを発行し、それらが Amazon SQS キューに正常に配信されることを確認して、統合をテストします。これにより、ポリシーが正しく設定されていることを確認できます。

## Amazon S3 イベント通知がトピックに発行することを許可する
<a name="sns-allow-s3-bucket-to-publish-to-topic"></a>

別の の Amazon S3 バケット AWS アカウント が Amazon SNS トピックにイベント通知を発行できるようにするには、それに応じてトピックのアクセスポリシーを設定する必要があります。そのためには、特定の AWS アカウント から Amazon S3 サービスにアクセス許可を付与するカスタムポリシーを作成し、そのポリシーを Amazon SNS トピックに適用します。

設定の方法は次のとおりです。

1. **ポリシーを作成します。**ポリシーは、Amazon SNS トピックに発行するために必要なアクセス許可を Amazon S3 サービス (s3.amazonaws.com) に付与します。`SourceAccount` 条件を使用して AWS アカウント、Amazon S3 バケットを所有する指定された のみがトピックに通知を発行できるようにします。

   次に、ポリシーの例を示します。

   ```
   {
     "Statement": [{
       "Effect": "Allow",
        "Principal": { 
         "Service": "s3.amazonaws.com" 
       },
       "Action": "sns:Publish",
       "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic",
       "Condition": {
         "StringEquals": {
           "AWS:SourceAccount": "444455556666"
         }       
       }
     }]
   }
   ```
   + **トピック所有者** – 111122223333 は、Amazon SNS トピックを所有する AWS アカウント ID です。
   + **Amazon S3 バケット所有者 **– 444455556666 は、Amazon S3 バケット送信通知を所有する AWS アカウント ID です。 Amazon S3 

1. **ポリシーを適用します。**`SetTopicAttributes` アクションを使用して、Amazon SNS トピックにこのポリシーを設定します。これにより、トピックのアクセスコントロールが更新され、カスタムポリシーで指定されたアクセス許可が含まれます。

   ```
   snsClient.setTopicAttributes(SetTopicAttributesRequest.builder()
           .topicArn("arn:aws:sns:us-east-2:111122223333:MyTopic")
           .attributeName("Policy")
           .attributeValue(jsonPolicyString)  // The JSON policy as a string
           .build());
   ```

**追加情報:**
+ **`SourceAccount` 条件の使用。**この`SourceAccount`条件により、この場合は指定された AWS アカウント (444455556666) から発生したイベントのみが Amazon SNS トピックをトリガーできるようになります。これは、不正なアカウントがトピックに通知を送信できないようにするセキュリティ対策です。
+ **`SourceAccount` をサポートするその他のサービス。**`SourceAccount` 条件は、次のサービスでサポートされています。発信元アカウントに基づいて Amazon SNS トピックへのアクセスを制限する場合は、この条件を使用することが重要です。
  + Amazon API Gateway
  + Amazon CloudWatch
  + Amazon DevOps Guru
  + Amazon EventBridge
  + Amazon GameLift Servers
  + Amazon Pinpoint SMS および音声 API
  + Amazon RDS
  + Amazon Redshift
  + Amazon Glacier
  + Amazon SES
  + Amazon Simple Storage Service
  + AWS CodeCommit
  + Directory Service
  + AWS Lambda
  + AWS Systems Manager Incident Manager
+ **テストと検証。**ポリシーを適用したら、Amazon S3 バケットでイベントをトリガーしてセットアップをテストし、Amazon SNS トピックに正常に発行されることを確認します。これにより、ポリシーが正しく設定されていることを確認します。
+ **セキュリティのベストプラクティス。**Amazon SNS トピックポリシーを定期的に確認して監査し、セキュリティ要件に準拠していることを確認します。安全なオペレーションを維持するには、信頼できるアカウントとサービスのみにアクセスを制限することが不可欠です。

## Amazon SES が別のアカウントが所有するトピックへの発行を許可する
<a name="sns-allow-specified-service-to-publish-to-topic"></a>

別の が所有するトピック AWS のサービス への発行を別の に許可できます AWS アカウント。111122223333 アカウントにサインインし、Amazon SES を開き、E メールを作成したとします。この E メールに関する通知を、444455556666 アカウントが所有する Amazon SNS トピックに発行するには、以下のようなポリシーを作成します。そのためには、プリンシパル (他のサービス) と各リソースの所有権に関する情報を提供する必要があります。`Resource` ステートメントは、トピック所有者のアカウント ID 444455556666 を含むトピック ARN を提供します。`"aws:SourceOwner": "111122223333"` ステートメントは、アカウントがその E メールを所有することを指定します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "Service": "ses.amazonaws.com"
      },
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
      "Condition": {
        "StringEquals": {
          "aws:SourceOwner": "111122223333"
        }
      }
    }
  ]
}
```

------

Amazon SNS にイベントを発行する場合、以下のサービスで `aws:SourceOwner` を使用できます。
+ Amazon API Gateway
+ Amazon CloudWatch
+ Amazon DevOps Guru
+ Amazon GameLift Servers
+ Amazon Pinpoint SMS および音声 API
+ Amazon RDS
+ Amazon Redshift
+ Amazon SES
+ AWS CodeCommit
+ Directory Service
+ AWS Lambda
+ AWS Systems Manager Incident Manager

## `aws:SourceAccount` と `aws:SourceOwner`
<a name="source-account-versus-source-owner"></a>

**重要**  
`aws:SourceOwner` は廃止されました。新しいサービスを Amazon SNS と統合できるのは、`aws:SourceArn` と `aws:SourceAccount` を使用した場合のみです。Amazon SNS は、現在 `aws:SourceOwner` をサポートしている既存のサービスとの下位互換性を引き続き維持しています。

`aws:SourceAccount` 条件キーと `aws:SourceOwner` 条件キーは、一部の AWS のサービス が Amazon SNS トピックに発行するときに、それぞれ設定されます。サポートされている場合、値は、サービスがデータを発行する の 12 桁の AWS アカウント ID になります。サービスによってサポートするものは変わります。
+ Amazon S3 通知の使用方法`aws:SourceAccount`と、その条件をサポートする AWS サービスのリスト[Amazon S3 イベント通知がトピックに発行することを許可する](#sns-allow-s3-bucket-to-publish-to-topic)については、「」を参照してください。
+ Amazon SES が を使用する方法`aws:SourceOwner`と、その条件をサポートする AWS サービスのリスト[Amazon SES が別のアカウントが所有するトピックへの発行を許可する](#sns-allow-specified-service-to-publish-to-topic)については、「」を参照してください。

## の組織内のアカウントが別のアカウントのトピックに発行 AWS Organizations することを許可する
<a name="sns-allow-organization-to-publish-to-topic-in-another-account"></a>

この AWS Organizations サービスは、請求の一元管理、アクセスとセキュリティの制御、 間でのリソースの共有に役立ちます AWS アカウント。

組織 ID は [Organizations コンソール](https://console.aws.amazon.com/organizations/)で確認できます。詳細については、「[管理アカウントからの組織の詳細の表示](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html#orgs_view_org)」を参照してください。

この例では、組織 AWS アカウント 内のすべての がアカウント `MyTopic`の Amazon SNS トピックに発行`myOrgId`できます`444455556666`。ポリシーでは、`aws:PrincipalOrgID` グローバル条件キーを使用して組織 ID 値を確認します。

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "myOrgId"
                }
            }
        }
    ]
}
```

## CloudWatch アラームに別のアカウントのトピックへの発行を許可する
<a name="sns-allow-cloudwatch-alarm-to-publish-to-topic-in-another-account"></a>

異なる AWS アカウント間で CloudWatch アラームを使用して Amazon SNS トピックを呼び出すには、次の手順を実行します。この例では、次の 2 つのアカウントを使用します。
+ **アカウント A** は CloudWatch アラームの作成に使用されます。
+ **アカウント B** は SNS トピックの作成に使用されます。

**アカウント B で SNS トピックを作成する**

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

1. ナビゲーションペインで、[**Topics (トピック)**]、[**Create topic (トピックの作成)**] の順に選択してください。

1. トピックタイプの **[標準]** を選択し、トピックの名前を作成します。

1. **[トピックの作成]** を選択し、トピックの **ARN** をコピーします。

1. ナビゲーションペインで、**[Subscriptions]** (サブスクリプション) を選択して、**[Create subscription]** (サブスクリプションの作成) を選択します。

1. **[トピック ARN]** セクションにトピックの ARN を追加し、プロトコルに **[E メール]** を選択して、**E メールアドレス**を入力します。

1. **[サブスクリプションの作成]** を選択し、E メールを調べて、**サブスクリプションを確認します**。

**アカウント A で CloudWatch アラームを作成する**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[アラーム]** を選択し、**[アラームを作成]** を選択します。

1. アラームを作成していない場合は、ここで作成します。アラームが作成されている場合は、**メトリクス**を選択し、しきい値と比較パラメータの詳細を指定します。

1. **[アクションの設定]** の **[通知]** で **[トピック ARN を使用して他のアカウントに通知]** を選択し、アカウント B の**トピック ARN** を入力します。

1. アラームの名前を作成し、**[アラームを作成]** を選択します。

**アカウント B の SNS トピックのアクセスポリシーを更新する**

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

1. ナビゲーションペインで、**[トピック]** を選択し、トピックを選びます。

1. **[編集]** を選択し、ポリシーに以下のコードを追加します。

**注記**  
以下のポリシーの例に示されている値を、独自の値に置き換えてください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_policy_ID",
    "Statement": [
        {
            "Sid": "__default_statement_ID",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "SNS:GetTopicAttributes",
                "SNS:SetTopicAttributes",
                "SNS:AddPermission",
                "SNS:RemovePermission",
                "SNS:DeleteTopic",
                "SNS:Subscribe",
                "SNS:ListSubscriptionsByTopic",
                "SNS:Publish"
            ],
            "Resource": "arn:aws:cloudwatch:us-west-1:111122223333:alarm:",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cloudwatch:us-west-1:111122223333:alarm:"
                }
            }
        }
    ]
}
```

------

**アラームをテストする**

アラームをテストするには、メトリクスデータポイントに基づいてアラームのしきい値を変更するか、アラームの状態を手動で変更します。アラームのしきい値またはアラームの状態を変更すると、E メール通知が届きます。

**ローカルの Amazon SNS トピックを使用してメッセージを転送するための回避策**

CloudWatch アラーム用にクロスアカウントの Amazon SNS 通知を有効にするには、次の手順を実行します。

1. **CloudWatch アラーム** (111122223333) と同じアカウントに [**Amazon SNS トピック**](sns-create-topic.md)を作成します。

1. その Amazon SNS トピックに [**Lambda 関数**](lambda-console.md)または [Amazon EventBridge ルール](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-s3-object-created-tutorial.html)をサブスクライブします。

1. これにより、Lambda 関数や EventBridge ルールは、ターゲットアカウント (444455556666) の Amazon SNS トピックにメッセージを発行できます。

## Amazon SNS トピックの発行を特定の VPC エンドポイントのみからに制限する
<a name="sns-restrict-publication-only-from-specified-vpc-endpoint"></a>

この場合、アカウント 444455556666 内のトピックは、ID `vpce-1ab2c34d` の VPC エンドポイントのみからの発行を許可されます。

```
{
  "Statement": [{
    "Effect": "Deny",
    "Principal": "*",
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
    "Condition": {
      "StringNotEquals": {
        "aws:sourceVpce": "vpce-1ab2c34d"
      }
    }
  }]
}
```

# Amazon SNS と IAM が連携する仕組み
<a name="security_iam_service-with-iam"></a>

IAM を使用して Amazon SNS へのアクセスを管理する前に、Amazon SNS で使用できる IAM 機能について理解しておく必要があります。






**Amazon Simple Notification Service で使用できる IAM の機能**  

| IAM 機能 | Amazon SNS のサポート | 
| --- | --- | 
|  [アイデンティティベースのポリシー](security-iam.md#security_iam_service-with-iam-id-based-policies)  |   あり  | 
|  [リソースベースのポリシー](security-iam.md#security_iam_service-with-iam-resource-based-policies)  |  はい  | 
|  [ポリシーアクション](security-iam.md#security_iam_service-with-iam-id-based-policies-actions)  |   あり  | 
|  [ポリシーリソース](security-iam.md#security_iam_service-with-iam-id-based-policies-resources)  |   はい  | 
|  [ポリシー条件キー (サービス固有)](security-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   はい  | 
|  [ACL](security-iam.md#security_iam_service-with-iam-acls)  |   なし   | 
|  [ABAC (ポリシー内のタグ)](security-iam.md#security_iam_service-with-iam-tags)  |   部分的  | 
|  [一時認証情報](security-iam.md#security_iam_service-with-iam-roles-tempcreds)  |   あり  | 
|  [プリンシパルアクセス権限](security-iam.md#security_iam_service-with-iam-principal-permissions)  |   あり  | 
|  [サービスロール](security-iam.md#security_iam_service-with-iam-roles-service)  |   あり  | 
|  [サービスリンクロール](security-iam.md#security_iam_service-with-iam-roles-service-linked)  |   いいえ   | 

Amazon SNS およびその他の AWS のサービスがほとんどの IAM 機能と連携する方法の概要については、IAM *ユーザーガイド*の[AWS 「IAM と連携する のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。

# AWS の 管理ポリシー Amazon Simple Notification Service
<a name="security-iam-awsmanpol"></a>



 AWS 管理ポリシーは、 によって作成および管理されるスタンドアロンポリシーです AWS。 AWS 管理ポリシーは、ユーザー、グループ、ロールにアクセス許可の割り当てを開始できるように、多くの一般的なユースケースにアクセス許可を付与するように設計されています。

 AWS 管理ポリシーは、すべての AWS お客様が使用できるため、特定のユースケースに対して最小特権のアクセス許可を付与しない場合があることに注意してください。ユースケースに固有の[カスタマー管理ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)を定義して、アクセス許可を絞り込むことをお勧めします。

 AWS 管理ポリシーで定義されているアクセス許可は変更できません。が AWS マネージドポリシーで定義されたアクセス許可 AWS を更新すると、ポリシーがアタッチされているすべてのプリンシパル ID (ユーザー、グループ、ロール) に影響します。 AWS は、新しい が起動されるか、新しい API オペレーション AWS のサービス が既存のサービスで使用できるようになったときに、 AWS マネージドポリシーを更新する可能性が最も高くなります。

詳細については、「**IAM ユーザーガイド」の「[AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)」を参照してください。

 





## AWS マネージドポリシー: AmazonSNSFullAccess
<a name="security-iam-awsmanpol-AmazonSNSFullAccess"></a>

`AmazonSNSFullAccess` は、 を使用して Amazon SNS へのフルアクセスを提供します AWS マネジメントコンソール。このポリシーには、Amazon SNS を使用して呼び出 AWS End User Messaging SMS されたときの の以下の読み取りおよび書き込みアクションも含まれています。 Amazon SNS このポリシーをユーザー、グループ、またはロールにアタッチできます。

**アクセス許可の詳細**

次のアクセス許可は、Amazon SNS API を使用する場合にのみ適用されます。
+ `sns:*` – Amazon SNS に関連するアクションを実行するための完全なアクセス許可を許可します。このワイルドカード (\$1) は、ユーザーが可能なすべての Amazon SNS アクションを実行できることを意味します。
+ `sms-voice:DescribeVerifiedDestinationNumbers` – AWS アカウント内で SMS メッセージを送信するために検証された電話番号のリストを取得できます。
+ `sms-voice:CreateVerifiedDestinationNumber` – 内の SMS メッセージングサービスで使用する新しい電話番号を検証できます AWS。
+ `sms-voice:SendDestinationNumberVerificationCode` – AWS内で SMS メッセージングの検証中の電話番号に検証コードを送信できます。
+ `sms-voice:SendTextMessage` – 新しいテキストメッセージを作成し、受信者の電話番号に送信できます。`SendTextMessage` は、呼び出されるたびに SMS メッセージを 1 人の受信者にのみ送信します。
+ `sms-voice:DeleteVerifiedDestinationNumber` – 内の検証済み番号のリストから電話番号を削除できます。 AWS アカウント
+ `sms-voice:VerifyDestinationNumber` – AWS内の SMS メッセージングサービスに使用する電話番号の検証プロセスを開始および完了できます。
+ `sms-voice:DescribeAccountAttributes` – AWS内の SMS メッセージングサービスに関連するアカウントレベルの属性に関する詳細情報を取得できます。
+ `sms-voice:DescribeSpendLimits` – AWS アカウント内の SMS メッセージングサービスに関連する支出制限に関する情報を取得できます。
+ `sms-voice:DescribePhoneNumbers` – AWS アカウント 内の SMS メッセージングサービスに関連する電話番号に関する詳細情報を取得できます。
+ `sms-voice:SetTextMessageSpendLimitOverride` – 内の SMS テキストメッセージの使用制限を設定または上書きできます。 AWS アカウント
+ `sms-voice:DescribeOptedOutNumbers` – AWS アカウントからの SMS メッセージの受信をオプトアウトした電話番号のリストを取得できます。
+ `sms-voice:DeleteOptedOutNumber` – 内のオプトアウトされた番号のリストから電話番号を削除できます。 AWS アカウント

**`AmazonSNSFullAccess` ポリシーの例**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SNSFullAccess",
            "Effect": "Allow",
            "Action": "sns:*",
            "Resource": "*"
        },
        {
            "Sid": "SMSAccessViaSNS",
            "Effect": "Allow",
            "Action": [
                "sms-voice:DescribeVerifiedDestinationNumbers",
                "sms-voice:CreateVerifiedDestinationNumber",
                "sms-voice:SendDestinationNumberVerificationCode",
                "sms-voice:SendTextMessage",
                "sms-voice:DeleteVerifiedDestinationNumber",
                "sms-voice:VerifyDestinationNumber",
                "sms-voice:DescribeAccountAttributes",
                "sms-voice:DescribeSpendLimits",
                "sms-voice:DescribePhoneNumbers",
                "sms-voice:SetTextMessageSpendLimitOverride",
                "sms-voice:DescribeOptedOutNumbers",
                "sms-voice:DeleteOptedOutNumber"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:CalledViaLast": "sns.amazonaws.com"
                }
            }
        }
    ]
}
```

------

このポリシーのアクセス許可を表示するには、「*AWS マネージドポリシーリファレンス*」の「[AmazonSNSFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSNSFullAccess.html)」を参照してください。

## AWS マネージドポリシー: AmazonSNSReadOnlyAccess
<a name="security-iam-awsmanpol-AmazonSNSReadOnlyAccess"></a>

`AmazonSNSReadOnlyAccess` は AWS マネジメントコンソールを使用して Amazon SNS への読み取り専用アクセスを提供します。このポリシーには、Amazon SNS を使用して呼び出 AWS End User Messaging SMS されたときの の次の読み取り専用アクションも含まれます。 Amazon SNS このポリシーをユーザー、グループ、およびロールにアタッチできます。

**アクセス許可の詳細**

次のアクセス許可は、Amazon SNS API を使用する場合にのみ適用されます。
+ `sns:GetTopicAttributes` – Amazon SNS トピックの属性を取得できます。これには、トピックの ARN (Amazon リソースネーム）、サブスクライバーのリスト、配信ポリシー、アクセスコントロールポリシー、トピックに関連付けられたその他のメタデータなどの情報が含まれます。
+ `sns:List*` – Amazon SNS リソースの `List` で始まるオペレーションを実行できます。これには、Amazon SNS に関連する、次のようなさまざまな要素を一覧表示するアクセス許可が含まれます。
  + `sns:ListTopics` – AWS アカウントですべての Amazon SNS トピックのリストを取得できます。
  + `sns:ListSubscriptions` – Amazon SNS トピックへのすべてのサブスクリプションのリストを取得できます。
  + `sns:ListSubscriptionsByTopic` – 特定の Amazon SNS トピックのすべてのサブスクリプションを一覧表示できます。
  + `sns:ListPlatformApplications` – モバイルプッシュ通知用に作成されたすべてのプラットフォームアプリケーションを一覧表示できます。
  + `sns:ListEndpointsByPlatformApplication` – プラットフォームアプリケーションに関連付けられたすべてのエンドポイントを一覧表示できます。
+ `sns:CheckIfPhoneNumberIsOptedOut` – 特定の電話番号が Amazon SNS を介した SMS メッセージの受信をオプトアウトしたかどうかを確認できます。
+ `sns:GetEndpointAttributes` – Amazon SNS プラットフォームアプリケーションに関連付けられたエンドポイントの属性を取得できます。これには、エンドポイントの有効なステータス、カスタムユーザーデータ、エンドポイントに関連付けられたその他のメタデータなどの属性が含まれる場合があります。
+ `sns:GetDataProtectionPolicy` – Amazon SNS トピックに関連付けられたデータ保護ポリシーを取得できます。
+ `sns:GetPlatformApplicationAttributes` – Amazon SNS プラットフォームアプリケーションの属性を取得できます。プラットフォームアプリケーションは Amazon SNS で使用され、Apple Push Notification Service (APNS) や Firebase Cloud Messaging (FCM) などのサービスを通じて、モバイルデバイスにプッシュ通知を送信します。
+ `sns:GetSMSAttributes` – AWS アカウントのデフォルトの SMS 設定を取得できます。
+ `sns:GetSMSSandboxAccountStatus` – AWS アカウントの SMS サンドボックスの現在のステータスを取得できます。
+ `sns:GetSubscriptionAttributes` – Amazon SNS トピックへの特定のサブスクリプションの属性を取得できます。
+ `sms-voice:DescribeVerifiedDestinationNumbers` – 内で SMS メッセージを送信するために検証された電話番号のリストを表示または取得できます。 AWS アカウント
+ `sms-voice:DescribeAccountAttributes` – AWS内の SMS メッセージングサービスに関連するアカウントレベルの属性に関する情報を表示または取得できます。
+ `sms-voice:DescribeSpendLimits` – AWS アカウントの SMS メッセージングサービスに関連する支出制限に関する情報を表示または取得できます。
+ `sms-voice:DescribePhoneNumbers` – AWS アカウントの SMS メッセージングサービスに使用されている電話番号に関する情報を表示または取得できます。
+ `sms-voice:DescribeOptedOutNumbers` – AWS アカウントからの SMS メッセージの受信をオプトアウトした電話番号のリストを表示または取得できます。

**`AmazonSNSReadOnlyAccess` ポリシーの例**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SNSReadOnlyAccess",
            "Effect": "Allow",
            "Action": [
                "sns:GetTopicAttributes",
                "sns:List*",
                "sns:CheckIfPhoneNumberIsOptedOut",
                "sns:GetEndpointAttributes",
                "sns:GetDataProtectionPolicy",
                "sns:GetPlatformApplicationAttributes",
                "sns:GetSMSAttributes",
                "sns:GetSMSSandboxAccountStatus",
                "sns:GetSubscriptionAttributes"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SMSAccessViaSNS",
            "Effect": "Allow",
            "Action": [
                "sms-voice:DescribeVerifiedDestinationNumbers",
                "sms-voice:DescribeAccountAttributes",
                "sms-voice:DescribeSpendLimits",
                "sms-voice:DescribePhoneNumbers",
                "sms-voice:DescribeOptedOutNumbers"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:CalledViaLast": "sns.amazonaws.com"
                }
            }
        }
    ]
}
```

------

このポリシーのアクセス許可を表示するには、「*AWS マネージドポリシーリファレンス*」の「[AmazonSNSFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSNSFullAccess.html)」を参照してください。

## AWS マネージドポリシーへの Amazon SNS 更新
<a name="security-iam-awsmanpol-updates"></a>



このサービスがこれらの変更の追跡を開始してからの Amazon SNS の AWS マネージドポリシーの更新に関する詳細を表示します。このページへの変更に関する自動アラートを受け取るには、Amazon SNS のドキュメント履歴ページで RSS フィードにサブスクライブしてください。




| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
|   [AmazonSNSFullAccess](#security-iam-awsmanpol-AmazonSNSFullAccess) - 既存ポリシーへの更新  |  Amazon SNS は、 AWS マネジメントコンソールを使用して Amazon SNS へのフルアクセスを許可する新しいアクセス許可を追加しました。  | 09/24/2024 | 
|  [AmazonSNSReadOnlyAccess](#security-iam-awsmanpol-AmazonSNSReadOnlyAccess) – 既存のポリシーの更新  |  Amazon SNS は、 AWS マネジメントコンソールを使用して Amazon SNS への読み取り専用アクセスを許可する新しいアクセス許可を追加しました。  | 09/24/2024 | 
|  Amazon SNS が変更の追跡を開始しました。  |  Amazon SNS は、 AWS 管理ポリシーの変更の追跡を開始しました。  | 08/27/2024 | 

## Amazon SNS のポリシーアクション
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**ポリシーアクションのサポート:** あり

管理者は JSON AWS ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件下で****アクション**を実行できるかということです。

JSON ポリシーの `Action` 要素にはポリシー内のアクセスを許可または拒否するために使用できるアクションが記述されます。このアクションは関連付けられたオペレーションを実行するためのアクセス許可を付与するポリシーで使用されます。



Amazon SNS アクションの一覧については、「*サービス認可リファレンス*」の「[Amazon Simple Notification Service で定義されるリソース](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)」を参照してください。

Amazon SNS のポリシーアクションは、アクションの前に次のプレフィックスを使用します。

```
sns
```

単一のステートメントで複数のアクションを指定するには、アクションをカンマで区切ります。

```
"Action": [
      "sns:action1",
      "sns:action2"
         ]
```





Amazon SNS のアイデンティティベースポリシーの例を確認するには、「[Amazon Simple Notification Service のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

## Amazon SNS のポリシーリソース
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**ポリシーリソースのサポート:** あり

管理者は JSON AWS ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件**下で**アクション**を実行できるかということです。

`Resource` JSON ポリシー要素はアクションが適用されるオブジェクトを指定します。ベストプラクティスとして、[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) を使用してリソースを指定します。リソースレベルのアクセス許可をサポートしないアクションの場合は、ステートメントがすべてのリソースに適用されることを示すために、ワイルドカード (\$1) を使用します。

```
"Resource": "*"
```

Amazon SNS リソースタイプとその ARN の一覧については、「*サービス認可リファレンス*」の「[Amazon Simple Notification Service で定義されるアクション](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)」を参照してください。どのアクションで各リソースの ARN を指定できるかについては、「[Resources Defined by Amazon Simple Notification Service](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)」(Amazon Simple Notification Service で定義されるリソース) を参照してください。





Amazon SNS のアイデンティティベースポリシーの例を確認するには、「[Amazon Simple Notification Service のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

## Amazon SNS のポリシー条件キー
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**サービス固有のポリシー条件キーのサポート:** あり

管理者は JSON AWS ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件下で****アクション**を実行できるかということです。

`Condition` 要素は、定義された基準に基づいてステートメントが実行される時期を指定します。イコールや未満などの[条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)を使用して条件式を作成して、ポリシーの条件とリクエスト内の値を一致させることができます。すべての AWS グローバル条件キーを確認するには、*「IAM ユーザーガイド*」の[AWS 「グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

Amazon SNS 条件キーの一覧については、「*サービス認可リファレンス*」の「[Amazon Simple Notification Service の条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)」を参照してください。条件キーを使用できるアクションとリソースについては、「[Resources Defined by Amazon Simple Notification Service](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)」(Amazon Simple Notification Service で定義されるリソース) を参照してください。

Amazon SNS のアイデンティティベースポリシーの例を確認するには、「[Amazon Simple Notification Service のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

## Amazon SNS での ACL
<a name="security_iam_service-with-iam-acls"></a>

**ACL のサポート:** なし 

アクセスコントロールリスト (ACL) は、どのプリンシパル (アカウントメンバー、ユーザー、またはロール) がリソースにアクセスするためのアクセス許可を持つかを制御します。ACL はリソースベースのポリシーに似ていますが、JSON ポリシードキュメント形式は使用しません。

## Amazon SNS での ABAC
<a name="security_iam_service-with-iam-tags"></a>

**ABAC (ポリシー内のタグ) のサポート:** 一部

属性ベースのアクセスコントロール (ABAC) は、タグと呼ばれる属性に基づいてアクセス許可を定義する認可戦略です。IAM エンティティと AWS リソースにタグをアタッチし、プリンシパルのタグがリソースのタグと一致するときにオペレーションを許可するように ABAC ポリシーを設計できます。

タグに基づいてアクセスを管理するには、`aws:ResourceTag/key-name`、`aws:RequestTag/key-name`、または `aws:TagKeys` の条件キーを使用して、ポリシーの[条件要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)でタグ情報を提供します。

サービスがすべてのリソースタイプに対して 3 つの条件キーすべてをサポートする場合、そのサービスの値は**あり**です。サービスが一部のリソースタイプに対してのみ 3 つの条件キーのすべてをサポートする場合、値は「**部分的**」になります。

ABAC の詳細については、「*IAM ユーザーガイド*」の「[ABAC 認可でアクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)」を参照してください。ABAC をセットアップする手順を説明するチュートリアルについては、「*IAM ユーザーガイド*」の「[属性ベースのアクセスコントロール (ABAC) を使用する](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)」を参照してください。

## Amazon SNS での一時的な認証情報の使用
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**一時的な認証情報のサポート:** あり

一時的な認証情報は、 AWS リソースへの短期アクセスを提供し、フェデレーションまたは切り替えロールを使用する場合に自動的に作成されます。長期的なアクセスキーを使用する代わりに、一時的な認証情報を動的に生成 AWS することをお勧めします。詳細については、「*IAM ユーザーガイド*」の「[IAM の一時的な認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」および「[IAM と連携するAWS のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。

## Amazon SNS のクロスサービスプリンシパル許可
<a name="security_iam_service-with-iam-principal-permissions"></a>

**転送アクセスセッション (FAS) のサポート:** あり

 転送アクセスセッション (FAS) は、 を呼び出すプリンシパルのアクセス許可と AWS のサービス、ダウンストリームサービス AWS のサービス へのリクエストをリクエストする を使用します。FAS リクエストを行う際のポリシーの詳細については、「[転送アクセスセッション](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)」を参照してください。

## Amazon SNS のサービスロール
<a name="security_iam_service-with-iam-roles-service"></a>

**サービスロールのサポート:** あり

 サービスロールとは、サービスがユーザーに代わってアクションを実行するために引き受ける [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)です。IAM 管理者は、IAM 内からサービスロールを作成、変更、削除できます。詳細については、IAM ユーザーガイド**の [AWS のサービスに許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)を参照してください。

**警告**  
サービスロールの許可を変更すると、Amazon SNS の機能が破損する可能性があります。Amazon SNS が指示する場合以外は、サービスロールを編集しないでください。

## Amazon SNS のサービスにリンクされたロール
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**サービスにリンクされたロールのサポート:** なし 

 サービスにリンクされたロールは、 にリンクされたサービスロールの一種です AWS のサービス。サービスは、ユーザーに代わってアクションを実行するロールを引き受けることができます。サービスにリンクされたロールは に表示され AWS アカウント 、サービスによって所有されます。IAM 管理者は、サービスにリンクされたロールのアクセス許可を表示できますが、編集することはできません。

サービスにリンクされたロールの作成または管理の詳細については、「[IAM と提携するAWS のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。表の「**サービスリンクロール**」列に `Yes` と記載されたサービスを見つけます。サービスにリンクされたロールに関するドキュメントをサービスで表示するには、**[はい]** リンクを選択します。

# Amazon Simple Notification Service のアイデンティティベースのポリシーの例
<a name="security_iam_id-based-policy-examples"></a>

デフォルトでは、ユーザーおよびロールには Amazon SNS リソースを作成または変更する許可はありません。IAM 管理者は、リソースで必要なアクションを実行するための権限をユーザーに付与する IAM ポリシーを作成できます。

これらのサンプルの JSON ポリシードキュメントを使用して IAM アイデンティティベースのポリシーを作成する方法については、「*IAM ユーザーガイド*」の「[IAM ポリシーを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)」を参照してください。

Amazon SNS が定義するアクションとリソースタイプ (リソースタイプごとの ARN の形式を含む) の詳細については、「*サービス認可リファレンス*」の「[Amazon Simple Notification Service のアクション、リソース、および条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsns.html)」を参照してください。

## ポリシーに関するベストプラクティス
<a name="security_iam_service-with-iam-policy-best-practices"></a>

ID ベースのポリシーは、ユーザーのアカウント内で誰かが Amazon SNS リソースを作成、アクセス、または削除できるどうかを決定します。これらのアクションでは、 AWS アカウントに費用が発生する場合があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
+ ** AWS 管理ポリシーを開始し、最小特権のアクセス許可に移行する** – ユーザーとワークロードにアクセス許可の付与を開始するには、多くの一般的なユースケースにアクセス許可を付与する*AWS 管理ポリシー*を使用します。これらは で使用できます AWS アカウント。ユースケースに固有の AWS カスタマー管理ポリシーを定義することで、アクセス許可をさらに減らすことをお勧めします。詳細については、*IAM ユーザーガイド* の [AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) または [ジョブ機能のAWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) を参照してください。
+ **最小特権を適用する** – IAM ポリシーでアクセス許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、*IAM ユーザーガイド* の [IAM でのポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) を参照してください。
+ **IAM ポリシーで条件を使用してアクセスをさらに制限する** - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。たとえば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。条件を使用して、サービスアクションが などの特定の を通じて使用されている場合に AWS のサービス、サービスアクションへのアクセスを許可することもできます CloudFormation。詳細については、*IAM ユーザーガイド* の [IAM JSON ポリシー要素:条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) を参照してください。
+ **IAM アクセスアナライザー を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する** - IAM アクセスアナライザー は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、*IAM ユーザーガイド* の [IAM Access Analyzer でポリシーを検証する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) を参照してください。
+ **多要素認証 (MFA) を要求する** – で IAM ユーザーまたはルートユーザーを必要とするシナリオがある場合は AWS アカウント、MFA をオンにしてセキュリティを強化します。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、*IAM ユーザーガイド* の [MFA を使用した安全な API アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) を参照してください。

IAM でのベストプラクティスの詳細については、*IAM ユーザーガイド* の [IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) を参照してください。

## Amazon SNS コンソールの使用
<a name="security_iam_id-based-policy-examples-console"></a>

Amazon Simple Notification Service コンソールにアクセスするには、許可の最小限のセットが必要です。これらのアクセス許可により、 の Amazon SNS リソースの詳細を一覧表示および表示できます AWS アカウント。最小限必要な許可よりも制限が厳しいアイデンティティベースのポリシーを作成すると、そのポリシーを持つエンティティ (ユーザーまたはロール) に対してコンソールが意図したとおりに機能しません。

 AWS CLI または AWS API のみを呼び出すユーザーには、最小限のコンソールアクセス許可を付与する必要はありません。代わりに、実行しようとしている API オペレーションに一致するアクションのみへのアクセスが許可されます。

ユーザーとロールが引き続き Amazon SNS コンソールを使用できるようにするには、エンティティに Amazon SNS `ConsoleAccess`または `ReadOnly` AWS 管理ポリシーもアタッチします。詳細については、「*IAM ユーザーガイド*」の「[ユーザーへのアクセス許可の追加](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)」を参照してください。

## その他のポリシータイプ
<a name="security_iam_access-manage-other-policies"></a>

AWS は、より一般的なポリシータイプによって付与されるアクセス許可の最大数を設定できる追加のポリシータイプをサポートしています。
+ **アクセス許可の境界** – アイデンティティベースのポリシーで IAM エンティティに付与することのできるアクセス許可の数の上限を設定します。詳細については、「*IAM ユーザーガイド*」の「[IAM エンティティのアクセス許可境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)」を参照してください。
+ **サービスコントロールポリシー (SCP)** - AWS Organizations内の組織または組織単位の最大のアクセス許可を指定します。詳細については、「*AWS Organizations ユーザーガイド*」の「[サービスコントロールポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)」を参照してください。
+ **リソースコントロールポリシー (RCP)** – は、アカウント内のリソースで利用できる最大数のアクセス許可を定義します。詳細については、「*AWS Organizations ユーザーガイド*」の「[リソースコントロールポリシー (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)」を参照してください。
+ **セッションポリシー** – ロールまたはフェデレーションユーザーの一時セッションを作成する際にパラメータとして渡される高度なポリシーです。詳細については、「*IAM ユーザーガイド*」の「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」を参照してください。

## 複数のポリシータイプ
<a name="security_iam_access-manage-multiple-policies"></a>

1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに難しくなります。が複数のポリシータイプが関与する場合にリクエストを許可するかどうか AWS を決定する方法については、*「IAM ユーザーガイド*」の[「ポリシー評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。

## 自分の権限の表示をユーザーに許可する
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

この例では、ユーザーアイデンティティにアタッチされたインラインおよびマネージドポリシーの表示を IAM ユーザーに許可するポリシーの作成方法を示します。このポリシーには、コンソールで、または AWS CLI または AWS API を使用してプログラムでこのアクションを実行するアクセス許可が含まれています。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## Amazon SNS のアイデンティティベースの ポリシー
<a name="security_iam_service-with-iam-id-based-policies"></a>

**ID ベースのポリシーのサポート:** あり

アイデンティティベースポリシーは、IAM ユーザー、ユーザーグループ、ロールなど、アイデンティティにアタッチできる JSON 許可ポリシードキュメントです。これらのポリシーは、ユーザーとロールが実行できるアクション、リソース、および条件をコントロールします。アイデンティティベースポリシーの作成方法については、「*IAM ユーザーガイド*」の「[カスタマー管理ポリシーでカスタム IAM アクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。

IAM アイデンティティベースのポリシーでは、許可または拒否するアクションとリソース、およびアクションを許可または拒否する条件を指定できます。JSON ポリシーで使用できるすべての要素について学ぶには、「*IAM ユーザーガイド*」の「[IAM JSON ポリシーの要素のリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)」を参照してください。

### Amazon SNS のアイデンティティベースのポリシー例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



Amazon SNS のアイデンティティベースポリシーの例を確認するには、「[Amazon Simple Notification Service のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

## Amazon SNS 内のリソースベースのポリシー
<a name="security_iam_service-with-iam-resource-based-policies"></a>


|  |  | 
| --- |--- |
|  リソースベースのポリシーのサポート  |  はい  | 

リソースベースのポリシーは、リソースに添付する JSON ポリシードキュメントです。リソースベースのポリシーには例として、IAM *ロールの信頼ポリシー*や Amazon S3 *バケットポリシー*があげられます。リソースベースのポリシーをサポートするサービスでは、サービス管理者はポリシーを使用して特定のリソースへのアクセスをコントロールできます。ポリシーがアタッチされているリソースの場合、指定されたプリンシパルがそのリソースに対して実行できるアクションと条件は、ポリシーによって定義されます。リソースベースのポリシーで、[プリンシパルを指定する](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)必要があります。プリンシパルには、アカウント、ユーザー、ロール、フェデレーティッドユーザー、または を含めることができます AWS のサービス。

クロスアカウントアクセスを有効にするには、全体のアカウント、または別のアカウントの IAM エンティティを、リソースベースのポリシーのプリンシパルとして指定します。詳細については、IAM ユーザーガイド**の[IAM でのクロスアカウントリソースアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)を参照してください。

# 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\$1xyz というトピックの Amazon SNS `Subscribe`アクションを許可します。IAM ポリシーは Bob と Susan のユーザーにアタッチされます (つまり、Bob と Susan はポリシーに記載されているアクセス許可を持っていることを意味します）。 AWS アカウント 同様に、Amazon SNS ポリシーは topic\$1xyz の `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\$1xyz) `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\$1xyz にメッセージを発行するリクエストを送信すると、そのアクションは Amazon SNS ポリシーで許可されます。  
 

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

トピック名にはワイルドカード \$1 および ? を使用できます。例えば、以下では、ボブが `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)」を参照) して特定のエンドポイント (\$1@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`

# カスタム Amazon SNS IAM ポリシーの管理
<a name="sns-sms-custom-policies"></a>

カスタム IAM ポリシーを使用すると、個々の IAM ユーザー、グループ、またはロールのアクセス許可を指定し、特定の AWS リソースやアクションへのアクセスを許可または制限できます。Amazon SNS リソースを管理する場合、カスタム IAM ポリシーを使用すると、組織のセキュリティおよび運用要件に応じてアクセス許可を調整できます。

Amazon SNS のカスタム IAM ポリシーを管理するには、次の手順に従います。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. ナビゲーションペインで **[ポリシー]** を選択します。

1. 新しいカスタム IAM ポリシーを作成するには、**[ポリシーを成]** を選択し、**SNS** を選択します。既存のポリシーを編集するには、リストからポリシーを選択し、**[ポリシーを編集]** を選択します。

1. ポリシーエディタで、Amazon SNS リソースにアクセスするための**アクセス許可**を定義します。特定の要件に基づいて、**アクション**、**リソース**、および**条件**を指定できます。

1. Amazon SNS アクションのアクセス許可を付与するには、IAM ポリシーに関連する Amazon SNS アクション (`sns:Publish`、`sns:Subscribe`、`sns:DeleteTopic` など) を含めます。アクセス許可が適用される Amazon SNS トピックの ARN (Amazon リソースネーム) を定義します。

1. ポリシーをアタッチする IAM **ユーザー**、**グループ**、または**ロール**を指定します。ポリシーは IAM ユーザーまたはグループに直接アタッチすることも、 AWS のサービス またはアプリケーションで使用される IAM ロールに関連付けることもできます。

1. IAM ポリシー設定を確認して、アクセスコントロールの要件と一致していることを確認します。確認したら、ポリシーの変更を**保存**します。

1. **カスタム IAM ポリシー**を、 AWS アカウント内の関連する IAM ユーザー、グループ、またはロールにアタッチします。これにより、ポリシーで定義された Amazon SNS リソースを管理するためのアクセス許可が付与されます。

# Amazon SNS で一時的なセキュリティ認証情報を使用する
<a name="sns-using-temporary-credentials"></a>

AWS Identity and Access Management (IAM) では、 AWS リソースへのアクセスを必要とするユーザーとアプリケーションに一時的なセキュリティ認証情報を付与できます。これらの一時的なセキュリティ認証情報は、主に IAM ロールと、SAML や OpenID Connect (OIDC) などの業界標準プロトコルを介したフェデレーティッドアクセスに使用されます。

 AWS リソースへのアクセスを効果的に管理するには、以下の主要な概念を理解することが重要です。
+ **IAM ロール** – ロールはリソースへのアクセスを委任するために使用されます AWS 。ロールは、Amazon EC2 インスタンス、Lambda 関数、または他の AWS アカウントのユーザーなどのエンティティで引き受けることができます。
+ **フェデレーションユーザー** – これらは、SAML または OIDC を使用して外部 ID プロバイダー (IdP) を介して認証されたユーザーです。フェデレーティッドアクセスは人間のユーザーに推奨され、IAM ロールはソフトウェアアプリケーションに使用する必要があります。
+ **Roles Anywhere** – AWS アクセスを必要とする外部アプリケーションの場合、IAM Roles Anywhere を使用して、長期的な認証情報を作成せずにアクセスを安全に管理できます。

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

一時的なセキュリティ認証情報の詳細については、「*IAM ユーザーガイド*」の「[IAM ロールの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)」および「[外部で認証されたユーザー (ID フェデレーション) へのアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)」を参照してください。

**Example HTTPS リクエストの例**  
次の例は、 AWS Security Token Service (STS) から取得した一時的なセキュリティ認証情報を使用して Amazon SNS リクエストを認証する方法を示しています。  

```
https://sns.us-east-2.amazonaws.com/
?Action=CreateTopic
&Name=My-Topic
&SignatureVersion=4
&SignatureMethod=AWS4-HMAC-SHA256
&Timestamp=2023-07-05T12:00:00Z
&X-Amz-Security-Token=SecurityTokenValue
&X-Amz-Date=20230705T120000Z
&X-Amz-Credential=<your-access-key-id>/20230705/us-east-2/sns/aws4_request
&X-Amz-SignedHeaders=host
&X-Amz-Signature=<signature-value>
```

**リクエストを認証する手順**

1. **一時的なセキュリティ認証情報の取得** - AWS STS を使用して、ロールを引き受けたり、フェデレーションユーザーの認証情報を取得したりします。これにより、アクセスキー ID、シークレットアクセスキー、およびセキュリティトークンが提供されます。

1. **リクエストの作成** – Amazon SNS アクションに必要なパラメータ (CreateTopic など) を含め、安全な通信に HTTPS を使用していることを確認します。

1. **リクエストへの署名** – AWS 署名バージョン 4 プロセスを使用して、リクエストに署名します。これには、正規リクエストの作成、署名対象の文字列の作成、署名の計算が含まれます。 AWS 署名バージョン 4 の詳細については、*「Amazon EBS* [ユーザーガイド」の「署名バージョン 4 署名](https://docs.aws.amazon.com/ebs/latest/userguide/ebsapis-using-sigv4.html)を使用する」を参照してください。

1. **リクエストの送信** - リクエストヘッダーに X-Amz-Security-Token を含め、一時的なセキュリティ認証情報を Amazon SNS に渡します。

# Amazon SNS API のアクセス許可: アクションとリソースのリファレンス
<a name="sns-access-policy-language-api-permissions-reference"></a>

次のリストは、Amazon SNS でのアクセスコントロールの実装に固有の情報を示しています。
+ 各ポリシーは、1 つのトピックだけを対象とする必要があります (ポリシーを作成する際は、異なるトピックを対象とするステートメントを含めないでください)。
+ 各ポリシーには固有のポリシー (`Id`) が必要です。
+ ポリシーを構成する各ステートメントには固有のステートメント (`sid`) が必要です。

## ポリシーのクォータ
<a name="sns-policy-quotas"></a>

以下の表では、ポリシーステートメントの最大クォータを示しています。


| 名前 | 最大クォータ | 
| --- | --- | 
|  バイト  |  30 KB  | 
|  ステートメント  |  100  | 
|  プリンシパル  |  1～200 (0 は無効)  | 
|  [リソース]   |  1 (0 は無効です。値はポリシーのトピックの ARN と一致する必要があります)  | 

## 有効な Amazon SNS ポリシーアクション
<a name="sns-valid-policy-actions"></a>

Amazon SNS は、次の表に示すアクションをサポートします。


| アクション | 説明 | 
| --- | --- | 
| sns:AddPermission | トピックポリシーへのアクセス権限の追加を許可します。 | 
| sns:DeleteTopic | トピックを削除する許可を与えます。 | 
| sns:GetDataProtectionPolicy | トピックのデータ保護ポリシーを返すアクセス許可を付与  | 
| sns:GetTopicAttributes  | すべてのトピック属性を受け取る許可を与えます。 | 
| sns:ListSubscriptionsByTopic | 特定のトピックへのサブスクリプションをすべて取得することを許可します。 | 
| sns:ListTagsForResource | 指定したトピックに追加されたすべてのタグを一覧表示する許可を与えます。 | 
| sns:Publish  | トピックやエンドポイントへの公開とバッチの公開の両方に対する許可を付与します。詳細については、「Amazon Simple Notification Service API リファレンス」の「[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)」および「[PublishBatch](https://docs.aws.amazon.com/sns/latest/api/API_BatchPublish.html)」を参照してください。 | 
| sns:PutDataProtectionPolicy | トピックのデータ保護ポリシーを設定するアクセス許可を付与 | 
| sns:RemovePermission  | トピックポリシーのアクセス権限を削除する許可を与えます。 | 
| sns:SetTopicAttributes  | トピックの属性を設定する許可を与えます。 | 
| sns:Subscribe  | トピックにサブスクライブすることを許可します。 | 

## サービス固有のキー
<a name="sns-service-specific-keys"></a>

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

**重要**  
sns:Endpoint によるアクセスの制御にポリシーを使用するときは、将来、DNS の問題がエンドポイントの名前解決に影響する可能性があるため、注意が必用です。

# Amazon Simple Notification Service アイデンティティとアクセスのトラブルシューティング
<a name="security_iam_troubleshoot"></a>

Amazon SNS と IAM の使用に伴って発生する可能性がある一般的な問題の診断や修復には、次の情報を利用してください。

## Amazon SNS でアクションを実行する認可がありません
<a name="security_iam_troubleshoot-no-permissions"></a>

アクションを実行する権限がないというエラーが表示された場合は、そのアクションを実行できるようにポリシーを更新する必要があります。

以下のエラー例は、`mateojackson` ユーザーがコンソールを使用して架空の `my-example-widget` リソースに関する詳細情報を表示しようとしているが、架空の `sns:GetWidget` 許可がないという場合に発生します。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: sns:GetWidget on resource: my-example-widget
```

この場合、Mateo のポリシーでは、`my-example-widget` アクションを使用して `sns:GetWidget` リソースへのアクセスを許可するように更新する必要があります。

サポートが必要な場合は、 AWS 管理者にお問い合わせください。サインイン認証情報を提供した担当者が管理者です。

## iam:PassRole を実行する権限がありません
<a name="security_iam_troubleshoot-passrole"></a>

`iam:PassRole` アクションを実行する権限がないというエラーが表示された場合は、ポリシーを更新して Amazon SNS にロールを渡せるようにする必要があります。

一部の AWS のサービス では、新しいサービスロールまたはサービスにリンクされたロールを作成する代わりに、既存のロールをそのサービスに渡すことができます。そのためには、サービスにロールを渡すアクセス許可が必要です。

次の例のエラーは、`marymajor` という IAM ユーザーがコンソールを使用して Amazon SNS でアクションを実行しようとする場合に発生します。ただし、このアクションをサービスが実行するには、サービスロールから付与されたアクセス許可が必要です。Mary には、ロールをサービスに渡すアクセス許可がありません。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

この場合、Mary のポリシーを更新してメアリーに `iam:PassRole` アクションの実行を許可する必要があります。

サポートが必要な場合は、 AWS 管理者にお問い合わせください。サインイン資格情報を提供した担当者が管理者です。

## 自分の 以外のユーザーに Amazon SNS リソース AWS アカウント へのアクセスを許可したい
<a name="security_iam_troubleshoot-cross-account-access"></a>

他のアカウントのユーザーや組織外の人が、リソースにアクセスするために使用できるロールを作成できます。ロールの引き受けを委託するユーザーを指定できます。リソースベースのポリシーまたはアクセスコントロールリスト (ACL) をサポートするサービスの場合、それらのポリシーを使用して、リソースへのアクセスを付与できます。

詳細については、以下を参照してください:
+ Amazon SNS がこれらの機能をサポートしているかどうかを確認するには、「[Amazon SNS と IAM が連携する仕組み](security_iam_service-with-iam.md)」を参照してください。
+ 所有 AWS アカウント している のリソースへのアクセスを提供する方法については、[「IAM ユーザーガイド」の「所有 AWS アカウント している別の の IAM ユーザーへのアクセスを提供する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)」を参照してください。 **
+ リソースへのアクセスをサードパーティーに提供する方法については AWS アカウント、*IAM ユーザーガイド*の[「サードパーティー AWS アカウント が所有する へのアクセスを提供する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)」を参照してください。
+ ID フェデレーションを介してアクセスを提供する方法については、*IAM ユーザーガイド* の [外部で認証されたユーザー (ID フェデレーション) へのアクセスの許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) を参照してください。
+ クロスアカウントアクセスにおけるロールとリソースベースのポリシーの使用方法の違いについては、「*IAM ユーザーガイド*」の「[IAM でのクロスアカウントのリソースへのアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)」を参照してください。

# Amazon SNS でのログ記録とモニタリング
<a name="sns-logging-monitoring"></a>

Amazon SNS では、CloudTrail で API コールをログ記録し、CloudWatch でトピックをモニタリングして、メッセージングアクティビティを追跡およびモニタリングできます。これらのツールは、メッセージ配信に関するインサイトの取得、問題のトラブルシューティング、メッセージングワークフローの正常性の確保に役立ちます。このトピックでは次の内容について説明します。
+ [を使用した AWS SNS API コールのログ記録 AWS CloudTrail](logging-using-cloudtrail.md)。このログ記録によって、トピックの作成、サブスクリプションの管理、メッセージの発行など、Amazon SNS トピックで実行されたアクションを追跡できます。CloudTrail ログを分析すると、特定の API リクエストを実行したユーザーとそのリクエストの実行日時を特定できるため、Amazon SNS の使用状況の監査とトラブルシューティングに役立ちます。
+ [CloudWatch を使用した Amazon SNS のモニタリング](sns-monitoring-using-cloudwatch.md)。CloudWatch が提供するメトリクスを利用すると、Amazon SNS トピックのパフォーマンスと状態をリアルタイムで観察できます。これらのメトリクスに基づいてアラームを設定すると、配信障害やメッセージレイテンシーの増加などの異常に迅速に対応できます。このモニタリング機能により、潜在的な問題にプロアクティブに対処して、SNS ベースのメッセージングシステムの信頼性を維持できます。

# を使用した AWS SNS API コールのログ記録 AWS CloudTrail
<a name="logging-using-cloudtrail"></a>

AWS SNS は、ユーザー[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)、ロール、または によって実行されたアクションを記録するサービスである と統合されています AWS のサービス。CloudTrail は、SNS のすべての API コールをイベントとしてキャプチャします。キャプチャされたコールには、SNS コンソールからのコールと、SNS API オペレーションへのコードのコールが含まれます。CloudTrail で収集された情報を使用して、SNS に対するリクエスト、リクエスト元の IP アドレス、リクエストの作成日時、その他の詳細を確認できます。

各イベントまたはログエントリには、誰がリクエストを生成したかという情報が含まれます。アイデンティティ情報は、以下を判別するのに役立ちます。
+ ルートユーザーまたはユーザー認証情報のどちらを使用してリクエストが送信されたか。
+ リクエストが IAM Identity Center ユーザーに代わって行われたかどうか。
+ リクエストがロールまたはフェデレーションユーザーのテンポラリなセキュリティ認証情報を使用して行われたかどうか。
+ リクエストが、別の AWS のサービスによって送信されたかどうか。

CloudTrail は、アカウントを作成する AWS アカウント と でアクティブになり、CloudTrail **イベント履歴**に自動的にアクセスできます。CloudTrail の **[イベント履歴]** では、 AWS リージョンで過去 90 日間に記録された管理イベントの表示、検索、およびダウンロードが可能で、変更不可能な記録を確認できます。詳細については、「*AWS CloudTrail ユーザーガイド*」の「[CloudTrail イベント履歴の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)」を参照してください。**[イベント履歴]** の閲覧には CloudTrail の料金はかかりません。

 AWS アカウント 過去 90 日間のイベントの継続的な記録については、証跡または [CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html) イベントデータストアを作成します。

**CloudTrail 証跡**  
*証跡*により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。を使用して作成されたすべての証跡 AWS マネジメントコンソール はマルチリージョンです。 AWS CLIを使用する際は、単一リージョンまたは複数リージョンの証跡を作成できます。アカウント AWS リージョン 内のすべての でアクティビティをキャプチャするため、マルチリージョン証跡を作成することをお勧めします。単一リージョンの証跡を作成する場合、証跡の AWS リージョンに記録されたイベントのみを表示できます。証跡の詳細については、「*AWS CloudTrail ユーザーガイド*」の「[AWS アカウントの証跡の作成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)」および「[組織の証跡の作成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-trail-organization.html)」を参照してください。  
証跡を作成すると、進行中の管理イベントのコピーを 1 つ無料で CloudTrail から Amazon S3 バケットに配信できますが、Amazon S3 ストレージには料金がかかります。CloudTrail の料金の詳細については、「[AWS CloudTrail の料金](https://aws.amazon.com/cloudtrail/pricing/)」を参照してください。Amazon S3 の料金に関する詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください。

**CloudTrail Lake イベントデータストア**  
*[CloudTrail Lake]* を使用すると、イベントに対して SQL ベースのクエリを実行できます。CloudTrail Lake は、行ベースの JSON 形式の既存のイベントを [Apache ORC](https://orc.apache.org/) 形式に変換します。ORC は、データを高速に取得するために最適化された単票ストレージ形式です。イベントは、*イベントデータストア*に集約されます。イベントデータストアは、[高度なイベントセレクタ](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-concepts.html#adv-event-selectors)を適用することによって選択する条件に基づいた、イベントのイミュータブルなコレクションです。どのイベントが存続し、クエリに使用できるかは、イベントデータストアに適用するセレクタが制御します。CloudTrail Lake の詳細については、 *AWS CloudTrail ユーザーガイド*の[AWS CloudTrail 「Lake の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html)」を参照してください。  
CloudTrail Lake のイベントデータストアとクエリにはコストがかかります。イベントデータストアを作成する際に、イベントデータストアに使用する[料金オプション](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-manage-costs.html#cloudtrail-lake-manage-costs-pricing-option)を選択します。料金オプションによって、イベントの取り込みと保存にかかる料金、および、そのイベントデータストアのデフォルトと最長の保持期間が決まります。CloudTrail の料金の詳細については、「[AWS CloudTrail の料金](https://aws.amazon.com/cloudtrail/pricing/)」を参照してください。

## CloudTrail の SNS データイベント
<a name="cloudtrail-data-events"></a>

[データイベント](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events)では、リソース上またはリソース内で実行されるリソースオペレーション (Amazon S3 オブジェクトの読み取りまたは書き込みなど) についての情報が得られます。これらのイベントは、データプレーンオペレーションとも呼ばれます。データイベントは、多くの場合、高ボリュームのアクティビティです。デフォルトでは、CloudTrail はデータイベントをログ記録しません。CloudTrail **[イベント履歴]** にはデータイベントは記録されません。

追加の変更がイベントデータに適用されます。CloudTrail の料金の詳細については、「[AWS CloudTrail の料金](https://aws.amazon.com/cloudtrail/pricing/)」を参照してください。

CloudTrail コンソール、または CloudTrail CloudTrail API オペレーションを使用して AWS CLI、SNS リソースタイプのデータイベントを記録できます。データイベントをログに記録する方法の詳細については、「*AWS CloudTrail ユーザーガイド*」の「[AWS マネジメントコンソールを使用したデータイベントのログ記録](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events-console)」および「[AWS Command Line Interfaceを使用したデータイベントのログ記録](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#creating-data-event-selectors-with-the-AWS-CLI)」を参照してください。

次の表に、データイベントをログ記録できる SNS リソースタイプを示します。**データイベントタイプ (コンソール)** 列には、CloudTrail コンソールの**[データイベントタイプ]**リストから選択する値が表示されます。**resources.type 値**列には、 AWS CLI または CloudTrail APIs を使用して高度なイベントセレクタを設定するときに指定する `resources.type`値が表示されます。**CloudTrail に記録されたデータ API** 列には、リソースタイプの CloudTrail にログ記録された API コールが表示されます。


| データイベントタイプ (コンソール) | resources.type 値 | CloudTrail にログ記録されたデータ API | 
| --- | --- | --- | 
| SNS トピック |  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-topic.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-topic.html)  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/logging-using-cloudtrail.html) | 
| SNS プラットフォームエンドポイント |  AWS::SNS::PlatformEndpoint  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/logging-using-cloudtrail.html)  | 

**注記**  
SNS リソースタイプ `AWS::SNS::PhoneNumber` は、CloudTrail によってログ記録されません。

`eventName`、`readOnly`、および `resources.ARN` フィールドでフィルタリングして、自分にとって重要なイベントのみをログに記録するように高度なイベントセレクタを設定できます。オブジェクトの詳細については、「*AWS CloudTrail API リファレンス*」の「[https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedFieldSelector.html](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedFieldSelector.html)」を参照してください。

データイベントのログ記録の詳細については、CloudTrail ユーザーガイド」の「 を使用したデータイベントのログ記録 AWS マネジメントコンソール 」および AWS CLI 「 を使用したデータイベントのログ記録」を参照してください。

## CloudTrail の SNS 管理イベント
<a name="cloudtrail-management-events"></a>

[管理イベント](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html#logging-management-events)は、 のリソースで実行される管理オペレーションに関する情報を提供します AWS アカウント。これらのイベントは、コントロールプレーンオペレーションとも呼ばれます。CloudTrail は、デフォルトで管理イベントをログ記録します。

AWS SNS は、次の SNS コントロールプレーンオペレーション*を管理イベント*として CloudTrail に記録します。
+ `[AddPermission](https://docs.aws.amazon.com/sns/latest/api/API_AddPermission.html)`
+ `[CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/sns/latest/api/API_CheckIfPhoneNumberIsOptedOut.html)`
+ `[ConfirmSubscription](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)`
+ `[CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)`
+ `[CreatePlatformEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)`
+ `[CreateSMSSandboxPhoneNumber](https://docs.aws.amazon.com/sns/latest/api/API_CreateSMSSandboxPhoneNumber.html)`
+ `[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)`
+ `[DeleteEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_DeleteEndpoint.html)`
+ `[DeletePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_DeletePlatformApplication.html)`
+ `[DeleteSMSSandboxPhoneNumber](https://docs.aws.amazon.com/sns/latest/api/API_DeleteSMSSandboxPhoneNumber.html)`
+ `[DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html)`
+ `[GetDataProtectionPolicy](https://docs.aws.amazon.com/sns/latest/api/API_GetDataProtectionPolicy.html)`
+ `[GetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html)`
+ `[GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)`
+ `[GetSMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetSMSAttributes.html)`
+ `[GetSMSSandboxAccountStatus](https://docs.aws.amazon.com/sns/latest/api/API_GetSMSSandboxAccountStatus.html)`
+ `[GetSubscriptionAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetSubscriptionAttributes.html)`
+ `[GetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetTopicAttributes.html)`
+ `[ListEndpointsByPlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)`
+ `[ListOriginationNumbers](https://docs.aws.amazon.com/sns/latest/api/API_ListOriginationNumbers.html)`
+ `[ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/sns/latest/api/API_ListPhoneNumbersOptedOut.html)`
+ `[ListPlatformApplications](https://docs.aws.amazon.com/sns/latest/api/API_ListPlatformApplications.html)`
+ `[ListSMSSandboxPhoneNumbers](https://docs.aws.amazon.com/sns/latest/api/API_ListSMSSandboxPhoneNumbers.html)`
+ `[ListSubscriptions](https://docs.aws.amazon.com/sns/latest/api/API_ListSubscriptions.html)`
+ `[ListSubscriptionsByTopic](https://docs.aws.amazon.com/sns/latest/api/API_ListSubscriptionsByTopic.html)`
+ `[ListTagsForResource](https://docs.aws.amazon.com/sns/latest/api/API_ListTagsForResource.html)`
+ `[ListTopics](https://docs.aws.amazon.com/sns/latest/api/API_ListTopics.html)`
+ `[OptInPhoneNumber](https://docs.aws.amazon.com/sns/latest/api/API_OptInPhoneNumber.html)`
+ `[PutDataProtectionPolicy](https://docs.aws.amazon.com/sns/latest/api/API_PutDataProtectionPolicy.html)`
+ `[RemovePermission](https://docs.aws.amazon.com/sns/latest/api/API_RemovePermission.html)`
+ `[SetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html)`
+ `[SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)`
+ `[SetSMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html)`
+ `[SetSubscriptionAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html)`
+ `[SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)`
+ `[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)`
+ `[TagResource](https://docs.aws.amazon.com/sns/latest/api/API_TagResource.html)`
+ `[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html)`
+ `[UntagResource](https://docs.aws.amazon.com/sns/latest/api/API_UntagResource.html)`
+ `[VerifySMSSandboxPhoneNumber](https://docs.aws.amazon.com/sns/latest/api/API_VerifySMSSandboxPhoneNumber.html)`

**注記**  
Amazon Web Services にログインしていない状態 (非認証モード) で、[https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) または [https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html) アクションのいずれかが呼び出された場合、そのアクションは CloudTrail に記録されません。例えば、E メール通知内のリンクを選択して、あるトピックへの保留中のサブスクリプションを確認したとき、`ConfirmSubscription` アクションが非認証モードで呼び出されたとします。この場合、`ConfirmSubscription` アクションは CloudTrail に記録されません。

## SNS イベントの例
<a name="cloudtrail-event-examples"></a>

各イベントは任意の送信元からの単一のリクエストを表し、リクエストされた API オペレーション、オペレーションの日時、リクエストパラメータなどに関する情報を含みます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、イベントは特定の順序で表示されません。

次は、**`ListTopics`**、`CreateTopic`、および `DeleteTopic` の各アクションを示す CloudTrail イベントの例です。

```
{
  "Records": [
    {
      "eventVersion": "1.02",
      "userIdentity": {
        "type": "IAMUser",
        "userName": "Bob",
        "principalId": "EX_PRINCIPAL_ID",
        "arn": "arn:aws:iam::123456789012:user/Bob",
        "accountId": "123456789012",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE"
      },
      "eventTime": "2014-09-30T00:00:00Z",
      "eventSource": "sns.amazonaws.com",
      "eventName": "ListTopics",
      "awsRegion": "us-west-2",
      "sourceIPAddress": "127.0.0.1",
      "userAgent": "aws-sdk-java/unknown-version",
      "requestParameters": {
        "nextToken": "ABCDEF1234567890EXAMPLE=="
      },
      "responseElements": null,
      "requestID": "example1-b9bb-50fa-abdb-80f274981d60",
      "eventID": "example0-09a3-47d6-a810-c5f9fd2534fe",
      "eventType": "AwsApiCall",
      "recipientAccountId": "123456789012"
    },
    {
      "eventVersion": "1.02",
      "userIdentity": {
        "type": "IAMUser",
        "userName": "Bob",
        "principalId": "EX_PRINCIPAL_ID",
        "arn": "arn:aws:iam::123456789012:user/Bob",
        "accountId": "123456789012",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE"
      },
      "eventTime": "2014-09-30T00:00:00Z",
      "eventSource": "sns.amazonaws.com",
      "eventName": "CreateTopic",
      "awsRegion": "us-west-2",
      "sourceIPAddress": "127.0.0.1",
      "userAgent": "aws-sdk-java/unknown-version",
      "requestParameters": {
        "name": "hello"
      },
      "responseElements": {
        "topicArn": "arn:aws:sns:us-west-2:123456789012:hello-topic"
      },
      "requestID": "example7-5cd3-5323-8a00-f1889011fee9",
      "eventID": "examplec-4f2f-4625-8378-130ac89660b1",
      "eventType": "AwsApiCall",
      "recipientAccountId": "123456789012"
    },
    {
      "eventVersion": "1.02",
      "userIdentity": {
        "type": "IAMUser",
        "userName": "Bob",
        "principalId": "EX_PRINCIPAL_ID",
        "arn": "arn:aws:iam::123456789012:user/Bob",
        "accountId": "123456789012",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE"
      },
      "eventTime": "2014-09-30T00:00:00Z",
      "eventSource": "sns.amazonaws.com",
      "eventName": "DeleteTopic",
      "awsRegion": "us-west-2",
      "sourceIPAddress": "127.0.0.1",
      "userAgent": "aws-sdk-java/unknown-version",
      "requestParameters": {
        "topicArn": "arn:aws:sns:us-west-2:123456789012:hello-topic"
      },
      "responseElements": null,
      "requestID": "example5-4faa-51d5-aab2-803a8294388d",
      "eventID": "example8-6443-4b4d-abfd-1b867280d964",
      "eventType": "AwsApiCall",
      "recipientAccountId": "123456789012"
    }
  ]
}
```

以下の例は、`Publish` アクションを示す CloudTrail イベントエントリです。

```
{
  "eventVersion": "1.09",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "EX_PRINCIPAL_ID",
    "arn": "arn:aws:iam::123456789012:user/Bob",
    "accountId": "123456789012",
    "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AKIAIOSFODNN7EXAMPLE",
        "arn": "arn:aws:iam::123456789012:role/Admin",
        "accountId": "123456789012",
        "userName": "ExampleUser"
      },
      "attributes": {
        "creationDate": "2023-08-21T16:44:05Z",
        "mfaAuthenticated": "false"
      }
    }
  },
  "eventTime": "2023-08-21T16:48:37Z",
  "eventSource": "sns.amazonaws.com",
  "eventName": "Publish",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "192.0.2.0",
  "userAgent": "aws-cli/1.29.16 md/Botocore#1.31.16 ua/2.0 os/linux#5.4.250-173.369.amzn2int.x86_64 md/arch#x86_64 lang/python#3.8.17 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.31.16",
  "requestParameters": {
    "topicArn": "arn:aws:sns:us-east-1:123456789012:ExampleSNSTopic",
    "message": "HIDDEN_DUE_TO_SECURITY_REASONS",
    "subject": "HIDDEN_DUE_TO_SECURITY_REASONS",
    "messageStructure": "json",
    "messageAttributes": "HIDDEN_DUE_TO_SECURITY_REASONS"
  },
  "responseElements": {
    "messageId": "0787cd1e-d92b-521c-a8b4-90434e8ef840"
  },
  "requestID": "0a8ab208-11bf-5e01-bd2d-ef55861b545d",
  "eventID": "bb3496d4-5252-4660-9c28-3c6aebdb21c0",
  "readOnly": false,
  "resources": [
    {
      "accountId": "123456789012",
      "type": "AWS::SNS::Topic",
      "ARN": "arn:aws:sns:us-east-1:123456789012:ExampleSNSTopic"
    }
  ],
  "eventType": "AwsApiCall",
  "managementEvent": false,
  "recipientAccountId": "123456789012",
  "eventCategory": "Data",
  "tlsDetails": {
    "tlsVersion": "TLSv1.2",
    "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
    "clientProvidedHostHeader": "sns.us-east-1.amazonaws.com"
  }
}
```

以下の例は、`PublishBatch` アクションを示す CloudTrail イベントエントリです。

```
{
  "eventVersion": "1.09",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "EX_PRINCIPAL_ID",
    "arn": "arn:aws:iam::123456789012:user/Bob",
    "accountId": "123456789012",
    "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AKIAIOSFODNN7EXAMPLE",
        "arn": "arn:aws:iam::123456789012:role/Admin",
        "accountId": "123456789012",
        "userName": "ExampleUser"
      },
      "attributes": {
        "creationDate": "2023-08-21T19:20:49Z",
        "mfaAuthenticated": "false"
      }
    }
  },
  "eventTime": "2023-08-21T19:22:01Z",
  "eventSource": "sns.amazonaws.com",
  "eventName": "PublishBatch",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "192.0.2.0",
  "userAgent": "aws-cli/1.29.16 md/Botocore#1.31.16 ua/2.0 os/linux#5.4.250-173.369.amzn2int.x86_64 md/arch#x86_64 lang/python#3.8.17 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.31.16",
  "requestParameters": {
    "topicArn": "arn:aws:sns:us-east-1:123456789012:ExampleSNSTopic",
    "publishBatchRequestEntries": [
      {
        "id": "1",
        "message": "HIDDEN_DUE_TO_SECURITY_REASONS"
      },
      {
        "id": "2",
        "message": "HIDDEN_DUE_TO_SECURITY_REASONS"
      }
    ]
  },
  "responseElements": {
    "successful": [
      {
        "id": "1",
        "messageId": "30d68101-a64a-5573-9e10-dc5c1dd3af2f"
      },
      {
        "id": "2",
        "messageId": "c0aa0c5c-561d-5455-b6c4-5101ed84de09"
      }
    ],
    "failed": []
  },
  "requestID": "e2cdf7f3-1b35-58ad-ac9e-aaaea0ace2f1",
  "eventID": "10da9a14-0154-4ab6-b3a5-1825b229a7ed",
  "readOnly": false,
  "resources": [
    {
      "accountId": "123456789012",
      "type": "AWS::SNS::Topic",
      "ARN": "arn:aws:sns:us-east-1:123456789012:ExampleSNSTopic"
    }
  ],
  "eventType": "AwsApiCall",
  "managementEvent": false,
  "recipientAccountId": "123456789012",
  "eventCategory": "Data",
  "tlsDetails": {
    "tlsVersion": "TLSv1.2",
    "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
    "clientProvidedHostHeader": "sns.us-east-1.amazonaws.com"
  }
}
```

CloudTrail レコードの内容については、「*AWS CloudTrail ユーザーガイド*」の「[CloudTrail record contents](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)」を参照してください。

# CloudWatch を使用した Amazon SNS のモニタリング
<a name="sns-monitoring-using-cloudwatch"></a>

Amazon SNS と Amazon CloudWatch は統合されているため、個々のアクティブな Amazon SNS 通知についてメトリクスを収集、表示、分析できます。Amazon SNS に対して CloudWatch を設定すると、 トピック、プッシュ通知、および SMS 配信のパフォーマンスをより正確に把握できます。例えば、`NumberOfNotificationsFailed` など、Amazon SNS メトリクスの指定のしきい値に達した場合に E メール通知が送信されるよう、アラームを設定することができます。Amazon SNS が CloudWatch に送信するすべてのメトリクスのリストについては、「[Amazon SNS のメトリクス](#sns-metrics)」を参照してください。Amazon SNS プッシュ通知の詳細については、「[Amazon SNS でモバイルプッシュ通知を送信する](sns-mobile-application-as-subscriber.md)」を参照してください。

**注記**  
CloudWatch を使用して Amazon SNS トピック用に設定するメトリクスは、自動的に収集され、*1 分*間隔で CloudWatch にプッシュ通知されます。これらのメトリックスは、CloudWatch ガイドラインを満たすすべてのトピックで収集され、アクティブになります。CloudWatch は、トピックの最後のアクティビティ (つまり、任意の API コール) から最大 6 時間、そのトピックをアクティブと見なします。  
CloudWatch でレポートされた Amazon SNS メトリクスに対して料金は発生しません。それらは Amazon SNS サービスの一部として提供されます。

## Amazon SNS 用の CloudWatch メトリクス
<a name="view-cloudwatch-metrics"></a>

Amazon SNS のメトリクスは CloudWatch の独自のコマンドインターフェイス (CLI) を使用して、あるいはプログラムによって CloudWatch API を使用してモニタリングできます。次の手順は、 AWS マネジメントコンソールを使用してメトリクスにアクセスする方法を示しています。

**CloudWatch コンソールを使用してメトリクスを表示するには**

1. [CloudWatch コンソール](https://console.aws.amazon.com/cloudwatch)にサインインします。

1. ナビゲーションパネルで [**Metrics**] を選択します。

1. [**All metrics**] タブで [**SNS**] を選択し、次のいずれかのディメンションを選択します。
   + **国/地域、SMS タイプ**
   + **電話番号**
   + **トピックのメトリクス**
   + **ディメンションの定められていないメトリクス**

1. 詳細を表示するには、特定の項目を選択します。例えば、[**Topic Metrics**] を選択し、[**NumberOfMessagesPublished**] を選択すると、6 時間の時間範囲における 1 分間の公開済み Amazon SNS メッセージの平均数が表示されます。

1. Amazon SNS の使用状況メトリクスを表示するには、**[All metrics]** (すべてのメトリクス) タブで **[Usage]** (使用率) を選択し、**対象の Amazon SNS 使用率メトリクス** (例: `NumberOfMessagesPublishedPerAccount`) を選択します。

## Amazon SNS メトリクス用の CloudWatch メトリクスを設定する
<a name="SNS_AlarmMetrics"></a>

CloudWatch では、メトリックスのしきい値に到達したときのアラームを設定することもできます。例えば、サンプリング期間内に指定されたしきい値に到達した場合、イベントについて知らせる E メール通知が送信されるように、メトリクス **NumberOfNotificationsFailed** のアラームを設定できます。

**CloudWatch コンソールを使用してアラームを設定するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) で CloudWatch コンソールを開きます。

1.  [**Alarms**]、[**Create Alarm**] の順に選択します。これにより、[**Create Alarm**] ウィザードが起動します。

1.  Amazon SNS メトリクスをスクロールして、アラームを設定するメトリクスを見つけます。アラームを設定するメトリクスを選択してから、[**Continue**] を選択します。

1. [**Name**]、[**Description**]、[**Threshold**]、[**Time**] のそれぞれにメトリクスの値を入力し、[**Continue**] を選択します。

1. アラーム状態として [**Alarm**] を選択します。アラーム状態になったときに CloudWatch から E メールが届くようにするには、既存の Amazon SNS トピックを選択するか、[**新しいメールトピックの作成**] を選択します。[**新しいメールトピックの作成**] を選択した場合は、新しいトピックの名前と E メールアドレスを設定できます。このリストは、今後のアラーム用に保存され、ドロップダウンボックスに表示されます。[**続行**] をクリックしてください。
**注記**  
[**Create New Email Topic**] を使用して新しい Amazon SNS トピックを作成する場合、メールアドレスを検証しなければ、そのアドレスで通知を受け取ることができません。E メールは、アラームがアラーム状態になったときにのみ送信されます。アラーム状態になったときに、メールアドレスの検証がまだ完了していない場合は、そのアドレスで通知を受け取ることはできません。

1. この時点で、[**Create Alarm**] ウィザードで、作成するアラームを確認できます。何らかの変更を行う必要がある場合は、右側にある [**Edit**] リンクを使用します。希望どおりの設定になったら、[**Create Alarm**] を選択します。

CloudWatch とアラームの使用方法の詳細については、「[CloudWatch のドキュメント](https://aws.amazon.com/documentation/cloudwatch)」を参照してください。

## Amazon SNS のメトリクス
<a name="sns-metrics"></a>

Amazon SNS は、次のメトリクスを CloudWatch に送信します。


| 名前空間 | メトリクス | 説明 | 
| --- | --- | --- | 
| AWS/SNS |  NumberOfMessagesPublished  |  Amazon SNS トピックに対して発行されたメッセージ数。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum  | 
| AWS/SNS |  NumberOfNotificationsDelivered  |  Amazon SNS トピックからそのトピックにサブスクライブしているエンドポイントに正常に配信されたメッセージ数。 配信の試行が成功するには、エンドポイントのサブスクリプションでメッセージが許可されている必要があります。サブスクリプションでメッセージが許可されるのは、a.) フィルターポリシーがないか、b.) フィルターポリシーに、メッセージに割り当てられた属性と一致する属性が含まれる場合です。サブスクリプションでメッセージが拒否された場合、配信の試行はこのメトリクスに対してカウントされません。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum  | 
| AWS/SNS |  NumberOfNotificationsFailed  |  Amazon SNS が配信に失敗したメッセージの数。 Amazon SQS、E メール、SMS、またはモバイルプッシュエンドポイントの場合、Amazon SNS がメッセージ配信の試行を停止すると、このメトリクスが 1 増分されます。HTTP または HTTPS エンドポイントの場合、失敗した配信の試行がすべて、初回試行に続く再試行を含め、このメトリクスに対してカウントされます。その他のすべてのエンドポイントの場合、メッセージが配信されないと、カウントが 1 増加します (試行回数には関係ありません)。 サブスクリプションフィルターポリシーによって拒否されたメッセージは、このメトリクスに対してカウントされません。 HTTP エンドポイントの再試行回数をコントロールできます。詳細については、「[Amazon SNS メッセージ配信の再試行](sns-message-delivery-retries.md)」を参照してください。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum、Average  | 
| AWS/SNS | NumberOfNotificationsFilteredOut |  サブスクリプションフィルターポリシーによって拒否されたメッセージの数。メッセージの属性がポリシーの属性と一致しない場合、フィルターポリシーによってメッセージは拒否されます。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum、Average  | 
| AWS/SNS | NumberOfNotificationsFilteredOut-MessageAttributes | 属性ベースのフィルタリングのサブスクリプションフィルターポリシーによって拒否されたメッセージの数。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum、Average  | 
| AWS/SNS | NumberOfNotificationsFilteredOut-MessageBody |  ペイロードベースのフィルタリングのサブスクリプションフィルターポリシーによって拒否されたメッセージの数。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum、Average  | 
| AWS/SNS | NumberOfNotificationsFilteredOut-InvalidAttributes |  メッセージの属性が無効であるため (例えば属性の JSON 形式が正しくないため)、サブスクリプションフィルターポリシーによって拒否されたメッセージの数。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum、Average  | 
| AWS/SNS | NumberOfNotificationsFilteredOut-NoMessageAttributes |  メッセージに属性がないため、サブスクリプションフィルターポリシーによって拒否されたメッセージの数。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum、Average  | 
| AWS/SNS | NumberOfNotificationsFilteredOut-InvalidMessageBody |  メッセージ本文がフィルタリングに対して無効であるため (JSON メッセージ本文が無効であるなど)、サブスクリプションフィルターポリシーによって拒否されたメッセージの数。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum、Average  | 
| AWS/SNS |  NumberOfNotificationsRedrivenToDlq  |  デッドレターキューに移動されたメッセージの数。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum、Average | 
| AWS/SNS |  NumberOfNotificationsFailedToRedriveToDlq  |  デッドレターキューに移動できなかったメッセージの数。 **単位**: カウント **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Sum、Average | 
| AWS/SNS |  PublishSize  |  発行されたメッセージのサイズ。 **単位:** バイト **有効なディメンション:** アプリケーション、PhoneNumber、プラットフォーム、TopicName **有効な統計:** Minimum、Maximum、Average、Count  | 
| AWS/SNS | SMSMonthToDateSpentUSD |  今月の始めから今日までの SMS メッセージの送信料金。 今月の始めから今日までの料金がアカウントの毎月の SMS 使用限度に近付いたことがわかるように、このメトリクスにアラームを設定できます。Amazon SNS が、SMS メッセージを送信するとこの限度を超えるコストが発生すると判断する場合、数分以内に SMS メッセージの発行を停止します。 SMS の毎月の使用料限度の設定の詳細、または AWSに対して限度の引き上げをリクエストする方法については、「[Amazon SNS の SMS メッセージプリファレンスを設定する](sms_preferences.md)」を参照してください。 **単位:** USD **有効なディメンション:** なし **有効な統計:** Sum  | 
| AWS/SNS |  SMSSuccessRate  |  正常な SMS メッセージ配信のレート **単位**: カウント **有効なディメンション:** PhoneNumber **有効な統計:** Sum、Average、Data Samples  | 

## Amazon SNS メトリクスのディメンション
<a name="sns-metric-dimensions"></a>

Amazon Simple Notification Service は、以下のディメンションを CloudWatch に送信します。


|  ディメンション  |  説明  | 
| --- | --- | 
|  Application  |  アプリケーションオブジェクトのフィルター。APN や FCM など、サポートされるプッシュ通知サービスの 1 つに登録されているアプリケーションやデバイスを表します。  | 
|  Application,Platform  |  アプリケーションおよびプラットフォームオブジェクトのフィルター。プラットフォームオブジェクトは、APN や FCM など、サポートされるプッシュ通知サービスで使用されます。  | 
| Country |  SMS メッセージの送信先の国またはリージョンのフィルター。国またはリージョンは、ISO 3166-1 alpha-2 コードで表されます。  | 
|  PhoneNumber  |  SMS を電話番号に直接公開するときに、電話番号にフィルターをかけます (トピックなし)。  | 
|  Platform  |  APN や FCM などのプッシュ通知サービスで使用されるプラットフォームオブジェクトのフィルター。  | 
|  TopicName  |  Amazon SNS トピック名のフィルター。  | 
| SMSType |  SMS メッセージのメッセージタイプのフィルター。*プロモーション*または*トランザクション*があります。  | 

## Amazon SNS 使用率メトリクス
<a name="sns-usage-metrics"></a>

Amazon Simple Notification Service は、以下の使用状況メトリクスを CloudWatch に送信します。


|  名前空間  |  サービス  | メトリクス | [リソース]  | タイプ | 説明 | 
| --- | --- | --- | --- | --- | --- | 
| AWS/使用 | SNS | ResourceCount | NumberOfMessagesPublishedPerAccount | [リソース]  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-monitoring-using-cloudwatch.html)  | 
| AWS/使用 | SNS | ResourceCount | ApproximateNumberOfTopics | [リソース]  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-monitoring-using-cloudwatch.html)  | 
| AWS/使用 | SNS | ResourceCount | ApproximateNumberOfFilterPolicies | [リソース]  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-monitoring-using-cloudwatch.html)  | 
| AWS/使用 | SNS | ResourceCount | ApproximateNumberOfPendingSubscriptions | [リソース]  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-monitoring-using-cloudwatch.html)  | 
| AWS/使用 | SNS | CallCount |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-monitoring-using-cloudwatch.html)  | API |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-monitoring-using-cloudwatch.html)  | 

# Amazon SNS のコンプライアンス検証
<a name="compliance-validation"></a>

 AWS のサービス が特定のコンプライアンスプログラムの範囲内にあるかどうかを確認するには、「コンプライアンス[AWS のサービス プログラムによるスコープ](https://aws.amazon.com/compliance/services-in-scope/)」の「コンプライアンス」を参照して、関心のあるコンプライアンスプログラムを選択します。一般的な情報については、[AWS 「コンプライアンスプログラム](https://aws.amazon.com/compliance/programs/)」を参照してください。

を使用して、サードパーティーの監査レポートをダウンロードできます AWS Artifact。詳細については、[「Downloading Reports in AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)」を参照してください。

を使用する際のお客様のコンプライアンス責任 AWS のサービス は、お客様のデータの機密性、貴社のコンプライアンス目的、適用される法律および規制によって決まります。を使用する際のコンプライアンス責任の詳細については AWS のサービス、[AWS 「 セキュリティドキュメント](https://docs.aws.amazon.com/security/)」を参照してください。

# Amazon SNS の耐障害性
<a name="disaster-recovery-resiliency"></a>

Amazon SNS の耐障害性は、 AWS リージョン およびアベイラビリティーゾーンを中心に展開する AWS グローバルインフラストラクチャを活用することで保証されます。 は、低レイテンシー、高スループット、および高度に冗長なネットワークで接続された物理的に分離および分離されたアベイラビリティーゾーン AWS リージョン を提供します。このアーキテクチャにより、アベイラビリティーゾーン間でのシームレスで中断のないフェイルオーバーが可能になります。従来のデータセンターインフラストラクチャと比べ、アプリケーションとデータベースの本質的な耐障害性とスケーラビリティが向上します。アベイラビリティーゾーンを使用すると、Amazon SNS サブスクライバーは可用性と信頼性の向上によるメリットを活用でき、潜在的な中断に対するメッセージ配信のレジリエンスを確保できます。 AWS リージョン およびアベイラビリティーゾーンの詳細については、[AWS 「 グローバルインフラストラクチャ](https://aws.amazon.com/about-aws/global-infrastructure/)」を参照してください。

さらに、Amazon SNS トピックのサブスクリプションを、配信再試行とデッドレターキューを使用して設定すると、一時的な障害を自動的に処理でき、メッセージを確実に目的の送信先に配信できます。

Amazon SNS はメッセージフィルタリングとメッセージ属性もサポートしており、特定のユースケースに合わせてレジリエンス戦略を調整して、アプリケーションの全体的な堅牢性を向上できます。

# Amazon SNS のインフラストラクチャセキュリティ
<a name="infrastructure-security"></a>

マネージドサービスである Amazon SNS は、[「セキュリティ、アイデンティティ、コンプライアンスのベストプラクティス](https://aws.amazon.com/architecture/security-identity-compliance)」ドキュメントに記載されている AWS グローバルネットワークセキュリティ手順で保護されています。

 AWS API アクションを使用して、ネットワーク経由で Amazon SNS にアクセスします。クライアントは、Transport Layer Security (TLS) 1.2 以降をサポートする必要があります。また、Ephemeral Diffie-Hellman (DHE)やElliptic Curve Ephemeral Diffie-Hellman(ECDHE)などの Perfect Forward Secrecy(PFS)を使用した暗号スイートもクライアントでサポートされている必要があります。

IAM プリンシパルに関連付けられているアクセスキー ID とシークレットアクセスキーの両方を使用してリクエストに署名する必要があります。または、[AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。

これらの API アクションは任意のネットワークの場所から呼び出すことができますが、Amazon SNS ではリソースベースのアクセスポリシーがサポートされています。これには送信元 IP アドレスに基づく制限を含めることができます。また、Amazon SNS ポリシーを使用して、特定の Amazon VPC エンドポイントまたは特定の VPC からのアクセスを制御することもできます。これにより効果的に、 AWS ネットワーク内の特定の VPC から特定の Amazon SNS トピックへのネットワークアクセスのみが分離されます。詳細については、「[Amazon SNS トピックの発行を特定の VPC エンドポイントのみからに制限する](sns-access-policy-use-cases.md#sns-restrict-publication-only-from-specified-vpc-endpoint)」を参照してください。

# Amazon SNS のセキュリティベストプラクティス
<a name="sns-security-best-practices"></a>

AWS は、Amazon SNS に多くのセキュリティ機能を提供します。独自のセキュリティポリシーのコンテキストで、これらのセキュリティ機能を確認します。

**注記**  
これらのセキュリティ機能のガイダンスは、一般的ユースケースと実装に適用されます。特定のユースケース、アーキテクチャ、脅威モデルのコンテキストで、これらのベストプラクティスを確認することをお勧めします。

## 予防的ベストプラクティス
<a name="preventative-best-practices"></a>

以下に、Amazon SNS の予防的なセキュリティに関するベストプラクティスを示します。

**Topics**
+ [トピックがパブリックアクセス可能でないようにする](#ensure-topics-not-publicly-accessible)
+ [最小特権アクセスの実装](#implement-least-privilege-access)
+ [Amazon SNS アクセスを必要とするアプリケーションと AWS サービスに IAM ロールを使用する Amazon SNS](#use-iam-roles-for-applications-aws-services-which-require-access)
+ [サーバー側の暗号化を実装する](#implement-server-side-encryption)
+ [送信時のデータの暗号化を強制する](#enforce-encryption-data-in-transit)
+ [VPC エンドポイントを使用して Amazon SNS にアクセスすることを検討する](#consider-using-vpc-endpoints-access-sns)
+ [サブスクリプションが raw http エンドポイントに配信するように設定されていないことを確認する](#http-subscription-configuration)
+ [サブスクリプション解除時に認証を適用する](#enforce-authentication-on-unsubscribe)

### トピックがパブリックアクセス可能でないようにする
<a name="ensure-topics-not-publicly-accessible"></a>

インターネット上の誰かが Amazon SNS トピックを読み書きできるように明示的に要求しない限り、トピックにパブリックにアクセスできないようにする必要があります (世界中のすべてのユーザーまたは認証された AWS ユーザーがアクセス可能）。
+ `Principal`を`""`に設定してポリシーを作成しないでください。
+ ワイルドカード (`*`) を使用しないでください。代わりに、特定のユーザーに名前を付けます。

### 最小特権アクセスの実装
<a name="implement-least-privilege-access"></a>

アクセス権限を付与する場合、アクセス権限を受け取るユーザー、アクセス許可の対象となるトピック、およびこれらのトピックに対して許可する特定の API アクションを決定します。最小権限の原則を実装することは、セキュリティリスクを軽減するために重要です。また、エラーや悪意のある意図による悪影響を減らすのにも役立ちます。

最小特権を付与するスタンダードのセキュリティアドバイスに従ってください。つまり、特定のタスクの実行に必要なアクセス権限のみを付与します。ユーザーアクセスに関連するセキュリティポリシーを組み合わせて使用することで、最小権限を実装できます。

Amazon SNS では、発行者と受信者のモデルが使用され、次の 3 種類のユーザーアカウントアクセスが必要です。
+ **管理者** - トピックの作成、変更、削除にアクセスします。管理者は、トピックポリシーも制御します。
+ **発行者** - トピックへのメッセージ送信のアクセス権限を持ちます。
+ **受信者** - トピックへの登録のアクセス権限を持ちます。

詳細については、次のセクションを参照してください。
+ [Amazon SNS での Identity and Access Management](security-iam.md)
+ [Amazon SNS API のアクセス許可: アクションとリソースのリファレンス](sns-access-policy-language-api-permissions-reference.md)

### Amazon SNS アクセスを必要とするアプリケーションと AWS サービスに IAM ロールを使用する Amazon SNS
<a name="use-iam-roles-for-applications-aws-services-which-require-access"></a>

Amazon EC2 などのアプリケーションまたは AWS サービスが Amazon SNS トピックにアクセスするには、 AWS API リクエストで有効な AWS 認証情報を使用する必要があります。これらの認証情報は自動的にローテーションされないため、 AWS 認証情報をアプリケーションまたは EC2 インスタンスに直接保存しないでください。

代わりに、IAM ロールを使用して、Amazon SNS にアクセスする必要があるアプリケーションまたはサービスの一時的な認証情報を管理することをおすすめします。ロールを使用するとき、EC2 インスタンスまたは AWS のサービス ( AWS Lambdaなど) に長期の認証情報 (ユーザー名、パスワード、アクセスキーなど) を配布する必要はありません。代わりに、ロールは、アプリケーションが他の AWS リソースを呼び出すときに使用できる一時的なアクセス許可を提供します。

詳細については、「*IAM ユーザーガイド*」の「[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)」および「[ロールの一般的なシナリオ: ユーザー、アプリケーション、およびサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios.html)」を参照してください。

### サーバー側の暗号化を実装する
<a name="implement-server-side-encryption"></a>

データ漏洩の問題を軽減するには、保存時の暗号化を使用して、メッセージを保存する場所とは別の場所に保存されているキーを使用してメッセージを暗号化します。サーバー側の暗号化 (SSE) は、保存時のデータ暗号化を提供します。Amazon SNS は、データを保存するときにメッセージレベルで暗号化し、アクセスするとメッセージを復号します。SSE は で管理されるキーを使用します AWS Key Management Service。リクエストが認証され、お客様がアクセス権限を持っていれば、トピックが暗号化されているかどうかに関係なく同じ方法でアクセスできます。

詳細については、「[サーバー側の暗号化を使用した Amazon SNS データの保護](sns-server-side-encryption.md)」および「[Amazon SNS 暗号化キーとコストの管理](sns-key-management.md)」を参照してください。

### 送信時のデータの暗号化を強制する
<a name="enforce-encryption-data-in-transit"></a>

HTTP を使用して送信中に暗号化されていないメッセージを公開することは可能ですが、お勧めできません。ただし、 を使用してトピックを保管中に暗号化する場合は AWS KMS、メッセージの発行に HTTPS を使用して、保管中と転送中の両方の暗号化を確保する必要があります。トピックは HTTP メッセージを自動的には拒否しませんが、セキュリティ標準を維持するには HTTPS を使用する必要があります。

AWS では、HTTP の代わりに HTTPS を使用することをお勧めします。HTTPS を使用すると、SNS トピック自体が暗号化されていなくても、メッセージは送信中に自動的に暗号化されます。HTTPS を使用しない場合、ネットワークベースの攻撃者は、中間者などの攻撃を使用して、ネットワークトラフィックを傍受したり操作することができます。

HTTPS 経由の暗号化された接続のみを実行するには、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean) 条件を、暗号化されていない SNS トピックに添付されている IAM ポリシーに追加します。これにより、メッセージ発行者は HTTP ではなく HTTPS を使用することになります。次の例のポリシーをガイドとして使用できます。

------
#### [ JSON ]

****  

```
{
    "Id": "ExamplePolicy",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPublishThroughSSLOnly",
            "Action": "SNS:Publish",
            "Effect": "Deny",
            "Resource": [
                "arn:aws:sns:us-east-1:111122223333:test-topic"
            ],
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            },
            "Principal": "*"
        }
    ]
}
```

------

### VPC エンドポイントを使用して Amazon SNS にアクセスすることを検討する
<a name="consider-using-vpc-endpoints-access-sns"></a>

操作できる必要があるが、インターネットに絶対に公開してはならないトピックがある場合は、VPC エンドポイントを使用して、特定の VPC 内のホストのみにトピックアクセスを制限します。トピックポリシーを使用して、特定の VPC エンドポイントまたは特定の VPC からのトピックへのアクセスを制御できます。

Amazon SNS の VPC エンドポイントには、メッセージへのアクセスを制御するために、2 通りの方法が用意されています。
+ 特定の VPC エンドポイントを通じて許可されるリクエスト、ユーザー、またはグループを管理できます。
+ トピックポリシーを使用して、どの VPC または VPC エンドポイントがトピックにアクセスできるかを制御できます。

詳細については、「[エンドポイントの作成](sns-vpc-create-endpoint.md#sns-vpc-endpoint-create)」および「[Amazon SNS 用の VPC エンドポイントポリシーを作成する](sns-vpc-endpoint-policy.md)」を参照してください。

### サブスクリプションが raw http エンドポイントに配信するように設定されていないことを確認する
<a name="http-subscription-configuration"></a>

サブスクリプションは raw http エンドポイントに配信する設定をしないでください。エンドポイントドメイン名に配信するサブスクリプションが必ずなければいけません。例えば、エンドポイントに配信するように構成されたサブスクリプションである `http://1.2.3.4/my-path` は `http://my.domain.name/my-path` に変更する必要があります。

### サブスクリプション解除時に認証を適用する
<a name="enforce-authentication-on-unsubscribe"></a>

 E メールや SMS のサブスクリプション解除を簡単に行う場合など、認証されていないサブスクリプション解除を許可する必要がある場合を除き、トピックからのサブスクリプション解除には認証を適用する必要があります。これは、[最小特権アクセスコントロールの推奨事項](#implement-least-privilege-access)と一致しています。

 サブスクリプションの確認中に `AuthenticateOnUnsubscribe` を `True` に設定できます。Amazon SNS サブスクリプションを確認するときに `AuthenticateOnUnsubscribe` フラグを `True` に設定しないと、サブスクリプション解除のリクエストが認証されていない場合でも成功してしまう可能性があります。詳細については、「Amazon SNS API リファレンス」の「[ConfirmSubscription](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)」または [Amazon Q Detector Library の Python の例](https://docs.aws.amazon.com/codeguru/detector-library/python/sns-unauthenticated-unsubscribe/)を参照してください。

 たとえば、 を使用して E メールサブスクリプションを確認するには AWS CLI、E メール通知の「サブスクリプションの確認」テキストからリンクをコピーします。この URL は、次の AWS CLI コマンドを呼び出すために必要な情報を提供します。

```
aws sns confirm-subscription --region us-west-2 \
    --topic-arn sns-topic-arn \
    --token token-from-subscribe-notification \
    --authenticate-on-unsubscribe true
```

 コードの説明は以下のとおりです。
+  aws-region は、トピックがある AWS リージョンです。これは、トピック ARN でも使用できます。
+  sns-topic-arn はトピックの ARN です。これは、サブスクリプション確認 URL 内の「TopicArn=」と「&Token」の間にあるテキストです。
+  token-from-subscribe-notification は、サブスクリプション確認 URL 内の「Token=」と「&Endpoint」の間にある UUID 文字列です。

 URL の例を次に示します。

```
        https://sns.us-west-2.amazonaws.com/confirmation.html?TopicArn=arn:aws:sns:us-west-2:123456789012:sns-topic&Token=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1&Endpoint=email@address.com
```