

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

# のセキュリティ AWS IoT
<a name="security"></a>

のクラウドセキュリティが最優先事項 AWS です。お客様は AWS 、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャを活用できます。

セキュリティは、 AWS お客様とお客様の間の責任共有です。[責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)では、これをクラウドのセキュリティおよびクラウド内のセキュリティとして説明しています。
+ **クラウドのセキュリティ** – AWS クラウドで AWS サービスを実行するインフラストラクチャを保護する AWS 責任があります。 AWS また、 では、安全に使用できるサービスも提供しています。[「AWS 」 コンプライアンスプログラム](https://aws.amazon.com/compliance/programs/)の一環として、サードパーティーの監査が定期的にセキュリティの有効性をテストおよび検証しています。が適用されるコンプライアンスプログラムの詳細については AWS IoT、[AWS 「コンプライアンスプログラムによる対象範囲内のサービス](https://aws.amazon.com/compliance/services-in-scope/)」を参照してください。
+ **クラウドのセキュリティ** – お客様の責任は、使用する AWS サービスによって決まります。また、お客様は、お客様のデータの機密性、企業の要件、および適用可能な法律および規制などの他の要因についても責任を担います。

このドキュメントは、 を使用する際の責任共有モデルの適用方法を理解するのに役立ちます AWS IoT。以下のトピックでは、セキュリティとコンプライアンスの目的 AWS IoT を達成するために を設定する方法を示します。また、 AWS IoT リソースのモニタリングや保護に役立つ他の AWS サービスの使用方法についても説明します。

**Topics**
+ [AWS IoT セキュリティ](iot-security.md)
+ [認証](authentication.md)
+ [Authorization](iot-authorization.md)
+ [でのデータ保護 AWS IoT Core](data-protection.md)
+ [の ID とアクセスの管理 AWS IoT](security-iam.md)
+ [ログ記録とモニタリング](security-logging.md)
+ [AWS IoT Core のコンプライアンス検証](compliance.md)
+ [AWS IoT Core の耐障害性](disaster-recovery-resiliency.md)
+ [インターフェイス VPC エンドポイント AWS IoT Core での の使用](IoTCore-VPC.md)
+ [のインフラストラクチャセキュリティ AWS IoT](infrastructure-security.md)
+ [AWS IoT Core を使用した本番稼働用フリートまたはデバイスのセキュリティモニタリング](security-monitoring.md)
+ [のセキュリティのベストプラクティス AWS IoT Core](security-best-practices.md)
+ [AWS トレーニングと認定](#iot-security-training)

# AWS IoT セキュリティ
<a name="iot-security"></a>

接続された各デバイスまたはクライアントには、 AWS IoTと対話する認証情報が必要です。との間のすべてのトラフィック AWS IoT は、Transport Layer Security (TLS) を介して安全に送信されます。 AWS クラウドセキュリティメカニズムは、 AWS IoT と他の AWS サービスの間を移動するデータを保護します。

![\[AWS IoT とやり取りする認証情報 AWS IoT、接続を保護するための Transport Layer Security、データを保護するための AWS クラウドセキュリティメカニズムなどのセキュリティワークフロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/thunderball-overview.png)

+  AWS IoTでは、デバイスの認証情報 (X.509 証明書、 AWS 認証情報、Amazon Cognito アイデンティティ、フェデレーテッドアイデンティティ、またはカスタム認証トークン) とポリシーを管理する責任があります。また、各デバイスへの一意の ID の割り当てと、各デバイスまたはデバイスグループに対するアクセス許可の管理も担当します。
+ デバイスは、安全な TLS 接続を介して X.509 証明書または Amazon Cognito ID AWS IoT を使用して に接続します。研究および開発中、および API コールを行うか WebSockets を使用する一部のアプリケーション用に、IAM ユーザーとグループ、またはカスタム認証トークンを使用して認証することもできます。詳細については、「[IAM ユーザー、グループ、ロール](iam-users-groups-roles.md)」を参照してください。
+  AWS IoT 認証を使用する場合、メッセージブローカーは、デバイスの認証、デバイスデータの安全な取り込み、および AWS IoT ポリシーを使用してデバイスに対して指定したアクセス許可の付与または拒否を行います。
+ カスタム認証を使用する場合、カスタムオーソライザーはデバイスを認証し、 または IAM AWS IoT ポリシーを使用してデバイスに指定したアクセス許可を付与または拒否します。
+  AWS IoT ルールエンジンは、定義したルールに従って、デバイスデータを他のデバイスまたは他の AWS サービスに転送します。を使用して AWS Identity and Access Management 、最終送信先にデータを安全に転送します。詳細については、「[の ID とアクセスの管理 AWS IoT](security-iam.md)」を参照してください。

# 認証
<a name="authentication"></a>

認証は、クライアントまたはサーバーの ID を確認するメカニズムです。サーバー認証は、デバイスまたは他のクライアントが実際の AWS IoT エンドポイントと通信していることを確認するプロセスです。クライアント認証は、デバイスまたは他のクライアントが自身を認証するプロセスです AWS IoT。

## X.509 証明書の概要
<a name="x509-certificate-overview"></a>

X.509 証明書は、[X.509 パブリックキーインフラストラクチャ規格](https://en.wikipedia.org/wiki/X.509)を使用して、パブリックキーと証明書内の ID を関連付けるための、デジタル証明書です。X.509 証明書は、認証機関 (CA) と呼ばれる信頼済みエンティティによって発行されます。CA は、CA 証明書と呼ばれる 1 つ以上の特別な証明書を管理しており、この証明書は X.509 証明書を発行するために使用されます。認証機関にのみ CA 証明書に対するアクセス許可があります。X.509 証明書チェーンは、クライアントによるサーバー認証とサーバーによるクライアント認証の両方に使用されます。

# サーバー認証
<a name="server-authentication"></a>

デバイスまたは他のクライアントが に接続しようとすると AWS IoT Core AWS IoT Core 、サーバーはデバイスがサーバーを認証するために使用する X.509 証明書を送信します。認証は、[X.509 証明書チェーン](x509-client-certs.md)の検証を通じて、TLS レイヤーで行われます。これは、HTTPS URL にアクセスしたときにブラウザが使用するのと同じ方法です。独自の認証機関からの証明書を使用する場合は、「[CA 証明書の管理](manage-your-CA-certs.md)」を参照してください。

デバイスまたは他のクライアントがエンドポイントへの TLS 接続を確立すると AWS IoT Core 、 はデバイスが別のサーバー偽装ではなく AWS IoT Core 、通信していることを検証するために使用する証明書チェーン AWS IoT Core を表します AWS IoT Core。表示されるチェーンは、デバイスが接続しているエンドポイントのタイプと、TLS ハンドシェイク中にクライアントと が AWS IoT Core ネゴシエートした[暗号スイート](transport-security.md)の組み合わせによって異なります。

## エンドポイントタイプ
<a name="endpoint-types"></a>

AWS IoT Core は をサポートします`iot:Data-ATS`。 `iot:Data-ATS`エンドポイントは、[Amazon Trust Services](https://www.amazontrust.com/repository/) CA によって署名されたサーバー証明書を提供します。

ATS エンドポイントによって提示された証明書は、Starfield によってクロス署名されています。一部の TLS クライアント実装では、信頼のルートを検証する必要があり、Starfield CA 証明書がクライアントの信頼ストアにインストールされている必要があります。

**警告**  
証明書全体 (発行者名など) をハッシュする証明書固定方法を使用することはお勧めしません。これは、提供する ATS 証明書が Starfield によってクロス署名され、発行者名が異なるため、証明書の検証に失敗するためです。

**重要**  
`iot:Data-ATS` エンドポイントを使用します。Symantec 証明書と Verisign 証明書は廃止され、 ではサポートされなくなりました AWS IoT Core。

`describe-endpoint` コマンドを使用して ATS エンドポイントを作成できます。

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

この `describe-endpoint` コマンドは、次の形式でエンドポイントを返します。

```
account-specific-prefix.iot.your-region.amazonaws.com
```

**注記**  
`describe-endpoint` が初めて呼び出されると、エンドポイントが作成されます。以降の `describe-endpoint` への呼び出しはすべて、同じエンドポイントを返します。

**注記**  
 AWS IoT Core コンソールで`iot:Data-ATS`エンドポイントを表示するには、**設定**を選択します。コンソールには `iot:Data-ATS` エンドポイントのみが表示されます。

### AWS SDK for Java `IotDataPlaneClient`を使用した の作成
<a name="java-client"></a>

`iot:Data-ATS` エンドポイントを使用する `IotDataPlaneClient` を作成するには、以下を実行する必要があります。
+ [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html) API を使用して `iot:Data-ATS` エンドポイントを作成します。
+ `IotDataPlaneClient` を作成するときに、そのエンドポイントを指定します。

次の例では、これらのオペレーションの両方を実行します。

```
public void setup() throws Exception {
        IotClient client = IotClient.builder().credentialsProvider(CREDENTIALS_PROVIDER_CHAIN).region(Region.US_EAST_1).build();
        String endpoint = client.describeEndpoint(r -> r.endpointType("iot:Data-ATS")).endpointAddress();
        iot = IotDataPlaneClient.builder()
                                .credentialsProvider(CREDENTIALS_PROVIDER_CHAIN)
                                .endpointOverride(URI.create("https://" + endpoint))
                                .region(Region.US_EAST_1)
                                .build();
}
```

## サーバー認証用の CA 証明書
<a name="server-authentication-certs"></a>

使用しているデータエンドポイントのタイプとネゴシエートした暗号スイートに応じて、 AWS IoT Core サーバー認証証明書は次のいずれかのルート CA 証明書によって署名されます。

**Amazon Trust Services エンドポイント (推奨)**

**注記**  
場合によって、以下のリンクを右クリックし、**[Save link as...]** (名前を付けてリンク先を保存) を選択して、これらの証明書をファイルとして保存する必要があります。
+ RSA 2048 ビットキー: [https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem)。
+ RSA 4096 ビットキー: Amazon Root CA 2。将来の利用のために予約されています。
+ ECC 256 ビットキー: [https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem)。
+ ECC 384 ビットキー: Amazon Root CA 4。将来の利用のために予約されています。

これらの証明書はすべて、[ Starfield ルート CA 証明書](https://www.amazontrust.com/repository/SFSRootCAG2.pem)によってクロス署名されています。アジアパシフィック (ムンバイ) AWS IoT Core リージョン AWS IoT Core での の 2018 年 5 月 9 日に開始されたすべての新しいリージョンは、ATS 証明書のみを提供します。

**VeriSign エンドポイント (レガシー)**
+ RSA 2048 ビットキー: [VeriSign クラス 3 Public Primary G5 ルート CA 証明書 ](https://www.digicert.com/kb/digicert-root-certificates.htm)

## サーバー認証のガイドライン
<a name="server-authentication-guidelines"></a>

 AWS IoT Core サーバー認証証明書を検証するデバイスの機能に影響を与える可能性のある多くの変数があります。例えば、デバイスのメモリ制限が大きすぎてルート CA 証明書をすべて保持できない場合や、デバイスが証明書検証の標準以外の方法を実装している場合があります。これらの理由から、次のガイドラインに従うことをお勧めします。
+ ATS エンドポイントを使用して、サポートされているすべての Amazon Root CA 証明書をインストールすることをお勧めします。
+ これらの証明書をすべてデバイスに保存できず、デバイスが ECC ベースの検証を使用していない場合は、[https://www.amazontrust.com/repository/AmazonRootCA3.pem](https://www.amazontrust.com/repository/AmazonRootCA3.pem) および [https://www.amazontrust.com/repository/AmazonRootCA4.pem](https://www.amazontrust.com/repository/AmazonRootCA4.pem) ECC 証明書を省略できます。デバイスが RSA ベースの証明書検証を実装していない場合は、[https://www.amazontrust.com/repository/AmazonRootCA1.pem](https://www.amazontrust.com/repository/AmazonRootCA1.pem) および [https://www.amazontrust.com/repository/AmazonRootCA2.pem](https://www.amazontrust.com/repository/AmazonRootCA2.pem) RSA 証明書を省略できます。場合によって、以下のリンクを右クリックし、[**Save link as... (名前を付けてリンク先を保存)**] を選択して、これらの証明書をファイルとして保存する必要があります。
+ ATS エンドポイントに接続するときにサーバー証明書の検証の問題が発生した場合は、関連するクロス署名付き Amazon ルート CA 証明書を信頼ストアに追加してみてください。場合によって、以下のリンクを右クリックし、[**Save link as... (名前を付けてリンク先を保存)**] を選択して、これらの証明書をファイルとして保存する必要があります。
  + [相互署名済み Amazon Root CA 1](https://www.amazontrust.com/repository/G2-RootCA1.pem)
  + [相互署名済みの Amazon Root CA 2](https://www.amazontrust.com/repository/G2-RootCA2.pem) - 将来の使用のために予約済みです。
  + [相互署名済み Amazon Root CA 3](https://www.amazontrust.com/repository/G2-RootCA3.pem)
  + [相互署名済みの Amazon Root CA 4](https://www.amazontrust.com/repository/G2-RootCA4.pem) - 将来の使用のために予約済みです。
+ サーバー証明書の検証の問題が発生した場合は、デバイスがルート CA を明示的に信頼する必要がある可能性があります。[https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) を信頼ストアに追加してみてください。
+ 上記の手順を実行しても問題が解決しない場合は、[AWS デベロッパーサポート](https://aws.amazon.com/premiumsupport/plans/developers/)にお問い合わせください。

**注記**  
CA 証明書には有効期限があり、その後、サーバー証明書の検証には使用できません。有効期限が切れる前に CA 証明書を交換する必要がある場合があります。すべてのデバイスまたはクライアントにインストールされているルート CA 証明書をアップデートして、進行中の接続を安全にし、セキュリティベストプラクティスを最新の状態に保つ必要があります。

**注記**  
デバイスコード AWS IoT Core で に接続するときは、接続に使用している API に証明書を渡します。使用する API は SDK によって異なります。詳細については、「[AWS IoT Core デバイス SDK](iot-sdks.md)」を参照してください。

# クライアント認証
<a name="client-authentication"></a>

AWS IoT は、デバイス認証またはクライアント認証用に 3 種類の ID プリンシパルをサポートしています。
+ [X.509 クライアント証明書](x509-client-certs.md)
+ [IAM ユーザー、グループ、ロール](iam-users-groups-roles.md)
+ [Amazon Cognito ID](cognito-identities.md)

これらの ID は、デバイス、モバイル、ウェブ、またはデスクトップアプリケーションで使用できます。これらは、ユーザーが AWS IoT コマンドラインインターフェイス (CLI) コマンドを入力することによっても使用できます。通常、 AWS IoT デバイスは X.509 証明書を使用し、モバイルアプリケーションは Amazon Cognito ID を使用します。ウェブアプリケーションとデスクトップアプリケーションでは、IAM またはフェデレーテッドアイデンティティを使用します。 AWS CLI コマンドは IAM を使用します。IAM ID の詳細については、[の ID とアクセスの管理 AWS IoT](security-iam.md) を参照してください。

# X.509 クライアント証明書
<a name="x509-client-certs"></a>

X.509 証明書 AWS IoT は、クライアントとデバイスの接続を認証する機能を提供します。クライアント証明書は、クライアントが通信 AWS IoT する前に に登録する必要があります AWS IoT。クライアント証明書は、同じリージョン内の AWS アカウント間でデバイスを移動しやすく AWS リージョン するために、同じ 内の複数の AWS アカウントに登録できます。詳細については、「[マルチアカウント登録で複数の で X.509 AWS アカウントクライアント証明書を使用する](#multiple-account-cert)」を参照してください。

証明書が失効した場合などにきめ細かくクライアント管理アクションを有効にできるように、各デバイスまたはクライアントで一意の証明書を指定することをお勧めします。証明書失効時にオペレーションを円滑に行うために、デバイスまたはクライアントが証明書のローテーションおよび置換に対応している必要もあります。

X.509 証明書を使用して複数のデバイスをサポートする方法については、[デバイスプロビジョニング](iot-provision.md) を参照して、 AWS IoT がサポートするさまざまな証明書管理およびプロビジョニングオプションを確認してください。

**AWS IoT は、次のタイプの X.509 クライアント証明書をサポートしています。**
+  によって生成された X.509 証明書 AWS IoT
+  に登録されている CA によって署名された X.509 証明書 AWS IoT。
+  AWS IoTに登録されていない CA によって署名された X.509 証明書。

このセクションでは、 AWS IoTで X.509 証明書を管理する方法について説明します。 AWS IoT コンソールまたは を使用して AWS CLI 、次の証明書オペレーションを実行できます。
+ [AWS IoT クライアント証明書を作成する](device-certs-create.md)
+ [独自のクライアント証明書を作成する](device-certs-your-own.md)
+ [クライアント証明書の登録](register-device-cert.md)
+ [クライアント証明書を有効または無効する](activate-or-deactivate-device-cert.md)
+ [クライアント証明書の取り消し](revoke-ca-cert.md)

これらのオペレーションを実行する AWS CLI コマンドの詳細については、「 [AWS IoT CLI リファレンス](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/index.html)」を参照してください。

## X.509 クライアント証明書の使用
<a name="x509-client-cert-basics"></a>

X.509 証明書は、クライアントとデバイスの接続を認証します AWS IoT。X.509 証明書には、他の識別および認証メカニズムに比べて、いくつかの利点があります。X.509 証明書では、非対称キーをデバイスで使用できます。例えば、プライベートキーをデバイス上の安全なストレージに書き込むと、デバイスから機密の暗号化情報が持ち出されることがないようにすることができます。X.509 証明書により、ユーザー名とパスワード、ベアラートークンなどの他のスキーマよりも、強力なクライアント認証が可能になります。これは、プライベートキーがデバイスから持ち出されることがないためです。

AWS IoT は、TLS プロトコルのクライアント認証モードを使用してクライアント証明書を認証します。TLS サポートは、多くのプログラミング言語とオペレーティングシステムに対応しており、データの暗号化に一般に使用されます。TLS クライアント認証では、 は X.509 クライアント証明書を AWS IoT リクエストし、証明書のステータスと を証明書のレジストリ AWS アカウント と照合します。次に、証明書に含まれるパブリックキーに対応するプライベートキーの所有権の証明をクライアントに要求します。 AWS IoT は、クライアントが Transport Layer Security [(TLS) プロトコルに Server Name Indication (SNI) 拡張機能](https://tools.ietf.org/html/rfc3546#section-3.1)を送信する必要があります。SNI 拡張機能の設定の詳細については、「[のトランスポートセキュリティ AWS IoT Core](transport-security.md)」を参照してください。

 AWS IoT コアへの安全で一貫性のあるクライアント接続を容易にするには、X.509 クライアント証明書に次のものが必要です。
+  AWS IoT Core に登録されています。詳細については、「[クライアント証明書の登録](register-device-cert.md)」を参照してください。
+ ステータスは `ACTIVE` 状態である。詳細については、「[クライアント証明書を有効または無効する](activate-or-deactivate-device-cert.md)」を参照してください。
+ 証明書の有効期限にまだ達していない。

Amazon Root CA を使用するクライアント証明書を作成し、別の認証機関 (CA) によって署名された独自のクライアント証明書を使用できます。 AWS IoT コンソールを使用して Amazon ルート CA を使用する証明書を作成する方法の詳細については、「」を参照してください[AWS IoT クライアント証明書を作成する](device-certs-create.md)。独自の X.509 証明書の使用の詳細については、「[独自のクライアント証明書を作成する](device-certs-your-own.md)」を参照してください。

CA 証明書によって署名された証明書の有効期限が切れる日付と時刻は、証明書の作成時に設定されます。によって生成された X.509 証明書は、2049 年 12 月 31 日深夜 UTC に AWS IoT 期限切れになります (2049-12-31T23:59:59Z)。

AWS IoT Device Defender は、一般的な IoT セキュリティのベストプラクティスをサポートする AWS アカウント および デバイスで監査を実行できます。これには、CA または Amazon Root CA によって署名された X.509 証明書の有効期限の管理が含まれます。証明書の有効期限の管理の詳細については、「[デバイス証明書の有効期限切れ](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-approaching-expiration.html)」および「[CA 証明書の有効期限切れ](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-ca-cert-approaching-expiration.html)」を参照してください。

公式 AWS IoT ブログでは、「 [を使用して IoT デバイス証明書のローテーションを管理する方法」で、デバイス証明書のローテーション AWS IoT](https://aws.amazon.com/blogs/iot/how-to-manage-iot-device-certificate-rotation-using-aws-iot/)とセキュリティのベストプラクティスの管理について詳しく説明します。

## マルチアカウント登録で複数の で X.509 AWS アカウントクライアント証明書を使用する
<a name="multiple-account-cert"></a>

マルチアカウント登録により、同じリージョン内、または異なるリージョン内の AWS アカウント間で、デバイスの移動が可能になります。実稼働前のアカウントでデバイスを登録、テスト、設定した後、実稼働アカウントで同じデバイスとデバイス証明書を登録して使用することができます。クライアント証明書をデバイスに登録することも、登録されている CA なしでデバイス証明書を登録することもできます AWS IoT。詳細については、「[登録していない CA によって署名したクライアント証明書を登録する (CLI)](manual-cert-registration.md#manual-cert-registration-noca-cli)」を参照してください。

**注記**  
マルチアカウント登録に使用される証明書は、`iot:Data-ATS`、`iot:Data` (レガシー)、`iot:Jobs`、および `iot:CredentialProvider` エンドポイントタイプでサポートされています。 AWS IoT デバイスエンドポイントの詳細については、「」を参照してください[AWS IoT デバイスデータとサービスエンドポイント](iot-connect-devices.md#iot-connect-device-endpoints)。

マルチアカウント登録を使用するデバイスは、[Server Name Indication (SNI) 拡張機能](https://tools.ietf.org/html/rfc3546#section-3.1)を Transport Layer Security (TLS) プロトコルに送信し、接続時に `host_name`フィールドに完全なエンドポイントアドレスを指定する必要があります AWS IoT。 は、 のエンドポイントアドレス AWS IoT を使用して接続を正しい AWS IoT アカウントに`host_name`ルーティングします。`host_name` で有効なエンドポイントアドレスを送信しなかった既存デバイスは、引き続き動作しますが、この情報を必要とする機能を使用することはできません。SNI 拡張の詳細と、 `host_name` フィールドのエンドポイントアドレスを特定する方法については、「[のトランスポートセキュリティ AWS IoT Core](transport-security.md)」を参照してください。

**マルチアカウント登録を使用するには**

1. CA を指定してデバイス証明書を登録することができます。署名 CA を `SNI_ONLY` モードで複数のアカウントに登録し、その CA を使用して同じクライアント証明書を複数のアカウントに登録できます。詳細については、「[SNI\$1ONLY モードでの CA 証明書の登録 (CLI) – 推奨](manage-your-CA-certs.md#register-CA-cert-SNI-cli)」を参照してください。

1. デバイス証明書は CA を指定せずに登録することができます。「[登録していない CA によって署名したクライアント証明書を登録する (CLI)](manual-cert-registration.md#manual-cert-registration-noca-cli)」を参照してください。CA の登録はオプションです。デバイス証明書に署名した CA を登録する必要はありません AWS IoT。

## でサポートされている証明書署名アルゴリズム AWS IoT
<a name="x509-cert-algorithms"></a>

AWS IoT は、次の証明書署名アルゴリズムをサポートしています。
+ SHA256WITHRSA
+ SHA384WITHRSA
+ SHA512WITHRSA
+ SHA256WITHRSAANDMGF1 (RSASSA-PSS)
+ SHA384WITHRSAANDMGF1 (RSASSA-PSS)
+ SHA512WITHRSAANDMGF1 (RSASSA-PSS)
+ DSA\$1WITH\$1SHA256
+ ECDSA-WITH-SHA256
+ ECDSA-WITH-SHA384
+ ECDSA-WITH-SHA512

証明書認証およびセキュリティの詳細については、「[デバイス証明書のキー品質](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-device-cert-key-quality.html)」を参照してください。

**注記**  
証明書署名リクエスト (CSR) にはパブリックキーを含める必要があります。キーは、少なくとも 2,048 ビット長の RSA キー、または NIST P-256、NIST P-384、NIST P-521 カーブの ECC キーとすることができます。詳細については、「*AWS IoT API リファレンスガイド*」の「[CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCertificateFromCsr.html) API」を参照してください。

## でサポートされているキーアルゴリズム AWS IoT
<a name="x509-cert-key-algorithms"></a>

次の表は、キーアルゴリズムのサポート方法を示しています。


****  

| [キーアルゴリズム] | 証明書署名アルゴリズム | TLS バージョン | サポート対象? はい/いいえ | 
| --- | --- | --- | --- | 
| キーサイズが 2048 ビット以上の RSA | すべて | TLS 1.2 TLS 1.3 | はい | 
| ECC NIST P-256/P-384/P-521 | すべて | TLS 1.2 TLS 1.3 | はい | 
| キーサイズが 2048 ビット以上の RSA-PSS | すべて | TLS 1.2 | いいえ | 
| キーサイズが 2048 ビット以上の RSA-PSS | すべて | TLS 1.3 | はい | 

[CreateCertificateFromCSR](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateFromCsr.html) を使用して証明書を作成するには、サポートされているキーアルゴリズムを使用して CSR のパブリックキーを生成できます。[RegisterCertificate](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificate.html) または [RegisterCertificateWithoutCA](https://docs.aws.amazon.com//iot/latest/apireference/API_RegisterCertificateWithoutCA.html) を使用して独自の証明書を登録するには、サポートされているキーアルゴリズムを使用して証明書のパブリックキーを生成できます。

詳細については、「[セキュリティポリシー](https://docs.aws.amazon.com//iot/latest/developerguide/transport-security.html#tls-policy-table)」を参照してください。

# AWS IoT クライアント証明書を作成する
<a name="device-certs-create"></a>

AWS IoT は、Amazon ルート認証局 (CA) によって署名されたクライアント証明書を提供します。

このトピックでは、Amazon ルート認証局によって署名されたクライアント証明書を作成し、証明書ファイルをダウンロードする方法について説明します。クライアント証明書ファイルを作成したら、クライアントにインストールする必要があります。

**注記**  
によって提供される各 X.509 クライアント証明書は、証明書の作成時に設定した発行者とサブジェクト属性 AWS IoT を保持します。証明書の属性は、証明書が作成された後にのみイミュータブルです。

 AWS IoT コンソールまたは を使用して AWS CLI 、Amazon ルート AWS IoT 認証局によって署名された証明書を作成できます。

## AWS IoT 証明書を作成する (コンソール)
<a name="device-certs-create-console"></a>

**AWS IoT コンソールを使用して AWS IoT 証明書を作成するには**

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

1. ナビゲーションペインで、**[セキュリティ]** を選択し、**[証明書]** を選択してから **[作成]** を選択します。

1. [**1-Click 証明書作成 (推奨)**] - [**証明書の作成**] を選択します。

1. **[証明書が作成されました]** ページで、モノ、パブリックキー、およびプライベートキーのクライアント証明書ファイルを安全な場所にダウンロードします。によって生成されたこれらの証明書 AWS IoT は、 AWS IoT サービスでのみ使用できます。

   Amazon Root CA 証明書ファイルも必要であれば、このページにダウンロードできるページへのリンクがあります。

1. これで、クライアント証明書が作成され、 AWS IoTに登録されました。証明書をクライアントで使用する前に、証明書をアクティブ化する必要があります。

    クライアント証明書を今すぐ有効化するには、**[有効化]** を選択します。今すぐ証明書を有効化しない場合、証明書を後で有効化する方法について、「[クライアント証明書のアクティブ化 (コンソール)](activate-or-deactivate-device-cert.md#activate-device-cert-console)」を参照してください。

   

1. 証明書にポリシーをアタッチする場合は、**[Attach a policy]** (ポリシーをアタッチ) を選択します。

   ポリシーを今すぐアタッチしない場合は、**[Done]** (完了) を選択して完了します。ポリシーは後でアタッチできます。

手順が完了したら、証明書ファイルをクライアントにインストールします。

## AWS IoT 証明書を作成する (CLI)
<a name="device-certs-create-cli"></a>

 AWS CLI は、Amazon ルート認証局によって署名されたクライアント証明書を作成するための **[create-keys-and-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/create-keys-and-certificate.html)** コマンドを提供します。ただし、このコマンドでは Amazon ルート CA 証明書ファイルはダウンロードされません。Amazon ルート CA 証明書ファイルは、 からダウンロードできます[サーバー認証用の CA 証明書](server-authentication.md#server-authentication-certs) 

このコマンドは、プライベートキー、パブリックキー、および X.509 証明書ファイルを作成し、証明書を に登録してアクティブ化します AWS IoT。

```
aws iot create-keys-and-certificate \
    --set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```

証明書の作成と登録時に証明書を有効化しない場合、このコマンドはプライベートキー、パブリックキー、および X.509 証明書ファイルを作成し、証明書を登録しますが、有効化しません。[クライアント証明書のアクティブ化 (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli) では、証明書を後で有効化する方法について説明します。

```
aws iot create-keys-and-certificate \
    --no-set-as-active \
    --certificate-pem-outfile certificate_filename.pem \
    --public-key-outfile public_filename.key \
    --private-key-outfile private_filename.key
```



証明書ファイルをクライアントにインストールします。

# 独自のクライアント証明書を作成する
<a name="device-certs-your-own"></a>

AWS IoT は、ルートまたは中間認証機関 (CA) によって署名されたクライアント証明書をサポートします。 は CA 証明書 AWS IoT を使用して証明書の所有権を検証します。Amazon の CA ではない CA によって署名されたデバイス証明書を使用するには、デバイス証明書の所有権を検証 AWS IoT できるように、CA の証明書を に登録する必要があります。

AWS IoT は、独自の証明書 (BYOC) を持ち込むための複数の方法をサポートしています。
+ まず、クライアント証明書の署名に使用する CA を登録し、次に個々のクライアント証明書を登録します。デバイスまたはクライアントをクライアント証明書に初めて接続するときに登録する場合は AWS IoT ([Just-in-Timeプロビジョニングとも呼ばれます](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html))、署名 CA を AWS IoT に登録し、自動登録を有効にする必要があります。
+ 署名 CA を登録できない場合は、CA なしでクライアント証明書を登録することを選択できます。CA なしで登録されたデバイスの場合、 AWS IoTへの接続時に [Server Name Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) を提示する必要があります。

**注記**  
CA を使用してクライアント証明書を登録するには、階層内の他の CA ではなく AWS IoT、署名 CAsを登録する必要があります。

**注記**  
CA 証明書は、リージョン内の 1 つのアカウントでのみ `DEFAULT` モードで登録できます。CA 証明書は、リージョン内の複数のアカウントで `SNI_ONLY` モードで登録できます。

X.509 証明書を使用して複数のデバイスをサポートする方法の詳細については、「[デバイスプロビジョニング](iot-provision.md)」を参照して、 AWS IoT がサポートするさまざまな証明書管理およびプロビジョニングオプションを確認してください。

**Topics**
+ [CA 証明書の管理](manage-your-CA-certs.md)
+ [CA 証明書を使用してクライアント証明書を作成する](create-device-cert.md)

# CA 証明書の管理
<a name="manage-your-CA-certs"></a>

このセクションでは、独自の認証局 (CA) 証明書を管理するための一般的なタスクについて説明します。

が認識 AWS IoT しない CA によって署名されたクライアント証明書を使用している場合 AWS IoT は、認証機関 (CA) を に登録できます。

クライアントが最初に接続 AWS IoT するときにクライアント証明書を に自動的に登録する場合は、クライアント証明書に署名した CA を登録する必要があります AWS IoT。それ以外の場合は、クライアント証明書に署名した CA 証明書を登録する必要はありません。

**注記**  
CA 証明書は、リージョン内の 1 つのアカウントでのみ `DEFAULT` モードで登録できます。CA 証明書は、リージョン内の複数のアカウントで `SNI_ONLY` モードで登録できます。

**Topics**
+ [CA 証明書を作成する](#create-your-CA-cert)
+ [CA 証明書の登録](#register-CA-cert)
+ [CA 証明書の非アクティブ化](#deactivate-ca-cert)

## CA 証明書を作成する
<a name="create-your-CA-cert"></a>

CA 証明書がない場合は、[OpenSSL v1.1.1i](https://www.openssl.org/) ツールを使用して作成できます。

**注記**  
この手順は AWS IoT コンソールでは実行できません。

**[OpenSSL v1.1.1i](https://www.openssl.org/) ツールを使用して CA 証明書を作成するには**

1. キーペアを生成します。

   ```
   openssl genrsa -out root_CA_key_filename.key 2048
   ```

1. キーペアのプライベートキーを使用して CA 証明書を生成します。

   ```
   openssl req -x509 -new -nodes \
       -key root_CA_key_filename.key \
       -sha256 -days 1024 \
       -out root_CA_cert_filename.pem
   ```

## CA 証明書の登録
<a name="register-CA-cert"></a>

これらの手順では、Amazon の CA ではない認証機関 (CA) から証明書を登録する方法について説明します。 は CA 証明書 AWS IoT Core を使用して証明書の所有権を検証します。Amazon の CA ではない CA によって署名されたデバイス証明書を使用するには、デバイス証明書の所有権を検証 AWS IoT Core できるように、CA 証明書を に登録する必要があります。

### CA 証明書の登録 (コンソール)
<a name="register-CA-cert-console"></a>

**注記**  
コンソールで CA 証明書を登録するには、[[Register CA certificate]](https://console.aws.amazon.com//iot/home#/create/cacertificate) (CA 証明書の登録) をコンソールで開始します。CA はマルチアカウントモードで登録でき、検証証明書を提供したり、プライベートキーにアクセスしたりする必要はありません。マルチアカウントモードでは、同一 AWS リージョン内の複数の AWS アカウント で CA を登録することができます。検証証明書と CA のプライベートキーの所有権の証明を提供することで、CA をシングルアカウントモードで登録できます。

### CA 証明書の登録 (CLI)
<a name="register-CA-cert-cli"></a>

CA 証明書を `DEFAULT` モードまたは `SNI_ONLY` モードで登録できます。CA は、 の 1 つ AWS アカウント で `DEFAULT`モードで登録できます AWS リージョン。CA は、 AWS アカウント 同じ 内の複数の によって `SNI_ONLY` モードで登録できます AWS リージョン。CA 証明書の詳細については、「[certificateMode](https://docs.aws.amazon.com//iot/latest/apireference/API_CACertificateDescription.html#iot-Type-CACertificateDescription-certificateMode)」を参照してください。

**注記**  
CA を `SNI_ONLY` モードで登録することをお勧めします。検証証明書やプライベートキーへのアクセスを提供する必要はなく、同じ AWS アカウント 内の複数の で CA を登録できます AWS リージョン。

#### SNI\$1ONLY モードでの CA 証明書の登録 (CLI) – 推奨
<a name="register-CA-cert-SNI-cli"></a>

**前提条件**

続行する前に、コンピュータで次のものが揃っていることを確認してください。
+ ルート CA の証明書ファイル (次の例では `root_CA_cert_filename.pem` と表記します)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) またはそれ以降

**を使用して CA 証明書を `SNI_ONLY` モードで登録するには AWS CLI**

1. CA 証明書を に登録します AWS IoT。**register-ca-certificate** コマンドを使用して、CA 証明書ファイル名を入力します。詳細については、「*AWS CLI コマンドリファレンス*」の「[register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html)」を参照してください。

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --certificate-mode SNI_ONLY
   ```

   成功した場合、このコマンドは *certificateId* を返します。

1. この時点で、CA 証明書は に登録されています AWS IoT が、非アクティブです。CA 証明書によって署名されたクライアント証明書を登録できるようにするには、CA 証明書をアクティブにする必要があります。

   このステップにより CA 証明書がアクティブ化されます。

   CA 証明書をアクティブ化するには、次のように **update-certificate** コマンドを使用します。詳細については、「*AWS CLI コマンドリファレンス*」の「[update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)」を参照してください。

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

CA 証明書のステータスを表示するには、**describe-ca-certificate** コマンドを使用します。詳細については、「*AWS CLI コマンドリファレンス*」の「[describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html)」を参照してください。

#### `DEFAULT` モードでの CA 証明書の登録 (CLI)
<a name="register-CA-cert-default-cli"></a>

**前提条件**

続行する前に、コンピュータで次のものが揃っていることを確認してください。
+ ルート CA の証明書ファイル (次の例では `root_CA_cert_filename.pem` と表記します)
+ ルート CA 証明書のプライベートキーファイル (次の例では `root_CA_key_filename.key` と表記します)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) またはそれ以降

**を使用して CA 証明書を `DEFAULT` モードで登録するには AWS CLI**

1. から登録コードを取得するには AWS IoT、 を使用します**get-registration-code**。プライベートキー検証証明書の `Common Name` として使用するために、返された `registrationCode` を保存します。詳細については、「*AWS CLI コマンドリファレンス*」の「[get-registration-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/get-registration-code.html)」を参照してください。

   ```
   aws iot get-registration-code
   ```

1. プライベートキー検証証明書のキーペアを生成します。

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. プライベートキー検証証明書の証明書署名リクエスト (CSR) を作成します。証明書の `Common Name` フィールドに、`registrationCode` によって返された **get-registration-code** を設定します。

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   証明書に関するいくつかの情報 (例: `Common Name`) の入力を求められます。

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. CSR を使用して、プライベートキー検証証明書を作成します。

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. CA 証明書を に登録します AWS IoT。次のように、CA 証明書のファイル名とプライベートキー検証証明書のファイル名を **register-ca-certificate** コマンドに渡します。詳細については、「*AWS CLI コマンドリファレンス*」の「[register-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html)」を参照してください。

   ```
   aws iot register-ca-certificate \
       --ca-certificate file://root_CA_cert_filename.pem \
       --verification-cert file://verification_cert_filename.pem
   ```

   成功した場合、このコマンドは *certificateId* を返します。

1. この時点で、CA 証明書は に登録されています AWS IoT が、アクティブではありません。CA 証明書によって署名されたクライアント証明書を登録できるようにするには、CA 証明書をアクティブにする必要があります。

   このステップにより CA 証明書がアクティブ化されます。

   CA 証明書をアクティブ化するには、次のように **update-certificate** コマンドを使用します。詳細については、「*AWS CLI コマンドリファレンス*」の「[update-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)」を参照してください。

   ```
   aws iot update-ca-certificate \
       --certificate-id certificateId \
       --new-status ACTIVE
   ```

CA 証明書のステータスを表示するには、**describe-ca-certificate** コマンドを使用します。詳細については、「*AWS CLI コマンドリファレンス*」の「[describe-ca-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html)」を参照してください。

### コンソールに CA 証明書を登録するための CA 検証証明書を作成する
<a name="create-CA-verification-cert"></a>

**注記**  
この手順は、 AWS IoT コンソールから CA 証明書を登録する場合にのみ使用します。  
 AWS IoT コンソールからこの手順にアクセスしなかった場合は、コンソールの「CA 証明書の登録」で [CA 証明書](https://console.aws.amazon.com//iot/home#/create/cacertificate)の登録プロセスを開始します。

続行する前に、同じコンピュータで次のものが揃っていることを確認してください :
+ ルート CA の証明書ファイル (次の例では `root_CA_cert_filename.pem` と表記します)
+ ルート CA 証明書のプライベートキーファイル (次の例では `root_CA_key_filename.key` と表記します)
+ [OpenSSL v1.1.1i](https://www.openssl.org/) またはそれ以降

**コマンドラインインターフェイスを使用して CA 検証証明書を作成し、コンソールに CA 証明書を登録するには**

1. `verification_cert_key_filename.key` を、作成する検証証明書のキーファイルのファイル名 (例えば **verification\$1cert.key** など) で置き換えます。次にこのコマンドを実行して、プライベートキー検証証明書のキーペアを生成します。

   ```
   openssl genrsa -out verification_cert_key_filename.key 2048
   ```

1. `verification_cert_key_filename.key` をステップ 1 で作成したキーファイルの名前で置き換えます。

   `verification_cert_csr_filename.csr` を作成する証明書署名リクエスト (CSR) ファイルの名前で置き換えます。例えば、**verification\$1cert.csr**。

   このコマンドを実行して、CSR ファイルを作成します。

   ```
   openssl req -new \
       -key verification_cert_key_filename.key \
       -out verification_cert_csr_filename.csr
   ```

   このコマンドでは、後で説明する追加情報の入力を求めるプロンプトが表示されます。

1.  AWS IoT コンソールの検証**証明書**コンテナで、登録コードをコピーします。

1. **openssl** コマンドが入力を求める情報を以下の例に示します。`Common Name` フィールド以外では、独自の値を入力することも、空白のままにすることもできます。

   `Common Name` フィールドに、前のステップでコピーした登録コードを貼り付けます。

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:your_registration_code
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

   終了すると、コマンドによって CSR ファイルが作成されます。

1. `verification_cert_csr_filename.csr` を前のステップで使用した `verification_cert_csr_filename.csr` で置き換えます。

   `root_CA_cert_filename.pem` を登録する CA 証明書のファイル名で置き換えます。

   `root_CA_key_filename.key` を CA 証明書のプライベートキーファイルのファイル名で置き換えます。

   `verification_cert_filename.pem` を作成する検証証明書のファイル名で置き換えます。例えば、**verification\$1cert.pem**。

   ```
   openssl x509 -req \
       -in verification_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out verification_cert_filename.pem \
       -days 500 -sha256
   ```

1. OpenSSL コマンドが完了したら、コンソールに戻ったときにこれらのファイルを使用できるようになります。
   + CA 証明書ファイル (前のコマンドで使用した `root_CA_cert_filename.pem`)
   + 前のステップで作成した検証証明書 (前のコマンドで使用した *verification\$1cert\$1filename.pem*)

## CA 証明書の非アクティブ化
<a name="deactivate-ca-cert"></a>

認証機関 (CA) 証明書の自動クライアント証明書登録が有効になっている場合、 は CA 証明書 AWS IoT をチェックして CA が であることを確認します`ACTIVE`。CA 証明書が の場合`INACTIVE`、クライアント証明書の登録は許可 AWS IoT されません。

CA 証明書を `INACTIVE` に設定すると、CA によって発行された新しいクライアント証明書が自動的に登録されなくなります。

**注記**  
疑わしい CA 証明書によって署名された登録済みのクライアント証明書は、明示的にそれぞれのクライアント証明書が取り消されるまで、引き続き使用されます。

### CA 証明書の非アクティブ化 (コンソール)
<a name="deactivate-ca-cert-console"></a>

**AWS IoT コンソールを使用して CA 証明書を無効にするには**

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

1. 左のナビゲーションペインで、[**安全性**]、[**CA**] の順に選択します。

1. 認証局の一覧で、非アクティブ化する認証局を探し、省略記号のアイコンを選択してオプションメニューを開きます。

1. オプションメニューで、[**無効化**] を選択します。

認証局は、リストに [**非アクティブ**] と表示されます。

**注記**  
 AWS IoT コンソールには、非アクティブ化した CA によって署名された証明書を一覧表示する方法はありません。これらの証明書を一覧表示する AWS CLI オプションについては、[CA 証明書の非アクティブ化 (CLI)](#deactivate-ca-cert-cli) を参照してください。

### CA 証明書の非アクティブ化 (CLI)
<a name="deactivate-ca-cert-cli"></a>

 AWS CLI は、CA 証明書を非アクティブ化する [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html) コマンドを提供します。

```
aws iot update-ca-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-certificates-by-ca.html) コマンドを使用して、指定した CA によって署名されたすべての登録済みクライアント証明書のリストを取得します。指定した CA 証明書によって署名されたクライアント証明書ごとに、[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) コマンドを使用します。これによってクライアント証明書が失効し、使用できなくなります。

CA 証明書のステータスを表示するには、[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) コマンドを使用します。

# CA 証明書を使用してクライアント証明書を作成する
<a name="create-device-cert"></a>

独自の認証局 (CA) を使用してクライアント証明書を作成できます。クライアント証明書は、使用 AWS IoT 前に に登録する必要があります。クライアント証明書の登録オプションの詳細については、 を参照してください[クライアント証明書の登録](register-device-cert.md)

## クライアント証明書の作成 (CLI)
<a name="create-device-cert-cli"></a>

**注記**  
 AWS IoT コンソールでこの手順を実行することはできません。

**を使用してクライアント証明書を作成するには AWS CLI**

1. キーペアを生成します。

   ```
   openssl genrsa -out device_cert_key_filename.key 2048
   ```

1. クライアント証明書の CSR を作成します。

   ```
   openssl req -new \
       -key device_cert_key_filename.key \
       -out device_cert_csr_filename.csr
   ```

   以下に示しているように、いくつかの情報の入力を求められます。

   ```
   You are about to be asked to enter information that will be incorporated
   into your certificate request.
   What you are about to enter is what is called a Distinguished Name or a DN.
   There are quite a few fields but you can leave some blank
   For some fields there will be a default value,
   If you enter '.', the field will be left blank.
   -----
   Country Name (2 letter code) [AU]:
       State or Province Name (full name) []:
       Locality Name (for example, city) []:
       Organization Name (for example, company) []:
       Organizational Unit Name (for example, section) []:
       Common Name (e.g. server FQDN or YOUR name) []:
       Email Address []:
   
       Please enter the following 'extra' attributes
       to be sent with your certificate request
       A challenge password []:
       An optional company name []:
   ```

1. CSR からクライアント証明書を作成します。

   ```
   openssl x509 -req \
       -in device_cert_csr_filename.csr \
       -CA root_CA_cert_filename.pem \
       -CAkey root_CA_key_filename.key \
       -CAcreateserial \
       -out device_cert_filename.pem \
       -days 500 -sha256
   ```

 この時点で、クライアント証明書は作成されていますが、まだ登録されていません AWS IoT。クライアント証明書を登録する方法とタイミングについては、 を参照してください[クライアント証明書の登録](register-device-cert.md) 

# クライアント証明書の登録
<a name="register-device-cert"></a>

クライアントと 間の通信を有効にする AWS IoT には、クライアント証明書を に登録する必要があります AWS IoT。各クライアント証明書を手動で登録することも、クライアントが AWS IoT 初めて に接続するときに自動的に登録するようにクライアント証明書を設定することもできます。

 クライアントとデバイスが最初に接続するときにクライアント証明書を登録する場合は、[CA 証明書の登録](manage-your-CA-certs.md#register-CA-cert) を使用するリージョンで AWS IoT を使用してクライアント証明書に署名する必要があります。Amazon ルート CA は自動的に に登録されます AWS IoT。

クライアント証明書は、 AWS アカウント および リージョンで共有できます。これらのトピックの手順は、クライアント証明書を使用する各アカウントおよびリージョンで実行する必要があります。あるアカウントまたはリージョンでのクライアント証明書の登録は、別のアカウントでは自動的に認識されません。

**注記**  
 AWS IoT への接続に Transport Layer Security (TLS) プロトコルを使用するクライアントは、TLS に対する [Server Name Indication (SNI) 拡張機能](https://tools.ietf.org/html/rfc3546#section-3.1)をサポートしている必要があります。詳細については、「[のトランスポートセキュリティ AWS IoT Core](transport-security.md)」を参照してください。

**Topics**
+ [クライアント証明書を手動で登録する](manual-cert-registration.md)
+ [クライアントがジャ AWS IoT just-in-time登録 (JITR) に接続するときにクライアント証明書を登録する](auto-register-device-cert.md)

# クライアント証明書を手動で登録する
<a name="manual-cert-registration"></a>

 AWS IoT コンソールと を使用して、クライアント証明書を手動で登録できます AWS CLI。

使用する登録手順は、証明書が AWS アカウントおよびリージョンによって共有されるかどうかによって異なります。あるアカウントまたはリージョンでのクライアント証明書の登録は、別のアカウントでは自動的に認識されません。

このトピックの手順は、クライアント証明書を使用する各アカウントおよびリージョンで実行する必要があります。クライアント証明書は、 AWS アカウントおよび リージョンで共有できます。

## 登録した CA によって署名したクライアント証明書を登録する (コンソール)
<a name="manual-cert-registration-console"></a>

**注記**  
この手順を実行する前に、クライアント証明書の .pem ファイルがあり、クライアント証明書が[登録 AWS IoT](manage-your-CA-certs.md#register-CA-cert)した CA によって署名されていることを確認してください。

**コンソール AWS IoT を使用して既存の証明書を に登録するには**

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

1. ナビゲーションペインの **[Manage]** (管理) セクションで、**[Security]** (セキュリティ)、**[Certificates]** (証明書) の順に選択します。

1. **[Certificates]** (証明書) ページの **[Certificates]** (証明書) ダイアログボックスで、**[Add certificate]** (証明書を追加)、**[Register certificates]** (証明書を登録) の順に選択します。

1. **[Register certificate]** (証明書を登録) ページの **[Certificates to upload]** (アップロードする証明書) ダイアログボックスで、次の操作を行います。
   + **[CA is registered with AWS IoT]** (CA が IoT に登録されています) を選択します。
   + **[Choose a CA certificate]** (CA 証明書を選択) から **[Certification authority]** (認証機関) を選択します。
     +  AWS IoTに登録されていない新しい**認証機関**を登録するには、**[Register a new CA]** (新しい CA を登録) を選択します。
     + 認証機関として **Amazon ルート認証機関**を使用する場合は、**[Choose a CA certificate]** (CA 証明書を選択) を空白のままにします。
   + アップロードして登録する証明書を最大 10 個選択します AWS IoT。
     + 「[AWS IoT クライアント証明書を作成する](device-certs-create.md)」と「[CA 証明書を使用してクライアント証明書を作成する](create-device-cert.md)」で作成した証明書ファイルを使用します。
   + **[Activate]** (有効化) または **[Deactivate]** (無効化) を選択します。**[Deactive]** (無効化) を選択すると、証明書の登録後に証明書を有効化する方法についての説明が [クライアント証明書を有効または無効する](activate-or-deactivate-device-cert.md) に表示されます。
   + [**登録**] を選択します。

**[Certificates]** (証明書) ページの **[Certificates]** (証明書) ダイアログボックスに、登録した証明書が表示されます。

## 登録していない CA によって署名したクライアント証明書を登録する (コンソール)
<a name="manual-cert-registration-console-noca"></a>

**注記**  
この手順を実行する前に、クライアント証明書の.pem ファイルがあることを確認してください。

**コンソール AWS IoT を使用して既存の証明書を に登録するには**

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

1. 左のナビゲーションペインで、[**安全性**] を選択し、[**証明書**] を選択してから [**作成**] を選択します。

1. **[Create a certificate]** (証明書を作成する) で、**[Use my certificate]** (お持ちの証明書を使用する) エントリを見つけて、**[Get started]** (今すぐ始める) を選択します。

1. **[Select a CA]** (CA の選択) で、**[Next]** (次へ) を選択します。

1.  **[Register existing device certificates]** (既存のデバイス証明書を登録する) で **[Select certificates]** (証明書の選択) を選択し、登録する証明書ファイルを最大 10 個選択します。

1.  ファイルダイアログボックスを閉じた後、クライアント証明書を登録するときにアクティブ化するか取り消すかどうかを選択します。

   登録時に証明書をアクティブ化しない場合、後で証明書をアクティブ化する方法については、「[クライアント証明書のアクティブ化 (コンソール)](activate-or-deactivate-device-cert.md#activate-device-cert-console)」で説明します。

   登録時に証明書が失効した場合、後でアクティブ化することはできません。

   登録する証明書ファイルを選択し、登録後に実行するアクションを選択したら、[**Register certificates(証明書の登録) **] を選択します。

正常に登録されたクライアント証明書が証明書の一覧に表示されます。

## 登録した CA によって署名したクライアント証明書を登録する (CLI)
<a name="manual-cert-registration-cli"></a>

**注記**  
この手順を実行する前に、認証局 (CA) .pem とクライアント証明書の.pem ファイルがあることを確認してください。クライアント証明書は、[登録 AWS IoT](manage-your-CA-certs.md#register-CA-cert)した認証機関 (CA) によって署名されている必要があります。

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate.html) コマンドを使用して、クライアント証明書を登録します (アクティブ化しません)。

```
aws iot register-certificate \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

クライアント証明書は に登録されていますが AWS IoT、まだアクティブではありません。後で有効化する方法については、「[クライアント証明書のアクティブ化 (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli)」を参照してください。

このコマンドを使用して、クライアント証明書を登録するときにクライアント証明書をアクティブ化することもできます。

```
aws iot register-certificate \
    --set-as-active \
    --certificate-pem file://device_cert_filename.pem \
    --ca-certificate-pem file://ca_cert_filename.pem
```

証明書をアクティブ化して に接続できるようにする方法の詳細については AWS IoT、「」を参照してください。 [クライアント証明書を有効または無効する](activate-or-deactivate-device-cert.md)

## 登録していない CA によって署名したクライアント証明書を登録する (CLI)
<a name="manual-cert-registration-noca-cli"></a>

**注記**  
この手順を実行する前に、証明書の.pem ファイルがあることを確認してください。

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-certificate-without-ca.html) コマンドを使用して、クライアント証明書を登録します (アクティブ化しません)。

```
aws iot register-certificate-without-ca \
    --certificate-pem file://device_cert_filename.pem
```

クライアント証明書は に登録されていますが AWS IoT、まだアクティブではありません。後で有効化する方法については、「[クライアント証明書のアクティブ化 (CLI)](activate-or-deactivate-device-cert.md#activate-device-cert-cli)」を参照してください。

このコマンドを使用して、クライアント証明書を登録するときにクライアント証明書をアクティブ化することもできます。

```
aws iot register-certificate-without-ca \
    --status ACTIVE \
    --certificate-pem file://device_cert_filename.pem
```

証明書をアクティブ化して に接続できるようにする方法の詳細については AWS IoT、「」を参照してください[クライアント証明書を有効または無効する](activate-or-deactivate-device-cert.md)。

# クライアントがジャ AWS IoT just-in-time登録 (JITR) に接続するときにクライアント証明書を登録する
<a name="auto-register-device-cert"></a>

CA 証明書を設定して、クライアントが初めて接続したときに AWS IoT に自動的に登録するために署名したクライアント証明書を有効にすることができます AWS IoT。

クライアントが AWS IoT 初めて に接続するときにクライアント証明書を登録するには、CA 証明書の自動登録を有効にし、必要な証明書を提供するようにクライアントによる最初の接続を設定する必要があります。

## 自動登録をサポートするための CA 証明書の設定 (コンソール)
<a name="enable-auto-registration-console"></a>

**AWS IoT コンソールを使用してクライアント証明書の自動登録をサポートするように CA 証明書を設定するには**

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

1. 左のナビゲーションペインで、[**安全性**]、[**CA**] の順に選択します。

1. 認証局のリストで、自動登録を有効にする認証局を探し、省略記号アイコンを使用してオプションメニューを開きます。

1. オプションメニューで、[**自動登録を有効にする**] を選択します。

**注記**  
自動登録ステータスは、認証局の一覧に表示されません。認証局の自動登録ステータスを表示するには、認証局の [**詳細**] ページを開く必要があります。

## 自動登録をサポートするための CA 証明書の設定 (CLI)
<a name="enable-auto-registration-cli"></a>

CA 証明書を に登録済みの場合は AWS IoT、 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-ca-certificate.html) コマンドを使用して CA 証明書`autoRegistrationStatus`の を に設定します`ENABLE`。

```
aws iot update-ca-certificate \
--certificate-id caCertificateId \
--new-auto-registration-status ENABLE
```

CA 証明書を登録するときに `autoRegistrationStatus` を有効にする場合は、[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/register-ca-certificate.html) コマンドを使用します。

```
aws iot register-ca-certificate \
--allow-auto-registration  \
--ca-certificate file://root_CA_cert_filename.pem \
--verification-cert file://verification_cert_filename.pem
```

CA 証明書のステータスを表示するには、[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-ca-certificate.html) コマンドを使用します。

## 自動登録のためのクライアントによる最初の接続の設定します
<a name="configure-auto-reg-first-connect"></a>

クライアントが AWS IoT 初めて に接続しようとする場合、Transport Layer Security (TLS) ハンドシェイク中に CA 証明書によって署名されたクライアント証明書がクライアントに存在する必要があります。

クライアントが に接続するときは AWS IoT、「クライアント証明書[の作成」または「独自のクライアント証明書の作成」で作成した AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-create.html)クライアント証明書を使用します。 は CA 証明書を登録済み CA 証明書として AWS IoT 認識し、クライアント証明書を登録して、そのステータスを に設定します`PENDING_ACTIVATION`。 [https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html)これは、クライアント証明書が自動的に登録され、アクティベーションの待機中という事です。クライアント証明書が `ACTIVE` 状態になると、 AWS IoTへの接続に使用できるようになります。クライアント証明書の有効化については、「[クライアント証明書を有効または無効する](activate-or-deactivate-device-cert.md)」を参照してください。

**注記**  
ジャ AWS IoT Core just-in-time登録 (JITR) 機能を使用してデバイスをプロビジョニングできます。デバイスの最初の接続で信頼チェーン全体を送信する必要はありません AWS IoT Core。CA 証明書の提示はオプションですが、[[Server Name Indication (SNI)](https://datatracker.ietf.org/doc/html/rfc3546#section-3.1)](サーバーネームインディケーション (SNI)) エクステンションを接続する時にそれらを送信するために、そのデバイスが必要です。

が証明書 AWS IoT を自動的に登録するか、クライアントが証明書を `PENDING_ACTIVATION`ステータスで提示すると、 は次の MQTT トピックにメッセージ AWS IoT を発行します。

`$aws/events/certificates/registered/caCertificateId`

ここで、`caCertificateId` は、クライアント証明書を発行した CA 認定の ID です。

このトピックに発行されたメッセージには、以下の構造があります。

```
{
        "certificateId": "certificateId",
        "caCertificateId": "caCertificateId",
        "timestamp": timestamp,
        "certificateStatus": "PENDING_ACTIVATION",
        "awsAccountId": "awsAccountId",
        "certificateRegistrationTimestamp": "certificateRegistrationTimestamp"
}
```

このトピックをリッスンし、いくつかのアクションを実行するルールを作成できます。クライアント証明書が証明書失効リスト (CRL) に含まれていないことを確認し、証明書を有効にし、ポリシーを作成して、証明書にアタッチする、Lambda ルールを作成することをお勧めします。ポリシーによって、クライアントがアクセスできるリソースが決まります。作成するポリシーで接続デバイスからのクライアント ID が必要な場合は、ルールの clientid() 関数を使用してクライアント ID を取得できます。ルールの例として、以下のようなものがあります。

```
SELECT *,
   clientid() as clientid
from $aws/events/certificates/registered/caCertificateId
```

この例では、ルールは JITR トピック `$aws/events/certificates/registered/caCertificateID` をサブスクライブし、clientid() 関数を使用してクライアント ID を取得します。次に、ルールは JITR ペイロードにクライアント ID を追加します。ルールの clientid() 関数の詳細については、「[clientid()](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-clientid)」を参照してください。

`$aws/events/certificates/registered/caCertificateID` トピックでリッスンして該当アクションを実行する Lambda ルールの作成方法については、「[Just-in-Time Registration of Client Certificates on AWS IoT](https://aws.amazon.com/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/)」を参照してください。

クライアント証明書の自動登録中にエラーまたは例外が発生した場合、 はイベントまたはメッセージを CloudWatch Logs のログ AWS IoT に送信します。アカウントのログ設定の詳細については、[Amazon CloudWatch のドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/)を参照してください。

# クライアント証明書の管理
<a name="manage-device-cert"></a>

AWS IoT には、クライアント証明書を管理する機能が用意されています。

**Topics**
+ [クライアント証明書を有効または無効する](activate-or-deactivate-device-cert.md)
+ [クライアント証明書へのモノまたはポリシーのアタッチ](attach-to-cert.md)
+ [クライアント証明書の取り消し](revoke-ca-cert.md)
+ [別のアカウントに証明書を移転する](transfer-cert.md)

# クライアント証明書を有効または無効する
<a name="activate-or-deactivate-device-cert"></a>

AWS IoT は、接続を認証するときにクライアント証明書がアクティブであることを確認します。

クライアント証明書をアクティブ化せずに作成および登録できるため、使用するときまで使用されないようにすることができます。アクティブなクライアント証明書を無効にして、一時的に無効にすることもできます。最後に、クライアント証明書を取り消して、今後の使用を防ぐことができます。

## クライアント証明書のアクティブ化 (コンソール)
<a name="activate-device-cert-console"></a>

**AWS IoT コンソールを使用してクライアント証明書をアクティブ化するには**

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

1. 左のナビゲーションペインで、[**安全性**] を選択し、[**証明書**] を選択します。

1. 証明書の一覧で、アクティブ化する証明書を探し、省略記号アイコンを使用してオプションメニューを開きます。

1. オプションメニューで、[**有効化**] を選択します。

証明書の一覧で、証明書が [**アクティブ**] と表示されます。

## クライアント証明書の非アクティブ化 (コンソール)
<a name="deactivate-device-cert-console"></a>

**AWS IoT コンソールを使用してクライアント証明書を無効にするには**

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

1. 左のナビゲーションペインで、[**安全性**] を選択し、[**証明書**] を選択します。

1. 証明書の一覧で、非アクティブ化する証明書を探し、省略記号アイコンを使用してオプションメニューを開きます。

1. オプションメニューで、[**無効化**] を選択します。

証明書のリストでは、証明書が [**非アクティブ**] と表示されます。

## クライアント証明書のアクティブ化 (CLI)
<a name="activate-device-cert-cli"></a>

 AWS CLI は、証明書をアクティブ化するための [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) コマンドを提供します。

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status ACTIVE
```

コマンドが成功した場合、証明書の状態は `ACTIVE` になります。[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) を実行して、証明書のステータスを確認します。

```
aws iot describe-certificate \
    --certificate-id certificateId
```

## クライアント証明書の非アクティブ化 (CLI)
<a name="deactivate-device-cert-cli"></a>

 AWS CLI は、証明書を非アクティブ化するための [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) コマンドを提供します。

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status INACTIVE
```

コマンドが成功した場合、証明書の状態は `INACTIVE` になります。[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) を実行して、証明書のステータスを確認します。

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# クライアント証明書へのモノまたはポリシーのアタッチ
<a name="attach-to-cert"></a>

 AWS IoT モノとは別の証明書を作成して登録する場合、 AWS IoT オペレーションを許可するポリシーはなく、 AWS IoT モノのオブジェクトにも関連付けられません。このセクションでは、登録済みの証明書にこれらの関連付けを追加する方法について説明します。

**重要**  
これらの手順を完了するには、証明書にアタッチするモノまたはポリシーを事前に作成しておく必要があります。

証明書は、接続 AWS IoT できるようにデバイスを で認証します。モノのリソースに証明書をアタッチすると、デバイスとモノのリソースとの関係が (証明書を介して) 確立されます。デバイスがメッセージに接続して発行することを許可するなどの AWS IoT アクションを実行することを許可するには、適切なポリシーをデバイスの証明書にアタッチする必要があります。

## クライアント証明書へのモノのアタッチ (コンソール)
<a name="attach-to-cert-thing-console"></a>

この手順を完了するには、モノオブジェクトの名前が必要です。

**登録済み証明書にモノオブジェクトをアタッチするには**

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

1. 左のナビゲーションペインで、[**安全性**] を選択し、[**証明書**] を選択します。

1. 証明書のリストで、ポリシーをアタッチする証明書を見つけ、省略記号アイコンを選択して証明書のオプションメニューを開き、[**モノをアタッチ**] を選択します。

1. ポップアップで、証明書にアタッチするモノの名前を見つけ、そのチェックボックスをオンにして **[Attach]** (アタッチ) を選択します。

これで、モノオブジェクトが証明書の詳細ページのモノリストに表示されます。

## クライアント証明書へのポリシーのアタッチ (コンソール)
<a name="attach-to-cert-policy-console"></a>

この手順を完了するには、ポリシーオブジェクトの名前が必要です。

**登録済みの証明書にポリシーオブジェクトをアタッチするには**

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

1. 左のナビゲーションペインで、[**安全性**] を選択し、[**証明書**] を選択します。

1. 証明書のリストで、ポリシーをアタッチする証明書を見つけ、省略記号アイコンを選択して証明書のオプションメニューを開き、[**ポリシーをアタッチ**] を選択します。

1. ポップアップで、証明書にアタッチするポリシーの名前を見つけ、そのチェックボックスをオンにして **[Attach]** (アタッチ) を選択します。

これで、ポリシーオブジェクトが証明書の詳細ページのポリシーリストに表示されます。

## クライアント証明書へのモノのアタッチ (CLI)
<a name="attach-to-cert-thing-cli"></a>

 AWS CLI は、モノのオブジェクトを証明書にアタッチする [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-thing-principal.html) コマンドを提供します。

```
aws iot attach-thing-principal \
    --principal certificateArn \
    --thing-name thingName
```

## クライアント証明書へのポリシーのアタッチ (CLI)
<a name="attach-to-cert-policy-cli"></a>

 AWS CLI は、ポリシーオブジェクトを証明書にアタッチする [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/attach-policy.html) コマンドを提供します。

```
aws iot attach-policy \
    --target certificateArn \
    --policy-name policyName
```

# クライアント証明書の取り消し
<a name="revoke-ca-cert"></a>

登録済みのクライアント証明書で不審なアクティビティを検出した場合は、再使用できないように無効にすることができます。

**注記**  
証明書が取り消されると、そのステータスを変更することはできません。つまり、証明書のステータスを `Active` や他のステータスに変更することはできません。

## クライアント証明書の取り消し (コンソール)
<a name="revoke-device-cert-console"></a>

**AWS IoT コンソールを使用してクライアント証明書を取り消すには**

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

1. 左のナビゲーションペインで、[**安全性**] を選択し、[**証明書**] を選択します。

1. 証明書の一覧で、取り消す証明書を探し、省略記号アイコンを使用してオプションメニューを開きます。

1. オプションメニューで [**取り消し**] を選択します。

証明書が正常に取り消された場合、証明書の一覧に [**失効済み**] と表示されます。

## クライアント証明書 (CLI) の取り消し
<a name="revoke-device-cert-cli"></a>

 AWS CLI は、証明書を取り消す[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html)コマンドを提供します。

```
aws iot update-certificate \
    --certificate-id certificateId \
    --new-status REVOKED
```

コマンドが成功した場合、証明書の状態は `REVOKED` になります。[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-certificate.html) を実行して、証明書のステータスを確認します。

```
aws iot describe-certificate \
    --certificate-id certificateId
```

# 別のアカウントに証明書を移転する
<a name="transfer-cert"></a>

1 つの に属する X.509 証明書は、別の に転送 AWS アカウント できます AWS アカウント。

**X.509 証明書を 間で転送 AWS アカウント するには**

1. [証明書の転送を開始する](#transfer-cert-init)

   転送を開始する前に、証明書を非アクティブにし、すべてのポリシーとモノからデタッチする必要があります。

1. [証明書の転送を承諾または拒否する](#transfer-cert-accept)

   受信側のアカウントは、転送された証明書を明示的に承諾または拒否する必要があります。受信側のアカウントが証明書を承諾したら、使用前に証明書を有効化する必要があります。

1. [証明書の転送をキャンセルする](#transfer-cert-cancel)

   証明書が承諾されない場合、元のアカウントは転送をキャンセルできます。

## 証明書の転送を開始する
<a name="transfer-cert-init"></a>

[AWS IoT コンソール](https://console.aws.amazon.com/iot/home)または AWS アカウント を使用して、証明書の別の への転送を開始できます AWS CLI。

### 証明書の転送を開始する (コンソール)
<a name="transfer-cert-init-console"></a>

この手順を完了するには、転送する証明書の ID が必要です。

転送する証明書を持つアカウントからこの手順を実行します。

**別の への証明書の転送を開始するには AWS アカウント**

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

1. 左のナビゲーションペインで、[**安全性**] を選択し、[**証明書**] を選択します。

   ステータスが **[Active]** (アクティブ) または **[Inactive]** (無効) である、転送する証明書を選択し、その詳細ページを開きます。

1. 証明書の **[詳細]** ページの **[アクション]** メニューで、**[無効化]** オプションが使用可能な場合は、**[無効化]** オプションを選択して証明書を無効化します。

1. 証明書の **[Details]** (詳細) ページの左側のメニューで、**[Policies]** (ポリシー) を選択します。

1. 証明書の **[Policies]** (ポリシー) ページで、証明書にポリシーがアタッチされている場合は、ポリシーのオプションメニューを開いて **[Detach]** (デタッチ) を選択し、各ポリシーをデタッチします。

   続行する前に、証明書にポリシーがアタッチされていてはなりません。

1. 証明書の **[Policies]** (ポリシー) ページの左側のメニューで、**[Things]** (モノ) を選択します。

1. 証明書の **[Things]** (モノ) ページで、証明書にモノがアタッチされている場合は、モノのオプションメニューを開いて **[Detach]** (デタッチ) を選択し、各モノをデタッチします。

   続行する前に、証明書にモノがアタッチされていてはなりません。

1. 証明書の **[Things]** (モノ) ページの左側のメニューで、**[Details]** (詳細) を選択します。

1. 証明書の **[詳細]** ページの **[アクション]** メニューで、**[転送を開始する]** を選択して **[転送を開始する]** ダイアログボックスを開きます。

1. **転送の開始**ダイアログボックスに、証明書を受信するアカウントの AWS アカウント 番号とオプションのショートメッセージを入力します。

1. [**Start transfer**] (転送を開始する) を選択して、証明書を転送します。

転送の成功または失敗を示すメッセージがコンソールに表示されます。転送が開始された場合、証明書のステータスは **[Transferred]** (転送済み) に更新されます。

### 証明書の転送を開始する (CLI)
<a name="transfer-cert-init-cli"></a>

この手順を完了するには、転送する証明書の *certificateId* と *certificateArn* が必要です。

転送する証明書を持つアカウントからこの手順を実行します。

**別の AWS アカウントへの証明書の移管を開始するには**

1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/update-certificate.html) コマンドを使用して証明書を非アクティブ化します。

   ```
   aws iot update-certificate --certificate-id certificateId --new-status INACTIVE
   ```

1. すべてのポリシーをデタッチします。

   1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-attached-policies.html) コマンドを使用して、証明書にアタッチされているポリシーを一覧表示します。

      ```
      aws iot list-attached-policies --target certificateArn
      ```

   1. アタッチされたポリシーごとに、[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-policy.html) コマンドを使用してポリシーをデタッチします。

      ```
      aws iot detach-policy --target certificateArn --policy-name policy-name
      ```

1. すべてのモノをデタッチします。

   1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/list-principal-things.html) コマンドを使用して、証明書にアタッチされているモノを一覧表示します。

      ```
      aws iot list-principal-things --principal certificateArn
      ```

   1. アタッチされた各モノに対して [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/detach-thing-principal.html) コマンドを実行してモノをデタッチします。

      ```
      aws iot detach-thing-principal --principal certificateArn --thing-name thing-name
      ```

1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/transfer-certificate.html) コマンドを使用して、証明書の転送を開始します。

   ```
   aws iot transfer-certificate --certificate-id certificateId --target-aws-account account-id
   ```

## 証明書の転送を承諾または拒否する
<a name="transfer-cert-accept"></a>

[AWS IoT コンソール](https://console.aws.amazon.com/iot/home)または AWS アカウント を使用して、別の から転送された AWS アカウント 証明書を承認または拒否できます AWS CLI。

### 証明書の転送を承諾または拒否する (コンソール)
<a name="transfer-cert-accept-console"></a>

この手順を完了するには、アカウントに転送された証明書の ID が必要です。

転送された証明書を受信するアカウントからこの手順を実行します。

**に転送された証明書を承諾または拒否するには AWS アカウント**

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

1. 左のナビゲーションペインで、[**安全性**] を選択し、[**証明書**] を選択します。

   承認または拒否するステータスが **[Pending Transfer]** (転送を保留中) の証明書を選択し、その詳細ページを開きます。

1. 証明書の **[Details]** (詳細) ページの **[Actions]** (アクション) メニューで、次の操作を実行します。
   + 証明書を受け入れるには、**[Accept transfer]** (転送を許可する) を選択します。
   + 証明書を承諾しない場合は、**[Reject transfer]** (転送を拒否する) を選択します。

### 証明書の転送を承諾または拒否する (CLI)
<a name="transfer-cert-accept-cli"></a>

この手順を完了するには、承認または拒否する証明書の転送の *certificateId* が必要です。

転送された証明書を受信するアカウントからこの手順を実行します。

**に転送された証明書を承諾または拒否するには AWS アカウント**

1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/accept-certificate-transfer.html) コマンドを使用して証明書を受け入れます。

   ```
   aws iot accept-certificate-transfer --certificate-id certificateId
   ```

1. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/reject-certificate-transfer.html) コマンドを使用して証明書を拒否します。

   ```
   aws iot reject-certificate-transfer --certificate-id certificateId
   ```

## 証明書の転送をキャンセルする
<a name="transfer-cert-cancel"></a>

[AWS IoT コンソール](https://console.aws.amazon.com/iot/home)または AWS CLIを使用して、承認される前に証明書の転送をキャンセルできます。

### 証明書の転送をキャンセルする (コンソール)
<a name="transfer-cert-cancel-console"></a>

この手順を完了するには、キャンセルする証明書の転送の ID が必要です。

証明書の転送を開始したアカウントから、この手順を実行します。

**証明書の転送をキャンセルするには**

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

1. 左のナビゲーションペインで、[**安全性**] を選択し、[**証明書**] を選択します。

   転送をキャンセルする **[Transferred]** (転送済み) のステータスの証明書を選択し、そのオプションメニューを開きます。

1. 証明書のオプションメニューで、**[Revoke transfer]** (転送を取り消す) オプションを選択して、証明書の転送をキャンセルします。
**重要**  
[**Revoke transfer**] (転送を取り消す) オプションと [**Revoke**] (取り消し) オプションを間違えないように注意してください。  
[**Revoke transfer**] (転送を取り消す) オプションは証明書の転送をキャンセルしますが、[**Revoke**] (取り消し) オプションは証明書を AWS IoTで不可逆的に使用できなくします。

### 証明書の転送をキャンセルする (CLI)
<a name="transfer-cert-cancel-cli"></a>

この手順を完了するには、キャンセルする証明書の転送の *certificateId* が必要です。

証明書の転送を開始したアカウントから、この手順を実行します。

[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/cancel-certificate-transfer.html) コマンドを使用して、証明書の転送をキャンセルします。

```
aws iot cancel-certificate-transfer --certificate-id certificateId
```

# カスタムクライアント証明書の検証
<a name="customize-client-auth"></a>

AWS IoT Core は X.509 クライアント証明書のカスタムクライアント証明書検証をサポートしており、クライアント認証管理を強化します。この証明書の検証方法は認証前証明書チェックとも呼ばれ、独自の基準 (Lambda 関数で定義) に基づいてクライアント証明書を評価し、クライアント証明書または証明書の署名認証局 (CA) 証明書を取り消して、クライアントが AWS IoT Coreに接続できないようにします。例えば、[オンライン証明書ステータスプロトコル (OCSP)](https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol) または[証明書失効リスト (CRL) ](https://en.wikipedia.org/wiki/Certificate_revocation_list)エンドポイントをサポートする検証機関に対して証明書のステータスを検証する独自の証明書失効チェックを作成し、失効した証明書を持つクライアントへの接続を防ぐことができます。クライアント証明書の評価に使用される基準は、Lambda 関数 (認証前 Lambda とも呼ばれます) で定義されます。ドメイン設定で設定されたエンドポイントを使用し、[[認証タイプ]](protocols.md#connection-protocol-auth-mode) は X.509 証明書である必要があります。さらに、クライアントは接続時に [Server Name Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) 拡張機能を提供する必要があります AWS IoT Core。

**注記**  
この機能は、 AWS GovCloud (US) リージョンではサポートされていません。

**Topics**
+ [ステップ 1: X.509 クライアント証明書を に登録する AWS IoT Core](#client-auth-cert-verification)
+ [ステップ 2: Lambda 関数を作成する](#customize-client-auth-lambda)
+ [ステップ 3: AWS IoT に Lambda 関数の呼び出しを許可する](#customize-client-configuration-grant-permission)
+ [ステップ 4: ドメインの認証設定を設定する](#customize-client-configuration)

## ステップ 1: X.509 クライアント証明書を に登録する AWS IoT Core
<a name="client-auth-cert-verification"></a>

これをまだ実行していない場合は、[X.509 クライアント証明書](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html)を登録してアクティブ化します AWS IoT Core。それ以外の場合は、次のステップに進みます。

クライアント証明書を に登録してアクティブ化するには AWS IoT Core、次の手順に従います。

1. [でクライアント証明書を直接作成 AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html)する場合。これらのクライアント証明書は、 に自動的に登録されます AWS IoT Core。

1. [独自のクライアント証明書を作成する](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html)場合は、[以下の手順に従って登録します AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html)。

1. クライアント証明書をアクティブ化するには、[以下の手順](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html)に従います。

## ステップ 2: Lambda 関数を作成する
<a name="customize-client-auth-lambda"></a>

証明書の検証を実行し、設定されたエンドポイントのクライアント接続試行ごとに呼び出される Lambda 関数を作成する必要があります。この Lambda 関数を作成するときは、「[最初の Lambda 関数を作成する](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html)」の一般的なガイダンスに従ってください。さらに、Lambda 関数が、次のように予想されるリクエストとレスポンスの形式に準拠していることを確認します。

**Lambda 関数のイベントの例**

```
{
	"connectionMetadata": {
		"id": "string"
	},
	"principalId": "string",
	"serverName": "string",
	"clientCertificateChain": [
		"string",
		"string"
	]
}
```

`connectionMetadata`  
クライアントから AWS IoT Coreへの接続に関連するメタデータまたは追加情報。

`principalId`  
TLS 接続のクライアントに関連付けられたプリンシパル識別子。

`serverName`  
[[サーバー名表示 (SNI)]](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) ホスト名文字列。 AWS IoT Core では、デバイスが [SNI 拡張](https://www.rfc-editor.org/rfc/rfc3546#section-3.1)を Transport Layer Security (TLS) に送信し、`host_name` フィールドに完全なエンドポイントアドレスを指定する必要があります。

`clientCertificateChain`  
クライアントの X.509 証明書チェーンを表す文字列の配列。

**Lambda 関数のレスポンスの例**

```
{
	"isAuthenticated": "boolean"
}
```

`isAuthenticated`  
リクエストが認証されるかどうかを示すブール値。

**注記**  
Lambda レスポンスでは、さらなる認証および承認に進むには `isAuthenticated` が `true` である必要があります。それ以外の場合は、IoT クライアント証明書を無効にし、X.509 クライアント証明書によるカスタム認証をブロックして、さらなる認証および承認を行うことができます。

## ステップ 3: AWS IoT に Lambda 関数の呼び出しを許可する
<a name="customize-client-configuration-grant-permission"></a>

Lambda 関数を作成したら、[add-permission](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html) CLI コマンドを使用して、関数を呼び出す AWS IoT アクセス許可を に付与する必要があります。この Lambda 関数は、設定されたエンドポイントへの接続試行ごとに呼び出されることに注意してください。詳細については、[「Lambda 関数 AWS IoT の呼び出しを許可する](custom-auth-authorize.md)」を参照してください。

## ステップ 4: ドメインの認証設定を設定する
<a name="customize-client-configuration"></a>

次のセクションでは、 AWS CLIを使用してカスタムドメインの認証設定を設定する方法について説明します。

### ドメインのクライアント証明書設定を設定する (CLI)
<a name="customize-client-auth-cli"></a>

ドメイン設定がない場合は、[https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html) CLI コマンドを使用してドメイン設定を作成します。既にドメイン設定がある場合は、[https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html) CLI コマンドを使用してドメインのクライアント証明書設定を更新します。前のステップで作成した Lambda 関数の ARN を追加する必要があります。

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config 'clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type AWS_X509|CUSTOM_AUTH_X509 \
    --application-protocol SECURE_MQTT|HTTPS \
    --client-certificate-config '{"clientCertificateCallbackArn":"arn:aws:lambda:us-east-2:123456789012:function:my-function:1"}'
```

`domain-configuration-name`  
ドメイン構成の名前。

`authentication-type`  
ドメイン設定の認証タイプ。詳細については、「[認証タイプの選択](protocols.md#connection-protocol-auth-mode)」を参照してください。

`application-protocol`  
デバイスが AWS IoT Coreとの通信に使用するアプリケーションプロトコル。詳細については、「[アプリケーションプロトコルの選択](protocols.md#protocol-selection)」を参照してください。

`client-certificate-config`  
ドメインのクライアント認証設定を指定するオブジェクト。

`clientCertificateCallbackArn`  
新しい接続が確立されるときに TLS レイヤーで AWS IoT 呼び出す Lambda 関数の Amazon リソースネーム (ARN)。カスタムクライアント証明書の検証を実行するようにクライアント認証をカスタマイズするには、前のステップで作成した Lambda 関数の ARN を追加する必要があります。

詳細については、「*AWS IoT API リファレンス*」の「[CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)」と「[UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)」を参照してください。ドメイン設定の詳細については、「[ドメイン設定](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html)」を参照してください。

# IAM ユーザー、グループ、ロール
<a name="iam-users-groups-roles"></a>

IAM ユーザー、グループ、ロールは、 AWSで ID と認証を管理するための標準的なメカニズムです。これらを使用して、 AWS SDK と を使用して HTTP AWS IoT インターフェイスに接続できます AWS CLI。

IAM ロールでは AWS IoT 、 がユーザーに代わってアカウント内の他の AWS リソースにアクセスすることもできます。たとえば、デバイスがその状態を DynamoDB テーブルに発行する場合、IAM ロールは AWS IoT が Amazon DynamoDB とやり取りできるようにします。詳細については、[「IAM ロール」](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)を参照してください。

HTTP 経由のメッセージブローカー接続の場合、 は署名バージョン 4 の署名プロセスを使用してユーザー、グループ、ロールを AWS IoT 認証します。詳細については、[AWS 「 API リクエストの署名](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)」を参照してください。

で AWS 署名バージョン 4 を使用する場合 AWS IoT、クライアントは TLS 実装で以下をサポートする必要があります。
+ TLS 1.2
+ SHA-256 RSA 証明書の署名の検証
+ サポートされているいずれかの TLS 暗号スイート

詳細については、[の ID とアクセスの管理 AWS IoT](security-iam.md) を参照してください。

# Amazon Cognito ID
<a name="cognito-identities"></a>

Amazon Cognito Identity を使用すると、モバイルアプリケーションやウェブアプリケーションで使用するために、権限が制限された一時的な AWS 認証情報を作成できます。Amazon Cognito ID を使用する場合、ユーザーに対して一意の ID を作成し、Login with Amazon、Facebook、Google などの ID プロバイダーで認証するアイデンティティプールを作成します。独自のデベロッパーが認証した ID で Amazon Cognito ID を使用することもできます。詳細については、[Amazon Cognito ID](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html) を参照してください。

Amazon Cognito ID を使用するには、IAM ロールに関連付けられた Amazon Cognito アイデンティティプールを定義します。IAM ロールは、 サービスの呼び出し AWS などの AWS リソースにアクセスするためのアクセス許可を ID プールから ID に付与する IAM ポリシーに関連付けられています。

Amazon Cognito ID では、認証されていない ID と認証された ID が作成されます。認証されていない ID は、サインインせずにアプリを使用するモバイルアプリケーションまたはウェブアプリケーションのゲストユーザーに使用されます。認証されていないユーザーには、ID プールに関連付けられた IAM ポリシーで指定されているアクセス許可のみが付与されます。

認証された ID を使用する場合は、ID プールにアタッチされた IAM ポリシーに加えて、Amazon Cognito ID に AWS IoT ポリシーをアタッチする必要があります。 AWS IoT ポリシーをアタッチするには、[AttachPolicy](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachPolicy.html) API を使用し、 AWS IoT アプリケーションの個々のユーザーにアクセス許可を付与します。 AWS IoT ポリシーを使用して、特定の顧客とそのデバイスにきめ細かなアクセス許可を割り当てることができます。

認証されたユーザーと未認証のユーザーは、異なる ID タイプです。Amazon Cognito ID に AWS IoT ポリシーをアタッチしない場合、認証されたユーザーは での認可に失敗 AWS IoT し、 AWS IoT リソースとアクションにアクセスできません。Amazon Cognito ID のポリシー作成の詳細については、[パブリッシュ/サブスクライブポリシーの例](pub-sub-policy.md) および [Amazon Cognito ID を使用した承認](cog-iot-policies.md) を参照してください。

![\[Amazon Cognito ID を使用してデバイスにアクセスするアプリケーション。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/device-cognito.png)


# カスタム認証と認可
<a name="custom-authentication"></a>

 AWS IoT Core では、独自のクライアントの認証と認可を管理できるように、カスタムオーソライザーを定義できます。これは、 が AWS IoT Core ネイティブにサポートしている認証メカニズム以外の認証メカニズムを使用する必要がある場合に便利です。(ネイティブでサポートされているメカニズムの詳細については、[クライアント認証](client-authentication.md) を参照してください)。  

 たとえば、 フィールドの既存のデバイスを に移行 AWS IoT Core し、これらのデバイスがカスタムベアラートークンまたは MQTT ユーザー名とパスワードを使用して認証 する場合、新しい ID をプロビジョニング AWS IoT Core しなくても に移行できます。カスタム認証は、 が AWS IoT Core サポートする任意の通信プロトコルで使用できます。 AWS IoT Core がサポートするプロトコルの詳細については、「[デバイス通信プロトコル](protocols.md)」を参照してください。

**Topics**
+ [カスタム認証ワークフローについて](custom-authorizer.md)
+ [カスタムオーソライザー (CLI) の作成と管理](config-custom-auth.md)
+ [X.509 クライアント証明書を使用したカスタム認証](custom-auth-509cert.md)
+ [カスタム認証 AWS IoT Core を使用した への接続](custom-auth.md)
+ [オーソライザーのトラブルシューティング](custom-auth-troubleshooting.md)

# カスタム認証ワークフローについて
<a name="custom-authorizer"></a>

カスタム認証を使用すると、[オーソライザーリソース](https://docs.aws.amazon.com/iot/latest/apireference/API_AuthorizerDescription.html)を使用してクライアントを認証および認可する方法を定義できます。  各オーソライザーには、カスタマー管理の Lambda 関数への参照、デバイスの認証情報を検証するためのオプションのパブリックキー、および追加の設定情報が含まれています。次の図は、 AWS IoT Coreでのカスタム認証の認可ワークフローを示しています。

![\[AWS IoT Coreでのカスタム認証のカスタム許可ワークフロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/custom-authentication.png)


## AWS IoT Core カスタム認証と認可ワークフロー
<a name="custom-authentication-workflow"></a>

次のリストでは、カスタム認証および認可ワークフローの各ステップについて説明します。

1. デバイスは、サポートされている のいずれかを使用して、顧客の AWS IoT Core データエンドポイントに接続します[デバイス通信プロトコル](protocols.md)。デバイスは、リクエストのヘッダーフィールドまたはクエリパラメータ (HTTP Publish または MQTT over WebSocket プロトコルの場合)、または MQTT CONNECT メッセージのユーザー名とパスワードフィールド (MQTT および MQTT over WebSockets プロトコルの場合) で認証情報を渡します。

1. AWS IoT Core は、次の 2 つの条件のいずれかをチェックします。
   + 受信リクエストはオーソライザーを指定します。
   + リクエストを受信する AWS IoT Core データエンドポイントには、デフォルトのオーソライザーが設定されています。

   がこれらのいずれかの方法でオーソライザー AWS IoT Core を検出すると、 AWS IoT Core はオーソライザーに関連付けられた Lambda 関数をトリガーします。

1.  (オプション) トークン署名を有効にしている場合、 は Lambda 関数をトリガーする前に、オーソライザーに保存されている パブリックキーを使用してリクエスト署名 AWS IoT Core を検証します。検証が失敗した場合、 AWS IoT Core は Lambda 関数を呼び出さずにリクエストを停止します。  

1. Lambda 関数は、リクエスト内の認証情報と接続メタデータを受け取り、認証の可否を判断します。

1. Lambda 関数は、認証決定の結果と、接続で許可されるアクションを指定する AWS IoT Core ポリシードキュメントを返します。Lambda 関数は、Lambda 関数を呼び出してリクエスト内の認証情報 AWS IoT Core を再検証する頻度を指定する情報も返します。

1. AWS IoT Core は、Lambda 関数から受信したポリシーに対する接続のアクティビティを評価します。

1. 接続が確立され、カスタムオーソライザー Lambda が最初に呼び出された後、MQTT オペレーションなしでアイドル状態の接続では、次の呼び出しが最大 5 分間遅延する可能性があります。その後、それ以降の呼び出しはカスタムオーソライザー Lambda の更新間隔に従います。このアプローチにより、 の Lambda 同時実行数の制限を超える可能性のある過剰な呼び出しを防ぐことができます AWS アカウント。

## スケーリングに関する考慮事項
<a name="custom-authentication-scaling"></a>

 Lambda 関数はオーソライザーの認証と認可を処理するため、関数は Lambda の料金とサービスの制限 (同時実行率など) の対象となります。Lambda の料金の詳細については、「[Lambda の料金](https://aws.amazon.com/lambda/pricing/)」を参照してください。Lambda 関数の応答の `refreshAfterInSeconds` および `disconnectAfterInSeconds` パラメータを調整することで、Lambda 関数の負荷を管理できます。Lambda 関数のレスポンスの内容の詳細については、[Lambda 関数の定義](custom-auth-lambda.md) を参照してください。

**注記**  
署名を有効にしておくと、認識されないクライアントによる Lambda の過度なトリガーを防ぐことができます。オーソライザーで署名を無効にする前に、これを考慮してください。

**注記**  
カスタムオーソライザーの Lambda 関数のタイムアウト制限は 5 秒です。

# カスタムオーソライザー (CLI) の作成と管理
<a name="config-custom-auth"></a>

AWS IoT Core は、カスタムオーソライザーを使用してカスタム認証および認可スキームを実装します。カスタムオーソライザーは、特定の要件に基づいてルールとポリシーを柔軟に定義および実装できる AWS IoT Core リソースです。ステップバイステップの手順でカスタムオーソライザーを作成するには、「[チュートリアル: AWS IoT Coreのカスタムオーソライザーの作成](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html)」を参照してください。

各オーソライザーは、次のコンポーネントで構成されています。
+  *名前*: オーソライザーを識別する一意のユーザー定義文字列。
+  *Lambda 関数 ARN*: 認可および認証ロジックを実装する Lambda 関数の Amazon リソースネーム (ARN)。  
+  *トークンキー名*: 署名の検証を実行するために、HTTP ヘッダー、クエリパラメータ、または MQTT CONNECT ユーザー名からトークンを抽出するために使用されるキー名。オーソライザーで署名が有効になっている場合、この値は必須です。
+  *署名無効フラグ (オプション)*: 認証情報の署名要件を無効にするかどうかを指定するブール値。これは、MQTT ユーザー名とパスワードを使用する認証スキームなど、認証情報への署名が意味をなさないシナリオで役立ちます。デフォルト値は `false` であるため、署名はデフォルトで有効になっています。
+  *トークン署名パブリックキー*: AWS IoT Core がトークン署名を検証するために使用するパブリックキー。最小長は 2,048 ビットです。オーソライザーで署名が有効になっている場合、この値は必須です。  

Lambda では、Lambda 関数の実行回数と、関数内のコードの実行にかかった時間に対する請求が発生します。Lambda の料金の詳細については、「[Lambda の料金](https://aws.amazon.com/lambda/pricing/)」を参照してください。Lambda 関数の作成の詳細については、[Lambda デベロッパーガイド](https://docs.aws.amazon.com/lambda/latest/dg/)を参照してください。

**注記**  
署名を有効にしておくと、認識されないクライアントによる Lambda の過度なトリガーを防ぐことができます。オーソライザーで署名を無効にする前に、これを考慮してください。

**注記**  
カスタムオーソライザーの Lambda 関数のタイムアウト制限は 5 秒です。

**Topics**
+ [Lambda 関数の定義](custom-auth-lambda.md)
+ [オーソライザーを作成する](custom-auth-create-authorizer.md)
+ [Lambda 関数を呼び出す AWS IoT ことを に許可する](custom-auth-authorize.md)
+ [オーソライザーのテスト](custom-auth-testing.md)
+ [カスタムオーソライザーの管理](custom-auth-manage.md)

# Lambda 関数の定義
<a name="custom-auth-lambda"></a>

 がオーソライザーを AWS IoT Core 呼び出すと、オーソライザーに関連付けられた Lambda が、次の JSON オブジェクトを含むイベントでトリガーされます。サンプルの JSON オブジェクトには、可能なフィールドがすべて含まれています。接続リクエストに関係のないフィールドは含まれていません。

```
{
    "token" :"aToken",
    "signatureVerified": Boolean, // Indicates whether the device gateway has validated the signature.
    "protocols": ["tls", "http", "mqtt"], // Indicates which protocols to expect for the request.
    "protocolData": {
        "tls" : {
            "serverName": "serverName" // The server name indication (SNI) host_name string.
        },
        "http": {
            "headers": {
                "#{name}": "#{value}"
            },
            "queryString": "?#{name}=#{value}"
        },
        "mqtt": {
            "username": "myUserName",
            "password": "myPassword", // A base64-encoded string.
            "clientId": "myClientId" // Included in the event only when the device sends the value.
        }
    },
    "connectionMetadata": {
        "id": UUID // The connection ID. You can use this for logging.
    },
}
```

 Lambda 関数は、この情報を使用して着信接続を認証し、接続で許可されるアクションを決定する必要があります。関数は、次の値を含む応答を送信する必要があります。
+  `isAuthenticated`: リクエストが認証されるかどうかを示すブール値。
+  `principalId`: カスタム認可リクエストによって送信されるトークンの識別子として機能する英数字の文字列。値は、1～128 文字以内の英数字の文字列で、正規表現 (regex) パターン `([a-zA-Z0-9]){1,128}` と一致する必要があります。英数字以外の特殊文字は、 `principalId`では使用できません AWS IoT Core。英数字以外の特殊文字が で許可されている場合は、他の AWS サービスのドキュメントを参照してください`principalId`。
+  `policyDocuments`: JSON 形式の AWS IoT Core ポリシードキュメントのリスト AWS IoT Core ポリシーの作成の詳細については、「」を参照してください[AWS IoT Core ポリシー](iot-policies.md)。ポリシードキュメントの最大数は 10 個です。各ポリシードキュメントでは最大 2,048 文字を使用できます。
+  `disconnectAfterInSeconds`: AWS IoT Core ゲートウェイへの接続の最大期間 (秒単位) を指定する整数。最小値は 300 秒で、最大値は 86,400 秒です。デフォルト値は 86,400 です。
**注記**  
(Lambda 関数によって返される) `disconnectAfterInSeconds` の値は、接続が確立されると設定されます。この値は、後続のポリシー更新 Lambda 呼び出し中に変更することはできません。
+  `refreshAfterInSeconds`: ポリシーの更新の間隔を指定する整数。この時間間隔が経過すると、 AWS IoT Core が Lambda 関数を呼び出してポリシーの更新を許可します。最小値は 300 秒で、最大値は 86,400 秒です。

  次の JSON オブジェクトには、Lambda 関数が送信できる応答の例が含まれています。

 **\$1 "isAuthenticated":true, //A Boolean that determines whether client can connect. "principalId": "xxxxxxxx",  //A string that identifies the connection in logs. "disconnectAfterInSeconds": 86400,  "refreshAfterInSeconds": 300,   "policyDocuments": [       \$1         "Version": "2012-10-17",         "Statement": [            \$1               "Action": "iot:Publish",               "Effect": "Allow",               "Resource": "arn:aws:iot:us-east-1:<your\$1aws\$1account\$1id>:topic/customauthtesting"             \$1          ]        \$1     ] \$1**

 `policyDocument` 値には有効な AWS IoT Core ポリシードキュメントが含まれている必要があります。 AWS IoT Core ポリシーの詳細については、「」を参照してください[AWS IoT Core ポリシー](iot-policies.md)。  「MQTT over TLS」および「MQTT over WebSockets 接続」で、 は `refreshAfterInSeconds`フィールドの値で指定された間隔でこのポリシーを AWS IoT Core キャッシュします。HTTP 接続の場合、オーソライザーの設定時に選択するとキャッシュを有効にできる HTTP 持続的接続 (HTTP キープアライブまたは HTTP 接続の再利用とも呼ばれる) をデバイスで使用していない限り、認可リクエストごとに Lambda 関数が呼び出されます。この間隔中に、 は Lambda 関数を再度トリガーすることなく、このキャッシュされたポリシーに対して確立された接続のアクション AWS IoT Core を承認します。カスタム認証中に障害が発生した場合、 は接続 AWS IoT Core を終了します。 AWS IoT Core また、 `disconnectAfterInSeconds`パラメータで指定された値よりも長く開いている場合は接続も終了します。

 次の JavaScript には、 の値を持つ MQTT Connect メッセージ内のパスワードを検索`test`し、 という名前のクライアント AWS IoT Core を使用して に接続`myClientName`し、同じクライアント名を含むトピックに発行するアクセス許可を付与するポリシーを返すサンプル Node.js Lambda 関数が含まれています。想定されるパスワードが見つからない場合、これらの 2 つのアクションを拒否するポリシーを返します。

```
// A simple Lambda function for an authorizer. It demonstrates 
// how to parse an MQTT password and generate a response.

exports.handler = function(event, context, callback) { 
    var uname = event.protocolData.mqtt.username;
    var pwd = event.protocolData.mqtt.password;
    var buff = new Buffer(pwd, 'base64');
    var passwd = buff.toString('ascii');
    switch (passwd) { 
        case 'test': 
            callback(null, generateAuthResponse(passwd, 'Allow')); 
            break;
        default: 
            callback(null, generateAuthResponse(passwd, 'Deny'));  
    }
};

// Helper function to generate the authorization response.
var generateAuthResponse = function(token, effect) { 
    var authResponse = {}; 
    authResponse.isAuthenticated = true; 
    authResponse.principalId = 'TEST123'; 
    
    var policyDocument = {}; 
    policyDocument.Version = '2012-10-17';		 	 	 
    policyDocument.Statement = []; 
    var publishStatement = {}; 
    var connectStatement = {};
    connectStatement.Action = ["iot:Connect"];
    connectStatement.Effect = effect;
    connectStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:client/myClientName"];
    publishStatement.Action = ["iot:Publish"]; 
    publishStatement.Effect = effect; 
    publishStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"]; 
    policyDocument.Statement[0] = connectStatement;
    policyDocument.Statement[1] = publishStatement; 
    authResponse.policyDocuments = [policyDocument]; 
    authResponse.disconnectAfterInSeconds = 3600; 
    authResponse.refreshAfterInSeconds = 300;
    
    return authResponse; 
}
```

 上の Lambda 関数は、MQTT Connect メッセージの `test` で想定されるパスワードを受け取ると、次の JSON を返します。`password` プロパティと `principalId` プロパティの値は、MQTT Connect メッセージの値です。

```
{
  "password": "password",
  "isAuthenticated": true,
  "principalId": "principalId",
  "policyDocuments": [
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": "iot:Connect",
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Action": "iot:Publish",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Subscribe",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topicfilter/telemetry/${iot:ClientId}"
        },
        {
          "Action": "iot:Receive",
          "Effect": "Allow",
          "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
        }
      ]
    }
  ],
  "disconnectAfterInSeconds": 3600,
  "refreshAfterInSeconds": 300
}
```

# オーソライザーを作成する
<a name="custom-auth-create-authorizer"></a>

 [CreateAuthorizer API](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateAuthorizer.html) を使用してオーソライザーを作成できます。次の例は、このコマンドを示しています。

```
aws iot create-authorizer
--authorizer-name MyAuthorizer
--authorizer-function-arn arn:aws:lambda:us-west-2:<account_id>:function:MyAuthorizerFunction  //The ARN of the Lambda function.
[--token-key-name MyAuthorizerToken //The key used to extract the token from headers.
[--token-signing-public-keys FirstKey=
 "-----BEGIN PUBLIC KEY-----
  [...insert your public key here...] 
  -----END PUBLIC KEY-----"
[--status ACTIVE]
[--tags <value>]
[--signing-disabled | --no-signing-disabled]
```

`signing-disabled` パラメータを使用して、オーソライザーの呼び出しごとに署名の検証をオプトアウトできます。必要がない限り、署名を無効にしないことを強くお勧めします。署名の検証により、不明なデバイスからの Lambda 関数の過剰な呼び出しを防ぐことができます。オーソライザーを作成した後で、`signing-disabled` ステータスを更新することはできません。この動作を変更するには、`signing-disabled` パラメータの異なる値を持つ別のカスタムオーソライザーを作成する必要があります。

署名を無効にしている場合、`tokenKeyName` パラメータと `tokenSigningPublicKeys` パラメータの値はオプションです。署名が有効になっている場合、これらは必須の値です。

Lambda 関数とカスタムオーソライザーを作成したら、ユーザーに代わって関数を呼び出すアクセス許可を AWS IoT Core サービスに明示的に付与する必要があります。これを行う には、次のコマンドを使用します。

**注記**  
デフォルトの IoT エンドポイントは、Lambda 関数でのカスタムオーソライザーの使用をサポートしていない場合があります。その場合は、ドメイン設定を使用して新しいエンドポイントを定義し、そのエンドポイントをカスタムオーソライザーに指定できます。

```
aws lambda add-permission --function-name <lambda_function_name>
--principal iot.amazonaws.com --source-arn <authorizer_arn>
--statement-id Id-123 --action "lambda:InvokeFunction"
```

# Lambda 関数を呼び出す AWS IoT ことを に許可する
<a name="custom-auth-authorize"></a>

このセクションでは、作成したカスタムオーソライザーリソースに、Lambda 関数を実行するためのアクセス許可を付与します。アクセス許可を付与するには、[add-permission](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html) CLI コマンドを使用できます。

**を使用して Lambda 関数にアクセス許可を付与する AWS CLI**

1. 値を挿入したら、次のコマンドを入力します。`statement-id` 値は一意でなければならないことに注意してください。`Id-1234` を正確な値に置き換えます。そうしないと、`ResourceConflictException` エラーが発生する可能性があります。

   ```
   aws lambda add-permission  \
   --function-name "custom-auth-function" \
   --principal "iot.amazonaws.com" \
   --action "lambda:InvokeFunction" \
   --statement-id "Id-1234" \
   --source-arn authorizerArn
   ```

1. コマンドが成功すると、この例のようなアクセス許可ステートメントが返されます。次のセクションに進んで、カスタムオーソライザーをテストできます。

   ```
   {
       "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\"}}}"
   }
   ```

   コマンドが成功しない場合は、この例のようなエラーが返されます。続行する前に、エラーを確認して修正する必要があります。

   ```
   An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer
   mission on resource: arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function
   ```

# オーソライザーのテスト
<a name="custom-auth-testing"></a>

 [TestInvokeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_TestInvokeAuthorizer.html) API を使用して、オーソライザーの呼び出しと戻り値をテストできます。この API を使用すると、プロトコルメタデータを指定し、オーソライザーで署名の検証をテストできます。

次のタブは、 を使用してオーソライザーを AWS CLI テストする方法を示しています。

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER \
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER ^
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------
#### [ Windows PowerShell ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER `
--token TOKEN_VALUE --token-signature TOKEN_SIGNATURE
```

------

`token-signature` パラメータの値は署名付きトークンです。この値を取得する方法については、「[トークンへの署名](custom-auth.md#custom-auth-token-signature)」を参照してください。

オーソライザーがユーザー名とパスワードを受け取る場合、`--mqtt-context` パラメータを使用してこの情報を渡すことができます。次のタブは、`TestInvokeAuthorizer` API を使用して、ユーザー名、パスワード、およびクライアント名を含む JSON オブジェクトをカスタムオーソライザーに送信する方法を示しています。

------
#### [ Unix-like ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  \
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------
#### [ Windows CMD ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  ^
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------
#### [ Windows PowerShell ]

```
aws iot test-invoke-authorizer --authorizer-name NAME_OF_AUTHORIZER  `
--mqtt-context '{"username": "USER_NAME", "password": "dGVzdA==", "clientId":"CLIENT_NAME"}'
```

------

パスワードは base64 でエンコードされている必要があります。次の例は、Unix 系の環境でパスワードをエンコードする方法を示しています。

```
echo -n PASSWORD | base64
```

# カスタムオーソライザーの管理
<a name="custom-auth-manage"></a>

 次の API を使用して、オーソライザーを管理できます。
+ [ListAuthorizers](https://docs.aws.amazon.com/iot/latest/apireference/API_ListAuthorizers.html): アカウント内のすべてのオーソライザーを表示します。
+  [DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html): 指定されたオーソライザーのプロパティを表示します。これらの値には、作成日、最終更新日、およびその他の属性が含まれます。
+ [SetDefaultAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_SetDefaultAuthorizer.html): AWS IoT Core データエンドポイントのデフォルトのオーソライザーを指定します。デバイスが AWS IoT Core 認証情報を渡さず、オーソライザーを指定しない場合、 はこのオーソライザー AWS IoT Core を使用します。 AWS IoT Core 認証情報の使用の詳細については、「」を参照してください[クライアント認証](client-authentication.md)。
+ [UpdateAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateAuthorizer.html): 指定されたオーソライザーのステータス、トークンキー名、またはパブリックキーを変更します。
+  [DeleteAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteAuthorizer.html): 指定されたオーソライザーを削除します。

**注記**  
 オーソライザーの署名要件を更新することはできません。これは、署名を必要とする既存のオーソライザーでの署名を無効にすることはできないことを意味します。また、署名を必要としない既存のオーソライザーで署名を要求することもできません。

# X.509 クライアント証明書を使用したカスタム認証
<a name="custom-auth-509cert"></a>

デバイスを に接続するときは AWS IoT Core、複数の[認証タイプ](protocols.md#connection-protocol-auth-mode)を使用できます。[X.509 クライアント証明書](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html)を使用すると、クライアントとデバイス接続を認証したり、[カスタムオーソライザー](https://docs.aws.amazon.com//iot/latest/developerguide/custom-authentication.html)を定義して独自のクライアント認証と承認ロジックを管理したりできます。このトピックでは、X.509 クライアント証明書でカスタム認証を使用する方法について説明します。

X.509 証明書でカスタム認証を使用すると、X.509 証明書を使用してデバイスを既に認証していて、追加の検証とカスタム認証を実行したい場合に役立ちます。例えば、X.509 クライアント証明書にシリアル番号などのデバイスのデータを保存した場合、 AWS IoT Core が X.509 クライアント証明書を認証した後、カスタムオーソライザーを使用して、証明書の CommonName フィールドに保存されている情報に基づいて特定のデバイスを識別できます。X.509 証明書でカスタム認証を使用すると、デバイスを に接続する際のデバイスセキュリティ管理を強化 AWS IoT Core し、認証ロジックと認可ロジックをより柔軟に管理できます。 は、[MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html) プロトコルと [HTTPS](https://docs.aws.amazon.com//iot/latest/developerguide/http.html) プロトコルの両方で動作する X.509 証明書とカスタムオーソライザー認証タイプを使用した X.509 証明書でのカスタム認証 AWS IoT Core をサポートします。 AWS IoT Core デバイスエンドポイントがサポートする認証タイプとアプリケーションプロトコルの詳細については、「[デバイス通信プロトコル](https://docs.aws.amazon.com//iot/latest/developerguide/protocols.html)」を参照してください。

**注記**  
X.509 クライアント証明書によるカスタム認証は、 AWS GovCloud (US) リージョンではサポートされていません。

**重要**  
[[ドメイン設定]](iot-custom-endpoints-configurable.md) を使用して作成されたエンドポイントを使用する必要があります。さらに、クライアントは接続時に [Server Name Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) 拡張機能を提供する必要があります AWS IoT Core。

**Topics**
+ [ステップ 1: X.509 クライアント証明書を に登録する AWS IoT Core](#custom-auth-509cert-client)
+ [ステップ 2: Lambda 関数を作成する](#custom-auth-509cert-lambda)
+ [ステップ 3: カスタムオーソライザーを作成する](#custom-auth-509cert-authorizer)
+ [ステップ 4: ドメイン設定で認証タイプとアプリケーションプロトコルを設定する](#custom-auth-509cert-domainconfig)

## ステップ 1: X.509 クライアント証明書を に登録する AWS IoT Core
<a name="custom-auth-509cert-client"></a>

これをまだ実行していない場合は、[X.509 クライアント証明書](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html)を登録してアクティブ化します AWS IoT Core。それ以外の場合は、次のステップに進みます。

クライアント証明書を に登録してアクティブ化するには AWS IoT Core、次の手順に従います。

1. [でクライアント証明書を直接作成 AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-create.html)する場合。これらのクライアント証明書は、 に自動的に登録されます AWS IoT Core。

1. [独自のクライアント証明書を作成する](https://docs.aws.amazon.com//iot/latest/developerguide/device-certs-your-own.html)場合は、[以下の手順に従って登録します AWS IoT Core](https://docs.aws.amazon.com//iot/latest/developerguide/register-device-cert.html)。

1. クライアント証明書をアクティブ化するには、[以下の手順](https://docs.aws.amazon.com//iot/latest/developerguide/activate-or-deactivate-device-cert.html)に従います。

## ステップ 2: Lambda 関数を作成する
<a name="custom-auth-509cert-lambda"></a>

AWS IoT Core はカスタムオーソライザーを使用してカスタム認証および認可スキームを実装します。カスタムオーソライザーは、デバイスが認証されているかどうか、およびデバイスが実行できるオペレーションを決定する Lambda 関数に関連付けられます。デバイスが に接続すると AWS IoT Core、 はオーソライザー名と関連する Lambda 関数を含むオーソライザーの詳細 AWS IoT Core を取得し、Lambda 関数を呼び出します。Lambda 関数は、デバイスの X.509 クライアント証明書データを含む JSON オブジェクトを含むイベントを受信します。Lambda 関数は、このイベント JSON オブジェクトを使用して認証リクエストを評価し、実行するアクションを決定してレスポンスを送り返します。

### Lambda 関数のイベントの例
<a name="custom-auth-509cert-event"></a>

次の JSON オブジェクトの例には、含めることができるすべてのフィールドが含まれています。実際の JSON オブジェクトには、特定の接続リクエストに関連するフィールドのみが含まれます。

```
{
	"token": "aToken",
	"signatureVerified": true,
	"protocols": [
		"tls",
		"mqtt"
	],
	"protocolData": {
		"tls": {
			"serverName": "serverName",
			"x509CertificatePem": "x509CertificatePem",
			"principalId": "principalId"
		},
		"mqtt": {
			"clientId": "myClientId",
                     "username": "myUserName",
                     "password": "myPassword"
		}
	},
	"connectionMetadata": {
		"id": "UUID"
	}
}
```

`signatureVerified`  
オーソライザーの Lambda 関数を呼び出す前に、オーソライザーで設定されたトークン署名を検証するかどうかを示すブール値。オーソライザーがトークン署名を無効にするように設定されている場合、このフィールドは false になります。

`protocols`  
リクエストに期待されるプロトコルを含む配列。

`protocolData`  
接続で使用されるプロトコルの情報を含むオブジェクト。認証、承認などに役立つプロトコル固有の詳細を提供します。  
`tls` - このオブジェクトには、TLS (Transport Layer Security) プロトコルに関連する情報が含まれます。  
+ `serverName` - [[サーバー名表示 (SNI)]](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) ホスト名文字列。 AWS IoT Core では、デバイスが [SNI 拡張](https://www.rfc-editor.org/rfc/rfc3546#section-3.1)を Transport Layer Security (TLS) に送信し、`host_name` フィールドに完全なエンドポイントアドレスを指定する必要があります。
+ `x509CertificatePem` - PEM 形式の X.509 証明書。TLS 接続でのクライアント認証に使用されます。
+ `principalId` - TLS 接続内のクライアントに関連付けられたプリンシパル識別子。
`mqtt` - このオブジェクトは、MQTT プロトコルに関連する情報を保持します。  
+ `clientId` - 文字列は、デバイスがこの値を送信するイベントにのみ含める必要があります。
+ `username` - MQTT Connect パケットで指定されたユーザー名。
+ `password` - MQTT Connect パケットで提供されたパスワード。

`connectionMetadata`  
接続のメタデータ。  
`id` - ログ記録とトラブルシューティングに使用できる接続 ID。

**注記**  
このイベントでは、JSON オブジェクト、`x509CertificatePem` および `principalId` はリクエスト内の 2 つの新しいフィールドです。`principalId` の値は、`certificateId` の値と同じです。詳細については、「[証明書](https://docs.aws.amazon.com//iot/latest/apireference/API_Certificate.html)」を参照してください。

### Lambda 関数のレスポンスの例
<a name="custom-auth-509cert-response"></a>

Lambda 関数は、イベント JSON オブジェクトからの情報を使用して受信接続を認証し、接続で許可されるアクションを決定する必要があります。

次の JSON オブジェクトには、Lambda 関数が送信できるレスポンスの例が含まれています。

```
{
	"isAuthenticated": true,
	"principalId": "xxxxxxxx",
	"disconnectAfterInSeconds": 86400,
	"refreshAfterInSeconds": 300,
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Effect": "Allow",
					"Action": "iot:Publish",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/customauthtesting"
				}
			]
		}
	]
}
```

この例では、この関数は、次の値を含むレスポンスを送信する必要があります。

`isAuthenticated`  
リクエストが認証されるかどうかを示すブール値。

`principalId`  
カスタム認可リクエストによって送信されるトークンの識別子として機能する英数字の文字列。値は、1～128 文字以内の英数字の文字列である必要があります。ログ内の接続を識別します。`principalId` の値は、イベント JSON オブジェクト (X.509 証明書の certificateId) の `principalId` の値と同じである必要があります。

`policyDocuments`  
JSON 形式の AWS IoT Core ポリシードキュメントのリスト。値はオプションで、[モノのポリシー変数](https://docs.aws.amazon.com//iot/latest/developerguide/thing-policy-variables.html)と[証明書のポリシー変数](https://docs.aws.amazon.com//iot/latest/developerguide/cert-policy-variables.html)をサポートしています。ポリシードキュメントの最大数は 10 です。各ポリシードキュメントでは最大 2,048 文字を使用できます。クライアント証明書と Lambda 関数に複数のポリシーがアタッチされている場合、アクセス許可はすべてのポリシーのコレクションです。 AWS IoT Core ポリシーの作成の詳細については、[「 ](https://docs.aws.amazon.com//iot/latest/developerguide/iot-policies.html)ポリシー」を参照してください。

`disconnectAfterInSeconds`  
 AWS IoT Core ゲートウェイへの接続の最大時間 (秒単位) を指定する整数。最小値は 300 秒、最大値は 86,400 秒です。`disconnectAfterInSeconds` は接続の存続期間中であり、連続するポリシー更新では更新されません。

`refreshAfterInSeconds`  
ポリシーの更新の間隔を指定する整数。この間隔が経過すると、 は Lambda 関数を AWS IoT Core 呼び出してポリシーの更新を許可します。最小値は 300 秒で、最大値は 86,400 秒です。

### Lambda 関数の例
<a name="custom-auth-509cert-js-example"></a>

次に示すのは、Node.js Lambda 関数の例です。この関数は、クライアントの X.509 証明書を調べてシリアル番号、フィンガープリント、件名などの関連情報を抽出します。抽出された情報が期待値と一致する場合、クライアントに接続するためのアクセス許可が付与されます。このメカニズムにより、有効な証明書を持つ承認されたクライアントのみが接続を確立できます。

```
const crypto = require('crypto');

exports.handler = async (event) => {
    
    // Extract the certificate PEM from the event
    const certPem = event.protocolData.tls.x509CertificatePem;
    
    // Parse the certificate using Node's crypto module
    const cert = new crypto.X509Certificate(certPem);
    
    var effect = "Deny";
    // Allow permissions only for a particular certificate serial, fingerprint, and subject
    if (cert.serialNumber === "7F8D2E4B9C1A5036DE8F7C4B2A91E5D80463BC9A1257" // This is a random serial
       && cert.fingerprint === "F2:9A:C4:1D:B5:E7:08:3F:6B:D0:4E:92:A7:C1:5B:8D:16:0F:E3:7A" // This is a random fingerprint
       && cert.subject === "allow.example.com") {
      effect = "Allow";
    }
    
    return generateAuthResponse(event.protocolData.tls.principalId, effect);
};


// Helper function to generate the authorization response.
function generateAuthResponse(principalId, effect) {
    const authResponse = {
        isAuthenticated: true,
        principalId,
        disconnectAfterInSeconds: 3600,
        refreshAfterInSeconds: 300,
        policyDocuments: [
          {
            Version: "2012-10-17",		 	 	 
            Statement: [
              {
                Action: ["iot:Connect"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:client/myClientName"
                ]
              },
              {
                Action: ["iot:Publish"],
                Effect: effect,
                Resource: [
                  "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Subscribe"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
                ]
              },
              {
                Action: ["iot:Receive"],
                Effect: effect,
                Resource: [
                   "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
                ]
              }
            ]
          }
        ]
      };

  return authResponse;
}
```

前述の Lambda 関数は、予想されるシリアル、フィンガープリント、およびサブジェクトを含む証明書を受信すると、次の JSON を返します。`x509CertificatePem` の値は、TLS ハンドシェイクで提供されるクライアント証明書になります。詳細については、「[ Lambda 関数の定義](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html#custom-auth-lambda)」を参照してください。

```
{
	"isAuthenticated": true,
	"principalId": "principalId in the event JSON object",
	"policyDocuments": [
		{
			"Version": "2012-10-17",		 	 	 
			"Statement": [
				{
					"Action": "iot:Connect",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:client/myClientName"
				},
				{
					"Action": "iot:Publish",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				},
				{
					"Action": "iot:Subscribe",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName"
				},
				{
					"Action": "iot:Receive",
					"Effect": "Allow",
					"Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"
				}
			]
		}
	],
	"disconnectAfterInSeconds": 3600,
	"refreshAfterInSeconds": 300
}
```

## ステップ 3: カスタムオーソライザーを作成する
<a name="custom-auth-509cert-authorizer"></a>

[Lambda 関数 を定義した](#custom-auth-509cert-lambda)後、カスタムオーソライザーを作成して、独自のクライアント認証および承認ロジックを管理します。[ステップ 3: カスタマーオーソライザーリソースとその承認を作成する](https://docs.aws.amazon.com//iot/latest/developerguide/custom-auth-tutorial.html#custom-auth-tutorial-authorizer)の詳細な指示に従ってください。詳細については、「[オーソライザーの作成](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html)」を参照してください。

カスタムオーソライザーを作成するプロセスでは、作成後に Lambda 関数を呼び出すアクセス許可を AWS IoT に付与する必要があります。詳細な手順については、[「Lambda 関数 AWS IoT の呼び出しを許可する](custom-auth-authorize.md)」を参照してください。

## ステップ 4: ドメイン設定で認証タイプとアプリケーションプロトコルを設定する
<a name="custom-auth-509cert-domainconfig"></a>

X.509 クライアント証明書によるカスタム認証を使用してデバイスを認証するには、ドメイン設定で認証タイプとアプリケーションプロトコルを設定し、SNI 拡張機能を送信する必要があります。`authenticationType` の値は `CUSTOM_AUTH_X509` にする必要があり、`applicationProtocol` の値は `SECURE_MQTT` または `HTTPS` にすることができます。

### ドメイン設定 (CLI) で認証タイプとアプリケーションプロトコルを設定する
<a name="custom-auth-509cert-cli"></a>

ドメイン設定がない場合は、[https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html) コマンドを使用してドメイン設定を作成します。`authenticationType` の値は `CUSTOM_AUTH_X509` にする必要があり、`applicationProtocol` の値は `SECURE_MQTT` または `HTTPS` にすることができます。

```
aws iot create-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \ 
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

ドメイン設定が既にある場合は、[https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html) コマンドの更新 `authenticationType` と必要に応じて `applicationProtocol` を使用します。デフォルトのエンドポイント (`iot:Data-ATS`) では、認証タイプやプロトコルを変更できないことに注意してください。

```
aws iot update-domain-configuration \
    --domain-configuration-name domainConfigurationName \
    --authentication-type CUSTOM_AUTH_X509 \  
    --application-protocol SECURE_MQTT \
    --authorizer-config '{
        "defaultAuthorizerName": my-custom-authorizer
    }'
```

`domain-configuration-name`  
ドメイン構成の名前。

`authentication-type`  
ドメイン設定の認証タイプ。詳細については、「[認証タイプの選択](protocols.md#connection-protocol-auth-mode)」を参照してください。

`application-protocol`  
デバイスが AWS IoT Coreとの通信に使用するアプリケーションプロトコル。詳細については、「[アプリケーションプロトコルの選択](protocols.md#protocol-selection)」を参照してください。

`--authorizer-config`  
ドメイン設定でオーソライザー設定を指定するオブジェクト。

`defaultAuthorizerName`  
ドメイン構成のオーソライザー名。

詳細については、「*AWS IoT API リファレンス*」の「[CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)」と「[UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)」を参照してください。ドメイン設定の詳細については、「[ドメイン設定](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html)」を参照してください。

# カスタム認証 AWS IoT Core を使用した への接続
<a name="custom-auth"></a>

 デバイスは、 AWS IoT Core がデバイスメッセージング用に AWS IoT Core サポートする任意のプロトコルでカスタム認証を使用して に接続できます。サポートされる通信プロトコルの詳細については、[デバイス通信プロトコル](protocols.md) を参照してください。  オーソライザーの Lambda 関数に渡す接続データは、使用するプロトコルによって異なります。オーソライザーの Lambda 関数の作成の詳細については、「[Lambda 関数の定義](custom-auth-lambda.md)」を参照してください。次のセクションでは、サポートされている各プロトコルを使用して接続して認証する方法について説明します。

## HTTPS
<a name="custom-auth-http"></a>

[HTTP Publish API](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_Publish.html) を使用して AWS IoT Core にデータを送信するデバイスは、HTTP POST リクエストのリクエストヘッダーまたはクエリパラメータを介して認証情報を渡すことができます。デバイスは、`x-amz-customauthorizer-name` ヘッダーまたはクエリパラメータを使用して呼び出すオーソライザーを指定できます。オーソライザーでトークン署名を有効にしている場合は、リクエストヘッダーまたはクエリパラメータで `token-key-name` と `x-amz-customauthorizer-signature` を渡す必要があります。ブラウザ内から JavaScript を使用する場合、`token-signature` の値は URL エンコードする必要があります。

**注記**  
HTTPS プロトコルのカスタマーオーソライザーは、発行オペレーションのみをサポートします。HTTPS プロトコルの詳細については、「[デバイス通信プロトコル](protocols.md)」を参照してください。

次のリクエスト例は、これらのパラメータをリクエストヘッダーとクエリパラメータの両方で渡す方法を示しています。

```
//Passing credentials via headers
POST /topics/topic?qos=qos HTTP/1.1
Host: your-endpoint 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
x-amz-customauthorizer-name: authorizer-name

//Passing credentials via query parameters
POST /topics/topic?qos=qos&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value HTTP/1.1
```

## MQTT
<a name="custom-auth-mqtt"></a>

 MQTT 接続 AWS IoT Core を使用して に接続するデバイスは、MQTT メッセージの `username` および `password`フィールドを介して認証情報を渡すことができます。`username` の値には、追加の値 (トークン、署名、オーソライザー名など) をオーソライザーに渡すクエリ文字列をオプションで含めることもできます。`username` と `password` の値の代わりにトークンベースの認証スキームを使用する場合は、このクエリ文字列を使用できます。  

**注記**  
 パスワードフィールドのデータは、 によって base64 エンコードされます AWS IoT Core。Lambda 関数はそれをデコードする必要があります。

 次の例では、トークンと署名を指定する追加のパラメータを含む `username` 文字列が含まれています。  

```
username?x-amz-customauthorizer-name=authorizer-name&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value
```

オーソライザーを呼び出すには、MQTT とカスタム認証 AWS IoT Core を使用して に接続するデバイスがポート 443 に接続する必要があります。また、 の値を持つ Application Layer Protocol Negotiation (ALPN) TLS 拡張機能`mqtt`と、 AWS IoT Core データエンドポイントのホスト名を持つ Server Name Indication (SNI) 拡張機能を渡す必要があります。潜在的なエラーを回避するために、`x-amz-customauthorizer-signature` の値は URL エンコードされている必要があります。また、`x-amz-customauthorizer-name` と `token-key-name` の値も URL エンコードすることを強くお勧めします。これらの値の詳細については、「[デバイス通信プロトコル](protocols.md)」を参照してください。V2 [AWS IoT Device SDK、Mobile SDK、および AWS IoT Device Client](iot-sdks.md) は、これらの拡張の両方を設定できます。 

## MQTT over WebSockets
<a name="custom-auth-websockets"></a>

 MQTT over WebSockets AWS IoT Core を使用して に接続するデバイスは、次の 2 つの方法のいずれかで認証情報を渡すことができます。
+ HTTP UPGRADE リクエストのリクエストヘッダーまたはクエリパラメータを介して、WebSocket 接続を確立します。
+ MQTT CONNECT メッセージの `username` フィールドと `password` フィールド経由。

 MQTT 接続メッセージを介して認証情報を渡す場合、ALPN および SNI TLS 拡張が必要です。これらの拡張の詳細については、「[MQTT](#custom-auth-mqtt)」を参照してください。次の例は、HTTP Upgrade リクエストを介して認証情報を渡す方法を示しています。

```
GET /mqtt HTTP/1.1
Host: your-endpoint 
Upgrade: WebSocket 
Connection: Upgrade 
x-amz-customauthorizer-signature: token-signature
token-key-name: token-value 
sec-WebSocket-Key: any random base64 value 
sec-websocket-protocol: mqtt 
sec-WebSocket-Version: websocket version
```

## トークンへの署名
<a name="custom-auth-token-signature"></a>

`create-authorizer` 呼び出しで使用したパブリックキーとプライベートキーのペアのプライベートキーを使用してトークンに署名する必要があります。次の例では、Unix 系のコマンドと JavaScript を使用してトークン署名を作成する方法を示します。SHA-256 ハッシュアルゴリズムを使用して、署名をエンコードします。

------
#### [ Command line ]

```
echo -n TOKEN_VALUE | openssl dgst -sha256 -sign PEM encoded RSA private key | openssl base64
```

------
#### [ JavaScript ]

```
const crypto = require('crypto')

const key = "PEM encoded RSA private key"

const k = crypto.createPrivateKey(key)
let sign = crypto.createSign('SHA256')
sign.write(t)
sign.end()
const s = sign.sign(k, 'base64')
```

------

# オーソライザーのトラブルシューティング
<a name="custom-auth-troubleshooting"></a>

 このトピックでは、カスタム認証ワークフローで問題を引き起こす可能性のある一般的な問題と、それらを解決するための手順について説明します。問題を最も効果的にトラブルシューティングするには、 の CloudWatch Logs を有効に AWS IoT Core し、ログレベルを **DEBUG** に設定します。 AWS IoT Core コンソール ([https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/)) で CloudWatch ログを有効にできます。 AWS IoT Coreのログの有効化と設定の詳細については、「[AWS IoT ログ記録の設定](configure-logging.md)」を参照してください。

**注記**  
ログレベルを長期間 **DEBUG** のままにしておくと、CloudWatch は大量のログデータを保存する可能性があります。これにより、CloudWatch の料金が増加する可能性があります。リソースベースのログ記録を使用して、特定のモノのグループ内のデバイスのみの詳細度を高めることを検討してください。リソースベースのログ記録の詳細については、「[AWS IoT ログ記録の設定](configure-logging.md)」を参照してください。また、トラブルシューティングが完了したら、ログレベルの詳細度を引き下げます。

トラブルシューティングを開始する前に、[カスタム認証ワークフローについて](custom-authorizer.md) でカスタム認証プロセスの概要を確認してください。これは、問題の原因を見つけるのにどこを確認すればよいかを理解するのに役立ちます。

このトピックでは、調査する次の 2 つの領域について説明します。
+ オーソライザーの Lambda 関数に関連する問題。
+ デバイスに関連する問題。

## オーソライザーの Lambda 関数に問題がないか確認する
<a name="custom-auth-troubleshooting-lambda"></a>

次の手順を実行して、デバイスの接続試行が Lambda 関数を呼び出していることを確認します。

1. オーソライザーに関連付けられている Lambda 関数を確認します。

   これを行うには、[DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html) API を呼び出すか、 AWS IoT Core コンソールの [**Secure**] (安全性) セクションで目的のオーソライザーをクリックします。

1. Lambda 関数の呼び出しメトリクスを確認します。これを行うには、次の手順を実行します。

   1.  AWS Lambda コンソール ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) を開き、オーソライザーに関連付けられている関数を選択します。

   1. [**Monitor**] (監視) タブを選択し、問題に関連する時間枠のメトリクスを表示します。

1. 呼び出しが表示されない場合は、 AWS IoT Core に Lambda 関数を呼び出すアクセス許可があることを確認します。呼び出しが表示された場合は、次の手順に進みます。次の手順を実行して、Lambda 関数に必要なアクセス許可があることを確認します。

   1.  AWS Lambda コンソールで 関数の**アクセス許可**タブを選択します。

   1. ページの下部にある [**Resource-based Policy**] (リソースベースのポリシー) セクションを見つけます。Lambda 関数に必要なアクセス許可がある場合、ポリシーは次の例のようになります。  
****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Id": "default",
        "Statement": [
          {
            "Sid": "Id123",
            "Effect": "Allow",
            "Principal": {
              "Service": "iot.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName",
            "Condition": {
              "ArnLike": {
                "AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/AuthorizerName"
              },
              "StringEquals": {
                "AWS:SourceAccount": "111111111111"
              }
            }
          }
        ]
      }
      ```

   1. このポリシーは、関数に対する アクセス`InvokeFunction`許可を AWS IoT Core プリンシパルに付与します。表示されない場合は、[AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html) API を使用して追加する必要があります。次の例では、 AWS CLIを使用してこの操作を行う方法を示しています。

      ```
      aws lambda add-permission --function-name FunctionName --principal iot.amazonaws.com --source-arn AuthorizerARn --statement-id Id-123 --action "lambda:InvokeFunction"
      ```

1. 呼び出しが表示された場合は、エラーがないことを確認します。エラーは、Lambda 関数が AWS IoT Core が送信する接続イベントを適切に処理していないことを示している可能性があります。

   Lambda 関数でのイベントの処理については、[Lambda 関数の定義](custom-auth-lambda.md) を参照してください。 AWS Lambda コンソール ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) のテスト機能を使用して、関数のテスト値をハードコードし、関数がイベントを正しく処理していることを確認します。

1. エラーのない呼び出しが表示されても、デバイスが接続 (またはメッセージを発行、サブスクライブ、および受信) できない場合、問題は、Lambda 関数が返すポリシーが、デバイスが実行しようとしているアクションのためのアクセス許可を付与しないことである可能性があります。関数が返すポリシーに問題があるかどうかを判断するには、次の手順を実行します。

   1. Amazon CloudWatch Logs Insights クエリを使用して、短期間にログをスキャンし、エラーがないか確認します。次のクエリ例では、イベントをタイムスタンプでソートし、エラーを探します。

      ```
      display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"    
      ```

   1. Lambda 関数を更新して、返されるデータと関数 AWS IoT Core をトリガーするイベントをログに記録します。これらのログを使用して、関数が作成するポリシーを検査できます。

1. 呼び出しにエラーがないにもかかわらず、デバイスが接続できない (またはメッセージを発行、サブスクライブ、受信できない) 場合は、別の原因として、Lambda 関数がタイムアウト制限を超えている可能性があります。カスタムオーソライザーの Lambda 関数のタイムアウト制限は 5 秒です。関数の期間は、CloudWatch ログまたはメトリクスで確認できます。

## デバイスの問題の調査
<a name="custom-auth-troubleshooting-investigate"></a>

Lambda 関数の呼び出しに問題がない場合や、関数が返すポリシーに問題がない場合は、デバイスの接続試行に問題がないか確認してください。不正な形式の接続リクエストにより、 がオーソライザーをトリガー AWS IoT Core しない可能性があります。接続の問題は、TLS レイヤーとアプリケーションレイヤーの両方で発生する可能性があります。

**考えられる TLS レイヤーの問題:**
+ お客様は、すべてのカスタム認証リクエストで、ホスト名ヘッダー (HTTP、MQTT over WebSockets) または Server Name Indication TLS 拡張 (HTTP、MQTT over WebSockets、MQTT) を渡す必要があります。どちらの場合も、渡される値はアカウントの AWS IoT Core データエンドポイントの 1 つと一致する必要があります。これらは、次の CLI コマンドを実行したときに返されるエンドポイントです。
  + `aws iot describe-endpoint --endpoint-type iot:Data-ATS`
  + `aws iot describe-endpoint --endpoint-type iot:Data` (レガシー VeriSign エンドポイント)
+ MQTT 接続にカスタム認証を使用するデバイスは、`mqtt` の値の Application Layer Protocol Negotiation (ALPN) TLS 拡張も渡す必要があります。
+ カスタム認証は現在、ポート 443 でのみ使用できます。

**考えられるアプリケーションレイヤーの問題:**
+ 署名が有効になっている場合 (オーソライザーで `signingDisabled` フィールドが false の場合)、次の署名の問題がないかを確認します。
  + `x-amz-customauthorizer-signature` ヘッダーまたはクエリ文字列パラメータのいずれかでトークン署名を渡していることを確認してください。
  + サービスがトークン以外の値に署名していないことを確認してください。
  + オーソライザーの `token-key-name` フィールドで指定したヘッダーまたはクエリパラメータでトークンを渡すようにしてください。
+ `x-amz-customauthorizer-name` ヘッダーまたはクエリ文字列パラメータで渡すオーソライザー名が有効であること、またはアカウント用にデフォルトのオーソライザーが定義されていることを確認してください。

# Authorization
<a name="iot-authorization"></a>

認可とは、認証された ID にアクセス許可を付与するプロセスです。 AWS IoT Core および IAM ポリシー AWS IoT Core を使用して、 でアクセス許可を付与します。このトピックでは、 AWS IoT Core ポリシーについて説明します。IAM ポリシーの詳細については、[の ID とアクセスの管理 AWS IoT](security-iam.md) および [が IAM と AWS IoT 連携する方法](security_iam_service-with-iam.md) を参照してください。

AWS IoT Core ポリシーは、認証された ID が実行できる操作を決定します。認証済みの ID は、デバイス、モバイルアプリケーション、ウェブアプリケーション、デスクトップアプリケーションで使用されます。認証された ID は、 AWS IoT Core CLI コマンドを入力するユーザーでもかまいません。ID は、それらの AWS IoT Core オペレーションのアクセス許可を付与するポリシーがある場合にのみ、オペレーションを実行できます。

 AWS IoT Core ポリシーと IAM ポリシーはどちらも、アイデンティティ (*プリンシパル*とも呼ばれる) が実行できるオペレーションを制御する AWS IoT Core ために とともに使用されます。使用するポリシータイプは、認証に使用する ID のタイプによって異なります AWS IoT Core。

AWS IoT Core オペレーションは 2 つのグループに分けられます。
+ コントロールプレーン API では、証明書、モノ、ルールなどの作成または更新などの管理タスクを行うことができます。
+ データプレーン API では、データを送受信できます AWS IoT Core。

使用するポリシーのタイプは、コントロールプレーン API とデータプレーン API のどちらを使用しているかによって異なります。

次の表に、ID タイプ、使用しているプロトコル、認可時に使用することのできるポリシータイプを示します。


**AWS IoT Core データプレーン API とポリシータイプ**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-authorization.html)


**AWS IoT Core コントロールプレーン API とポリシータイプ**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-authorization.html)

AWS IoT Core ポリシーは、X.509 証明書、Amazon Cognito ID、またはモノのグループにアタッチされます。IAM ポリシーは、IAM ユーザー、グループ、ロールにアタッチされます。 AWS IoT コンソールまたは CLI AWS IoT Core を使用して (証明書、Amazon Cognito Identity、またはモノのグループに) ポリシーをアタッチする場合は、 AWS IoT Core ポリシーを使用します。それ以外の場合は、モノのグループにアタッチされた IAM policy. AWS IoT Core policies が、そのモノのグループ内のすべてのモノに適用されます。 AWS IoT Core ポリシーを有効にするには、 `clientId`とモノの名前が一致している必要があります。

ポリシーベースの権限付与は強力なツールになります。これにより、デバイス、ユーザー、アプリケーションが AWS IoT Coreでできることを完全に制御できます。例えば、証明書 AWS IoT Core を使用して に接続するデバイスを考えてみましょう。この場合、デバイスを使用して、すべての MQTT トピックへのアクセスを許可するか、1 つのトピックにアクセスを制限できます。または、コマンドラインで CLI コマンドを入力することもできます。ポリシーを使用すると、ユーザーの任意のコマンドまたは AWS IoT Core リソースへのアクセスを許可または拒否できます。また、 AWS IoT Core リソースへのアプリケーションのアクセスを制御することもできます。

 AWS IoT がポリシードキュメントをキャッシュする方法によっては、ポリシーに加えられた変更が有効になるまでに数分かかる場合があります。つまり、最近アクセス権が付与されたリソースにアクセスするには数分かかる場合があり、アクセスが取り消された後、数分間リソースにアクセスできる場合があります。

## AWS トレーニングと認定
<a name="iot-authorization-training"></a>

での認可については AWS IoT Core、 AWS 「トレーニング[と認定」ウェブサイトの「認証と認可の詳細 AWS IoT Core](https://www.aws.training/Details/Curriculum?id=42335)」コースを受講してください。

# AWS IoT Core ポリシー
<a name="iot-policies"></a>

AWS IoT Core ポリシーは JSON ドキュメントです。IAM ポリシーと同じ規則に従います。 は名前付きポリシー AWS IoT Core をサポートしているため、多くの ID が同じポリシードキュメントを参照できます。名前付きポリシーは、簡単にロールバックされるようにバージョン管理されます。

AWS IoT Core ポリシーを使用すると、 AWS IoT Core データプレーンへのアクセスを制御できます。 AWS IoT Core のデータプレーンは、 AWS IoT Core メッセージブローカーへの接続、MQTT メッセージの送受信、デバイスのシャドウの取得または更新を可能にするオペレーションで構成されます。

 AWS IoT Core ポリシーは、1 つ以上のポリシーステートメントを含む JSON ドキュメントです。各ステートメントには、次の内容が含まれます。
+ `Effect`: アクションが許可されるか拒否されるかを指定します。
+ `Action` では、ポリシーで許可または拒否されているアクションを指定します。
+ `Resource` では、アクションを許可または拒否するリソースを 1 つ以上指定します。

ポリシーに加えられた変更は、 がポリシードキュメントを AWS IoT キャッシュするため、有効になるまでに 6～8 分かかる場合があります。つまり、最近アクセス権が付与されたリソースにアクセスするには数分かかる場合があり、アクセスが取り消された後、数分間リソースにアクセスできる場合があります。

AWS IoT Core ポリシーは、X.509 証明書、Amazon Cognito ID、およびモノのグループにアタッチできます。モノのグループにアタッチされたポリシーは、そのグループ内のあらゆるものに適用されます。ポリシーを有効にするには、`clientId` とモノの名前が一致している必要があります。 AWS IoT Core ポリシーは、IAM ポリシーと同じポリシーの評価ロジックに従います。デフォルトでは、すべてのポリシーが明示的に拒否されます。アイデンティティベースのポリシーまたはリソースベースのポリシーに対する明示的な許可は、このデフォルト設定を上書きします。ポリシー内の明示的な拒否は、すべての許可に優先します。詳細については、*AWS Identity and Access Management  ユーザーガイド*の「[ポリシーの評価論理](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow)」を参照してください。

**Topics**
+ [AWS IoT Core ポリシーアクション](iot-policy-actions.md)
+ [AWS IoT Core アクションリソース](iot-action-resources.md)
+ [AWS IoT Core ポリシー変数](iot-policy-variables.md)
+ [サービス間での不分別な代理処理の防止](cross-service-confused-deputy-prevention.md)
+ [AWS IoT Core ポリシーの例](example-iot-policies.md)
+ [Amazon Cognito ID を使用した承認](cog-iot-policies.md)

# AWS IoT Core ポリシーアクション
<a name="iot-policy-actions"></a>

次のポリシーアクションは、 AWS IoT Coreによって定義されています。MQTT ポリシーアクション

`iot:Connect`  
 AWS IoT Core メッセージブローカーに接続するアクセス許可を表します。`iot:Connect`アクセス許可は、`CONNECT` リクエストがブローカーに送信される度に確認されます。メッセージブローカーは、同じクライアント ID を持つ 2 つのクライアントが同時に接続を維持することを許可しません。2 番目のクライアントが接続すると、ブローカーは既存の接続を閉じます。`iot:Connect` アクセス許可を使い、特定のクライアント ID を使用している権限を持つクライアントのみが接続できる事を確認します。

`iot:DeleteConnection`  
接続された MQTT クライアントを AWS IoT Coreから切断するアクセス許可を表します。`iot:DeleteConnection` アクセス許可は、クライアントを強制的に切断するリクエストが行われるたびにチェックされます。クライアントを切断すると、 はクライアントのネットワーク接続を AWS IoT Core 閉じ、オプションでセッション状態をクリーンアップします。

`iot:GetRetainedMessage`  
保持されている単一のメッセージの内容を取得するためのアクセス許可を表します。保持メッセージは、RETAIN フラグを設定して公開され、 によって保存されたメッセージです AWS IoT Core。アカウントの保持されているすべてのメッセージのリストを取得するためのアクセス許可については、[iot:ListRetainedMessages](#action_listretainedmessages)を参照。

`iot:ListRetainedMessages`  
アカウントの保持メッセージの内容ではなく、それに関する概要情報を取得するためのアクセス許可を表します。保持メッセージは、RETAIN フラグを設定して公開され、 によって保存されたメッセージです AWS IoT Core。このアクションのために指定されたリソース ARN は`*`のはずです。保持されている単一のメッセージの内容を取得するためのアクセス許可については、[iot:GetRetainedMessage](#action_getretainpublish) を参照。

`iot:Publish`  
MQTT トピックを発行するためのアクセス許可を表します。このアクセス権限は、PUBLISH リクエストがブローカーに送信される度に確認されます。このアクセス許可を使用して、クライアントが特定のトピックパターンに対し発行できるようにします。  
`iot:Publish` アクセス許可を付与するには、`iot:Connect` アクセス許可も付与する必要があります。

`iot:Receive`  
メッセージを受信するアクセス許可を表します AWS IoT Core。`iot:Receive` アクセス許可は、メッセージがクライアントに配信されるたびに確認されます。このアクセス許可は配信ごとに確認されるため、この権限を利用し、現在トピックにサブスクライブしているクライアントに対してアクセス許可を取り消すことができます。

`iot:RetainPublish`  
設定された RETAIN フラッグで MQTT メッセージを発行するためのアクセス許可を表します。  
`iot:RetainPublish` アクセス許可を付与するには、`iot:Publish` アクセス許可も付与する必要があります。

`iot:Subscribe`  
トピックフィルターにサブスクライブするアクセス権限を表します。このアクセス権限は、SUBSCRIBE リクエストがブローカーに送信される度に確認されます。このアクセス許可を使用して、クライアントが、特定のトピックパターンに一致するトピックにサブスクライブできるようにします。  
`iot:Subscribe` アクセス許可を付与するには、`iot:Connect` アクセス許可も付与する必要があります。シャドウポリシーアクション

`iot:DeleteThingShadow`  
thing のデバイスシャドウを削除するアクセス権限を表します。`iot:DeleteThingShadow` アクセス権限は、thing のデバイスシャドウのコンテンツの削除リクエストが行われるたびに確認されます。

`iot:GetThingShadow`  
thing のデバイスシャドウを取得するアクセス権限を表します。`iot:GetThingShadow` アクセス権限は、thing のデバイスシャドウコンテンツの取得リクエストが行われるたびに確認されます。

`iot:ListNamedShadowsForThing`  
thing の名前付きのシャドウを削除するアクセス権限を表します。`iot:ListNamedShadowsForThing` アクセス権限は、thing の名前付きシャドウの一覧表示リクエストが行われる度に確認されます。

`iot:UpdateThingShadow`  
デバイスのシャドウを更新するアクセス権限を表します。`iot:UpdateThingShadow` アクセス権限は、thing のデバイスシャドウコンテンツの更新リクエストが行われるたびに確認されます。

**注記**  
ジョブ実行ポリシーアクションは、HTTP TLS エンドポイントにのみ適用されます。MQTT エンドポイントを使用する場合は、このトピックで定義された MQTT ポリシーアクションを使用する必要があります。  
これを示すジョブ実行ポリシーの例については、MQTT プロトコルと連携する [基本的なジョブポリシーの例](basic-jobs-example.md) を参照してください。ジョブ実行 AWS IoT Core ポリシーアクション

`iotjobsdata:DescribeJobExecution`  
特定のモノのジョブの実行を取得するアクセス権限を表します。`iotjobsdata:DescribeJobExecution` アクセス許可は、ジョブの実行の取得リクエストが行われるたびに確認されます。

`iotjobsdata:GetPendingJobExecutions`  
モノの終了のステータスではないジョブのリストを取得するアクセス権限を表します。`iotjobsdata:GetPendingJobExecutions` アクセス権限は、リストの取得リクエストが行われるたびに確認されます。

`iotjobsdata:UpdateJobExecution`  
ジョブの実行を更新するアクセス権限を表します。`iotjobsdata:UpdateJobExecution` アクセス権限は、ジョブ実行の状態の更新リクエストが行われるたびに確認されます。

`iotjobsdata:StartNextPendingJobExecution`  
モノに対して保留中の次のジョブ実行を取得および開始するアクセス権限を表します (つまり、ステータスが QUEUED から IN\$1PROGRESS であるジョブの実行を更新します)。`iotjobsdata:StartNextPendingJobExecution` アクセス許可は、保留中の次のジョブ実行を開始するリクエストが行われるたびに確認されます。AWS IoT Core 認証情報プロバイダーポリシーアクション

`iot:AssumeRoleWithCertificate`  
 AWS IoT Core 認証情報プロバイダーを呼び出して、証明書ベースの認証で IAM ロールを引き受けるアクセス許可を表します。アクセス`iot:AssumeRoleWithCertificate`許可は、 AWS IoT Core 認証情報プロバイダーにロールを引き受けるリクエストが行われるたびにチェックされます。

# AWS IoT Core アクションリソース
<a name="iot-action-resources"></a>

 AWS IoT Core ポリシーアクションのリソースを指定するには、リソースの Amazon リソースネーム (ARN) を使用します。リソースの ARN はすべて、次のような形式になります。

```
arn:partition:iot:region:AWS-account-ID:Resource-type/Resource-name
```

以下の表では、アクションタイプごとに指定するリソースを示しています。ARN の例は、パーティション `aws` 内のアカウント ID `123456789012` で、リージョン `us-east-1` に固有です。ARN の形式の詳細については、 AWS Identity and Access Management ユーザーガイドの[「Amazon リソースネーム (ARNs](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference-arns.html)」を参照してください。


| Action | リソースタイプ | リソース名 | ARN の例 | 
| --- | --- | --- | --- | 
| iot:Connect | client |  クライアントのクライアント ID  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteConnection | client |  クライアントのクライアント ID  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteThingShadow | thing |  モノの名前、および該当する場合はシャドウの名前  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iotjobsdata:DescribeJobExecution | thing |  モノの名前  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iotjobsdata:GetPendingJobExecutions | thing |  モノの名前  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:GetRetainedMessage | topic |  保持されたメッセージトピック  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iot:GetThingShadow | thing |  モノの名前、および該当する場合はシャドウの名前  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:ListNamedShadowsForThing | すべて | すべて |  \$1 | 
| iot:ListRetainedMessages | すべて | すべて |  \$1 | 
| iot:Publish | topic |  トピック文字列  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:Receive | topic |  トピック文字列  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:RetainPublish | topic |  設定された RETAIN フラグと共に発行するためのトピック  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iotjobsdata:StartNextPendingJobExecution | thing |  モノの名前  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:Subscribe | topicfilter | トピックフィルター文字列 | arn:aws:iot:us-east-1:123456789012:topicfilter/myTopicFilter | 
| iotjobsdata:UpdateJobExecution | thing |  モノの名前  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:UpdateThingShadow | thing |  モノの名前、および該当する場合はシャドウの名前  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:AssumeRoleWithCertificate | rolealias |  ロール ARN をポイントするロールエイリアス  |  arn:aws:iot:us-east-1:123456789012:rolealias/CredentialProviderRole\$1alias | 

# AWS IoT Core ポリシー変数
<a name="iot-policy-variables"></a>

AWS IoT Core は、 `Resource` または `Condition`ブロックのポリシーで使用できる AWS IoT Core ポリシー変数を定義します。ポリシーが評価されると、ポリシー変数は実際の値に置き換えられます。たとえば、デバイスがクライアント ID が 100-234-3456 の AWS IoT Core メッセージブローカーに接続されている場合、`iot:ClientId`ポリシードキュメントのポリシー変数は 100-234-3456 に置き換えられます。

AWS IoT Core ポリシーはワイルドカード文字を使用し、IAM ポリシーと同様の規則に従うことができます。文字列に `*` (アスタリスク) を挿入すると、任意の文字に一致するワイルドカードとして扱うことができます。例えば、`*` を使用してポリシーの `Resource` 属性で複数の MQTT トピック名を記述できます。`+` と `#` の文字は、ポリシーの中でリテラル文字列として扱われます。ワイルドカードを使用する方法を示したポリシー例については、「[MQTT および AWS IoT Core ポリシーでのワイルドカード文字の使用](pub-sub-policy.md#pub-sub-policy-cert)」を参照してください。

また、固定値を持つ事前定義されたポリシー変数を使用して、それ以外の場合に特別な意味を持つ文字を表現することができます。これらの特殊文字には、`$(*)`、`$(?)`、および `$($)` が含まれます。ポリシー変数と特殊文字の詳細については、「[IAM ポリシーの要素: 変数とタグ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)」および「[複数のキーまたは値による条件の作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html)」を参照してください。

**Topics**
+ [基本的な AWS IoT Core ポリシー変数](basic-policy-variables.md)
+ [モノのポリシー変数](thing-policy-variables.md)
+ [X.509 証明書 AWS IoT Core ポリシー変数](cert-policy-variables.md)

# 基本的な AWS IoT Core ポリシー変数
<a name="basic-policy-variables"></a>

AWS IoT Core は、以下の基本的なポリシー変数を定義します。
+ `aws:SourceIp`: AWS IoT Core メッセージブローカーに接続されているクライアントの IP アドレス。
+ `iot:ClientId`: このクライアント ID は、 AWS IoT Core メッセージブローカーに接続するために使用されます。
+ `iot:DomainName`: 接続先のクライアントのドメイン名 AWS IoT Core。

**Topics**
+ [`ClientId` および `SourceIp` ポリシー変数の例](#basic-policy-variables-example)
+ [`iot:DomainName` ポリシー変数の例](#basic-policy-variables-example-domain)

## `ClientId` および `SourceIp` ポリシー変数の例
<a name="basic-policy-variables-example"></a>

次の AWS IoT Core ポリシーは、ポリシー変数を使用するポリシーを示しています。 `aws:SourceIp`は、ポリシーの Condition 要素で使用して、プリンシパルが特定のアドレス範囲内でのみ API リクエストを実行できるようにします。例については「[ユーザーとクラウドサービスに AWS IoT ジョブの使用を許可する](iam-policy-users-jobs.md)」を参照してください。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
			],
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": "123.45.167.89"
				}
			}
		}
	]
}
```

これらの例では、ポリシー`${iot:ClientId}`が評価されると、 は AWS IoT Core メッセージブローカーに接続されたクライアントの ID に置き換えられます。`${iot:ClientId}` などのポリシー変数を使用すると、アクセス可能にしないトピックにアクセスすることがあります。例えば、`${iot:ClientId}` を使用するポリシーでトピックフィルターを指定する場合です。

```
{
	"Effect": "Allow",
	"Action": [
		"iot:Subscribe"
	],
	"Resource": [
		"arn:aws:iot:us-east-1:123456789012:topicfilter/my/${iot:ClientId}/topic"
	]
}
```

クライアントは、クライアント ID として `+` を使用して接続できます。これにより、ユーザーはトピックフィルター `my/+/topic` に一致する任意のトピックにサブスクライブできます。このようなセキュリティギャップから保護するには、`iot:Connect` ポリシーアクションを使用して、どのクライアント ID が接続できるかを制御します。例えば、このポリシーにより、これらのクライアント ID が `clientid1` のクライアントのみが接続できるようになります。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid"
			]
		}
	]
}
```

**注記**  
ポリシー変数 `${iot:ClientId}` を `Connect` と併用することはお勧めしません。`ClientId` の値はチェックされないため、別のクライアントの ID のアタッチャーが検証に合格しても接続が切断されることがあります。どのクライアント ID `ClientId` も許可されているため、ランダムなクライアント ID を設定すると、モノグループのポリシーがバイパスされる可能性があります。

## `iot:DomainName` ポリシー変数の例
<a name="basic-policy-variables-example-domain"></a>

`iot:DomainName` ポリシー変数を追加して、使用できるドメインを制限できます。`iot:DomainName` ポリシー変数を追加すると、デバイスは特定の設定済みエンドポイントにのみ接続できます。

次のポリシーでは、デバイスが指定されたドメインに接続することを許可します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "AllowConnectionsToSpecifiedDomain",
		"Effect": "Allow",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

次のポリシーは、デバイスが指定されたドメインに接続することを拒否します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "DenyConnectionsToSpecifiedDomain",
		"Effect": "Deny",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

ポリシー条件演算子の詳細については、「[IAM JSON ポリシーエレメント: 条件演算子](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)」を参照してください。ドメイン設定の詳細については、「[ドメイン設定とは](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html)」を参照してください。

# モノのポリシー変数
<a name="thing-policy-variables"></a>

モノのポリシー変数を使用すると、モノの名前、モノのタイプ、モノの属性値などのモノのプロパティに基づいてアクセス許可を付与または拒否する AWS IoT Core ポリシーを作成できます。モノのポリシー変数を使用して、同じポリシーを適用して多くの AWS IoT Core デバイスを制御できます。デバイスのプロビジョニングの詳細については、「[デバイスプロビジョニング](iot-provision.html)」を参照してください。

非排他的なモノの関連付けを使用する場合、同じ証明書を複数のモノにアタッチすることができます。明確な関連付けを維持し、潜在的な競合を回避するには、クライアント ID をモノの名前と一致させる必要があります。この場合、モノの接続時に送信される MQTT `Connect` メッセージ内のクライアント ID からモノの名前を取得します AWS IoT Core。

 AWS IoT Core ポリシーでモノのポリシー変数を使用する場合は、次の点に注意してください。
+ [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html) API を使用して、証明書やプリンシパル (認証済みの Amazon Cognito ID) をモノにアタッチします。
+ モノの名前をモノのポリシー変数に置き換える場合、MQTT 接続メッセージまたは TLS 接続の `clientId` の値がモノの名前と完全に一致している必要があります。

以下のモノのポリシー変数が利用可能です。
+ `iot:Connection.Thing.ThingName`

  これは、ポリシーが評価されている AWS IoT Core レジストリ内のモノの名前に解決されます。 は、デバイスが認証するときに提示する証明書 AWS IoT Core を使用して、接続の検証に使用するモノを決定します。このポリシー変数は、デバイスが MQTT または MQTT over WebSocket プロトコルに接続するときにのみ使用できます。
+ `iot:Connection.Thing.ThingTypeName`

  これは、ポリシーが評価されているモノと関連付けられるモノのタイプに解決されます。MQTT/WebSocket 接続のクライアント ID は、モノの名前と同じである必要があります。このポリシー変数は、MQTT または MQTT over WebSocket プロトコルに接続するときにのみ使用できます。
+ `iot:Connection.Thing.Attributes[attributeName]`

  これは、ポリシーが評価されているモノと関連付けられる指定した属性値に解決されます。モノには最大 50 個の属性を指定できます。各属性はポリシー変数として使用できます。`iot:Connection.Thing.Attributes[attributeName]` *attributeName* は属性の名前です。MQTT/WebSocket 接続のクライアント ID は、モノの名前と同じである必要があります。このポリシー変数は、MQTT または MQTT over WebSocket プロトコルに接続するときにのみ使用できます。
+ `iot:Connection.Thing.IsAttached`

  `iot:Connection.Thing.IsAttached: ["true"]` は、 に登録 AWS IoT され、プリンシパルにアタッチされているデバイスのみがポリシー内のアクセス許可にアクセスできるようにします。この変数を使用すると、デバイスがレジストリ内の AWS IoT Core IoT モノにアタッチされていない証明書を提示 AWS IoT Core する場合、デバイスが に接続できないようにできます。この変数には値 `true` または があり、接続するモノが [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html) API を使用してレジストリ内の証明書または Amazon Cognito ID にアタッチされている`false`ことを示します。モノの名前はクライアント ID として使用されます。

クライアント ID がモノの名前と一致する場合、または証明書をモノに排他的にアタッチする場合は、ポリシー定義でポリシー変数を使用すると、ポリシー管理を簡素化できます。IoT のモノごとに個別のポリシーを作成する代わりに、モノのポリシー変数を使用して単一のポリシーを定義できます。このポリシーは、すべてのデバイスに動的に適用できます。以下は、この仕組みを示すポリシーの例です。詳細については、「[AWS IoT モノを MQTT クライアント接続に関連付ける](exclusive-thing.md)」を参照してください。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Condition": {
				"StringLike": {
					"iot:ClientId": "*${iot:Connection.Thing.Attributes[envType]}"
				}
			},
			"Effect": "Allow",
			"Action": "iot:Connect",
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/*"
		}
	]
}
```

このポリシー例では、クライアント ID が `envType` 属性の値で終わる AWS IoT Core と、モノは に接続できます。接続できるのは、一致するクライアント ID パターンを持つモノのみです。

# X.509 証明書 AWS IoT Core ポリシー変数
<a name="cert-policy-variables"></a>

X.509 証明書ポリシー変数は、 AWS IoT Core ポリシーの記述に役立ちます。これらのポリシーは、X.509 証明書属性に基づいてアクセス許可を付与します。次のセクションでは、それらの証明書のポリシー変数を使用する方法を説明します。

**重要**  
X.509 証明書に特定の証明書属性が含まれていないものの、対応する証明書ポリシー変数がポリシードキュメントで使用されている場合、ポリシー評価によって予期しない動作が発生する可能性があります。

## CertificateId
<a name="cert-policy-variables-certid"></a>

[RegisterCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCertificate.html) API では、レスポンス本文に `certificateId` が表示されます。証明書に関する情報を取得するには、[DescribeCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeCertificate.html) で `certificateId` を使用できます。

## 発行元の属性
<a name="issuer-attributes"></a>

次の AWS IoT Core ポリシー変数は、証明書発行者が設定した証明書属性に基づいて、アクセス許可の許可または拒否をサポートします。
+ `iot:Certificate.Issuer.DistinguishedNameQualifier`
+ `iot:Certificate.Issuer.Country`
+ `iot:Certificate.Issuer.Organization`
+ `iot:Certificate.Issuer.OrganizationalUnit`
+ `iot:Certificate.Issuer.State`
+ `iot:Certificate.Issuer.CommonName`
+ `iot:Certificate.Issuer.SerialNumber`
+ `iot:Certificate.Issuer.Title`
+ `iot:Certificate.Issuer.Surname`
+ `iot:Certificate.Issuer.GivenName`
+ `iot:Certificate.Issuer.Initials`
+ `iot:Certificate.Issuer.Pseudonym`
+ `iot:Certificate.Issuer.GenerationQualifier` 

## 件名の属性
<a name="subject-attributes"></a>

次の AWS IoT Core ポリシー変数は、証明書発行者が設定した証明書のサブジェクト属性に基づいて、アクセス許可の付与または拒否をサポートします。
+ `iot:Certificate.Subject.DistinguishedNameQualifier`
+ `iot:Certificate.Subject.Country`
+ `iot:Certificate.Subject.Organization`
+ `iot:Certificate.Subject.OrganizationalUnit`
+ `iot:Certificate.Subject.State`
+ `iot:Certificate.Subject.CommonName`
+ `iot:Certificate.Subject.SerialNumber`
+ `iot:Certificate.Subject.Title`
+ `iot:Certificate.Subject.Surname`
+ `iot:Certificate.Subject.GivenName`
+ `iot:Certificate.Subject.Initials`
+ `iot:Certificate.Subject.Pseudonym`
+ `iot:Certificate.Subject.GenerationQualifier` 

X.509 証明書は、これらの属性に 1 つ以上の値を含むオプションを提供します。デフォルトでは、複数値の各属性用のポリシー変数は最初の値を返します。例えば、`Certificate.Subject.Country` 属性には国名のリストが含まれる場合がありますが、ポリシーで評価されると、`iot:Certificate.Subject.Country` は最初の国名に置き換えられます。

1 から始めるインデックスを使用して、最初の値以外の特定の属性値をリクエストできます。例えば、`iot:Certificate.Subject.Country.1` は、`Certificate.Subject.Country` 属性の 2 番目の国名に置き換えられます。存在していないインデックス値を指定する場合、(例えば、属性に割り当てられた値が 2 つのみのとき 3 番目の値を要求すると) 置き換えはされず、認可は失敗します。ポリシーの変数名で、`.List` サフィックスを使用して、属性の値をすべて指定できます。

## 発行元の代替名属性
<a name="issuer-alternate-name-attributes"></a>

次の AWS IoT Core ポリシー変数は、証明書発行者が設定した発行者の代替名属性に基づいて、アクセス許可の付与または拒否をサポートします。
+ `iot:Certificate.Issuer.AlternativeName.RFC822Name`
+ `iot:Certificate.Issuer.AlternativeName.DNSName`
+ `iot:Certificate.Issuer.AlternativeName.DirectoryName`
+ `iot:Certificate.Issuer.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Issuer.AlternativeName.IPAddress`

## 件名の代替名属性
<a name="subject-alternate-name-attributes"></a>

次の AWS IoT Core ポリシー変数は、証明書発行者が設定したサブジェクト代替名属性に基づいて、アクセス許可の付与または拒否をサポートします。
+ `iot:Certificate.Subject.AlternativeName.RFC822Name`
+ `iot:Certificate.Subject.AlternativeName.DNSName`
+ `iot:Certificate.Subject.AlternativeName.DirectoryName`
+ `iot:Certificate.Subject.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Subject.AlternativeName.IPAddress`

## その他の属性
<a name="other-attributes"></a>

を使用して`iot:Certificate.SerialNumber`、証明書のシリアル番号に基づいて、 AWS IoT Core リソースへのアクセスを許可または拒否できます。`iot:Certificate.AvailableKeys` ポリシー変数には、値を含むすべての証明書のポリシー変数の名前が含まれます。

# X.509 証明書のポリシー変数の使用
<a name="use-policy-variables"></a>

このトピックでは、証明書のポリシー変数の使用方法について詳しく説明します。X.509 証明書のポリシー変数は、X.509 証明書の属性に基づいてアクセス許可を付与する AWS IoT Core ポリシーを作成するときに必須です。X.509 証明書に特定の証明書属性が含まれていないものの、対応する証明書ポリシー変数がポリシードキュメントで使用されている場合、ポリシー評価によって予期しない動作が発生する可能性があります。これは、欠落しているポリシー変数がポリシーステートメントで評価されないためです。

**Topics**
+ [X.509 証明書の例](#certificate-example)
+ [証明書のポリシー変数としての証明書発行者の属性の使用](#issuer-attributes-policy)
+ [証明書のポリシー変数としての証明書のサブジェクト属性の使用](#subject-attributes-policy)
+ [証明書ポリシー変数として証明書発行者の代替名属性を使用](#issuer-alternate-name-attributes-policy)
+ [証明書ポリシー変数として証明書サブジェクトの代替名属性を使用](#subject-alternate-name-attributes-policy)
+ [証明書ポリシー変数として他の証明書属性を使用](#other-attributes-policy)
+ [X.509 証明書のポリシー変数の制限](#policy-limits)
+ [証明書ポリシー変数を使用したポリシーの例](#example-attributes-policy)

## X.509 証明書の例
<a name="certificate-example"></a>

一般的な X.509 証明書は次のように表示されます。この証明書の例には、証明書の属性が含まれています。 AWS IoT Core ポリシーの評価中、`Serial Number`、`Issuer`、`Subject`、`X509v3 Issuer Alternative Name`、および `X509v3 Subject Alternative Name` の証明書の属性が証明書ポリシー変数として入力されます。

```
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            92:12:85:cb:b7:a5:e0:86
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=IoT Devices, OU=SmartHome, ST=WA, CN=IoT Devices Primary CA, 
				GN=Primary CA1/initials=XY/dnQualifier=Example corp,
				SN=SmartHome/ title=CA1/pseudonym=Primary_CA/generationQualifier=2/serialNumber=987		
        Validity
            Not Before: Mar 26 03:25:40 2024 GMT
            Not After : Apr 28 03:25:40 2025 GMT
        Subject: C=US, O=IoT Devices, OU=LightBulb, ST=NY, CN=LightBulb Device Cert, 
				GN=Bulb/initials=ZZ/dnQualifier=Bulb001, 
				SN=Multi Color/title=RGB/pseudonym=RGB Device/generationQualifier=4/serialNumber=123
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    << REDACTED >>
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name: 
                DNS:example.com, IP Address:1.2.3.4, URI:ResourceIdentifier001, email:device1@example.com, DirName:/C=US/O=IoT/OU=SmartHome/CN=LightBulbCert
            X509v3 Issuer Alternative Name: 
                DNS:issuer.com, IP Address:5.6.7.8, URI:PrimarySignerCA, email:primary@issuer.com, DirName:/C=US/O=Issuer/OU=IoT Devices/CN=Primary Issuer CA
    Signature Algorithm: sha256WithRSAEncryption
         << REDACTED >>
```

## 証明書のポリシー変数としての証明書発行者の属性の使用
<a name="issuer-attributes-policy"></a>

次の表は、証明書発行者の属性を AWS IoT Core ポリシーに入力する方法の詳細を示しています。


**ポリシーに入力する発行者の属性**  

| 証明書発行者の属性 | 証明書のポリシー変数 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  | 

## 証明書のポリシー変数としての証明書のサブジェクト属性の使用
<a name="subject-attributes-policy"></a>

次の表は、証明書のサブジェクト属性を AWS IoT Core ポリシーに入力する方法の詳細を示しています。


**ポリシーに入力されるサブジェクト属性**  

| 証明書のサブジェクト属性 | 証明書のポリシー変数 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  | 

## 証明書ポリシー変数として証明書発行者の代替名属性を使用
<a name="issuer-alternate-name-attributes-policy"></a>

次の表は、証明書発行者の代替名属性が AWS IoT Core ポリシーに入力される方法の詳細を示しています。


**ポリシーに入力する発行者の代替名属性**  

| X509v3 発行者の代替名 | ポリシー内の属性 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  | 

## 証明書ポリシー変数として証明書サブジェクトの代替名属性を使用
<a name="subject-alternate-name-attributes-policy"></a>

次の表は、証明書サブジェクトの代替名属性が AWS IoT Core ポリシーに入力される方法の詳細を示しています。


**ポリシーに入力されるサブジェクトの代替名属性**  

| X509v3 サブジェクトの代替名 | ポリシー内の属性 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/use-policy-variables.html)  | 

## 証明書ポリシー変数として他の証明書属性を使用
<a name="other-attributes-policy"></a>

次の表は、他の証明書属性が AWS IoT Core ポリシーに入力される方法の詳細を示しています。


**ポリシーに入力されるその他の属性**  

| その他の証明書属性 | 証明書のポリシー変数 | 
| --- | --- | 
|  `Serial Number: 92:12:85:cb:b7:a5:e0:86`  |  `iot:Certificate.SerialNumber = 10525622389124227206`  | 

## X.509 証明書のポリシー変数の制限
<a name="policy-limits"></a>

次の制限は、X.509 証明書のポリシー変数に適用されます。

欠落しているポリシー変数  
X.509 証明書に特定の証明書属性が含まれていないものの、対応する証明書ポリシー変数がポリシードキュメントで使用されている場合、ポリシー評価によって予期しない動作が発生する可能性があります。これは、欠落しているポリシー変数がポリシーステートメントで評価されないためです。

証明書の SerialNumber 形式  
AWS IoT Core は、証明書のシリアル番号を 10 進数の整数の文字列表現として扱います。例えば、ポリシーで証明書のシリアル番号に一致するクライアント ID のみの接続が許可されている場合、クライアント ID は 10 進数のシリアル番号である必要があります。

ワイルドカード  
ワイルドカード文字が証明書の属性にある場合は、ポリシー変数は証明書属性値に置き換えられません。そのため、ポリシードキュメントに `${policy-variable}` テキストが残ります。これにより、承認が失敗する場合があります。ワイルドカード文字として、`*`、`$`、`+`、`?`、`#` を使用できます。

配列フィールド  
配列を含む証明書の属性は、5 つの項目に制限されます。追加項目は無視されます。

文字列の長さ  
すべての文字列値は 1024 文字に制限されています。証明書の属性に、1024 文字以上の文字列が含まれている場合、ポリシー変数は証明書の属性値に置き換えられません。そのため、ポリシードキュメントに `${policy-variable}` が残ります。これにより、承認が失敗する場合があります。

特殊文字  
`,`、`"`、`\`、`+`、`=`、`<`、`>`、`;` などの特殊文字をポリシー変数で使用する場合は、先頭にバックスラッシュ (`\`) を付ける必要があります。例えば、`Amazon Web Services O=Amazon.com Inc. L=Seattle ST=Washington C=US` は `Amazon Web Service O\=Amazon.com Inc. L\=Seattle ST\=Washington C\=US` になります。

## 証明書ポリシー変数を使用したポリシーの例
<a name="example-attributes-policy"></a>

次のポリシードキュメントでは、証明書のシリアル番号に一致するクライアント ID を使用して接続し、`${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*` のパターンに一致するトピックに発行できます。

**重要**  
X.509 証明書に特定の証明書属性が含まれていないものの、対応する証明書ポリシー変数がポリシードキュメントで使用されている場合、ポリシー評価によって予期しない動作が発生する可能性があります。これは、欠落しているポリシー変数がポリシーステートメントで評価されないためです。例えば、`iot:Certificate.Subject.Organization` 属性を含まない証明書に次のポリシードキュメントをアタッチした場合、ポリシー評価中に `iot:Certificate.Subject.Organization` 証明書ポリシー変数は入力されません。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Certificate.SerialNumber}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*"
			]
		}
	]
}
```

[Null 条件演算子](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)を使用して、ポリシーの評価中にポリシーで使用される証明書ポリシー変数が入力されるようにすることもできます。次のポリシードキュメントでは、証明書のシリアル番号と証明書のサブジェクトの共通名属性が存在する場合にのみ、証明書で `iot:Connect` を許可します。

すべての証明書ポリシー変数には文字列値があるため、すべての[文字列条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)がサポートされます。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/*"
			],
			"Condition": {
				"Null": {
					"iot:Certificate.SerialNumber": "false",
					"iot:Certificate.Subject.CommonName": "false"
				}
			}
		}
	]
}
```

# サービス間での不分別な代理処理の防止
<a name="cross-service-confused-deputy-prevention"></a>

*「混乱した代理」問題*は、アクションを実行するためのアクセス許可を持たないエンティティが、より特権のあるエンティティにアクションの実行を強制できてしまう場合に生じる、セキュリティ上の問題です。では AWS、サービス間のなりすましにより、混乱した代理問題が発生する可能性があります。サービス間でのなりすましは、あるサービス (*呼び出し元サービス*) が、別のサービス (*呼び出し対象サービス*) を呼び出すときに発生する可能性があります。呼び出し元サービスが操作され、それ自身のアクセス許可を使用して、本来アクセス許可が付与されるべきではない方法で別の顧客のリソースに対して働きかけることがあります。これを防ぐため、 AWS では、アカウント内のリソースへのアクセス許可が付与されたサービスプリンシパルですべてのサービスのデータを保護するために役立つツールを提供しています。

が別のサービス AWS IoT に付与するアクセス許可をリソースに制限するには、リソースポリシーで [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) グローバル条件コンテキストキーを使用することをお勧めします。両方のグローバル条件コンテキストキーを同じポリシーステートメントで使用する場合は、`aws:SourceAccount` 値と、`aws:SourceArn` 値に含まれるアカウントが、同じアカウント ID を示している必要があります。

「混乱した代理」問題から保護するための最も効果的な方法は、リソースの完全なAmazon リソースネーム (ARN)を指定しながら、グローバル条件コンテキストキー `aws:SourceArn` を使用することです。の場合 AWS IoT、 `aws:SourceArn`はリソース固有のアクセス許可`arn:aws:iot:region:account-id:resource-type/resource-id`の場合は または の形式に従う必要があります`arn:aws:iot:region:account-id:*`。resource-id は、許可されたリソースの名前または ID、または許可されたリソース ID のワイルドカードステートメントにすることができます。*リージョン*がお客様の AWS IoT リージョンと一致し、*account-id* がお客様のアカウント ID と一致していることを確認します。

次の例は、 AWS IoT ロール信頼ポリシーで `aws:SourceArn`および `aws:SourceAccount` グローバル条件コンテキストキーを使用して、混乱した代理問題を防ぐ方法を示しています。その他の例については、「[混乱した代理の防止の詳細な例](#cross-service-confused-deputy-prevention-examples)」を参照してください。

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:*"
        }
         }
      }
   ]
}
```

**注記**  
アクセス拒否エラーが発生した場合は、 AWS Security Token Service (STS) とのサービス統合が `aws:SourceArn` および `aws:SourceAccount` コンテキストキーをサポートしていない可能性があります。

## 混乱した代理の防止の詳細な例
<a name="cross-service-confused-deputy-prevention-examples"></a>

**このセクションでは、 AWS IoT ロール信頼ポリシーで `aws:SourceArn`および `aws:SourceAccount` グローバル条件コンテキストキーを使用して、混乱した代理問題を防ぐ方法の詳細な例を示します。**
+ [フリートプロビジョニング](#cross-service-confused-deputy-prevention-fleet-provision)
+ [JITP](#cross-service-confused-deputy-prevention-JITP)
+ [認証情報プロバイダー](#cross-service-confused-deputy-prevention-credential-provider)

### フリートプロビジョニング
<a name="cross-service-confused-deputy-prevention-fleet-provision"></a>

プロビジョニングテンプレートリソースを使用して[フリートプロビジョニング](https://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html)を設定できます。プロビジョニングテンプレートがプロビジョニングロールを参照する場合、そのロールの信頼ポリシーに `aws:SourceArn`および `aws:SourceAccount` 条件キーを含めることができます。これらのキーは、設定が `sts:AssumeRole` リクエストを呼び出すことができるリソースを制限します。

次の信頼ポリシーを持つロールは、`SourceArn` で指定されたプロビジョニングテンプレートの IoT プリンシパル (`iot.amazonaws.com`) によってのみ引き受けることができます。

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:provisioningtemplate/example_template"
        }
         }
      }
   ]
}
```

### JITP
<a name="cross-service-confused-deputy-prevention-JITP"></a>

[ジャストインタイムプロビジョニング (JITP)](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html) では、プロビジョニングテンプレートを CA とは別のリソースとして使用することも、テンプレート本文とロールを CA 証明書設定の一部として定義することもできます。 AWS IoT ロール信頼ポリシー`aws:SourceArn`の の値は、プロビジョニングテンプレートの定義方法によって異なります。

#### プロビジョニングテンプレートを別のリソースとして定義する
<a name="cross-service-confused-deputy-prevention-JITP-template"></a>

プロビジョニングテンプレートを別のリソースとして定義した場合、`aws:SourceArn` の値は `"arn:aws:iot:region:account-id:provisioningtemplate/example_template"` になります。[フリートプロビジョニング](#cross-service-confused-deputy-prevention-fleet-provision) では同じポリシーの例を利用できます。

#### CA 証明書でのプロビジョニングテンプレートの定義
<a name="cross-service-confused-deputy-prevention-JITP-CA"></a>

CA 証明書リソース内でプロビジョニングテンプレートを定義した場合、`aws:SourceArn` の値は `"arn:aws:iot:region:account-id:cacert/cert_id"` または `"arn:aws:iot:region:account-id:cacert/*"` になります。CA 証明書の ID などのリソース識別子が作成時に不明な場合は、ワイルドカードを使用できます。

次の信頼ポリシーを持つロールは、`SourceArn` で指定された CA 証明書の IoT プリンシパル (`iot.amazonaws.com`) によってのみ引き受けることができます。

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:cacert/8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e"
        }
         }
      }
   ]
}
```

CA 証明書を作成するときは、登録設定でプロビジョニングロールを参照できます。プロビジョニングロールの信頼ポリシーは、ロールを引き受けることができるリソースを制限するために `aws:SourceArn` を使用できます。ただし、CA 証明書を登録するための最初の [RegisterCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) 呼び出し中に、`aws:SourceArn` 条件に指定する CA 証明書の ARN はありません。

これを回避するには、つまり、 に登録されている特定の CA 証明書にプロビジョニングロールの信頼ポリシーを指定するには AWS IoT Core、以下を実行します。
+ まず、`RegistrationConfig` パラメータを指定せずに [RegisterCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) を呼び出します。
+ CA 証明書が に登録されたら AWS IoT Core、その証明書で [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) を呼び出します。

  UpdateCACertificate 呼び出しで、新しく登録された CA 証明書の ARN に `aws:SourceArn` が設定されたプロビジョニングロール信頼ポリシーを含む `RegistrationConfig` を指定します。

### 認証情報プロバイダー
<a name="cross-service-confused-deputy-prevention-credential-provider"></a>

[AWS IoT Core 認証情報プロバイダー](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html)の場合、 でロールエイリアスを作成する AWS アカウント のと同じ を使用し`aws:SourceAccount`、 でロールエイリアスリソースタイプのリソース ARN に一致するステートメントを指定します`aws:SourceArn`。 AWS IoT Core 認証情報プロバイダーで使用する IAM ロールを作成するときは、ロールを引き受ける必要があるロールエイリアスの ARNs を `aws:SourceArn`条件に含めて、クロスサービス`sts:AssumeRole`リクエストを承認する必要があります。

次の信頼ポリシーを持つロールは、 `SourceArn`で指定された roleAlias の AWS IoT Core 認証情報プロバイダー (`credentials.iot.amazonaws.com`) のプリンシパルのみが引き受けることができます。プリンシパルが `aws:SourceArn` 条件に指定されている以外のロールエイリアスの認証情報を取得しようとすると、その他のロールエイリアスが同じ IAM ロールを参照している場合でも、リクエストは拒否されます。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "credentials.iot.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:iot:us-east-1:123456789012:rolealias/example_rolealias"
        }
      }
    }
  ]
}
```

# AWS IoT Core ポリシーの例
<a name="example-iot-policies"></a>

このセクションのポリシーの例は、 AWS IoT Coreで一般的なタスクを完了するために使われるポリシードキュメントを説明しています。ソリューションのポリシーを作成している際、開始時の例としてそれらが使用できます。<a name="example-iot-policies-elements"></a>

このセクションの例では、次のポリシー要素が使用されています。
+ [AWS IoT Core ポリシーアクション](iot-policy-actions.md)
+ [AWS IoT Core アクションリソース](iot-action-resources.md)
+ [AWS IoT アイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)
+ [基本的な AWS IoT Core ポリシー変数](basic-policy-variables.md)
+ [X.509 証明書 AWS IoT Core ポリシー変数](cert-policy-variables.md)

**Topics**
+ [接続ポリシーの例](connect-policy.md)
+ [パブリッシュ/サブスクライブポリシーの例](pub-sub-policy.md)
+ [接続および公開ポリシーの例](connect-and-pub.md)
+ [保持されたメッセージポリシーの例](retained-message-policy-examples.md)
+ [証明書のポリシーの例](certificate-policy-examples.md)
+ [モノのポリシーの例](thing-policy-examples.md)
+ [基本的なジョブポリシーの例](basic-jobs-example.md)

# 接続ポリシーの例
<a name="connect-policy"></a>

次のポリシーは、クライアント IDs `client1`と への接続許可を拒否`client2`し AWS IoT Core、デバイスがクライアント ID を使用して接続できるようにします。クライアント ID は、 AWS IoT Core レジストリに登録され、接続に使用されるプリンシパルにアタッチされているモノの名前と一致します。

**注記**  
登録済みデバイスの場合、`Connect` アクションには[モノのポリシー変数](thing-policy-variables.md)を使用し、接続に使用されるプリンシパルにモノをアタッチすることをおすすめします。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/client1",
				"arn:aws:iot:us-east-1:123456789012:client/client2"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		}
	]
}
```

次のポリシーは、クライアント ID AWS IoT Core を使用して に接続するアクセス許可を付与します`client1`。このポリシーの例は、未登録のデバイス向けです。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/client1"
			]
		}
	]
}
```

## MQTT 永続セッションポリシーの例
<a name="persistent-sessions-examples"></a>

`connectAttributes` を使用すると、`PersistentConnect` や `LastWill` などの IAM ポリシーの接続メッセージで使用する属性を指定できます。詳細については、「[connectAttributes の使用](mqtt.md#connect-attribute)」を参照してください。

次のポリシーは、`PersistentConnect` 機能との接続を許可します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

次のポリシーでは `PersistentConnect` は許可されていませんが、他の機能は許可されています。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringNotEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

上記のポリシーは、`StringEquals` を使用して表現することもできます。新機能を含む他の機能はすべて許可されます。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1"
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

次のポリシーは、`PersistentConnect` と `LastWill` の両方による接続を許可します。その他の新機能は許可されません。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		}
	]
}
```

次のポリシーは、`LastWill` の有無にかかわらず、クライアントによるクリーン接続を許可します。他の機能は許可されません。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "iot:Connect"
        ],
        "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
        "Condition": {
            "StringEquals": {
                "iot:ConnectAttributes": "LastWill"
        }
        }
    }]
}
```

次のポリシーは、デフォルト機能を使用した接続のみを許可します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

次のポリシーでは、`PersistentConnect` を使用した接続のみが許可されます。接続が `PersistentConnect` を使用する限り、新しい機能はすべて許可されます。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

次のポリシーでは、接続には `PersistentConnect` と `LastWill` の両方の使用が必要であり、新機能は許可されないことが示されています。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

次のポリシーには、`PersistentConnect` を含めることはできませんが、`LastWill` を含めることはできます。その他の新機能は許可されません。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "iot:ConnectAttributes": [
                        "LastWill"
                    ]
            }
        }
        }
    ]
}
```

次のポリシーは、トピック `"my/lastwill/topicName"` と一緒に`LastWill` を持つクライアントによる接続のみを許可します。`LastWill` トピックを使用する限り、すべての機能が許可されます。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        }
    ]
}
```

次のポリシーは、特定の `LastWillTopic` を使用したクリーン接続のみを許可します。`LastWillTopic` を使用する限り、すべての機能が許可されます。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

# パブリッシュ/サブスクライブポリシーの例
<a name="pub-sub-policy"></a>

使用するポリシーは、接続方法によって異なります AWS IoT Core。MQTT クライアント、HTTP、または WebSocket AWS IoT Core を使用して に接続できます。MQTT クライアントを使用して接続すると、X.509 証明書で認証されます。HTTP または WebSocket プロトコルを使用して接続すると、署名バージョン 4 および Amazon Cognito で認証されます。

**注記**  
登録済みデバイスの場合、`Connect` アクションには[モノのポリシー変数](thing-policy-variables.md)を使用し、接続に使用されるプリンシパルにモノをアタッチすることをおすすめします。

**Topics**
+ [MQTT および AWS IoT Core ポリシーでのワイルドカード文字の使用](#pub-sub-policy-cert)
+ [特定のトピックとの間でメッセージを発行、サブスクライブ、および受信するためのポリシー](#pub-sub-specific-topic)
+ [特定のプレフィックスを持つトピックとの間でメッセージを発行、サブスクライブ、および受信するためのポリシー](#pub-sub-policy-specific-topic-prefix)
+ [各デバイスに固有のトピックの間でメッセージを発行、サブスクライブ、および受信するためのポリシー](#pub-sub-specific-topic-device)
+ [トピック名にモノ属性を含むトピックとの間でのメッセージの発行、サブスクライブ、受信に関するポリシー](#pub-sub-topic-attribute)
+ [トピック名のサブトピックへのメッセージの発行を拒否するポリシー](#pub-sub-deny-publish)
+ [トピック名のサブトピックからのメッセージの受信を拒否するポリシー](#pub-sub-deny-receive)
+ [MQTT ワイルドカード文字を使用してトピックにサブスクライブするポリシー](#pub-sub-topic-wildcard)
+ [HTTP および WebSocket クライアントのポリシー](#pub-sub-policy-cognito)

## MQTT および AWS IoT Core ポリシーでのワイルドカード文字の使用
<a name="pub-sub-policy-cert"></a>

MQTT ポリシーと AWS IoT Core ポリシーではワイルドカード文字が異なるため、慎重に検討した上で選択する必要があります。MQTT では、ワイルドカード文字 `+`と `#`が [MQTT トピックフィルター](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html#topicfilters)で使用され、複数のトピック名をサブスクライブします。 AWS IoT Core ポリシーは `*` と をワイルドカード文字`?`として使用し、[IAM ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-json)の規則に従います。ポリシードキュメントでは、`*` は任意の文字の組み合わせを表し、疑問符 `?` は任意の 1 文字を表します。ポリシードキュメントでは、MQTT ワイルドカード文字である `+` と `#` は、特別な意味を持たないこれらの文字として扱われます。ポリシーの `resource` 属性に複数のトピック名とトピックフィルターを記述するには、MQTT ワイルドカード文字の代わりに `*` と `?` ワイルドカード文字を使用します。

ポリシードキュメントで使用するワイルドカード文字を選択するとき、`*` 文字は、単一のトピックレベルに限定されないことを考慮してください。`+` 文字は、MQTT トピックフィルターの 1 つのトピックレベルに制限されます。ワイルドカードの仕様を単一の MQTT トピックフィルターレベルに制約するには、複数の `?` 文字の使用を検討してください。ポリシーリソースでのワイルドカード文字の使用、およびワイルドカード文字が一致するその他の例については、「[リソース ARN でのワイルドカードの使用](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_resource.html#reference_policies_elements_resource_wildcards)」を参照してください。

次の表は、MQTT で使用されるさまざまなワイルドカード文字と MQTT クライアントの AWS IoT Core ポリシーを示しています。


| ワイルドカード文字 | MQTT のワイルドカード文字 | MQTT での例 |  AWS IoT Core ポリシーのワイルドカード文字 | MQTT クライアントの AWS IoT Core ポリシーの例 | 
| --- | --- | --- | --- | --- | 
| \$1 | はい | some/\$1 | いいえ | 該当なし | 
| \$1 | はい | some/\$1/topic | いいえ | 該当なし | 
| \$1 | いいえ | 該当なし | はい | `topicfilter/some/*/topic` `topicfilter/some/sensor*/topic`  | 
| ? | いいえ | 該当なし | はい |  `topic/some/?????/topic` `topicfilter/some/sensor???/topic`  | 

## 特定のトピックとの間でメッセージを発行、サブスクライブ、および受信するためのポリシー
<a name="pub-sub-specific-topic"></a>

以下に、登録済みデバイスと未登録デバイスで、「some\$1speciic\$1topic」という名前のトピックとの間でメッセージを発行、サブスクライブ、受信する例を示します。例では、`Publish` と `Receive` がリソースとして「トピック」を使用し、`Subscribe` がリソースとして「トピックフィルター」を使用することも強調しています。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。また、「some\$1specific\$1topic」という名前のトピックに対する `Publish`、`Subscribe`、および `Receive` のアクセス許可も提供します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。また、「some\$1specific\$1topic」という名前のトピックに対する `Publish`、`Subscribe`、および `Receive` のアクセス許可も提供します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        }
    ]
}
```

------

## 特定のプレフィックスを持つトピックとの間でメッセージを発行、サブスクライブ、および受信するためのポリシー
<a name="pub-sub-policy-specific-topic-prefix"></a>

以下に、登録済みデバイスと未登録デバイスで、「topic\$1prefix」というプレフィックスが付いたトピックとの間でメッセージを発行、サブスクライブ、受信する例を示します。

**注記**  
この例では、ワイルドカード文字 `*` を使用することに注意してください。`*` は、1 つのステートメントで複数のトピック名にアクセス許可を与えるのに便利ですが、必要以上の権限をデバイスに与えると、意図しない結果につながる可能性があります。そのため、慎重に検討したうえで、ワイルドカード文字 `*` のみを使用することをお勧めします。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。また、「some\$1specific\$1topic」というプレフィックスが付いたトピックに対する `Publish`、`Subscribe`、および `Receive` のアクセス許可も提供します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。また、「some\$1specific\$1topic」というプレフィックスが付いたトピックに対する `Publish`、`Subscribe`、および `Receive` のアクセス許可も提供します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish",
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
            ]
        }
    ]
}
```

------

## 各デバイスに固有のトピックの間でメッセージを発行、サブスクライブ、および受信するためのポリシー
<a name="pub-sub-specific-topic-device"></a>

以下は、登録済みデバイスと未登録デバイスで、特定のデバイスに固有のトピックとの間でメッセージの発行、サブスクライブ、および受信を行う例を示しています。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。これにより、モノ固有のトピック (`sensor/device/${iot:Connection.Thing.ThingName}`) への発行、モノ固有のトピック (`command/device/${iot:Connection.Thing.ThingName}`) との間でサブスクライブおよび受信を行う許可が提供されます。レジストリ内のモノの名前が「thing1」の場合、デバイスは「sensor/device/thing1」トピックに発行できます。また、デバイスは「command/device/thing1」トピックにサブスクライブして受信することもできます。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。これにより、クライアント固有のトピック (`sensor/device/${iot:ClientId}`) への発行、クライアント固有のトピック (`command/device/${iot:ClientId}`) との間でサブスクライブおよび受信を行う許可が提供されます。デバイスが clientId1 として clientId で接続すると、トピック「sensor/device/clientId1」に発行できるようになります。デバイスは、トピック `device/clientId1/command` にサブスクライブして から受信することもできます。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

------

## トピック名にモノ属性を含むトピックとの間でのメッセージの発行、サブスクライブ、受信に関するポリシー
<a name="pub-sub-topic-attribute"></a>

以下に、登録済みデバイスが、名前にモノの属性を含むトピックとの間でメッセージを発行、サブスクライブ、受信する例を示します。

**注記**  
モノの属性は、 AWS IoT Core レジストリに登録されているデバイスにのみ存在します。未登録のデバイスに対応する例はありません。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。これにより、トピック (`sensor/${iot:Connection.Thing.Attributes[version]}`) への発行、トピック (`command/${iot:Connection.Thing.Attributes[location]}`) との間でのサブスクライブと受信を許可します。トピック名にはモノの属性が含まれます。レジストリ内のモノの名前に `version=v1` と `location=Seattle` がある場合、デバイスはトピック「sensor/v1」に発行し、トピック「command/Seattle」との間でサブスクライブして受信することができます。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/${iot:Connection.Thing.Attributes[version]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/${iot:Connection.Thing.Attributes[location]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/${iot:Connection.Thing.Attributes[location]}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

モノの属性は AWS IoT Core のレジストリに登録されているデバイスにしか存在しないため、未登録のモノに対応する例はありません。

------

## トピック名のサブトピックへのメッセージの発行を拒否するポリシー
<a name="pub-sub-deny-publish"></a>

以下は、登録済みデバイスと未登録デバイスで、特定のサブトピックを除くすべてのトピックにメッセージを発行する例を示しています。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。「department/」というプレフィックスが付いているすべてのトピックには発行できますが、「department/admins」サブトピックには発行できません。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/*"
			]
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/admins"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。「department/」というプレフィックスが付いているすべてのトピックには発行できますが、「department/admins」サブトピックには発行できません。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/admins"
            ]
        }
    ]
}
```

------

## トピック名のサブトピックからのメッセージの受信を拒否するポリシー
<a name="pub-sub-deny-receive"></a>

以下に、登録済みデバイスと未登録デバイスで、特定のサブトピックを除く特定のプレフィックスを持つトピックをサブスクライブしたり、トピックからメッセージを受信したりする例を示します。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。このポリシーにより、デバイスは「topic\$1prefix」というプレフィックスが付いた任意のトピックをサブスクライブできます。`iot:Receive` のステートメントで `NotResource` を使用すると、「topic\$1prefix/restricted」というプレフィックスが付いたトピックを除いて、デバイスがサブスクライブしているすべてのトピックからのメッセージをデバイスが受信できるようになります。例えば、このポリシーでは、デバイスは「topic\$1prefix/topic1」や「topic\$1prefix/restricted」をサブスクライブできますが、トピック「topic\$1prefix/topic1」からのメッセージのみを受信し、トピック「topic\$1prefix/restricted」からのメッセージは受信しません。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。このポリシーにより、デバイスは「topic\$1prefix」というプレフィックスが付いた任意のトピックをサブスクライブできます。`iot:Receive` のステートメントで `NotResource` を使用すると、「topic\$1prefix/restricted」というプレフィックスが付いたトピックを除いて、デバイスがサブスクライブしているすべてのトピックからのメッセージをデバイスが受信できるようになります。例えば、このポリシーでは、デバイスは「topic\$1prefix/topic1」と「topic\$1prefix/restricted」をサブスクライブできます。ただし、トピック「topic\$1prefix/topic1」からのメッセージのみを受信し、トピック「topic\$1prefix/restricted」からのメッセージは受信しません。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
        }
    ]
}
```

------

## MQTT ワイルドカード文字を使用してトピックにサブスクライブするポリシー
<a name="pub-sub-topic-wildcard"></a>

MQTT ワイルドカード文字 \$1 と \$1 はリテラル文字列として扱われますが、 AWS IoT Core ポリシーで使用するとワイルドカードとして扱われません。MQTT では、\$1 と \$1 はトピックフィルターに登録する場合にのみワイルドカードとして扱われ、それ以外のコンテキストではリテラル文字列として扱われます。これらの MQTT ワイルドカードは、慎重に検討した後、 AWS IoT Core ポリシーの一部としてのみ使用することをお勧めします。

 AWS IoT Core ポリシーで MQTT ワイルドカードを使用する登録済みおよび未登録のモノの例を次に示します。これらのワイルドカードはリテラル文字列として扱われます。

------
#### [ Registered devices ]

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスはレジストリ内のモノの名前と一致する clientId に接続できます。このポリシーにより、デバイスは「department/\$1/employees」と「location/\$1」のトピックをサブスクライブできるようになります。\$1 と \$1 は、 AWS IoT Core ポリシーではリテラル文字列として扱われるため、デバイスは「department/\$1/employees」というトピックにはサブスクライブできますが、「department/engineering/employees」のトピックにはサブスクライブできません。同様に、デバイスはトピック「location/\$1」をサブスクライブできますが、「location/Seattle」というトピックには登録できません。ただし、デバイスが「department/\$1/employees」というトピックに登録すると、ポリシーにより、「department/engineering/employees」というトピックからのメッセージを受信できるようになります。同様に、デバイスが「location/\$1」というトピックをサブスクライブすると、「location/Seattle」というトピックからのメッセージも受信するようになります。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーにより、デバイスは clientId1, clientId2または clientId3 のいずれかを使用して接続できます。このポリシーにより、デバイスは「department/\$1/employees」と「location/\$1」のトピックをサブスクライブできるようになります。\$1 と \$1 は、 AWS IoT Core ポリシーではリテラル文字列として扱われるため、デバイスは「department/\$1/employees」というトピックにはサブスクライブできますが、「department/engineering/employees」のトピックにはサブスクライブできません。同様に、デバイスはトピック「ロケーション/\$1」をサブスクライブできますが、「ロケーション/シアトル」はサブスクライブできません。ただし、デバイスが「department/\$1/employees」というトピックに登録すると、ポリシーにより、「department/engineering/employees」というトピックからのメッセージを受信できるようになります。同様に、デバイスが「location/\$1」というトピックをサブスクライブすると、「location/Seattle」というトピックからのメッセージも受信するようになります。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
        }
    ]
}
```

------

## HTTP および WebSocket クライアントのポリシー
<a name="pub-sub-policy-cognito"></a>

HTTP または WebSocket プロトコルを使用して接続すると、署名バージョン 4 および Amazon Cognito で認証されます。Amazon Cognito ID は、認証されている場合と認証されていない場合があります。認証された ID は任意のサポートされている認証プロバイダーで認証されたユーザーに属します。認証されていない ID は、通常、ID プロバイダーで認証しないゲストユーザーに属します。Amazon Cognito は、認証されていない ID をサポートするために一意の識別子と AWS 認証情報を提供します。詳細については、「[Amazon Cognito ID を使用した承認](cog-iot-policies.md)」を参照してください。

以下のオペレーションでは、 `AttachPolicy` API を介して Amazon Cognito ID にアタッチされた AWS IoT Core ポリシー AWS IoT Core を使用します。これにより、認証された ID を持つ Amazon Cognito アイデンティティプールにアタッチされたアクセス許可がスコープダウンされます。
+ `iot:Connect`
+ `iot:Publish`
+ `iot:Subscribe`
+ `iot:Receive`
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

つまり、Amazon Cognito ID には IAM ロールポリシーと AWS IoT Core ポリシーからのアクセス許可が必要です。API を使用して、IAM ロールポリシーをプールにアタッチし、 AWS IoT Core ポリシーを Amazon Cognito ID にアタッチします AWS IoT Core `AttachPolicy`。

認証されたユーザーと未認証のユーザーは、異なる ID タイプです。 AWS IoT ポリシーを Amazon Cognito ID にアタッチしない場合、認証されたユーザーが AWS IoT での認可に失敗し、 AWS IoT リソースとアクションにアクセスできません。

**注記**  
他の AWS IoT Core オペレーションや認証されていない ID の場合、 AWS IoT Core は Amazon Cognito ID プールロールにアタッチされたアクセス許可の範囲を絞り込みません。認証済みの ID と非認証の ID の両方に対して、これは、Amazon Cognito プールのロールにアタッチすることをお勧めする最も緩いポリシーです。

**HTTP**

非認証の Amazon Cognito ID が Amazon Cognito ID に固有のトピックで HTTP を介してメッセージを発行できるようにするには、Amazon Cognito ID プールロールに以下の IAM ポリシーをアタッチします。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"
            ]
        }
    ]
}
```

認証されたユーザーを許可するには、 AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html) API を使用して、前述のポリシーを Amazon Cognito ID プールロールと Amazon Cognito ID にアタッチします。

**注記**  
Amazon Cognito ID を承認する場合、 は両方のポリシー AWS IoT Core を検討し、指定された最小限の権限を付与します。アクションは、両方のポリシーで要求されたアクションが許可されている場合にのみ許可されます。いずれかのポリシーでアクションが許可されていない場合、そのアクションは許可されません。

**MQTT**

非認証の Amazon Cognito ID がアカウントで Amazon Cognito ID に固有のトピックで WebSockets を介して MQTT メッセージをパブリッシュできるようにするには、Amazon Cognito ID プールロールに以下の IAM ポリシーをアタッチします。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${cognito-identity.amazonaws.com:sub}"]
        }
    ]
}
```

認証されたユーザーを許可するには、 AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html) API を使用して、前述のポリシーを Amazon Cognito ID プールロールと Amazon Cognito ID にアタッチします。

**注記**  
Amazon Cognito ID を承認するときは、 と の両方 AWS IoT Core を考慮し、指定された最小限の権限を付与します。アクションは、両方のポリシーで要求されたアクションが許可されている場合にのみ許可されます。いずれかのポリシーでアクションが許可されていない場合、そのアクションは許可されません。

# 接続および公開ポリシーの例
<a name="connect-and-pub"></a>

 AWS IoT Core レジストリでモノとして登録されたデバイスの場合、次のポリシーは、モノの名前に一致するクライアント ID AWS IoT Core を使用して に接続するアクセス許可を付与し、デバイスをクライアント ID またはモノの名前固有の MQTT トピックへの発行に制限します。接続を成功させるには、モノの名前を AWS IoT Core レジストリに登録し、モノにアタッチされた ID またはプリンシパルを使用して認証する必要があります。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
      ]
    }
  ]
}
```

 AWS IoT Core レジストリにモノとして登録されていないデバイスの場合、次のポリシーはクライアント ID AWS IoT Core を使用して に接続するアクセス許可を付与`client1`し、デバイスを clientID 固有の MQTT トピックでの発行に制限します。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/${iot:ClientId}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:client/client1"
      ]
    }
  ]
}
```

# 保持されたメッセージポリシーの例
<a name="retained-message-policy-examples"></a>

[保持されているメッセージ](mqtt.md#mqtt-retain)の使用には、特定のポリシーが必要です。保持メッセージは、RETAIN フラグを設定して発行され、 によって保存される MQTT メッセージです AWS IoT Core。このセクションでは、保持されたメッセージの一般的な使用を許可するポリシーの例を紹介します。

**Topics**
+ [保持されたメッセージを接続して発行するためのポリシー](#retained-message-policy-examples-publish)
+ [保持された Will メッセージを接続して発行するためのポリシー](#retained-message-policy-examples-publish-lwt)
+ [保持されたメッセージを一覧表示して取得するためのポリシー](#retained-message-policy-examples-list-get)

## 保持されたメッセージを接続して発行するためのポリシー
<a name="retained-message-policy-examples-publish"></a>

デバイスが保持されたメッセージを発行するには、デバイスが、接続、発行 (任意のMQTTメッセージ)、そして保持されたMQTTメッセージを発行できる必要があります。次のポリシーにより、トピックに対するアクセス権限が付与されます。クライアント**device1**に`device/sample/configuration`。接続のアクセス許可を付与する別の例については、[接続および公開ポリシーの例](connect-and-pub.md)を参照。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/device/sample/configuration"
			]
		}
	]
}
```

## 保持された Will メッセージを接続して発行するためのポリシー
<a name="retained-message-policy-examples-publish-lwt"></a>

クライアントは、クライアント AWS IoT Core が予期せず切断したときに発行するメッセージを設定できます。MQTT はこのようなメッセージを[*ウィル*メッセージ](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag)と呼びます。それらを包括するために、クライアントは、接続許可に追加して追加条件を持つ必要があります。

次のポリシードキュメントは、 AWS IoT Core も保持するであろうトピック`will`により明確になった Will メッセージに接続発行する権限をすべてのクライアントに付与します。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			],
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/will"
			]
		}
	]
}
```

## 保持されたメッセージを一覧表示して取得するためのポリシー
<a name="retained-message-policy-examples-list-get"></a>

サービスとアプリケーションは、MQTT クライアントをサポートしなくても、[https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html)および[https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html)を呼び出す事によって保持されたメッセージにアクセスする事ができます。これらのアクションを呼び出すサービスとアプリケーションは、次の例のようなポリシーを使用して認証される必要があります。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:ListRetainedMessages"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/device1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:GetRetainedMessage"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/foo"
            ]
        }
    ]
}
```

# 証明書のポリシーの例
<a name="certificate-policy-examples"></a>

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーは、モノの名前に一致するクライアント ID AWS IoT Core で に接続し、デバイスが自身を認証するために使用した証明書`certificateId`の と名前が等しいトピックに発行するアクセス許可を付与します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:CertificateId}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        }
    ]
}
```

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーは、クライアント IDs、、`client3`および AWS IoT Core を使用して に接続し`client1``client2`、デバイスが自身を認証するために使用した証明書`certificateId`の と名前が等しいトピックに発行するアクセス許可を付与します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:CertificateId}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーは、モノの名前に一致するクライアント ID AWS IoT Core で に接続し、デバイスが自身を認証するために使用した証明書のサブジェクト`CommonName`フィールドと名前が等しいトピックに発行するアクセス許可を付与します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.CommonName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        }
    ]
}
```

**注記**  
この例では、証明書のサブジェクト共通名が、サブジェクト共通名が登録された各証明書に対して一意であることを前提にして、トピック ID として使用されます。複数のデバイス間で証明書が共有されている場合、サブジェクト共通名は、その証明書を共有するすべてのデバイスで同じになります。したがって、複数のデバイスの同じトピックに発行する権限が許可されます (推奨されません)。

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーは、クライアント IDs、、`client3`および `client1` AWS IoT Core を使用して に接続し`client2`、デバイスが自身を認証するために使用した証明書のサブジェクト`CommonName`フィールドと名前が等しいトピックに発行するアクセス許可を付与します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.CommonName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

**注記**  
この例では、証明書のサブジェクト共通名が、サブジェクト共通名が登録された各証明書に対して一意であることを前提にして、トピック ID として使用されます。複数のデバイス間で証明書が共有されている場合、サブジェクト共通名は、その証明書を共有するすべてのデバイスで同じになります。したがって、複数のデバイスの同じトピックに発行する権限が許可されます (推奨されません)。

 AWS IoT Core レジストリに登録されたデバイスの場合、次のポリシーは、モノの名前に一致するクライアント ID AWS IoT Core で に接続し、デバイスの認証に使用される証明書の`Subject.CommonName.2`フィールドが に設定されている場合`admin/`、名前のプレフィックスが であるトピックに発行するアクセス許可を付与します`Administrator`。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーは、クライアント IDs `client1`、、`client3`および AWS IoT Core を使用して に接続し`client2`、デバイスの認証に使用される証明書の `Subject.CommonName.2`フィールドが に設定されている`admin/`ときに、名前のプレフィックスが であるトピックに発行するアクセス許可を付与します`Administrator`。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーにより、デバイスがモノの名前を使用して、デバイスの認証に使用される証明書の`Subject.CommonName`フィールドのいずれかが に設定されている`ThingName`場合に、 `admin/`が続く特定のトピックに発行できます`Administrator`。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/${iot:Connection.Thing.ThingName}"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーは、デバイスの認証に使用される証明書の`Subject.CommonName`フィールドのいずれかが に設定されている`admin`場合に、クライアント IDs `client1`、`client2`、`client3`および AWS IoT Core で に接続してトピックに発行するアクセス許可を付与します`Administrator`。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

# モノのポリシーの例
<a name="thing-policy-examples"></a>

次のポリシーでは、 で認証に使用される証明書 AWS IoT Core が、ポリシーが評価されているモノにアタッチされている場合、デバイスが接続することを許可します。

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {  
            "Effect":"Allow",
            "Action":["iot:Connect"],
            "Resource":[ "*" ],
            "Condition": {
                "Bool": {
                    "iot:Connection.Thing.IsAttached": ["true"]
            }
        }
        }
    ]
}
```

以下のポリシーでは、証明書が特定のモノのタイプを持つモノにアタッチされ、そのモノが値 `attributeValue` を持つ `attributeName` の属性を持つ場合、デバイスの公開を許可します。モノのポリシー変数の詳細については、[[Thing policy variables]](thing-policy-variables.md) (モノのポリシー変数) を参照してください。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/device/stats",
      "Condition": {
        "StringEquals": {
          "iot:Connection.Thing.Attributes[attributeName]": "attributeValue",
          "iot:Connection.Thing.ThingTypeName": "Thing_Type_Name"
        },
        "Bool": {
          "iot:Connection.Thing.IsAttached": "true"
        }
      }
    }
  ]
}
```

次のポリシーでは、デバイスはモノの属性で始まるトピックにパブリッシュすることができます。デバイス証明書がモノに関連付けられていない場合、この変数は解決されず、アクセス拒否エラーが発生します。モノのポリシー変数の詳細については、[[Thing policy variables]](thing-policy-variables.md) (モノのポリシー変数) を参照してください。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.Attributes[attributeName]}/*"
    }
  ]
}
```

# 基本的なジョブポリシーの例
<a name="basic-jobs-example"></a>

このサンプルでは、単一のデバイスであるジョブターゲットがジョブリクエストを受信し、ジョブ実行ステータスを AWS IoTと通信するために必要なポリシーステートメントについて説明します。

*us-west-2:57EXAMPLE833* を AWS リージョン、コロン文字 (:)、12 桁の AWS アカウント 数字に置き換え、*uniqueThingName* をデバイスを表すモノのリソースの名前に置き換えます AWS IoT。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:client/uniqueThingName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/job/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iotjobsdata:DescribeJobExecution",
                "iotjobsdata:GetPendingJobExecutions",
                "iotjobsdata:StartNextPendingJobExecution",
                "iotjobsdata:UpdateJobExecution"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName"
            ]
        }
    ]
}
```

# Amazon Cognito ID を使用した承認
<a name="cog-iot-policies"></a>

Amazon Cognito ID には、未認証と認証済みの 2 種類あります。アプリが認証されていない Amazon Cognito ID をサポートしている場合、認証が実行されないため、ユーザーが誰であるかを知りません。

**認証されていない ID:** 認証されていない Amazon Cognito ID の場合、認証されていない ID プールに IAM ロールをアタッチしてアクセス許可を付与します。不明なユーザーが使用できるようにするそれらのリソースにのみアクセスを許可する必要があります。

**重要**  
認証されていない Amazon Cognito ユーザーが に接続する場合は AWS IoT Core、IAM ポリシーで非常に制限されたリソースへのアクセスを許可することをお勧めします。

**認証された ID:** 認証された Amazon Cognito ID には、2 つの場所でアクセス許可を指定する必要があります。
+ 認証された Amazon Cognito ID に IAM ポリシーをアタッチし、
+ Amazon Cognito ID (認証済みユーザー) に AWS IoT Core ポリシーをアタッチします。

## に接続する認証されていない Amazon Cognito ユーザーのポリシー例 AWS IoT Core
<a name="cog-iot-policies-auth-unauth-examples"></a>

次の例は、Amazon Cognito ID の IAM ポリシーと IoT ポリシーの両方におけるアクセス許可を示しています。認証されたユーザーは、デバイス固有のトピック (デバイス/DEVICE\$1ID/ステータスなど) に公開したいと考えています。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/Client_ID"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/device/Device_ID/status"
            ]
        }
    ]
}
```

次の例は、Amazon Cognito の認証されていないロールの IAM ポリシー内のアクセス許可を示しています。認証されていないユーザーは、認証を必要としない非デバイス固有のトピックに発行したいと考えています。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/non_device_specific_topic"
            ]
        }
    ]
}
```

## GitHub の例
<a name="cog-iot-policies-github"></a>

次の GitHub でのウェブアプリケーションの例は、認証されたユーザーへのポリシーの添付をユーザーのサインアップと認証プロセスに組み込む方法を示しています。
+ [AWS Amplify と を使用した MQTT パブリッシュ/サブスクライブ React ウェブアプリケーション AWS IoT Device SDK for JavaScript](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp)
+ [AWS Amplify、、 AWS IoT Device SDK for JavaScriptおよび Lambda 関数を使用した MQTT パブリッシュ/サブスクライブ React ウェブアプリケーション](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda)

Amplify は、 サービスと統合するウェブおよびモバイルアプリケーションの構築に役立つ一連のツールと AWS サービスです。Amplify の詳細については、[Amplify Framework Documentation](https://docs.amplify.aws/) を参照してください。

どちらの例でも、次の手順を実行します。

1. ユーザーがアカウントにサインアップすると、アプリケーションが Amazon Cognito ユーザープールおよび ID を作成します。

1. ユーザーが認証されると、アプリケーションがポリシーを作成し、ID にアタッチします。これにより、ユーザーは発行およびサブスクライブのアクセス許可を与えられます。

1. ユーザーは、アプリケーションを使用して MQTT トピックを発行およびサブスクライブできます。

最初の例では、認証オペレーション内で直接 `AttachPolicy` API オペレーションを使用します。次の例は、Amplify および AWS IoT Device SDK for JavaScriptを使用する React ウェブアプリケーション内に、この API コールを実装する方法を示しています。

```
function attachPolicy(id, policyName) {
    var Iot = new AWS.Iot({region: AWSConfiguration.region, apiVersion: AWSConfiguration.apiVersion, endpoint: AWSConfiguration.endpoint});
    var params = {policyName: policyName, target: id};

    console.log("Attach IoT Policy: " + policyName + " with cognito identity id: " + id);
    Iot.attachPolicy(params, function(err, data) {
         if (err) {
               if (err.code !== 'ResourceAlreadyExistsException') {
                  console.log(err);
               }
          }
         else  {
            console.log("Successfully attached policy with the identity", data);
         }
     });
}
```

このコードは、[AuthDisplay.js](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp/blob/d1c307b36357be934db9dda020140fa337709cd9/src/AuthDisplay.js#L45) ファイルに表示されます。

2 番目の例では、Lambda 関数に `AttachPolicy` API オペレーションを実装します。次の例は、Lambda がこの API コールを使用する方法を示しています。

```
iot.attachPolicy(params, function(err, data) {
     if (err) {
           if (err.code !== 'ResourceAlreadyExistsException') {
              console.log(err);
              res.json({error: err, url: req.url, body: req.body});
           }
      }
     else  {
        console.log(data);
        res.json({success: 'Create and attach policy call succeed!', url: req.url, body: req.body});
     }
 });
```

このコードは、[app.js](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda/blob/e493039581d2aff0faa3949086deead20a2c5385/amplify/backend/function/amplifyiotlambda/src/app.js#L50) ファイルの `iot.GetPolicy` 関数内に表示されます。

**注記**  
Amazon Cognito ID プールを介して取得した AWS 認証情報を使用して関数を呼び出すと、Lambda 関数のコンテキストオブジェクトに の値が含まれます`context.cognito_identity_id`。詳細については、以下を参照してください。  
[AWS Lambda Node.js のコンテキストオブジェクト](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html)
[AWS Lambda Python のコンテキストオブジェクト](https://docs.aws.amazon.com/lambda/latest/dg/python-context.html)
[AWS Lambda Ruby のコンテキストオブジェクト](https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html)
[AWS Lambda Java のコンテキストオブジェクト](https://docs.aws.amazon.com/lambda/latest/dg/java-context.html)
[AWS Lambda Go のコンテキストオブジェクト](https://docs.aws.amazon.com/lambda/latest/dg/golang-context.html)
[AWS Lambda C\$1 のコンテキストオブジェクト](https://docs.aws.amazon.com/lambda/latest/dg/csharp-context.html)
[AWS Lambda PowerShell のコンテキストオブジェクト](https://docs.aws.amazon.com/lambda/latest/dg/powershell-context.html)

# AWS IoT Core 認証情報プロバイダーを使用した AWS サービスへの直接呼び出しの許可
<a name="authorizing-direct-aws"></a>

デバイスは X.509 証明書を使用して、TLS 相互認証プロトコル AWS IoT Core を使用して に接続できます。他の AWS サービスは証明書ベースの認証をサポートしていませんが、[AWS 署名バージョン 4 形式の](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) AWS 認証情報を使用して呼び出すことができます。[署名バージョン 4 アルゴリズム](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)では、通常、呼び出し元にアクセスキー ID とシークレットアクセスキーが必要です。 には、組み込みの [X.509 証明書](x509-client-certs.html)を一意のデバイス ID として使用して AWS リクエストを認証できる認証情報プロバイダー AWS IoT Core があります。これによって、デバイスにアクセスキー ID およびシークレットアクセスキーを保存する必要がなくなります。

認証情報プロバイダーは、X.509 証明書を使用して発信者を認証し、一時的で制限された権限のセキュリティトークンを発行します。トークンは、任意の AWS リクエストに署名して認証するために使用できます。この方法で AWS リクエストを認証するには、 [AWS Identity and Access Management (IAM) ロール](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles.html)を作成して設定し、適切な IAM ポリシーをロールにアタッチして、認証情報プロバイダーがユーザーに代わってロールを引き受けられるようにする必要があります。 AWS IoT Core と IAM の詳細については、[の ID とアクセスの管理 AWS IoT](security-iam.md) を参照してください。

 AWS IoT では、デバイスが [Server Name Indication (SNI) 拡張機能](https://www.rfc-editor.org/rfc/rfc3546#section-3.1)を Transport Layer Security (TLS) プロトコルに送信し、 `host_name`フィールドに完全なエンドポイントアドレスを指定する必要があります。`host_name` フィールドには、呼び出すエンドポイントが含まれている必要があります。次のようになる必要があります。
+ `aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:CredentialProvider` によって返される `endpointAddress`。

正しい `host_name` 値を持たないデバイスによって試行された接続は失敗します。

次の図は認証情報プロバイダーのワークフローを示しています。

![\[AWS IoT Core 認証情報プロバイダーのワークフロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/credentials-provider-diagram.png)


1.  AWS IoT Core デバイスは、セキュリティトークンの認証情報プロバイダーに HTTPS リクエストを行います。このリクエストには、認証のためのデバイスの X.509 証明書が含まれています。

1. 認証情報プロバイダーは AWS IoT Core 認証および認可モジュールにリクエストを転送して証明書を検証し、デバイスにセキュリティトークンをリクエストする権限があることを検証します。

1. 証明書が有効であり、セキュリティトークンをリクエストする許可がある場合、 AWS IoT Core 認証および認可モジュールは成功を返します。それ以外の場合は、デバイスに例外が送信されます。

1. 証明書の検証が成功したら、認証情報プロバイダーは [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) を呼び出して、そのために作成した IAM ロールを引き受けます。

1. AWS STS は、権限が制限された一時的なセキュリティトークンを認証情報プロバイダーに返します。

1. 認証情報プロバイダーは、デバイスにセキュリティトークンを返します。

1. デバイスはセキュリティトークンを使用して、署名バージョン 4 で AWS AWS リクエストに署名します。

1. リクエストされたサービスは IAM を呼び出して署名を検証し、認証情報プロバイダーに作成した IAM ロールにアタッチされたアクセスポリシーに対するリクエストを認可します。

1. IAM が署名の検証に成功してリクエストを認可したら、リクエストは成功します。それ以外の場合、IAM は例外を送信します。

次のセクションでは、証明書を使用してセキュリティトークンを取得する方法を説明します。これは、すでに[デバイスが登録され](register-device.html)、そのデバイスに[独自の証明書を作成して有効化している](device-certs-your-own.html)ことを前提に記述されています。

## 証明書を使用してセキュリティトークンを取得する方法
<a name="authorizing-direct-aws.walkthrough"></a>

1. デバイスに代わって認証情報プロバイダーが引き受ける IAM ロールを設定します。次の信頼ポリシーをロールにアタッチします。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Principal": {"Service": "credentials.iot.amazonaws.com"},
           "Action": "sts:AssumeRole"
       }
   }
   ```

   呼び出す AWS サービスごとに、ロールにアクセスポリシーをアタッチします。認証情報プロバイダーは次のポリシー変数をサポートしています。
   + `credentials-iot:ThingName`
   + `credentials-iot:ThingTypeName`
   + `credentials-iot:AwsCertificateId`

   デバイスが AWS サービスへのリクエストでモノの名前を提供すると、認証情報プロバイダーは `credentials-iot:ThingName` および `credentials-iot:ThingTypeName` をコンテキスト変数としてセキュリティトークンに追加します。デバイスがリクエストでモノの名前を提供していなくても、認証情報プロバイダーは `credentials-iot:AwsCertificateId` をコンテキスト変数として提供します。`x-amzn-iot-thingname` HTTP リクエストヘッダーの値としてモノの名前を渡します。

   上記の 3 つの変数は IAM ポリシーのみで機能し、 AWS IoT Core ポリシーには使用できません。

1. 次のステップ (ロールエイリアスの作成) を実行するユーザーに新しく作成したロールを AWS IoT Coreに渡す権限があることを確認します。次のポリシーは`iam:GetRole`、 と の両方の`iam:PassRole`アクセス許可を AWS ユーザーに付与します。`iam:GetRole` アクセス許可は、今作成したロールに関する情報をユーザーが取得できるようにします。アクセス`iam:PassRole`許可により、ユーザーはロールを別の AWS サービスに渡すことができます。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": [
               "iam:GetRole",
               "iam:PassRole"
           ],
           "Resource": "arn:aws:iam::123456789012:role/your role name"
       }
   }
   ```

1.  AWS IoT Core ロールエイリアスを作成します。 AWS サービスへの直接呼び出しを行うデバイスは、 への接続時に使用するロール ARN を認識する必要があります AWS IoT Core。ロールの ARN のロールをハードコーディングすることは、ロールの ARN が変わるたびにデバイスを更新する必要があるため、良いソリューションではありません。`CreateRoleAlias` API を使用してロールの ARN を指し示すロールエイリアスを作成することが、より優れたソリューションです。ロールの ARN が変更された場合には、ロールエイリアスを更新だけです。デバイスに変更を加える必要はありません。この API には以下のパラメータがあります。  
`roleAlias`  
必須。ロールのエイリアスを識別する任意の文字列。これは、ロールエイリアスデータモデルのプライマリキーとして機能します。これには 1 \$1 128 文字を使用でき、英数字および =、@、- 記号のみを含めることができます。大文字および小文字のアルファベット文字を使用できます。ロールエイリアス名では、大文字と小文字が区別されます。  
`roleArn`  
必須。ロールエイリアスが参照するロールの ARN。  
`credentialDurationSeconds`  
オプション。認証情報が有効な時間 (秒単位) です。最小値は 900 秒 (15 分) です。最大値は 43,200 秒 (12 時間) です。デフォルト値は 3,600 秒 (1 時間) です。  
 AWS IoT Core 認証情報プロバイダーは、最大有効期間が 43,200 秒 (12 時間) の認証情報を発行できます。認証情報を最大 12 時間まで有効にすると、クレデンシャルを長くキャッシュすることで、クレデンシャルプロバイダーへの呼び出し回数を減らすことができます。  
`credentialDurationSeconds` 値は、ロールのエイリアスが参照する IAM ロールの最長セッション時間と同じかそれ以下である必要があります。詳細については、「 Identity and Access Management ユーザーガイド」の「[Modifying a role maximum session duration (AWS API)](https://docs.aws.amazon.com//IAM/latest/UserGuide/roles-managingrole-editing-api.html#roles-modify_max-session-duration-api) AWS 」を参照してください。

   この API の詳細については、「[CreateRoleAlias](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateRoleAlias.html)」を参照してください。

1. ポリシーをデバイス証明書にアタッチします。デバイス証明書にアタッチされているポリシーは、デバイスにそのロールを引き受ける権限を付与する必要があります。これを行うには、次の例のように、`iot:AssumeRoleWithCertificate` アクションへのアクセス許可をロールエイリアスに付与します。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iot:AssumeRoleWithCertificate",
               "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/your role alias"
           }
       ]
   }
   ```

1. 認証情報プロバイダーにセキュリティトークンを取得する HTTPS リクエストを行います。以下の情報を提供します。
   + *Certificate*: これは、TLS 相互認証を介した HTTP リクエストであるため、リクエスト作成中に証明書およびプライベートキーをクライアントに提供する必要があります。証明書の登録に使用したのと同じ証明書とプライベートキーを使用します AWS IoT Core。

     デバイスが AWS IoT Core (偽装するサービスではなく) と通信していることを確認するには、[「サーバー認証](x509-client-certs.html#server-authentication)」を参照し、リンクに従って適切な CA 証明書をダウンロードしてから、デバイスにコピーします。
   + *RoleAlias*: 認証情報プロバイダーに作成したロールエイリアスの名前。ロールエイリアス名では大文字と小文字が区別され、 で作成されたロールエイリアスと一致する必要があります AWS IoT Core。
   + *ThingName*: モノを登録したときに作成した AWS IoT Core モノの名前。これは、`x-amzn-iot-thingname` HTTP ヘッダーの値として渡されます。この値は、 AWS IoT Core または IAM ポリシーでポリシー変数としてモノの属性を使用している場合にのみ必要です。
**注記**  
`x-amzn-iot-thingname` で提供する *ThingName* は証明書に割り当てられた AWS IoT Thing リソースの名前と一致する必要があります。一致しない場合は、403 エラーが返されます。

   で次のコマンドを実行して AWS CLI 、 の認証情報プロバイダーエンドポイントを取得します AWS アカウント。この API についての詳細は、「[DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html)」を参照してください。FIPS 対応のエンドポイントについては、「[AWS IoT Core- 認証情報プロバイダーエンドポイント](iot-connect-fips.md#iot-connect-fips-credential)」を参照してください。

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   次の JSON オブジェクトは、**describe-endpoint** コマンドの出力サンプルです。これには、セキュリティトークンをリクエストするために使用する `endpointAddress` が含まれています。

   ```
   {
       "endpointAddress": "your_aws_account_specific_prefix.credentials.iot.your region.amazonaws.com"
   }
   ```

   エンドポイントを使用して、セキュリティトークンを返す HTTPS リクエストを認証情報プロバイダーに作成します。次のコマンド例では、`curl` を使用していますが、任意の HTTP クライアントを使用できます。
**注記**  
*roleAlias* 名は大文字と小文字が区別され、 で作成されたロールエイリアスと一致する必要があります AWS IoT。

   ```
   curl --cert your certificate --key your private key -H "x-amzn-iot-thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-aliases/your role alias/credentials
   ```

   このコマンドは、`accessKeyId`、`secretAccessKey`、`sessionToken` および有効期限を含むセキュリティトークンオブジェクトを返します。次の JSON オブジェクトは、`curl` コマンドの出力サンプルです。

   ```
       {"credentials":{"accessKeyId":"access key","secretAccessKey":"secret access key","sessionToken":"session token","expiration":"2018-01-18T09:18:06Z"}}
   ```

   その後、`accessKeyId`、、`secretAccessKey`および `sessionToken`値を使用して、 AWS サービスへのリクエストに署名できます。end-to-endのデモンストレーションについては、 *AWS セキュリティ*ブログの[AWS 「認証情報プロバイダーを使用してデバイス内のハードコードされた AWS IoT 認証情報の必要性を排除する方法](https://aws.amazon.com/blogs/security/how-to-eliminate-the-need-for-hardcoded-aws-credentials-in-devices-by-using-the-aws-iot-credentials-provider/)」ブログ記事を参照してください。

# IAM を使用したクロスアカウントアクセス
<a name="cross-account-access"></a>

AWS IoT Core では、プリンシパルがプリンシパルが所有 AWS アカウント していない で定義されているトピックを発行またはサブスクライブできるようにします。IAM ポリシーと IAM ロールを作成し、そのポリシーをそのロールにアタッチすることで、クロスアカウントアクセスを設定します。

最初に、 AWS アカウントの他のユーザーと証明書に対して行うのと同様に、「[IAM ポリシーの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_create.html)」の説明に従ってカスタマー管理 IAM ポリシーを作成します。

 AWS IoT Core レジストリに登録されているデバイスの場合、次のポリシーは、デバイスのモノの名前に一致するクライアント ID AWS IoT Core を使用して に接続するデバイスと、*モノの名前*がデバイスのモノの名前`my/topic/thing-name `である に発行するアクセス許可を付与します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

 AWS IoT Core レジストリに登録されていないデバイスの場合、次のポリシーは、アカウントの (123456789012) AWS IoT Core レジストリに登録`client1`されているモノの名前を使用して、 に接続 AWS IoT Core し、 というプレフィックスが付いた名前のクライアント ID 固有のトピックに発行するアクセス許可をデバイスに付与します`my/topic/`。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
            ]
        }
    ]
}
```

次に、「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)」のステップに従います。アクセスを共有する AWS アカウント のアカウント ID を入力します。最後に、作成したポリシーをロールにアタッチします。後で、アクセス許可を付与する AWS アカウント ID を変更する必要がある場合は、以下の信頼ポリシーの形式を使用できます。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::567890123456:user/MyUser"
        },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

# でのデータ保護 AWS IoT Core
<a name="data-protection"></a>

責任 AWS [共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)、 でのデータ保護に適用されます AWS IoT Core。このモデルで説明されているように、 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 アカウント 、 AWS IAM アイデンティティセンター または AWS Identity and Access Management (IAM) を使用して個々のユーザーを設定することをお勧めします。この方法により、それぞれのジョブを遂行するために必要な権限のみが各ユーザーに付与されます。また、次の方法でデータを保護することもお勧めします:
+ 各アカウントで多要素認証 (MFA) を使用します。
+ SSL/TLS を使用して AWS リソースと通信します。TLS 1.2 は必須ですが、TLS 1.3 を推奨します。
+ で API とユーザーアクティビティのログ記録を設定します AWS CloudTrail。CloudTrail 証跡を使用して AWS アクティビティをキャプチャする方法については、「 *AWS CloudTrail ユーザーガイド*」の[CloudTrail 証跡の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)」を参照してください。
+  AWS 暗号化ソリューションと、その中のすべてのデフォルトのセキュリティコントロールを使用します AWS のサービス。
+ Amazon Macie などの高度な管理されたセキュリティサービスを使用します。これらは、Amazon S3 に保存されている機密データの検出と保護を支援します。
+ コマンドラインインターフェイスまたは API AWS を介して にアクセスするときに FIPS 140-3 検証済み暗号化モジュールが必要な場合は、FIPS エンドポイントを使用します。利用可能な FIPS エンドポイントの詳細については、「[連邦情報処理規格 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)」を参照してください。

お客様の E メールアドレスなどの極秘または機密情報を、タグ、または **[名前]** フィールドなどの自由形式のテキストフィールドに含めないことを強くお勧めします。これは、コンソール AWS IoT 、API、または SDK を使用して AWS CLIまたは他の AWS のサービス を操作する場合も同様です。 AWS SDKs タグ、または名前に使用される自由記述のテキストフィールドに入力したデータは、請求または診断ログに使用される場合があります。外部サーバーに URL を提供する場合、そのサーバーへのリクエストを検証できるように、認証情報を URL に含めないことを強くお勧めします。

データ保護の詳細については[AWS 責任共有モデルと *AWS セキュリティブログ GDPR* の GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) ブログ投稿を参照してください。

AWS IoT デバイスはデータを収集し、そのデータに対して何らかの操作を実行し、そのデータを別のウェブサービスに送信します。デバイスにデータを短期間保存することを選択することもできます。お客様は、保管中のデータに対するデータ保護を提供する責任があります。デバイスが にデータを送信すると AWS IoT、このセクションで後述するように、TLS 接続を介して送信されます。 AWS IoT デバイスは任意の AWS サービスにデータを送信できます。各サービスのデータセキュリティの詳細については、そのサービスのドキュメントを参照してください。CloudWatch Logs にログを書き込んで AWS IoT API コールをログに記録するように AWS IoT を設定できます AWS CloudTrail。これらのサービスのデータセキュリティの詳細については、[Amazon CloudWatch の認証とアクセスコントロール](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/auth-and-access-control-cw.html)」および[AWS KMS 「マネージドキーを使用した CloudTrail ログファイルの暗号化](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/encrypting-cloudtrail-log-files-with-aws-kms.html)」を参照してください。

## でのデータの暗号化 AWS IoT
<a name="data-protection-encrypt"></a>

デフォルトでは、転送中および保管中のすべての AWS IoT データは暗号化されます。[転送中のデータは TLS を使用して暗号化](transport-security.md)され、保管中のデータは AWS 所有キーを使用して暗号化されます。 は Key Management Service AWS KMS keys () のカスタマー管理 (KMS AWS キー) AWS IoT をサポートしますAWS KMS。ただし、Device Advisor と AWS IoT Wireless は、顧客データの暗号化 AWS 所有のキー に のみを使用します。

 

# のトランスポートセキュリティ AWS IoT Core
<a name="transport-security"></a>

TLS (Transport Layer Security) は、コンピュータネットワーク上での安全な通信のために設計された暗号化プロトコルです。 AWS IoT Core Device Gateway では、デバイスから Gateway への接続に TLS を使用して、転送中にすべての通信を暗号化する必要があります。TLS は、 AWS IoT Coreでサポートされているアプリケーションプロトコル (MQTT、HTTP、および WebSocket) の機密性を達成するために使用されます。TLS サポートは、多くのプログラミング言語とオペレーティングシステムで使用できます。内のデータは AWS 、特定の AWS サービスによって暗号化されます。他の AWS サービスのデータ暗号化の詳細については、そのサービスのセキュリティドキュメントを参照してください。

**Topics**
+ [TLS プロトコル](#tls-ssl-policy)
+ [セキュリティポリシー](#tls-policy-table)
+ [でのトランスポートセキュリティに関する重要な注意事項 AWS IoT Core](#tls-ssl-core)
+ [LoRaWAN ワイヤレスデバイスのトランスポートセキュリティ](#tls-lorawan)

## TLS プロトコル
<a name="tls-ssl-policy"></a>

AWS IoT Core は、TLS プロトコルの次のバージョンをサポートしています。
+ TLS 1.3 
+ TLS 1.2

では AWS IoT Core、ドメイン設定で TLS 設定 ([TLS 1.2](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) および [TLS 1.3 の場合](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3)) を設定できます。詳細については、「[ドメイン設定での TLS 設定の設定](iot-endpoints-tls-config.md)」を参照してください。

## セキュリティポリシー
<a name="tls-policy-table"></a>

セキュリティポリシーは、クライアントとサーバー間の TLS ネゴシエーション中にサポートされるプロトコルと暗号を決定する TLS プロトコルとその暗号の組み合わせです。必要に応じて、事前定義されたセキュリティポリシーを使用するようにデバイスを設定できます。 AWS IoT Core はカスタムセキュリティポリシーをサポートしていないことに注意してください。

デバイスの事前定義されたセキュリティポリシーの 1 つを接続時に選択できます AWS IoT Core。の最新の事前定義されたセキュリティポリシーの名前には、リリースされた年月に基づくバージョン情報 AWS IoT Core が含まれます。事前に定義されたデフォルトのセキュリティポリシーは `IoTSecurityPolicy_TLS13_1_2_2022_10` です。セキュリティポリシーを指定するには、 AWS IoT コンソールまたは を使用できます AWS CLI。詳細については、「[ドメイン設定での TLS 設定の設定](iot-endpoints-tls-config.md)」を参照してください。

次の表は、 AWS IoT Core でサポートされる、事前に定義された最新のセキュリティポリシーの詳細を示しています。見出し行に収まるようにポリシー名から `IotSecurityPolicy_` を削除しました。


| **セキュリティポリシー** | TLS13\$11\$13\$12022\$110 | TLS13\$11\$12\$12022\$110 | TLS12\$11\$12\$12022\$110 | TLS12\$11\$10\$12016\$101\$1 | TLS12\$11\$10\$12015\$101\$1 | 
| --- | --- | --- | --- | --- | --- | 
| TCP ポート |  443/8443/8883  |  443/8443/8883  |  443/8443/8883  | 443 | 8443/8883 | 443 | 8443/8883 | 
| TLS Protocols | 
| TLS 1.2 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| TLS 1.3 | ✓ | ✓ |  |  |  |  |  | 
| TLS Ciphers | 
| TLS\$1AES\$1128\$1GCM\$1SHA256 | ✓ | ✓ |  |  |  |  |  | 
| TLS\$1AES\$1256\$1GCM\$1SHA384 | ✓ | ✓ |  |  |  |  |  | 
| TLS\$1CHACHA20\$1POLY1305\$1SHA256 | ✓ | ✓ |  |  |  |  |  | 
| ECDHE-RSA-AES128- GCM-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES128-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES128-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES256-GCM-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES256-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES256-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES128-GCM-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES128-SHA256 |  | ✓ | ✓ | ✓ |  | ✓ | ✓ | 
| AES128-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-GCM-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| DHE-RSA-AES256-SHA |  |  |  |  |  | ✓ | ✓ | 
| ECDHE-ECDSA-AES128- GCM-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES128-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES128-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES256- GCM-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES256-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES256-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 

**注記**  
`TLS12_1_0_2016_01` は、 AWS リージョン ap-east-1、ap-northeast-2、ap-south-1、ap-southeast-2、ca-central-1、cn-north-1、cn-northwest-1、eu-north-1、eu-west-2、eu-west-3、me-south-1、sa-east-1、us-east-2、us-gov-west-1、us-gov-west-2、us-west-1 でのみ使用できます。  
`TLS12_1_0_2015_01` は AWS リージョン、ap-northeast-1、ap-southeast-1、eu-central-1、eu-west-1、us-east-1、us-west-2 でのみ使用できます。

## でのトランスポートセキュリティに関する重要な注意事項 AWS IoT Core
<a name="tls-ssl-core"></a>

[MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html) AWS IoT Core を使用して に接続するデバイスの場合、TLS はデバイスとブローカー間の接続を暗号化し、TLS クライアント認証 AWS IoT Core を使用してデバイスを識別します。詳細については、「[クライアント認証](https://docs.aws.amazon.com//iot/latest/developerguide/client-authentication.html)」を参照してください。[HTTP](https://docs.aws.amazon.com//iot/latest/developerguide/http.html) AWS IoT Core を使用して に接続するデバイスの場合、TLS はデバイスとブローカー間の接続を暗号化し、認証は AWS 署名バージョン 4 に委任されます。詳細については、「*AWS 全般リファレンス*」で[署名バージョン 4 でのリクエストの署名](https://docs.aws.amazon.com//general/latest/gr/create-signed-request.html)に関する情報を参照してください。

デバイスを に接続する場合 AWS IoT Core、[サーバー名表示 (SNI) 拡張機能](https://tools.ietf.org/html/rfc3546#section-3.1)の送信は必須ではありませんが、強くお勧めします。[マルチアカウント登録](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert)、[カスタムドメイン](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html)、[VPC エンドポイント](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html)、[設定済み TLS ポリシー](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html)などの機能を使用するには、SNI 拡張機能を使用し、`host_name` フィールドに完全なエンドポイントアドレスを指定する必要があります。`host_name` フィールドには、呼び出すエンドポイントが含まれている必要があります。そのエンドポイントは、次のいずれかである必要があります。
+ `endpointAddress` によって返される `aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:Data-ATS`
+ `domainName` によって返される `aws iot [describe-domain-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-domain-configuration.html) –-domain-configuration-name "domain_configuration_name"`

正しくない値または無効な`host_name`値を持つデバイスで試行された接続は失敗します。 AWS IoT Core は、[カスタム認証](https://docs.aws.amazon.com//iot/latest/developerguide/custom-authentication.html)の認証タイプについて CloudWatch に失敗をログに記録します。

AWS IoT Core は [SessionTicket TLS 拡張機能](https://www.ietf.org/rfc/rfc5077.txt)をサポートしていません。

## LoRaWAN ワイヤレスデバイスのトランスポートセキュリティ
<a name="tls-lorawan"></a>

LoRaWAN デバイスは、[LoRaWAN ™ SECURITY: Gemalto、Actility、および Semtech による LoRa Alliance™ 向けに作成されたホワイトペーパー](https://lora-alliance.org/sites/default/files/2019-05/lorawan_security_whitepaper.pdf)で説明されているセキュリティ プラクティスに従います。

LoRaWAN デバイスでのトランスポートセキュリティの詳細については、「[LoRaWAN データおよびトランスポートセキュリティ](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/iot-lorawan-security.html)」を参照してください。

# でのデータの暗号化 AWS IoT
<a name="data-encryption"></a>

データ保護とは、転送中 ( との間で送受信されるとき AWS IoT Core) および保管中 (デバイスや他の AWS サービスに保存されているとき) のデータを保護することです。に送信されるすべてのデータは、MQTT、HTTPS、WebSocket プロトコルを使用して TLS 接続を介して送信され、転送中にデフォルトで保護されます。 AWS IoT Core AWS IoT Core はデバイスからデータを収集し、さらに処理するために他の AWS サービスに送信します。他の AWS のサービスのデータ暗号化の詳細については、そのサービスのセキュリティドキュメントを参照してください。詳細については、「[保管時のデータ暗号化](encryption-at-rest.md)」を参照してください。

FreeRTOS は、キーストレージ、暗号化オブジェクトへのアクセス、およびセッションの管理を抽象化する PKCS \$111 ライブラリを提供します。このライブラリを使用して、デバイスに保存されているデータを暗号化することはお客様の責任です。詳細については、「[FreeRTOS 公開キー暗号化標準 (PKCS) \$111 ライブラリ](https://docs.aws.amazon.com/freertos/latest/userguide/security-pkcs.html)」を参照してください。

# での保管時のデータ暗号化 AWS IoT Core
<a name="encryption-at-rest"></a>

デフォルトでは、保管中のすべての AWS IoT Core データは AWS 所有キーを使用して暗号化されます。 は AWS Key Management Service () の対称カスタマーマネージドキー AWS IoT Core もサポートしていますAWS KMS。カスタマーマネージドキーを使用すると、 AWS アカウントの AWS KMS キーを作成、所有、管理できます。 AWS IoT Core は KMS キーを使用して保管中のデータを暗号化します。ユーザーは、キーポリシーの作成や保守など、これらの KMS キーを完全に制御できます。これらのキーのアクセス許可を制御する AWS KMS ために にアクセスするロールの IAM ポリシーを設定することもできます。

## AWS 所有キー
<a name="aws-owned-keys"></a>

AWS 所有キーは、 AWS サービスが複数の AWS アカウントで使用するために所有および管理する KMS キーのコレクションです。 AWS サービスは AWS 、所有キーを使用してデータを保護します。デフォルトでは、 は AWS 所有キーを使用して保管中のデータを AWS IoT Core 暗号化します。これらのキーはサービスによって管理されます。 AWS 所有キーを表示、管理、使用することはできません。ユーザーがこれらのキーを保護するために実行する必要のあるアクションはありません。

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

## カスタマーマネージドキー
<a name="customer-managed-keys"></a>

カスタマーマネージドキーは、作成、所有、管理する AWS アカウントの KMS キーです。ユーザーは、キーポリシーの作成や保守など、これらの AWS KMS キーを完全に制御できます。これらのキーのアクセス許可を制御する AWS KMS ために にアクセスするロールの IAM ポリシーを設定することもできます。カスタマーマネージド KMS キー AWS IoT Core を使用してデータを暗号化するように を設定できます。

カスタマーマネージドキーの詳細については、*AWS Key Management Service デベロッパーガイド*の「[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)」を参照してください。

でカスタマーマネージドキーにオプトインするには AWS IoT Core、次の手順に従います。

**Topics**
+ [ステップ 1：カスタマーマネージドキーを作成する](#encryption-at-rest-cmk-create)
+ [ステップ 2: KMS キーを使用する AWS IoT Core ためのアクセス許可を付与する IAM ロールを作成する](#create-an-iam-role)
+ [ステップ 3: でカスタマーマネージドキーにオプトインする AWS IoT Core](#opt-in-customer-managed-keys)
+ [ステップ 4: AWS IoT Core コントロールプレーンオペレーションに必要な追加のアクセス許可](#cmk-control-plane-permissions)
+ [ステップ 5: キーの管理](#understanding-key-health)
+ [ステップ 6: キーヘルスのモニタリング](#health-status-monitoring)

### ステップ 1：カスタマーマネージドキーを作成する
<a name="encryption-at-rest-cmk-create"></a>

対称カスタマーマネージドキーは、 AWS KMS コンソールまたは AWS KMS CLI コマンドを使用して作成できます。`keySpec` は `SYMMETRIC_DEFAULT`、`keyUsage` は `ENCRYPT_DECRYPT` である必要があります。

**注記**  
AWS IoT Core は、カスタマーマネージド AWS KMS キーの`SYMMETRIC_DEFAULT`キー仕様と`ENCRYPT_DECRYPT`キー使用状況を持つキーのみをサポートします。

以下は、 で AWS IoT Core カスタマーマネージドキーに使用できる KMS キーを作成する AWS CLI コマンドの例です。

```
aws kms create-key --key-spec SYMMETRIC_DEFAULT --key-usage ENCRYPT_DECRYPT --region us-west-2
```

以下は、コマンドの出力例です。

```
{
    "KeyMetadata": {
        "AWSAccountId": "111122223333",
        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "CreationDate": "2024-09-19T11:45:23.982000-07:00",
        "Enabled": true,
        "Description": "",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "Origin": "AWS_KMS",
        "KeyManager": "CUSTOMER",
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "KeySpec": "SYMMETRIC_DEFAULT",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ],
        "MultiRegion": false
    }
}
```

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

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

カスタマーマネージドキーの作成時に、キーポリシーを指定することができます。キーポリシーは、カスタマーマネージドキーへのアクセスを制御します。すべてのカスタマーマネージドキーには、キーポリシーが 1 つだけ必要です。このポリシーには、そのキーを使用できるユーザーとその使用方法を決定するステートメントが含まれています。詳細については、「AWS Key Management Service デベロッパーガイド」の「[キーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)」を参照してください。

AWS IoT Core は、アカウントの IAM ロールを使用してカスタマーマネージドキーにアクセスします。カスタムキーポリシーを使用している場合は、このキーで作成された IAM ロールに次のアクセス許可があることを確認してください。
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

### ステップ 2: KMS キーを使用する AWS IoT Core ためのアクセス許可を付与する IAM ロールを作成する
<a name="create-an-iam-role"></a>

が作成した KMS キーを使用して保管中のデータを暗号化 AWS IoT Core するには、アカウントに IAM ロールも作成する必要があります。このロールは、 が KMS キーにアクセスするために引き受け AWS IoT Core ることができます。

がロールを引き受けることを許可する AWS IoT Core には、ロールに次の信頼ポリシーが必要です。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "Service": "iot.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "StringEquals": {
                "aws:SourceAccount": "111122223333"
            },
            "ArnLike": {
                "aws:SourceArn": "arn:aws:iot:us-west-2:111122223333:*"
            }
        }
    }
}
```

IAM ロールにアタッチされた IAM ポリシーに、KMS キーに対する次のアクセス許可が設定されていることを確認します。
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

以下は、カスタマーマネージドキーに必要なアクセス許可が設定された IAM ポリシーの例です。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowIoTToAccessKMSResource",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey",
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncryptTo",
                "kms:ReEncryptFrom",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": [
                "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
            ],
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws-crypto-ec:vendor": "iot.amazonaws.com"
                }
            }
        }
    ]
}
```

詳細については、*「AWS Identity and Access Management ユーザーガイド*」の「[IAM ユーザーにアクセス許可を付与するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

### ステップ 3: でカスタマーマネージドキーにオプトインする AWS IoT Core
<a name="opt-in-customer-managed-keys"></a>

前のすべてのステップを完了したら、`update-encryption-configuration` CLI コマンドを実行し、 AWS IoT Coreでカスタマーマネージドキーを使用してオプトインします。カスタマーマネージドキーにオプトインすると、 AWS アカウント内のすべての AWS IoT Core リソースは指定された AWS KMS キーを使用して暗号化されます。

1.  AWS IoT Core を使用して でカスタマーマネージドキーにオプトインするには AWS CLI、 `update-encryption-configuration` CLI コマンドを実行します。

   ```
   aws iot update-encryption-configuration --encryption-type "CUSTOMER_MANAGED_KMS_KEY" \
   --kms-access-role-arn "arn:aws:iam::111122223333:role/myrole" \
   --kms-key-arn "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" --region us-west-2
   ```

1.  AWS IoT Core を使用して でカスタマーマネージドキーを検証するには AWS CLI、 `describe-encryption-configuration` CLI コマンドを実行します。

   ```
   aws iot describe-encryption-configuration --region us-west-2
   ```

   でカスタマーマネージドキーを有効にしている場合 AWS IoT Core、出力は次のようになります。

   ```
   {
       "encryptionType": "CUSTOMER_MANAGED_KMS_KEY",
       "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
       "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
       "configurationDetails": {
           "configurationStatus": "HEALTHY"
       },
       "lastModifiedDate": "2024-09-26T22:01:02.365000-07:00"
   }
   ```

   `lastModifiedDate` フィールドは、暗号化設定が最後に更新された日付を示します。

   カスタマーマネージドキーを有効にしていない場合、出力は次のようになります。

   ```
   {
       "encryptionType": "AWS_OWNED_KMS_KEY",
       "lastModifiedDate": "2024-09-26T22:01:02.365000-07:00"
   }
   ```

### ステップ 4: AWS IoT Core コントロールプレーンオペレーションに必要な追加のアクセス許可
<a name="cmk-control-plane-permissions"></a>

カスタマーマネージドキーにオプトインすると、 AWS アカウントに属するすべての AWS IoT Core リソースは、提供された KMS キーで暗号化されます。すべてのコントロールプレーンオペレーションでは、 AWS IoT Core リソースに対する特定のオペレーションに必要な`kms:Decrypt`アクセス許可に加えて、呼び出し元に KMS キーに対するアクセス許可が必要になりました。発信者に `kms:Decrypt` アクセス許可がなく、データの暗号化または復号化を必要とする API コール (`GetPolicy` など) を行った場合、発信者は `UnauthorizedException` を受け取ります。

たとえば、`GetPolicy` を呼び出す場合、API コールを成功させるには、カスタマーマネージド KMS キーに対する `iot:GetPolicy` と `kms:Decrypt` の両方のアクセス許可が必要です。

**注記**  
暗号化設定に使用されるキーに対する AWS KMS アクセス許可を付与するように IAM ユーザーまたはロールを更新するときは、KMS キーポリシーがそれぞれの IAM ユーザーまたはロールに必要なアクセス許可も付与していることを確認します。

#### AWS KMS の アクセス許可 `UpdateEncryptionConfiguration`
<a name="kms-permissions-update-encryption-configuration"></a>

`UpdateEncryptionConfiguration` API コールでは、カスタマーマネージドキーにオプトインしたり、キー設定を変更したりするために、KMS キーに対する次の AWS KMS アクセス許可が必要です。
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

#### AWS KMS 他のすべてのコントロールプレーン APIsの アクセス許可
<a name="kms-permissions-control-plane-apis"></a>

ほとんどのコントロールプレーン API では、カスタマーマネージドキーが有効になっている場合に `kms:Decrypt` アクセス許可が必要です。ただし、特定の API では、これらの追加のアクセス許可は必要ありません。

 AWS KMS アクセス許可を必要としない APIs   
`List*` および `Delete*` API はこの区分には該当しません。お客様はいつでも `List*` または `Delete*` コントロールプレーン API を呼び出すことができます。発信者に `kms:Decrypt` アクセス許可がない場合でも、これらの API コールは成功します。これらの API コールは、カスタマーマネージドキーが異常である場合でも成功します。これは、`List*` と `Delete*` API が復号化を一切行わないためです。  
+ **List\$1 API** – すべての一覧表示操作 (例: `ListThings`、`ListPolicies`、`ListCertificates`)
+ **Delete\$1 API** – すべての削除操作 (例: `DeleteThing`、`DeletePolicy`、`DeleteCertificate`)

### ステップ 5: キーの管理
<a name="understanding-key-health"></a>

AWS IoT Core は、カスタマーマネージドキー設定を定期的にチェックして、暗号化および復号オペレーションに影響がないことを確認します。これらのヘルスチェックは 1 AWS IoT Core分に 1 回実行され、 AWS KMS キーおよび関連する IAM ロールの両方にアクセスして使用してオペレーションを暗号化および復号化できるかどうかを検証します。

HEALTHY  
AWS IoT Core は、指定された IAM ロールを介して AWS KMS キーに正常にアクセスし、暗号化/復号オペレーションを実行できます。すべてのコンポーネントが正しく機能しています。

UNHEALTHY  
AWS IoT Core は AWS KMS キーにアクセスまたは使用できません。これにより、新しい暗号化操作を実行できなくなり、サービス機能に影響が出る可能性があります。`errorCode` フィールドは、問題がキーにあるのか、IAM ロールにあるのかを示します。

#### キーのヘルスに影響を与える可能性のあるお客様によるアクション
<a name="customer-actions-affecting-health"></a>

いくつかのお客様のアクションが引き金となって、キーのヘルスステータスが `HEALTHY` から `UNHEALTHY` に変わることがあります。

キー関連のアクション  
+ ** AWS KMS キーの削除** – キーの削除をスケジュールすると、そのキーは `Pending deletion`ステータスになり、使用できません。
+ ** AWS KMS キーの無効化** – KMS キーを無効にすると、暗号化/復号オペレーションに使用できなくなります。
+ **削除のためのキーのスケジュール** – 削除が完了するとキーは使用できなくなります。
+ **キーポリシーの変更** – AWS IoT Core アクセスに必要なアクセス許可の削除
+ **キー使用許可の変更** – 必要な AWS KMS アクションの制限

IAM ロール関連のアクション  
+ **IAM ロールの削除** – AWS IoT Core キーにアクセスするためのロールを引き受けることはできません
+ **ロールのアクセス許可の変更** — ロールポリシーから必要な AWS KMS アクセス許可を削除する
+ **信頼ポリシーの変更** — AWS IoT Core サービスがロールを引き受けるのを防ぐ
+ **制限条件の追加** – がロール AWS IoT Core を使用できないようにする条件

アカウントレベルのアクション  
+ **クロスアカウントキーアクセスの変更** – 異なるアカウントのキーのアクセス許可の変更。
+ **サービスコントロールポリシー (SCPs)** – AWS KMS アクセスを制限する組織レベルのポリシー
+ **アカウントレベルの IAM ポリシー** – キーアクセスを上書きする、またはキーアクセスと競合するポリシー。

**重要**  
で使用される AWS KMS キー、IAM ロール、またはポリシーへの変更は、まず開発環境でテスト AWS IoT Core する必要があります。変更を加えた後、主要なヘルスステータスを注意深くモニタリングして、 AWS IoT Core 機能に影響がないことを確認します。

#### 暗号化設定の更新
<a name="key-transition"></a>

の暗号化設定を更新 AWS IoT Core して、あるカスタマーマネージドキーから別のカスタマーマネージドキーに変更するか、 AWS 所有キーとカスタマーマネージドキーの間で変更します。

設定を別のカスタマーマネージドキーに変更するには:

1. 「[ステップ 1：カスタマーマネージドキーを作成する](#encryption-at-rest-cmk-create)」の手順に従って、新しいカスタマーマネージドキーを作成します。

1. 更新期間中には古いキーと新しいキーの両方のアクセス許可を含めるように、IAM ロールポリシーを更新します。

1. 新しいキーを使用するように暗号化設定を更新します。

   ```
   aws iot update-encryption-configuration --encryption-type "CUSTOMER_MANAGED_KMS_KEY" \
   --kms-access-role-arn "arn:aws:iam::111122223333:role/myrole" \
   --kms-key-arn "arn:aws:kms:us-west-2:111122223333:key/new-key-id"
   ```

カスタマーマネージドキーから AWS 所有キーに戻すには:

```
aws iot update-encryption-configuration --encryption-type "AWS_OWNED_KMS_KEY"
```

**注記**  
新しいカスタマーマネージドキーの暗号化設定を更新するときは、操作を成功させるために、古いキーと新しいキーの両方がアクセス可能な状態であることを確認します。

##### 一般的な障害シナリオとその影響
<a name="failure-scenarios"></a>

次の表は、キーが削除または非アクティブ化される一般的な障害シナリオを示しています。


| シナリオ | 即時的な影響 | 長期的な影響 | 
| --- | --- | --- | 
|  キーの無効化  |  すべての新しい暗号化/復号化の操作がすぐに失敗する  |  キーが再有効化または置き換えられるまでサービスが中断  | 
|  キー削除のスケジュール  |  キーのステータスが削除保留中に変更され、すべての暗号化/復号化操作が失敗する  |  削除完了時に自動サービスの障害が発生する  | 
|  キーの完全削除  |  すべての操作の即時および永続的な障害  |  永久的にデータが損失され、暗号化されたデータの復元が不可能  | 
|  キーポリシーの不適切な変更  |  AWS IoT Core はキーへのアクセス許可を失います  |  ポリシーが修正されるまでのサービス障害が続く  | 
|  IAM ロールの削除  |  AWS IoT Core はキーにアクセスするためのロールを引き受けることができません  |  暗号化サービスが完全に停止  | 
|  IAM ロールが正しく変更されていない  |  AWS IoT Core がロールを引き受けたり、ロールを使用してキーにアクセスしたりできない  |   IAM ロールが修正されるまでサービス障害が続く  | 

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

キーの偶発的な削除や非アクティブ化を防ぎ、サービス障害のリスクを最小限に抑えるには:

キーのライフサイクルポリシーを実装する  
キーの作成、ローテーション、廃止に関する明確な手順を確立します。どのキーがどの AWS IoT Core リソースで使用されるかを文書化し、アクティブなキーのインベントリを維持します。

IAM ポリシーを使用してキーの削除を制限する  
権限のないユーザーが重要な暗号化キーを削除または無効化できないようにする IAM ポリシーを作成します。条件を使用して、キー削除の操作に対し追加承認を要求します。

CloudTrail ログ記録を有効にする  
CloudTrail を使用してすべての AWS KMS キーオペレーションをモニタリングし、不正または偶発的なキー管理アクティビティを検出します。キーの削除、無効化、またはポリシーの変更に関するアラートを設定します。

キーの交換手順をテストする  
非本番環境でキーの交換手順を定期的にテストして、キー関連の障害から迅速に復旧できることを確認します。

キーのバックアップを維持する  
 AWS KMS キーマテリアルをエクスポートすることはできませんが、必要に応じて迅速なキー交換を容易にするために、キー ARNs、ポリシー、および関連する AWS IoT Core 設定の詳細な記録を維持します。

キーのヘルスをモニタリングする  
`CMK.Health` メトリクスを継続的にモニタリングし、主要なヘルスステータスの変更に関する自動アラートを設定します。キー関連の問題に迅速に対処するための自動応答を実装します。

**重要**  
キーの更新手順は、本番環境に実装する前に、必ず開発環境でテストしてください。ロールバック計画を文書化し、緊急時にキー交換手順を迅速に実行できるようにします。

### ステップ 6: キーヘルスのモニタリング
<a name="health-status-monitoring"></a>

定期的なチェック AWS IoT Core の実行の一環として、CloudWatch メトリクスとログが出力され、カスタマーマネージドキー設定のヘルスステータスが可視化されます。

AWS IoT Core は、少なくとも 1 分に 1 回 CloudWatch に`CMK.Health`メトリクスを出力します。メトリクスは、 がデータの暗号化と復号 AWS IoT Core に使用するカスタマーマネージドキーのヘルスステータスに関する情報を提供します。

この `CMK.Health` パラメータは以下の値を取ることができます。
+ 値は です`1`。 AWS IoT Core データの暗号化と復号に暗号化キーを正常に使用できます。
+ 値は です`0`。 AWS IoT Core はデータの暗号化と復号に暗号化キーを使用できません。

AWS IoT Core 暗号化キーのヘルスステータスが変更されると、 も AWS IoT V2 ログを出力します。これらのログは、ヘルスステータスの更新に関する追加の詳細を提供します。これらのログを表示するには、 AWS IoT V2 ログを有効にする必要があります。`HEALTHY` ログは `INFO` レベルで出力され、`UNHEALTHY` ログは `ERROR` レベルで出力されます。ログレベルの詳細については、「[ログレベル](https://docs.aws.amazon.com/iot/latest/developerguide/configure-logging.html#log-level)」を参照してください。

次の例は、カスタマーマネージドキーのヘルスステータスの更新を示す AWS IoT Core ために から出力される CloudWatch ログエントリです。

重要なヘルスステータスの変更を効果的にモニタリングして対応するには:

1. `CMK.Health` メトリクスの **CloudWatch アラームを設定します**。

   ```
   aws cloudwatch put-metric-alarm --region us-west-2 \
     --alarm-name "IoTCore-CMK-Health-Alert" \
     --alarm-description "Alert when IoT Core CMK health is unhealthy" \
     --metric-name "CMK.Health" \
     --namespace "AWS/IoT" \
     --statistic "Minimum" \
     --period 300 \
     --evaluation-periods 1 \
     --threshold 1 \
     --comparison-operator "LessThanThreshold" \
     --alarm-actions "arn:aws:sns:us-west-2:111122223333:iot-alerts"
   ```

1. 詳細なヘルスステータス変更イベントをエラーコードとメッセージでキャプチャするための **Enable AWS IoT V2 ログ記録**。

1. トラブルシューティング**の設定ステータスを確認します**。

   ```
   aws iot describe-encryption-configuration --region us-west-2
   ```

1. `errorCode` フィールドを確認して **UNHEALTHY ステータスを調べます**。
   + `KMS_KEY_VALIDATION_ERROR` – AWS KMS キーの問題 (無効、削除、またはポリシーの問題)
   + `ROLE_VALIDATION_ERROR` – IAM ロールの問題 (削除やポリシーの問題、または信頼の問題)

#### UNHEALTHY から HEALTHY へ変更
<a name="unhealthy-to-healthy"></a>

暗号化キーのステータスが から `UNHEALTHY`に更新されると`HEALTHY`、 AWS IoT Core は次の形式で AWS IoT V2 ログメッセージを出力します。

```
{
    "timestamp": "2017-08-10 15:37:23.476",
    "logLevel": "INFO",
    "traceId": "8421693b-f4f0-4e4a-9235-0cff8bab897d",
    "accountId": "111122223333",
    "status": "SUCCESS",
    "cmkStatus": "HEALTHY",
    "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
    "eventType": "CmkHealthCheck"
}
```

#### HEALTHY から UNHEALTHY へ変更
<a name="healthy-to-unhealthy"></a>

暗号化キーのステータスが から `HEALTHY`に更新されると`UNHEALTHY`、 AWS IoT Core は次の形式で AWS IoT V2 ログメッセージを出力します。

```
{
    "timestamp": "2017-08-10 15:37:23.476",
    "logLevel": "ERROR",
    "traceId": "8421693b-f4f0-4e4a-9235-0cff8bab897d",
    "accountId": "111122223333",
    "status": "FAILURE",
    "cmkStatus": "UNHEALTHY",
    "errorCode": "KMS_KEY_VALIDATION_ERROR / ROLE_VALIDATION_ERROR",
    "errorMessage": "Error message on why there was a failure",
    "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
    "eventType": "CmkHealthCheck"
}
```

**警告**  
キーの状態が になると`UNHEALTHY`、 AWS IoT Core オペレーションはすぐに失敗します。この場合は、キー設定、IAM ロールのアクセス許可、およびポリシーを確認してください。`CMK.Health` メトリクスでステータスの変更をモニタリングします。設定を確認してもオペレーションが失敗し続ける場合は、アカウントマネージャーまたは [AWS サポートセンター](https://console.aws.amazon.com/support/home#/)にお問い合わせください。

#### AWS CloudTrail イベント
<a name="aws-cloudtrail-events"></a>

復号オペレーションの暗号化のための KMS キー AWS IoT Coreの使用状況をモニタリングすることもできます。 AWS IoT Core は`DescribeKey`、KMS キーに対して `Decrypt`、`ReEncrypt`、、および `GenerateDataKeyWithoutPlaintext`オペレーションを行い、保管中の AWS アカウントに属するデータを暗号化/復号します。

`DescribeKey`、`Decrypt`、`ReEncrypt`および `GenerateDataKeyWithoutPlaintext` には CloudTrail イベントがあります。これらのイベントは、カスタマーマネージドキーによって暗号化されたデータにアクセス AWS IoT Core するために によって呼び出される AWS KMS オペレーションをモニタリングします。

##### `Decrypt` の例
<a name="decrypt"></a>

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "*********************",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
                "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "*****"
            },
            "attributes": {
                "creationDate": "2024-09-16T20:23:39Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "iot.amazonaws.com"
    },
    "eventTime": "2024-09-16T20:32:48Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "iot.amazonaws.com",
    "userAgent": "iot.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "kms-arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "aws-crypto-ec:vendor": "iot.amazonaws.com",
            "branch-key-id": "111122223333",
            "type": "branch:ACTIVE"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "responseElements": null,
    "requestID": "1afb6d98-8388-455d-8b48-e62c9e0cf7f4",
    "eventID": "b59a5f16-0d98-46d8-a590-0e040a48b39b",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

# の ID とアクセスの管理 AWS IoT
<a name="security-iam"></a>

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

**Topics**
+ [オーディエンス](#security_iam_audience)
+ [IAM アイデンティティを使用した認証](#security_iam_authentication)
+ [ポリシーを使用したアクセスの管理](#security_iam_access-manage)
+ [が IAM と AWS IoT 連携する方法](security_iam_service-with-iam.md)
+ [AWS IoT アイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)
+ [AWS の 管理ポリシー AWS IoT](security-iam-awsmanpol.md)
+ [AWS IoT ID とアクセスのトラブルシューティング](security_iam_troubleshoot.md)

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

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

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

 AWS IoT ID には、デバイス (X.509) 証明書、Amazon Cognito ID、IAM ユーザーまたはグループを指定できます。このトピックでは、IAM ID のみについて説明します。が AWS IoT サポートする他の ID の詳細については、「」を参照してください[クライアント認証](client-authentication.md)。

認証とは、ID 認証情報 AWS を使用して にサインインする方法です。、IAM ユーザー AWS アカウントのルートユーザー、または 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)」を参照してください。

### 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 マネージドポリシーを使用できません。

### アクセスコントロールリスト (ACL)
<a name="security_iam_access-manage-acl"></a>

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

Amazon S3、および Amazon VPC は AWS WAF、ACLs。ACL の詳細については、*Amazon Simple Storage Service デベロッパーガイド* の [アクセスコントロールリスト (ACL) の概要](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html) を参照してください。

### その他のポリシータイプ
<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)」を参照してください。

# が IAM と AWS IoT 連携する方法
<a name="security_iam_service-with-iam"></a>

IAM を使用して へのアクセスを管理する前に AWS IoT、使用できる IAM 機能を理解しておく必要があります AWS IoT。 AWS IoT およびその他の AWS のサービスが IAM と連携する方法の概要については、IAM *ユーザーガイド*の[AWS 「IAM と連携する のサービス](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_aws-services-that-work-with-iam.html)」を参照してください。

**Topics**
+ [AWS IoT ID ベースのポリシー](#security_iam_service-with-iam-id-based-policies)
+ [AWS IoT リソースベースのポリシー](#security_iam_service-with-iam-resource-based-policies)
+ [AWS IoT タグに基づく認可](#security_iam_service-with-iam-tags)
+ [AWS IoT IAM ロール](#security_iam_service-with-iam-roles)

## AWS IoT ID ベースのポリシー
<a name="security_iam_service-with-iam-id-based-policies"></a>

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

### アクション
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

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

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

次の表に、IAM IoT アクション、関連付けられた AWS IoT API、およびアクションが操作するリソースを示します。


****  

| ポリシーアクション | AWS IoT API | リソース | 
| --- | --- | --- | 
| iot:AcceptCertificateTransfer | AcceptCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  ARN で AWS アカウント 指定された は、証明書が転送されるアカウントである必要があります。   | 
| iot:AddThingToThingGroup | AddThingToThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:AssociateTargetsWithJob | AssociateTargetsWithJob | なし  | 
| iot:AttachPolicy | AttachPolicy |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` または `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:AttachPrincipalPolicy | AttachPrincipalPolicy |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:AttachSecurityProfile | AttachSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| iot:AttachThingPrincipal | AttachThingPrincipal |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:CancelCertificateTransfer | CancelCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  ARN で AWS アカウント 指定された は、証明書が転送されるアカウントである必要があります。   | 
| iot:CancelJob | CancelJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| iot:CancelJobExecution | CancelJobExecution |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:ClearDefaultAuthorizer | ClearDefaultAuthorizer | なし | 
| iot:CreateAuthorizer | CreateAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name`  | 
| iot:CreateCertificateFromCsr | CreateCertificateFromCsr | \$1 | 
| iot:CreateDimension | CreateDimension | `arn:aws:iot:region:account-id:dimension/dimension-name` | 
| iot:CreateJob | CreateJob |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name` `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| iot:CreateJobTemplate | CreateJobTemplate |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| iot:CreateKeysAndCertificate | CreateKeysAndCertificate | \$1 | 
| iot:CreatePolicy | CreatePolicy | `arn:aws:iot:region:account-id:policy/policy-name` | 
| iot:CreatePolicyVersion | CreatePolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  これは IAM AWS IoT ポリシーではなく、 ポリシーである必要があります。   | 
| iot:CreateRoleAlias | CreateRoleAlias |  (パラメータ :roleAlias) `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| iot:CreateSecurityProfile | CreateSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| iot:CreateThing | CreateThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:CreateThingGroup | CreateThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` 作成されているグループと親グループ用、使用されている場合  | 
| iot:CreateThingType | CreateThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| iot:CreateTopicRule | CreateTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:DeleteAuthorizer | DeleteAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-name`  | 
| iot:DeleteCACertificate | DeleteCACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| iot:DeleteCertificate | DeleteCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:DeleteDimension | DeleteDimension |  `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| iot:DeleteJob | DeleteJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| iot:DeleteJobTemplate | DeleteJobTemplate |  `arn:aws:iot:region:account-id:job/job-template-id`  | 
| iot:DeleteJobExecution | DeleteJobExecution |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:DeletePolicy | DeletePolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:DeletePolicyVersion | DeletePolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:DeleteRegistrationCode | DeleteRegistrationCode | \$1 | 
| iot:DeleteRoleAlias | DeleteRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| iot:DeleteSecurityProfile | DeleteSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| iot:DeleteThing | DeleteThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:DeleteThingGroup | DeleteThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:DeleteThingType | DeleteThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| iot:DeleteTopicRule | DeleteTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:DeleteV2LoggingLevel | DeleteV2LoggingLevel |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:DeprecateThingType | DeprecateThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| iot:DescribeAuthorizer | DescribeAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name` (パラメータ: authorizerName) なし  | 
| iot:DescribeCACertificate | DescribeCACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| iot:DescribeCertificate | DescribeCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:DescribeDefaultAuthorizer | DescribeDefaultAuthorizer | なし  | 
| iot:DescribeEndpoint | DescribeEndpoint | \$1 | 
| iot:DescribeEventConfigurations | DescribeEventConfigurations | なし  | 
| iot:DescribeIndex | DescribeIndex |  `arn:aws:iot:region:account-id:index/index-name`  | 
| iot:DescribeJob | DescribeJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| iot:DescribeJobExecution | DescribeJobExecution | なし | 
| iot:DescribeJobTemplate | DescribeJobTemplate |  `arn:aws:iot:region:account-id:job/job-template-id`  | 
| iot:DescribeRoleAlias | DescribeRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| iot:DescribeThing | DescribeThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:DescribeThingGroup | DescribeThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:DescribeThingRegistrationTask | DescribeThingRegistrationTask | なし | 
| iot:DescribeThingType | DescribeThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| iot:DetachPolicy | DetachPolicy |  `arn:aws:iot:region:account-id:cert/cert-id` または `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:DetachPrincipalPolicy | DetachPrincipalPolicy |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:DetachSecurityProfile | DetachSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| iot:DetachThingPrincipal | DetachThingPrincipal |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:DisableTopicRule | DisableTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:EnableTopicRule | EnableTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:GetEffectivePolicies | GetEffectivePolicies |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:GetIndexingConfiguration | GetIndexingConfiguration | なし | 
| iot:GetJobDocument | GetJobDocument |  `arn:aws:iot:region:account-id:job/job-id`  | 
| iot:GetLoggingOptions | GetLoggingOptions | \$1 | 
| iot:GetPolicy | GetPolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:GetPolicyVersion | GetPolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:GetRegistrationCode | GetRegistrationCode | \$1 | 
| iot:GetTopicRule | GetTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:ListAttachedPolicies | ListAttachedPolicies |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` または `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:ListAuthorizers | ListAuthorizers | なし | 
| iot:ListCACertificates | ListCACertificates | \$1 | 
| iot:ListCertificates | ListCertificates | \$1 | 
| iot:ListCertificatesByCA | ListCertificatesByCA | \$1 | 
| iot:ListIndices | ListIndices | なし | 
| iot:ListJobExecutionsForJob | ListJobExecutionsForJob | なし | 
| iot:ListJobExecutionsForThing | ListJobExecutionsForThing | なし | 
| iot:ListJobs | ListJobs |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` thingGroupName パラメータが使用される場合  | 
| iot:ListJobTemplates | ListJobs | なし | 
| iot:ListOutgoingCertificates | ListOutgoingCertificates | \$1 | 
| iot:ListPolicies | ListPolicies | \$1 | 
| iot:ListPolicyPrincipals | ListPolicyPrincipals | \$1 | 
| iot:ListPolicyVersions | ListPolicyVersions |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:ListPrincipalPolicies | ListPrincipalPolicies |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:ListPrincipalThings | ListPrincipalThings |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:ListRoleAliases | ListRoleAliases | なし | 
| iot:ListTargetsForPolicy | ListTargetsForPolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:ListThingGroups | ListThingGroups | なし | 
| iot:ListThingGroupsForThing | ListThingGroupsForThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:ListThingPrincipals | ListThingPrincipals |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:ListThingRegistrationTaskReports | ListThingRegistrationTaskReports | なし | 
| iot:ListThingRegistrationTasks | ListThingRegistrationTasks | なし | 
| iot:ListThingTypes | ListThingTypes | \$1 | 
| iot:ListThings | ListThings | \$1 | 
| iot:ListThingsInThingGroup | ListThingsInThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:ListTopicRules | ListTopicRules | \$1 | 
| iot:ListV2LoggingLevels | ListV2LoggingLevels | なし | 
| iot:RegisterCACertificate | RegisterCACertificate | \$1 | 
| iot:RegisterCertificate | RegisterCertificate | \$1 | 
| iot:RegisterThing | RegisterThing | なし | 
| iot:RejectCertificateTransfer | RejectCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:RemoveThingFromThingGroup | RemoveThingFromThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:ReplaceTopicRule | ReplaceTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:SearchIndex | SearchIndex |  `arn:aws:iot:region:account-id:index/index-id`  | 
| iot:SetDefaultAuthorizer | SetDefaultAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name`  | 
| iot:SetDefaultPolicyVersion | SetDefaultPolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:SetLoggingOptions | SetLoggingOptions |  `arn:aws:iot:region:account-id:role/role-name`  | 
| iot:SetV2LoggingLevel | SetV2LoggingLevel |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:SetV2LoggingOptions | SetV2LoggingOptions |  `arn:aws:iot:region:account-id:role/role-name`  | 
| iot:StartThingRegistrationTask | StartThingRegistrationTask | なし | 
| iot:StopThingRegistrationTask | StopThingRegistrationTask | なし | 
| iot:TestAuthorization | TestAuthorization |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:TestInvokeAuthorizer | TestInvokeAuthorizer | なし | 
| iot:TransferCertificate | TransferCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:UpdateAuthorizer | UpdateAuthorizer |  `arn:aws:iot:region:account-id:authorizerfunction/authorizer-function-name`  | 
| iot:UpdateCACertificate | UpdateCACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| iot:UpdateCertificate | UpdateCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:UpdateDimension | UpdateDimension |  `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| iot:UpdateEventConfigurations | UpdateEventConfigurations | なし | 
| iot:UpdateIndexingConfiguration | UpdateIndexingConfiguration | なし | 
| iot:UpdateRoleAlias | UpdateRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| iot:UpdateSecurityProfile | UpdateSecurityProfile |  `arn:aws:iot:region:account-id:securityprofile/security-profile-name` `arn:aws:iot:region:account-id:dimension/dimension-name`  | 
| iot:UpdateThing | UpdateThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:UpdateThingGroup | UpdateThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:UpdateThingGroupsForThing | UpdateThingGroupsForThing |  `arn:aws:iot:region:account-id:thing/thing-name` `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 

のポリシーアクションは、アクションの前にプレフィックス AWS IoT を使用します`iot:`。たとえば、 `ListThings` API AWS アカウント を使用して に登録されているすべての IoT モノを一覧表示するアクセス許可をユーザーに付与するには、ポリシーに `iot:ListThings`アクションを含めます。ポリシーステートメントには、 `Action`または `NotAction` element を含める必要があります。 は、このサービスで実行できるタスクを記述する独自のアクションのセット AWS IoT を定義します。

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

```
"Action": [
      "ec2:action1",
      "ec2:action2"
```

ワイルドカード (\$1) を使用して複数アクションを指定できます。例えば、`Describe` という単語で始まるすべてのアクションを指定するには次のアクションを含めます。

```
"Action": "iot:Describe*"
```

 AWS IoT アクションのリストを確認するには、*IAM ユーザーガイド*の[「 で定義されるアクション AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)」を参照してください。

#### Device Advisor のアクション
<a name="security_iam_service-actions-device-advisor"></a>

次の表は、IAM IoT Device Advisor のアクション、関連する AWS IoT Device Advisor API、およびアクションで使用されるリソースを示しています。


****  

| ポリシーアクション | AWS IoT API | リソース | 
| --- | --- | --- | 
| iotdeviceadvisor:CreateSuiteDefinition | CreateSuiteDefinition |  なし  | 
| iotdeviceadvisor:DeleteSuiteDefinition | DeleteSuiteDefinition |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor:GetSuiteDefinition | GetSuiteDefinition |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor:GetSuiteRun | GetSuiteRun |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-run-id`  | 
| iotdeviceadvisor:GetSuiteRunReport | GetSuiteRunReport |  `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 
| iotdeviceadvisor:ListSuiteDefinitions | ListSuiteDefinitions | なし | 
| iotdeviceadvisor:ListSuiteRuns | ListSuiteRuns |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor:ListTagsForResource | ListTagsForResource |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id` `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 
| iotdeviceadvisor:StartSuiteRun | StartSuiteRun |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor:TagResource | TagResource |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id` `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 
| iotdeviceadvisor:UntagResource | UntagResource |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id` `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 
| iotdeviceadvisor:UpdateSuiteDefinition | UpdateSuiteDefinition |  `arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`  | 
| iotdeviceadvisor:StopSuiteRun | StopSuiteRun |  `arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`  | 

 AWS IoT Device Advisor のポリシーアクションは、アクションの前にプレフィックス を使用します`iotdeviceadvisor:`。たとえば、ListSuiteDefinitions API AWS アカウント を使用して に登録されているすべてのスイート定義を一覧表示するアクセス許可をユーザーに付与するには、ポリシーに `iotdeviceadvisor:ListSuiteDefinitions`アクションを含めます。

### リソース
<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": "*"
```


**AWS IoT リソース**  

| ポリシーアクション | AWS IoT API | リソース | 
| --- | --- | --- | 
| iot:AcceptCertificateTransfer | AcceptCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  ARN で AWS アカウント 指定された は、証明書が転送されるアカウントである必要があります。   | 
| iot:AddThingToThingGroup | AddThingToThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:AssociateTargetsWithJob | AssociateTargetsWithJob | なし  | 
| iot:AttachPolicy | AttachPolicy | `arn:aws:iot:region:account-id:thinggroup/thing-group-name` または `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:AttachPrincipalPolicy | AttachPrincipalPolicy |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:AttachThingPrincipal | AttachThingPrincipal |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:CancelCertificateTransfer | CancelCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  ARN で AWS アカウント 指定された は、証明書が転送されるアカウントである必要があります。   | 
| iot:CancelJob | CancelJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| iot:CancelJobExecution | CancelJobExecution |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:ClearDefaultAuthorizer | ClearDefaultAuthorizer | なし | 
| iot:CreateAuthorizer | CreateAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name`  | 
| iot:CreateCertificateFromCsr | CreateCertificateFromCsr | \$1 | 
| iot:CreateJob | CreateJob |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name` `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| iot:CreateJobTemplate | CreateJobTemplate |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| iot:CreateKeysAndCertificate | CreateKeysAndCertificate | \$1 | 
| iot:CreatePolicy | CreatePolicy | `arn:aws:iot:region:account-id:policy/policy-name` | 
| CreatePolicyVersion | iot:CreatePolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  これは IAM AWS IoT ポリシーではなく、 ポリシーである必要があります。   | 
| iot:CreateRoleAlias | CreateRoleAlias |  (パラメータ :roleAlias) `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| iot:CreateThing | CreateThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:CreateThingGroup | CreateThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` 作成されているグループと親グループ用、使用されている場合  | 
| iot:CreateThingType | CreateThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| iot:CreateTopicRule | CreateTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:DeleteAuthorizer | DeleteAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-name`  | 
| iot:DeleteCACertificate | DeleteCACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| iot:DeleteCertificate | DeleteCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:DeleteJob | DeleteJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| iot:DeleteJobExecution | DeleteJobExecution |  `arn:aws:iot:region:account-id:job/job-id` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:DeleteJobTemplate | DeleteJobTemplate |  `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| iot:DeletePolicy | DeletePolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:DeletePolicyVersion | DeletePolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:DeleteRegistrationCode | DeleteRegistrationCode | \$1 | 
| iot:DeleteRoleAlias | DeleteRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| iot:DeleteThing | DeleteThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:DeleteThingGroup | DeleteThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:DeleteThingType | DeleteThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| iot:DeleteTopicRule | DeleteTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:DeleteV2LoggingLevel | DeleteV2LoggingLevel |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:DeprecateThingType | DeprecateThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| iot:DescribeAuthorizer | DescribeAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name` (パラメータ: authorizerName) なし  | 
| iot:DescribeCACertificate | DescribeCACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| iot:DescribeCertificate | DescribeCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:DescribeDefaultAuthorizer | DescribeDefaultAuthorizer | なし  | 
| iot:DescribeEndpoint | DescribeEndpoint | \$1 | 
| iot:DescribeEventConfigurations | DescribeEventConfigurations | なし  | 
| iot:DescribeIndex | DescribeIndex |  `arn:aws:iot:region:account-id:index/index-name`  | 
| iot:DescribeJob | DescribeJob |  `arn:aws:iot:region:account-id:job/job-id`  | 
| iot:DescribeJobExecution | DescribeJobExecution | なし | 
| iot:DescribeJobTemplate | DescribeJobTemplate |  `arn:aws:iot:region:account-id:jobtemplate/job-template-id`  | 
| iot:DescribeRoleAlias | DescribeRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| iot:DescribeThing | DescribeThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:DescribeThingGroup | DescribeThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:DescribeThingRegistrationTask | DescribeThingRegistrationTask | なし | 
| iot:DescribeThingType | DescribeThingType |  `arn:aws:iot:region:account-id:thingtype/thing-type-name`  | 
| iot:DetachPolicy | DetachPolicy |  `arn:aws:iot:region:account-id:cert/cert-id` または `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:DetachPrincipalPolicy | DetachPrincipalPolicy |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:DetachThingPrincipal | DetachThingPrincipal |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:DisableTopicRule | DisableTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:EnableTopicRule | EnableTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:GetEffectivePolicies | GetEffectivePolicies |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:GetIndexingConfiguration | GetIndexingConfiguration | なし | 
| iot:GetJobDocument | GetJobDocument |  `arn:aws:iot:region:account-id:job/job-id`  | 
| iot:GetLoggingOptions | GetLoggingOptions | \$1 | 
| iot:GetPolicy | GetPolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:GetPolicyVersion | GetPolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:GetRegistrationCode | GetRegistrationCode | \$1 | 
| iot:GetTopicRule | GetTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:ListAttachedPolicies | ListAttachedPolicies |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` または `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:ListAuthorizers | ListAuthorizers | なし | 
| iot:ListCACertificates | ListCACertificates | \$1 | 
| iot:ListCertificates | ListCertificates | \$1 | 
| iot:ListCertificatesByCA | ListCertificatesByCA | \$1 | 
| iot:ListIndices | ListIndices | なし | 
| iot:ListJobExecutionsForJob | ListJobExecutionsForJob | なし | 
| iot:ListJobExecutionsForThing | ListJobExecutionsForThing | なし | 
| iot:ListJobs | ListJobs |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` thingGroupName パラメータが使用される場合  | 
| iot:ListJobTemplates | ListJobTemplates | なし | 
| iot:ListOutgoingCertificates | ListOutgoingCertificates | \$1 | 
| iot:ListPolicies | ListPolicies | \$1 | 
| iot:ListPolicyPrincipals | ListPolicyPrincipals |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:ListPolicyVersions | ListPolicyVersions |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:ListPrincipalPolicies | ListPrincipalPolicies |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:ListPrincipalThings | ListPrincipalThings |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:ListRoleAliases | ListRoleAliases | なし | 
| iot:ListTargetsForPolicy | ListTargetsForPolicy |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:ListThingGroups | ListThingGroups | なし | 
| iot:ListThingGroupsForThing | ListThingGroupsForThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:ListThingPrincipals | ListThingPrincipals |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:ListThingRegistrationTaskReports | ListThingRegistrationTaskReports | なし | 
| iot:ListThingRegistrationTasks | ListThingRegistrationTasks | なし | 
| iot:ListThingTypes | ListThingTypes | \$1 | 
| iot:ListThings | ListThings | \$1 | 
| iot:ListThingsInThingGroup | ListThingsInThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:ListTopicRules | ListTopicRules | \$1 | 
| iot:ListV2LoggingLevels | ListV2LoggingLevels | なし | 
| iot:RegisterCACertificate | RegisterCACertificate | \$1 | 
| iot:RegisterCertificate | RegisterCertificate | \$1 | 
| iot:RegisterThing | RegisterThing | なし | 
| iot:RejectCertificateTransfer | RejectCertificateTransfer |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:RemoveThingFromThingGroup | RemoveThingFromThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name` `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:ReplaceTopicRule | ReplaceTopicRule |  `arn:aws:iot:region:account-id:rule/rule-name`  | 
| iot:SearchIndex | SearchIndex |  `arn:aws:iot:region:account-id:index/index-id`  | 
| iot:SetDefaultAuthorizer | SetDefaultAuthorizer |  `arn:aws:iot:region:account-id:authorizer/authorizer-function-name`  | 
| iot:SetDefaultPolicyVersion | SetDefaultPolicyVersion |  `arn:aws:iot:region:account-id:policy/policy-name`  | 
| iot:SetLoggingOptions | SetLoggingOptions | \$1 | 
| iot:SetV2LoggingLevel | SetV2LoggingLevel | \$1 | 
| iot:SetV2LoggingOptions | SetV2LoggingOptions | \$1 | 
| iot:StartThingRegistrationTask | StartThingRegistrationTask | なし | 
| iot:StopThingRegistrationTask | StopThingRegistrationTask | なし | 
| iot:TestAuthorization | TestAuthorization |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:TestInvokeAuthorizer | TestInvokeAuthorizer | なし | 
| iot:TransferCertificate | TransferCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:UpdateAuthorizer | UpdateAuthorizer |  `arn:aws:iot:region:account-id:authorizerfunction/authorizer-function-name`  | 
| iot:UpdateCACertificate | UpdateCACertificate |  `arn:aws:iot:region:account-id:cacert/cert-id`  | 
| iot:UpdateCertificate | UpdateCertificate |  `arn:aws:iot:region:account-id:cert/cert-id`  | 
| iot:UpdateEventConfigurations | UpdateEventConfigurations | なし | 
| iot:UpdateIndexingConfiguration | UpdateIndexingConfiguration | なし | 
| iot:UpdateRoleAlias | UpdateRoleAlias |  `arn:aws:iot:region:account-id:rolealias/role-alias-name`  | 
| iot:UpdateThing | UpdateThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 
| iot:UpdateThingGroup | UpdateThingGroup |  `arn:aws:iot:region:account-id:thinggroup/thing-group-name`  | 
| iot:UpdateThingGroupsForThing | UpdateThingGroupsForThing |  `arn:aws:iot:region:account-id:thing/thing-name`  | 

ARN の形式の詳細については、[「Amazon リソースネーム (ARNs AWS 「サービス名前空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)」を参照してください。

リソースを作成するためのアクションなど、一部の AWS IoT アクションは、特定のリソースで実行できません。このような場合はワイルドカード \$1を使用する必要があります。

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

 AWS IoT リソースタイプとその ARNs[「 で定義されるリソース AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-resources-for-iam-policies)」を参照してください。 **どのアクションで各リソースの ARN を指定できるかについては、「[AWS IoTで定義されるアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)」を参照してください。

#### Device Advisor のリソース
<a name="security_iam_service-device-advisor-resources"></a>

 AWS IoT Device Advisor IAM ポリシーのリソースレベルの制限を定義するには、スイート定義とスイート実行に次のリソース ARN 形式を使用します。

スイート定義リソース ARN 形式  
`arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-id`

スイート実行リソース ARN 形式  
`arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-id/suite-run-id`

### 条件キー
<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)」を参照してください。

AWS IoT は独自の条件キーのセットを定義し、いくつかのグローバル条件キーの使用もサポートしています。すべての AWS グローバル条件キーを確認するには、*IAM ユーザーガイド*の[AWS 「グローバル条件コンテキストキー](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_condition-keys.html)」を参照してください。


**AWS IoT 条件キー**  

| AWS IoT 条件キー | 説明 | タイプ | 
| --- | --- | --- | 
| aws:RequestTag/\$1\$1tag-key\$1 | ユーザーが AWS IoTに対して行うリクエストに含まれるタグキー。 | String | 
| aws:ResourceTag/\$1\$1tag-key\$1 |  AWS IoT リソースにアタッチされたタグのタグキーコンポーネント。 | String | 
| aws:TagKeys | リクエスト内のリソースに関連付けられているすべてのタグキー名のリスト。 | String | 

 AWS IoT 条件キーのリストを確認するには、*IAM ユーザーガイド*の「 [の条件キー AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-policy-keys)」を参照してください。条件キーを使用できるアクションとリソースについては、[「 で定義されるアクション AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)」を参照してください。

### 例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



 AWS IoT アイデンティティベースのポリシーの例を表示するには、「」を参照してください[AWS IoT アイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)。

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

リソースベースのポリシーは、指定されたプリンシパルが AWS IoT リソースに対して実行できるアクションと条件を指定する JSON ポリシードキュメントです。

AWS IoT は IAM リソースベースのポリシーをサポートしていません。ただし、 AWS IoT リソースベースのポリシーをサポートしています。詳細については、「[AWS IoT Core ポリシー](iot-policies.md)」を参照してください。

## AWS IoT タグに基づく認可
<a name="security_iam_service-with-iam-tags"></a>

 AWS IoT リソースにタグをアタッチするか、 へのリクエストでタグを渡すことができます AWS IoT。タグに基づいてアクセスを制御するには、`iot:ResourceTag/key-name`、`aws:RequestTag/key-name`、または `aws:TagKeys` の条件キーを使用して、ポリシーの[条件要素](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_elements_condition.html)でタグ情報を提供します。詳細については、「[IAM ポリシーでのタグの使用](tagging-iot-iam.md)」を参照してください。 AWS IoT リソースのタグ付けの詳細については、「」を参照してください[AWS IoT リソースのタグ付け](tagging-iot.md)。

リソースのタグに基づいてリソースへのアクセスを制限するためのアイデンティティベースのポリシーの例を表示するには、「[タグに基づく AWS IoT リソースの表示](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-view-thing-tags)」を参照してください。

## AWS IoT IAM ロール
<a name="security_iam_service-with-iam-roles"></a>

[IAM ロール](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles.html)は、特定のアクセス許可 AWS アカウント を持つ 内のエンティティです。

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

一時的な認証情報を使用して、フェデレーションでサインインする、IAM 役割を引き受ける、またはクロスアカウント役割を引き受けることができます。一時的なセキュリティ認証情報を取得するには、[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) や [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) などの AWS STS API オペレーションを呼び出します。

AWS IoT では、一時的な認証情報の使用がサポートされています。

### サービスリンクロール
<a name="security_iam_service-with-iam-roles-service-linked"></a>

[サービスにリンクされたロール](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles_terms-and-concepts.html#iam-term-service-linked-role)を使用すると、 AWS サービスは他の サービスのリソースにアクセスして、ユーザーに代わってアクションを実行できます。サービスリンクロールは IAM アカウント内に表示され、サービスによって所有されます。IAM 管理者は、サービスリンクロールの許可を表示できますが、編集することはできません。

AWS IoT は、サービスにリンクされたロールをサポートしていません。

### サービス役割
<a name="security_iam_service-with-iam-roles-service"></a>

この機能により、ユーザーに代わってサービスが[サービスロール](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles_terms-and-concepts.html#iam-term-service-role)を引き受けることが許可されます。この役割により、サービスがお客様に代わって他のサービスのリソースにアクセスし、アクションを完了することが許可されます。サービスロールはIAM アカウントに表示され、アカウントによって所有されます。つまり、IAM 管理者はこの役割の権限を変更できます。ただし、それにより、サービスの機能が損なわれる場合があります。

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

デフォルトでは、IAM ユーザーおよびロールには、 AWS IoT リソースを作成または変更するアクセス許可はありません。また、 AWS マネジメントコンソール、 AWS CLI、または AWS API を使用してタスクを実行することはできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行する権限をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらのアクセス許可が必要なユーザーまたはグループにそのポリシーをアタッチします。

JSON ポリシードキュメントのこれらの例を使用して、IAM アイデンティティベースのポリシーを作成する方法については、「**IAM ユーザーガイド」の「[JSON タブでのポリシーの作成](https://docs.aws.amazon.com/service-authorization/latest/reference/access_policies_create.html#access_policies_create-json-editor)」を参照してください。

**Topics**
+ [ポリシーに関するベストプラクティス](#security_iam_service-with-iam-policy-best-practices)
+ [AWS IoT コンソールの使用](#security_iam_id-based-policy-examples-console)
+ [ユーザーが自分の許可を表示できるようにする](#security_iam_id-based-policy-examples-view-own-permissions)
+ [タグに基づく AWS IoT リソースの表示](#security_iam_id-based-policy-examples-view-thing-tags)
+ [タグに基づく AWS IoT Device Advisor リソースの表示](#security_iam-device-advisor-tags)

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

ID ベースのポリシーは、アカウント内の AWS IoT リソースを誰かが作成、アクセス、または削除できるかどうかを決定します。これらのアクションでは、 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) を参照してください。

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

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

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

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

## ユーザーが自分の許可を表示できるようにする
<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": "*"
        }
    ]
}
```

## タグに基づく AWS IoT リソースの表示
<a name="security_iam_id-based-policy-examples-view-thing-tags"></a>

アイデンティティベースのポリシーの条件を使用して、タグに基づいて AWS IoT リソースへのアクセスをコントロールできます。この例では、モノを表示できるポリシーを作成する方法を示します。ただし、アクセス許可は、モノタグ `Owner` にそのユーザーのユーザー名の値がある場合のみ、付与されます。このポリシーでは、このアクションをコンソールで実行するために必要なアクセス権限も付与します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ListBillingGroupsInConsole",
            "Effect": "Allow",
            "Action": "iot:ListBillingGroups",
            "Resource": "*"
        },
        {
            "Sid": "ViewBillingGroupsIfOwner",
            "Effect": "Allow",
           "Action": "iot:DescribeBillingGroup",
            "Resource": "arn:aws:iot:*:*:billinggroup/*",
            "Condition": {
                "StringEquals": {"aws:ResourceTag/Owner": "${aws:username}"}
        }
        }
    ]
}
```

このポリシーをアカウントの IAM ユーザーにアタッチできます。という名前のユーザーが AWS IoT 請求グループを表示`richard-roe`しようとする場合、請求グループには `Owner=richard-roe`または のタグを付ける必要があります`owner=richard-roe`。それ以外の場合、アクセスは拒否されます。条件キー名では大文字と小文字は区別されないため、条件タグキー `Owner` は `Owner` と `owner` に一致します。詳細については、「*IAM ユーザーガイド*」の「[IAM JSON ポリシー要素：条件](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_elements_condition.html)」を参照してください。

## タグに基づく AWS IoT Device Advisor リソースの表示
<a name="security_iam-device-advisor-tags"></a>

アイデンティティベースのポリシーの条件を使用して、タグに基づいて AWS IoT Device Advisor リソースへのアクセスをコントロールできます。次の例は、特定のスイート定義の表示を許可するポリシーを作成する方法を示しています。ただし、アクセス許可が付与されるのは、スイート定義タグが `SuiteType` を `MQTT` の値に設定している場合のみです。このポリシーでは、このアクションをコンソールで実行するために必要なアクセス許可も付与します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewSuiteDefinition",
            "Effect": "Allow",
            "Action": "iotdeviceadvisor:GetSuiteDefinition",
            "Resource": "arn:aws:iotdeviceadvisor:*:*:suitedefinition/*",
            "Condition": {
                "StringEquals": {"aws:ResourceTag/SuiteType": "MQTT"}
        }
        }
    ]
}
```

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







ユーザー、グループ、ロールにアクセス許可を追加するには、自分でポリシーを記述するよりも AWS 管理ポリシーを使用する方が簡単です。チームに必要な権限のみを提供する [IAM カスタマーマネージドポリシーを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)には時間と専門知識が必要です。すぐに開始するには、 AWS マネージドポリシーを使用できます。これらのポリシーは、一般的なユースケースをターゲット範囲に含めており、 AWS アカウントで利用できます。 AWS 管理ポリシーの詳細については、*IAM ユーザーガイド*の「 [AWS 管理ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)」を参照してください。

AWS サービスは、 AWS 管理ポリシーを維持および更新します。 AWS 管理ポリシーのアクセス許可は変更できません。サービスでは新しい機能を利用できるようにするために、 AWS マネージドポリシーに権限が追加されることがあります。この種類の更新はポリシーがアタッチされている、すべてのアイデンティティ (ユーザー、グループおよびロール) に影響を与えます。新しい機能が立ち上げられた場合や、新しいオペレーションが使用可能になった場合に、各サービスが AWS マネージドポリシーを更新する可能性が最も高くなります。サービスは AWS 管理ポリシーからアクセス許可を削除しないため、ポリシーの更新によって既存のアクセス許可が損なわれることはありません。

さらに、 は、複数のサービスにまたがるジョブ関数の 管理ポリシー AWS をサポートしています。例えば、**ReadOnlyAccess** AWS 管理ポリシーは、すべての AWS サービスとリソースへの読み取り専用アクセスを提供します。サービスが新しい機能を起動する場合、 AWS は新たなオペレーションとリソース用に、読み取り専用の許可を追加します。ジョブ機能のポリシーの一覧および詳細については、「*IAM ユーザーガイド*」の「[AWS のジョブ機能のマネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)」を参照してください。

**注記**  
AWS IoT は、 AWS IoT と IAM ポリシーの両方で動作します。このトピックでは、コントロールプレーン API とデータプレーン API オペレーションのポリシーアクションを定義する IAM ポリシーのみについて説明します。[AWS IoT Core ポリシー](iot-policies.md) も参照してください。









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





`AWSIoTConfigAccess` ポリシーを IAM アイデンティティにアタッチできます。



このポリシーは、すべての AWS IoT 設定オペレーションへのアクセスを許可する、関連付けられた ID のアクセス許可を付与します。このポリシーは、データの処理とストレージに影響を与える可能性があります。でこのポリシーを表示するには AWS マネジメントコンソール、「[AWSIoTConfigAccess](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTConfigAccess$jsonEditor?section=permissions)」を参照してください。



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

このポリシーには、以下のアクセス許可が含まれています。




+ `iot` – AWS IoT データを取得し、IoT 設定アクションを実行します。



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:AcceptCertificateTransfer",
                "iot:AddThingToThingGroup",
                "iot:AssociateTargetsWithJob",
                "iot:AttachPolicy",
                "iot:AttachPrincipalPolicy",
                "iot:AttachThingPrincipal",
                "iot:CancelCertificateTransfer",
                "iot:CancelJob",
                "iot:CancelJobExecution",
                "iot:ClearDefaultAuthorizer",
                "iot:CreateAuthorizer",
                "iot:CreateCertificateFromCsr",
                "iot:CreateJob",
                "iot:CreateKeysAndCertificate",
                "iot:CreateOTAUpdate",
                "iot:CreatePolicy",
                "iot:CreatePolicyVersion",
                "iot:CreateRoleAlias",
                "iot:CreateStream",
                "iot:CreateThing",
                "iot:CreateThingGroup",
                "iot:CreateThingType",
                "iot:CreateTopicRule",
                "iot:DeleteAuthorizer",
                "iot:DeleteCACertificate",
                "iot:DeleteCertificate",
                "iot:DeleteJob",
                "iot:DeleteJobExecution",
                "iot:DeleteOTAUpdate",
                "iot:DeletePolicy",
                "iot:DeletePolicyVersion",
                "iot:DeleteRegistrationCode",
                "iot:DeleteRoleAlias",
                "iot:DeleteStream",
                "iot:DeleteThing",
                "iot:DeleteThingGroup",
                "iot:DeleteThingType",
                "iot:DeleteTopicRule",
                "iot:DeleteV2LoggingLevel",
                "iot:DeprecateThingType",
                "iot:DescribeAuthorizer",
                "iot:DescribeCACertificate",
                "iot:DescribeCertificate",
                "iot:DescribeDefaultAuthorizer",
                "iot:DescribeEndpoint",
                "iot:DescribeEventConfigurations",
                "iot:DescribeIndex",
                "iot:DescribeJob",
                "iot:DescribeJobExecution",
                "iot:DescribeRoleAlias",
                "iot:DescribeStream",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:DescribeThingRegistrationTask",
                "iot:DescribeThingType",
                "iot:DetachPolicy",
                "iot:DetachPrincipalPolicy",
                "iot:DetachThingPrincipal",
                "iot:DisableTopicRule",
                "iot:EnableTopicRule",
                "iot:GetEffectivePolicies",
                "iot:GetIndexingConfiguration",
                "iot:GetJobDocument",
                "iot:GetLoggingOptions",
                "iot:GetOTAUpdate",
                "iot:GetPolicy",
                "iot:GetPolicyVersion",
                "iot:GetRegistrationCode",
                "iot:GetTopicRule",
                "iot:GetV2LoggingOptions",
                "iot:ListAttachedPolicies",
                "iot:ListAuthorizers",
                "iot:ListCACertificates",
                "iot:ListCertificates",
                "iot:ListCertificatesByCA",
                "iot:ListIndices",
                "iot:ListJobExecutionsForJob",
                "iot:ListJobExecutionsForThing",
                "iot:ListJobs",
                "iot:ListOTAUpdates",
                "iot:ListOutgoingCertificates",
                "iot:ListPolicies",
                "iot:ListPolicyPrincipals",
                "iot:ListPolicyVersions",
                "iot:ListPrincipalPolicies",
                "iot:ListPrincipalThings",
                "iot:ListRoleAliases",
                "iot:ListStreams",
                "iot:ListTargetsForPolicy",
                "iot:ListThingGroups",
                "iot:ListThingGroupsForThing",
                "iot:ListThingPrincipals",
                "iot:ListThingRegistrationTaskReports",
                "iot:ListThingRegistrationTasks",
                "iot:ListThings",
                "iot:ListThingsInThingGroup",
                "iot:ListThingTypes",
                "iot:ListTopicRules",
                "iot:ListV2LoggingLevels",
                "iot:RegisterCACertificate",
                "iot:RegisterCertificate",
                "iot:RegisterThing",
                "iot:RejectCertificateTransfer",
                "iot:RemoveThingFromThingGroup",
                "iot:ReplaceTopicRule",
                "iot:SearchIndex",
                "iot:SetDefaultAuthorizer",
                "iot:SetDefaultPolicyVersion",
                "iot:SetLoggingOptions",
                "iot:SetV2LoggingLevel",
                "iot:SetV2LoggingOptions",
                "iot:StartThingRegistrationTask",
                "iot:StopThingRegistrationTask",
                "iot:TestAuthorization",
                "iot:TestInvokeAuthorizer",
                "iot:TransferCertificate",
                "iot:UpdateAuthorizer",
                "iot:UpdateCACertificate",
                "iot:UpdateCertificate",
                "iot:UpdateEventConfigurations",
                "iot:UpdateIndexingConfiguration",
                "iot:UpdateRoleAlias",
                "iot:UpdateStream",
                "iot:UpdateThing",
                "iot:UpdateThingGroup",
                "iot:UpdateThingGroupsForThing",
                "iot:UpdateAccountAuditConfiguration",
                "iot:DescribeAccountAuditConfiguration",
                "iot:DeleteAccountAuditConfiguration",
                "iot:StartOnDemandAuditTask",
                "iot:CancelAuditTask",
                "iot:DescribeAuditTask",
                "iot:ListAuditTasks",
                "iot:CreateScheduledAudit",
                "iot:UpdateScheduledAudit",
                "iot:DeleteScheduledAudit",
                "iot:DescribeScheduledAudit",
                "iot:ListScheduledAudits",
                "iot:ListAuditFindings",
                "iot:CreateSecurityProfile",
                "iot:DescribeSecurityProfile",
                "iot:UpdateSecurityProfile",
                "iot:DeleteSecurityProfile",
                "iot:AttachSecurityProfile",
                "iot:DetachSecurityProfile",
                "iot:ListSecurityProfiles",
                "iot:ListSecurityProfilesForTarget",
                "iot:ListTargetsForSecurityProfile",
                "iot:ListActiveViolations",
                "iot:ListViolationEvents",
                "iot:ValidateSecurityProfileBehaviors"
            ],
            "Resource": "*"
        }
    ]
}
```

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





`AWSIoTConfigReadOnlyAccess` ポリシーを IAM アイデンティティにアタッチできます。



このポリシーは、すべての AWS IoT 設定オペレーションへの読み取り専用アクセスを許可する、関連付けられた ID のアクセス許可を付与します。でこのポリシーを表示するには AWS マネジメントコンソール、「[AWSIoTConfigReadOnlyAccess](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTConfigReadOnlyAccess$jsonEditor?section=permissions)」を参照してください。



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

このポリシーには、以下のアクセス許可が含まれています。




+ `iot` — IoT 設定アクションの読み取り専用オペレーションを実行します。



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:DescribeAuthorizer",
                "iot:DescribeCACertificate",
                "iot:DescribeCertificate",
                "iot:DescribeDefaultAuthorizer",
                "iot:DescribeEndpoint",
                "iot:DescribeEventConfigurations",
                "iot:DescribeIndex",
                "iot:DescribeJob",
                "iot:DescribeJobExecution",
                "iot:DescribeRoleAlias",
                "iot:DescribeStream",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:DescribeThingRegistrationTask",
                "iot:DescribeThingType",
                "iot:GetEffectivePolicies",
                "iot:GetIndexingConfiguration",
                "iot:GetJobDocument",
                "iot:GetLoggingOptions",
                "iot:GetOTAUpdate",
                "iot:GetPolicy",
                "iot:GetPolicyVersion",
                "iot:GetRegistrationCode",
                "iot:GetTopicRule",
                "iot:GetV2LoggingOptions",
                "iot:ListAttachedPolicies",
                "iot:ListAuthorizers",
                "iot:ListCACertificates",
                "iot:ListCertificates",
                "iot:ListCertificatesByCA",
                "iot:ListIndices",
                "iot:ListJobExecutionsForJob",
                "iot:ListJobExecutionsForThing",
                "iot:ListJobs",
                "iot:ListOTAUpdates",
                "iot:ListOutgoingCertificates",
                "iot:ListPolicies",
                "iot:ListPolicyPrincipals",
                "iot:ListPolicyVersions",
                "iot:ListPrincipalPolicies",
                "iot:ListPrincipalThings",
                "iot:ListRoleAliases",
                "iot:ListStreams",
                "iot:ListTargetsForPolicy",
                "iot:ListThingGroups",
                "iot:ListThingGroupsForThing",
                "iot:ListThingPrincipals",
                "iot:ListThingRegistrationTaskReports",
                "iot:ListThingRegistrationTasks",
                "iot:ListThings",
                "iot:ListThingsInThingGroup",
                "iot:ListThingTypes",
                "iot:ListTopicRules",
                "iot:ListV2LoggingLevels",
                "iot:SearchIndex",
                "iot:TestAuthorization",
                "iot:TestInvokeAuthorizer",
                "iot:DescribeAccountAuditConfiguration",
                "iot:DescribeAuditTask",
                "iot:ListAuditTasks",
                "iot:DescribeScheduledAudit",
                "iot:ListScheduledAudits",
                "iot:ListAuditFindings",
                "iot:DescribeSecurityProfile",
                "iot:ListSecurityProfiles",
                "iot:ListSecurityProfilesForTarget",
                "iot:ListTargetsForSecurityProfile",
                "iot:ListActiveViolations",
                "iot:ListViolationEvents",
                "iot:ValidateSecurityProfileBehaviors"
            ],
            "Resource": "*"
        }
    ]
}
```

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





`AWSIoTDataAccess` ポリシーを IAM アイデンティティにアタッチできます。



このポリシーは、すべての AWS IoT データオペレーションへのアクセスを許可する、関連付けられた ID アクセス許可を付与します。データオペレーションでは、MQTT または HTTP プロトコルを介してデータを送信します。 AWS マネジメントコンソールのこのポリシーを表示するには、「[https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDataAccess?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTDataAccess?section=permissions)」を参照してください。



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

このポリシーには、以下のアクセス許可が含まれています。




+ `iot` – AWS IoT データを取得し、 AWS IoT メッセージングアクションへのフルアクセスを許可します。



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect",
                "iot:Publish",
                "iot:Subscribe",
                "iot:Receive",
                "iot:GetThingShadow",
                "iot:UpdateThingShadow",
                "iot:DeleteThingShadow",
                "iot:ListNamedShadowsForThing"
            ],
            "Resource": "*"
        }
    ]
}
```

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





`AWSIoTFullAccess` ポリシーを IAM アイデンティティにアタッチできます。



このポリシーは、すべての AWS IoT 設定およびメッセージングオペレーションへのアクセスを許可する、関連付けられた ID のアクセス許可を付与します。でこのポリシーを表示するには AWS マネジメントコンソール、「」を参照してください[https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTFullAccess?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTFullAccess?section=permissions)。



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

このポリシーには、以下のアクセス許可が含まれています。




+ `iot` – AWS IoT データを取得し、設定アクションとメッセージングアクションへの AWS IoT フルアクセスを許可します。
+ `iotjobsdata` – AWS IoT Jobs データを取得し、 AWS IoT Jobs データプレーン API オペレーションへのフルアクセスを許可します。



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:*",
                "iotjobsdata:*"
            ],
            "Resource": "*"
        }
    ]
}
```

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





`AWSIoTLogging` ポリシーを IAM アイデンティティにアタッチできます。



このポリシーは、Amazon CloudWatch Logs グループを作成してグループにログをストリーミングするためのアクセスを許可する関連付けられた ID のアクセス許可を付与します。このポリシーは CloudWatch ログ記録用のロールにアタッチされます。でこのポリシーを表示するには AWS マネジメントコンソール、「」を参照してください[https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTLogging?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTLogging?section=permissions)。



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

このポリシーには、以下のアクセス許可が含まれています。




+ `logs` — CloudWatch ログを取得します。また、CloudWatch Logs のグループを作成し、グループにログをストリーミングすることができます。



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:PutMetricFilter",
                "logs:PutRetentionPolicy",
                "logs:GetLogEvents",
                "logs:DeleteLogStream"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

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





`AWSIoTOTAUpdate` ポリシーを IAM アイデンティティにアタッチできます。



このポリシーは、ジョブの作成 AWS IoT 、署名ジョブの AWS IoT コード、および AWS コード署名者のジョブを記述するためのアクセスを許可する、関連付けられた ID アクセス許可を付与します。でこのポリシーを表示するには AWS マネジメントコンソール、「」を参照してください[`AWSIoTOTAUpdate`。](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTOTAUpdate?section=permissions)



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

このポリシーには、以下のアクセス許可が含まれています。




+ `iot` – AWS IoT ジョブとコード署名ジョブを作成します。
+ `signer` – AWS コード署名者ジョブの作成を実行します。



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "iot:CreateJob",
            "signer:DescribeSigningJob"
        ],
        "Resource": "*"
    }
}
```

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





`AWSIoTRuleActions` ポリシーを IAM アイデンティティにアタッチできます。



このポリシーは、 AWS IoT ルールアクションでサポートされているすべての へのアクセスを許可する、関連付けられた ID アクセス許可を付与 AWS のサービスします。でこのポリシーを表示するには AWS マネジメントコンソール、「」を参照してください[https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTRuleActions?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTRuleActions?section=permissions)。



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

このポリシーには、以下のアクセス許可が含まれています。




+ `iot` - ルールアクションメッセージを公開するためのアクションを実行します。
+ `dynamodb` - DynamoDB テーブルにメッセージを挿入するか、メッセージを DynamoDB テーブルの複数の列に分割します。
+ `s3` - Amazon S3 バケットにオブジェクトを保存します。
+ `kinesis` - Amazon Kinesis ストリームオブジェクトにメッセージを送信します。
+ `firehose` - Firehose ストリームオブジェクトにレコードを挿入します。
+ `cloudwatch` - CloudWatch アラームの状態を変更するか、CloudWatch メトリクスにメッセージデータを送信します。
+ `sns` - Amazon SNS を使用して通知を発行するオペレーションを実行します。このオペレーションは SNS AWS IoT トピックを対象としています。
+ `sqs` - SQS キューに追加するメッセージを挿入します。
+ `es` - OpenSearch Service のサービスにメッセージを送信します。



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "dynamodb:PutItem",
            "kinesis:PutRecord",
            "iot:Publish",
            "s3:PutObject",
            "sns:Publish",
            "sqs:SendMessage*",
            "cloudwatch:SetAlarmState",
            "cloudwatch:PutMetricData",
            "es:ESHttpPut",
            "firehose:PutRecord"
        ],
        "Resource": "*"
    }
}
```

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





`AWSIoTThingsRegistration` ポリシーは IAM ID にアタッチできます。



このポリシーは、`StartThingRegistrationTask` API を使用してモノを一括して登録するアクセスを許可する、関連付けられた ID のアクセス許可を付与します。このポリシーは、データの処理とストレージに影響を与える可能性があります。でこのポリシーを表示するには AWS マネジメントコンソール、「」を参照してください[https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTThingsRegistration?section=permissions](https://console.aws.amazon.com//iam/home#/policies/arn:aws:iam::aws:policy/AWSIoTThingsRegistration?section=permissions)。



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

このポリシーには、以下のアクセス許可が含まれています。




+ `iot` - 一括登録時に、モノを作成し、ポリシーと証明書をアタッチするためのアクションを実行します。



****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:AddThingToThingGroup",
                "iot:AttachPolicy",
                "iot:AttachPrincipalPolicy",
                "iot:AttachThingPrincipal",
                "iot:CreateCertificateFromCsr",
                "iot:CreatePolicy",
                "iot:CreateThing",
                "iot:DescribeCertificate",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:DescribeThingType",
                "iot:DetachPolicy",
                "iot:DetachThingPrincipal",
                "iot:GetPolicy",
                "iot:ListAttachedPolicies",
                "iot:ListPolicyPrincipals",
                "iot:ListPrincipalPolicies",
                "iot:ListPrincipalThings",
                "iot:ListTargetsForPolicy",
                "iot:ListThingGroupsForThing",
                "iot:ListThingPrincipals",
                "iot:RegisterCertificate",
                "iot:RegisterThing",
                "iot:RemoveThingFromThingGroup",
                "iot:UpdateCertificate",
                "iot:UpdateThing",
                "iot:UpdateThingGroupsForThing",
                "iot:AddThingToBillingGroup",
                "iot:DescribeBillingGroup",
                "iot:RemoveThingFromBillingGroup"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```





## AWS IoT AWS 管理ポリシーの更新
<a name="security-iam-awsmanpol-updates"></a>



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




| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
|  [AWSIoTFullAccess](#security-iam-awsmanpol-AWSIoTFullAccess) — 既存のポリシーへの更新  |  AWS IoT は、ユーザーが HTTP プロトコルを使用して AWS IoT Jobs データプレーン API オペレーションにアクセスできるようにする新しいアクセス許可を追加しました。 新しい IAM ポリシープレフィックス を使用すると`iotjobsdata:`、 AWS IoT Jobs データプレーンエンドポイントにアクセスするためのきめ細かなアクセスコントロールが提供されます。コントロールプレーン API オペレーションには、これまでどおり、`iot:` プレフィックスを使用します。詳細については、「[AWS IoT Core HTTPS プロトコルの ポリシー](iot-data-plane-jobs.md#iot-jobs-data-http)」を参照してください。  | 2022 年 5 月 11 日 | 
|  AWS IoT が変更の追跡を開始しました  |  AWS IoT は、 AWS 管理ポリシーの変更の追跡を開始しました。  | 2022 年 5 月 11 日 | 

# AWS IoT ID とアクセスのトラブルシューティング
<a name="security_iam_troubleshoot"></a>

次の情報は、 および IAM の使用時に発生する可能性がある一般的な問題の診断 AWS IoT と修正に役立ちます。

**Topics**
+ [でアクションを実行する権限がありません AWS IoT](#security_iam_troubleshoot-no-permissions)
+ [iam:PassRole を実行する権限がありません](#security_iam_troubleshoot-passrole)
+ [自分の 以外のユーザーに自分の AWS IoT リソース AWS アカウント へのアクセスを許可したい](#security_iam_troubleshoot-cross-account-access)

## でアクションを実行する権限がありません AWS IoT
<a name="security_iam_troubleshoot-no-permissions"></a>

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

以下の例のエラーは、IAM ユーザーの `mateojackson` がコンソールを使用して、モノのリソースの詳細を表示しようとしているが、`iot:DescribeThing` アクセス許可がない場合に発生します。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: iot:DescribeThing on resource: MyIoTThing
```

この場合、`iot:DescribeThing` アクションを使用してモノのリソースへのアクセスを許可するように、`mateojackson` ユーザーのポリシーを更新する必要があります。

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

 AWS IoT Device Advisor の使用  
 AWS IoT Device Advisor を使用している場合、次の例のエラーは、ユーザーがコンソールを使用してスイート定義の詳細を表示`mateojackson`しようとしているが、 アクセス`iotdeviceadvisor:GetSuiteDefinition`許可がない場合に発生します。  

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: iotdeviceadvisor:GetSuiteDefinition on resource: MySuiteDefinition
```
この場合、`iotdeviceadvisor:GetSuiteDefinition` アクションを使用して *`MySuiteDefinition`* リソースへのアクセスを許可するように、`mateojackson` ユーザーのポリシーを更新する必要があります。

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

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

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

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

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

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

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

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

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

詳細については、以下を参照してください:
+ がこれらの機能 AWS IoT をサポートしているかどうかを確認するには、「」を参照してください[が IAM と AWS IoT 連携する方法](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) を参照してください。

# ログ記録とモニタリング
<a name="security-logging"></a>

モニタリングは、 および AWS IoT AWS ソリューションの信頼性、可用性、パフォーマンスを維持する上で重要な部分です。マルチポイント障害が発生した場合は、その障害をより簡単にデバッグできるように、 AWS ソリューションのすべての部分からモニタリングデータを収集する必要があります。ログ記録および監視手順の詳細については、「[モニタリング AWS IoT](monitoring_overview.md)」を参照してください。

## モニタリングツール
<a name="monitoring_automated_manual"></a>

AWS には、モニタリングに使用できるツールが用意されています AWS IoT。自動的にモニタリングが行われるように、これらのツールを設定できます。手動操作を必要とするツールもあります。モニタリングタスクをできるだけ自動化することをお勧めします。

### 自動モニタリングツール
<a name="monitoring_automated_tools"></a>

次の自動モニタリングツールを使用して、問題が発生したときに監視 AWS IoT および報告できます。
+ **Amazon CloudWatch アラーム** - 指定した期間にわたって単一のメトリクスをモニタリングし、複数の期間にわたる特定のしきい値に対するメトリクスの値に基づいて 1 つ以上のアクションを実行します。アクションは、Amazon Simple Notification Service (Amazon SNS) のトピックまたは Amazon EC2 Auto Scaling のポリシーに送信される通知です。CloudWatch アラームは、特定の状態にあるという理由だけではアクションを呼び出しません。状態が変わって、変わった状態が指定期間にわたって維持される必要があります。詳細については、「[Amazon CloudWatch を使用して AWS IoT アラームとメトリクスをモニタリングする](monitoring-cloudwatch.md)」を参照してください。
+ **Amazon CloudWatch Logs** – AWS CloudTrail またはその他のソースからのログファイルをモニタリング、保存、およびアクセスします。Amazon CloudWatch Logs では、Device Advisor のテストケースが実行する重要なステップ AWS IoT 、生成されたイベント、デバイスから送信された MQTT メッセージ、またはテストの実行 AWS IoT Core 中に送信された MQTT メッセージを確認することもできます。これらのログにより、デバイスでデバッグして是正措置を講じることができます。詳細については、[CloudWatch Logs AWS IoT を使用したモニタリング](cloud-watch-logs.md) を参照してください。Amazon CloudWatch の使用の詳細については、*Amazon CloudWatch ユーザーガイド*の[ログファイルのモニタリング](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html)を参照してください。
+ **Amazon CloudWatch Events** – イベントに一致したものを 1 つ以上のターゲットの関数またはストリームに渡して、変更、状態の情報の収集、是正措置を行います。詳細については、*Amazon CloudWatch ユーザーガイド*の「[Amazon CloudWatch Events とは](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchEvents.html)」を参照してください。
+ **AWS CloudTrail ログモニタリング** – アカウント間でログファイルを共有し、CloudWatch Logs に送信CloudWatch CloudTrail ログファイルをリアルタイムでモニタリングし、Java でログ処理アプリケーションを書き込み、CloudTrail による配信後にログファイルが変更されていないことを確認します。詳細については、「[を使用した AWS IoT API コールのログ記録 AWS CloudTrail](iot-using-cloudtrail.md)」と、*AWS CloudTrail ユーザーガイド*の「[CloudTrail ログファイルの操作](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-working-with-log-files.html)」を参照してください。

### 手動モニタリングツール
<a name="monitoring_manual_tools"></a>

モニタリングのもう 1 つの重要な部分は AWS IoT 、CloudWatch アラームでカバーされていない項目を手動でモニタリングすることです。 AWS IoT、CloudWatch、およびその他の AWS サービスコンソールダッシュボードには、 AWS 環境の状態がat-a-glanceビューが表示されます。ログファイルも確認することをお勧めします AWS IoT。
+ AWS IoT ダッシュボードには以下が表示されます。
  + CA 証明書
  + 証明書
  + ポリシー
  + ルール
  + モノ
+ CloudWatch ホームページには、次の内容が表示されます。
  + 現在のアラームとステータス。
  + アラームとリソースのグラフ。
  + サービス状態ステータス。

  CloudWatch を使用して以下のことを実行できます。
  + 重視するサービスをモニタリングするための[カスタマイズしたダッシュボード](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CloudWatch_Dashboards.html)を作成する。
  + メトリクスデータをグラフ化して、問題のトラブルシューティングを行い、傾向を確認する。
  + すべての AWS リソースメトリクスを検索して参照します。
  + 問題があることを通知するアラームを作成および編集する。

# AWS IoT Core のコンプライアンス検証
<a name="compliance"></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/)」を参照してください。

# AWS IoT Core の耐障害性
<a name="disaster-recovery-resiliency"></a>

 AWS グローバルインフラストラクチャは、 AWS リージョンとアベイラビリティーゾーンを中心に構築されています。 AWS リージョンは、低レイテンシー、高スループット、および高度に冗長なネットワークで接続された、物理的に分離および分離された複数のアベイラビリティーゾーンを提供します。アベイラビリティーゾーンでは、アベイラビリティーゾーン間で中断せずに、自動的にフェイルオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、耐障害性、およびスケーラビリティが優れています。

とアベイラビリティーゾーンの詳細については、 AWS リージョン[AWS 「 グローバルインフラストラクチャ](https://aws.amazon.com/about-aws/global-infrastructure/)」を参照してください。

AWS IoT Core は、デバイスに関する情報をデバイスレジストリに保存します。また、CA 証明書、デバイス証明書、およびデバイスシャドウデータも保存されます。このデータは、ハードウェアまたはネットワークに障害が発生しても、このデータはアベイラビリティーゾーン間で自動的に複製されますが、リージョン間では複製されません。

AWS IoT Core デバイスレジストリが更新されると、 は MQTT イベントを発行します。これらのメッセージを使用して、レジストリデータをバックアップし、DynamoDB テーブルなどに保存できます。が作成する証明書、または自分で作成する証明書を保存するのは AWS IoT Core お客様の責任です。Device Shadow はデバイスに関する状態データを保存し、デバイスがオンラインに戻ったときに再送信できます。 AWS IoT Device Advisor は、テストスイートの設定に関する情報を保存します。このデータは、ハードウェアまたはネットワークに障害が発生しても、自動的にはレプリケートされます。

AWS IoT Core リソースはリージョン固有であり、特にそう AWS リージョン しない限り、 間でレプリケートされません。

セキュリティのベストプラクティスの詳細については、「[のセキュリティのベストプラクティス AWS IoT Core](security-best-practices.md)」を参照してください。

# インターフェイス VPC エンドポイント AWS IoT Core での の使用
<a name="IoTCore-VPC"></a>

を使用すると AWS IoT Core、インターフェイス VPC エンドポイントを使用して、仮想プライベートクラウド (VPC) 内に [IoT コントロールプレーン](https://docs.aws.amazon.com//iot/latest/developerguide/connect-to-iot.html#iot-service-endpoint-intro)[エンドポイントと IoT データ](https://docs.aws.amazon.com//iot/latest/developerguide/iot-connect-devices.html)エンドポイントを作成できます。 [https://docs.aws.amazon.com//vpc/latest/userguide/vpce-interface.html#create-interface-endpoint](https://docs.aws.amazon.com//vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)インターフェイス VPC エンドポイントは AWS PrivateLink、プライベート IP アドレス AWS を使用して で実行されているサービスにアクセスするために使用できるテクノロジーである AWS を利用しています。詳細については、「[Amazon Virtual Private Cloud](https://docs.aws.amazon.com//AmazonVPC/latest/UserGuide/VPC_Introduction.html)」を参照してください。

リモートネットワーク上の現場にあるデバイス (企業ネットワークなど) を Amazon VPC の詳細については、「[ネットワークから Amazon VPC への接続マトリックス](https://docs.aws.amazon.com//whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)」に掲載されている様々なリストを参照してください。　 

**Topics**
+ [AWS IoT Core コントロールプレーン用の VPC エンドポイントの作成](#Create-VPC-endpoints-CP)
+ [AWS IoT Core データプレーンの VPC エンドポイントの作成](#Create-VPC-endpoints)
+ [AWS IoT Core 認証情報プロバイダーの VPC エンドポイントの作成](#Create-VPC-endpoints-credential-provider)
+ [Amazon VPC インターフェイスエンドポイントの作成](#Create-VPC-endpoints-core-create-vpc)
+ [プライベートホストゾーンを設定](#connect-iot-core-create-phz-lns)
+ [VPC エンドポイント AWS IoT Core を介した へのアクセスの制御](#Control-VPC-access)
+ [制限事項](#VPC-limitations)
+ [を使用した VPC エンドポイントのスケーリング AWS IoT Core](#Scaling-VPC-endpoints)
+ [VPC エンドポイントでのカスタムドメインの使用](#VPC-custom-domains)
+ [の VPC エンドポイントの可用性 AWS IoT Core](#VPC-availability)
+ [インターフェイス VPC エンドポイントでの AWS IoT Device Management セキュアトンネリングの使用](IoTCore-ST-VPC.md)

## AWS IoT Core コントロールプレーン用の VPC エンドポイントの作成
<a name="Create-VPC-endpoints-CP"></a>

 AWS IoT Core コントロールプレーン API 用の VPC エンドポイントを作成して、デバイスを AWS IoT サービスやその他の AWS サービスに接続できます。VPC エンドポイントの使用を開始するには、[インターフェイス VPC エンドポイントを作成し](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint)、 を AWS サービス AWS IoT Core として選択します。CLI を使用している場合は、まず [describe-vpc-endpoint-services](https://docs.aws.amazon.com//cli/latest/reference/ec2/describe-vpc-endpoint-services.html) を呼び出して、 AWS IoT Core が特定の に存在するアベイラビリティーゾーンを選択していることを確認します AWS リージョン。例えば、us-east-1 では、このコマンドは以下のようになります。

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.iot.api
```

以下の詳細な手順を参照して、 AWS IoT Core コントロールプレーンの [Amazon VPC インターフェイスエンドポイントを作成します](#Create-VPC-endpoints-core-create-vpc)。

## AWS IoT Core データプレーンの VPC エンドポイントの作成
<a name="Create-VPC-endpoints"></a>

 AWS IoT Core データプレーン API の VPC エンドポイントを作成して、デバイスを AWS IoT サービスやその他の AWS サービスに接続できます。VPC エンドポイントの使用を開始するには、[インターフェイス VPC エンドポイントを作成し](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint)、 を AWS サービス AWS IoT Core として選択します。CLI を使用している場合は、まず [describe-vpc-endpoint-services](https://docs.aws.amazon.com//cli/latest/reference/ec2/describe-vpc-endpoint-services.html) を呼び出して、 AWS IoT Core が特定の に存在するアベイラビリティーゾーンを選択していることを確認します AWS リージョン。例えば、us-east-1 では、このコマンドは以下のようになります。

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.iot.data
```

**注記**  
DNS レコードを自動的に作成するための VPC 機能は無効になっています。これらのエンドポイントを接続するには、プライベート DNS レコードを手動で作成する必要があります。プライベート VPC DNS レコードの詳細については、[インターフェイスエンドポイントのプライベート DNS](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#vpce-private-dns) を参照してください。 AWS IoT Core VPC の制限の詳細については、[制限事項](#VPC-limitations)「」を参照してください。

MQTT クライアントを VPC エンドポイントインターフェイスに接続するには
+ VPC にアタッチされているプライベートホストゾーンに DNS レコードを手動で作成する必要があります。開始するには、「[プライベートホストゾーンの作成](https://docs.aws.amazon.com//Route53/latest/DeveloperGuide/hosted-zone-private-creating.html)」を参照してください。
+ プライベートホストゾーン内で、VPC エンドポイントの各 Elastic Network Interface IP のエイリアスレコードを作成します。複数の VPC エンドポイントに複数のネットワークインターフェイス IP がある場合、すべての加重レコードを通して等しい加重の DNS レコードを作成する必要があります。これらの IP アドレスは、説明フィールドの VPC エンドポイント ID でフィルタリングした場合に、[DescribeNetworkInterfaces](https://docs.aws.amazon.com//AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html) API コールから取得できます。

以下の詳細な手順を参照して、[Amazon VPC インターフェイスエンドポイントを作成し](#Create-VPC-endpoints-core-create-vpc)、 AWS IoT Core データプレーンの[プライベートホストゾーンを設定します](#connect-iot-core-create-phz-lns)。

## AWS IoT Core 認証情報プロバイダーの VPC エンドポイントの作成
<a name="Create-VPC-endpoints-credential-provider"></a>

VPC エンドポイントの AWS IoT Core [認証情報プロバイダー](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html)を作成して、クライアント証明書ベースの認証を使用してデバイスに接続し、[AWS 署名バージョン 4 形式で](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_aws-signing.html)一時的な AWS 認証情報を取得できます。 AWS IoT Core 認証情報プロバイダーの VPC エンドポイントの使用を開始するには、[create-vpc-endpoint](https://docs.aws.amazon.com//cli/latest/reference/ec2/create-vpc-endpoint.html) CLI コマンドを実行して[インターフェイス VPC エンドポイントを作成し](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#create-interface-endpoint)、 AWS サービスとして AWS IoT Core 認証情報プロバイダーを選択します。特定の AWS IoT Core に存在するアベイラビリティーゾーンを選択するには AWS リージョン、まず [describe-vpc-endpoint-services](https://docs.aws.amazon.com//cli/latest/reference/ec2/describe-vpc-endpoint-services.html) コマンドを実行します。例えば、us-east-1 では、このコマンドは以下のようになります。

```
aws ec2 describe-vpc-endpoint-services --service-name com.amazonaws.us-east-1.iot.credentials
```

**注記**  
DNS レコードを自動的に作成するための VPC 機能は無効になっています。これらのエンドポイントを接続するには、プライベート DNS レコードを手動で作成する必要があります。プライベート VPC DNS レコードの詳細については、[インターフェイスエンドポイントのプライベート DNS](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-interface.html#vpce-private-dns) を参照してください。 AWS IoT Core VPC の制限の詳細については、[制限事項](#VPC-limitations)「」を参照してください。

HTTP クライアントを VPC エンドポイントインターフェイスに接続するには
+ VPC にアタッチされているプライベートホストゾーンに DNS レコードを手動で作成する必要があります。開始するには、「[プライベートホストゾーンの作成](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html)」を参照してください。
+ プライベートホストゾーン内で、VPC エンドポイントの各 Elastic Network Interface IP のエイリアスレコードを作成します。複数の VPC エンドポイントに複数のネットワークインターフェイス IP がある場合、すべての加重レコードを通して等しい加重の DNS レコードを作成する必要があります。これらの IP アドレスは、説明フィールドの VPC エンドポイント ID でフィルタリングした場合に、[DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html) API コールから取得できます。

以下の詳細な手順を参照して、[Amazon VPC インターフェイスエンドポイントを作成し](#Create-VPC-endpoints-core-create-vpc)、 AWS IoT Core 認証情報プロバイダーの[プライベートホストゾーンを設定します](#connect-iot-core-create-phz-lns)。

## Amazon VPC インターフェイスエンドポイントの作成
<a name="Create-VPC-endpoints-core-create-vpc"></a>

インターフェイス VPC エンドポイントを作成して、 AWS のサービスに接続できます AWS PrivateLink。次の手順を使用して、 AWS IoT Core データプレーンまたは AWS IoT Core 認証情報プロバイダーに接続するインターフェイス VPC エンドポイントを作成します。詳細については、[「インターフェイス VPC エンドポイントを使用して AWS サービスにアクセスする](https://docs.aws.amazon.com//vpc/latest/privatelink/create-interface-endpoint.html)」を参照してください。

**注記**  
 AWS IoT Core データプレーンと AWS IoT Core 認証情報プロバイダーの Amazon VPC インターフェイスエンドポイントを作成するプロセスは似ていますが、接続を機能させるにはエンドポイント固有の変更を行う必要があります。

 **[VPC](https://console.aws.amazon.com/vpc/home#/endpoints) **エンドポイント**コンソールを使用して VPC エンドポイントを使用してインターフェイスを作成するには** 

1. [VPC](https://console.aws.amazon.com/vpc/home#/endpoints) **エンドポイント**コンソールに移動し、左側のメニューの **[仮想プライベートクラウド]** で **[エンドポイント]**、**[エンドポイントを作成]** を選択します。

1. **[エンドポイントの作成]** ページで、以下の情報を指定します。
   + **[Service category]** (サービスカテゴリ) には **[AWS のサービス s]** を選択します。
   + [**Service Name**] (サービス名) については、キーワード `iot` を入力して検索します。表示された `iot` サービスのリストで、エンドポイントを選択します。

      AWS IoT Core コントロールプレーンの VPC エンドポイントを作成する場合は、 の AWS IoT Core コントロールプレーン API エンドポイントを選択します AWS リージョン。エンドポイントは `com.amazonaws.region.iot.api` の形式です。

      AWS IoT Core データプレーンの VPC エンドポイントを作成する場合は、リージョン AWS IoT Core のデータプレーン API エンドポイントを選択します。エンドポイントは `com.amazonaws.region.iot.data` の形式です。

      AWS IoT Core 認証情報プロバイダーの VPC エンドポイントを作成する場合は、リージョンの AWS IoT Core 認証情報プロバイダーエンドポイントを選択します。エンドポイントは `com.amazonaws.region.iot.credentials` の形式です。

     連邦情報処理規格 (FIPS) リージョンの VPC エンドポイントを作成する場合は、 の FIPS API エンドポイントを選択します AWS リージョン。エンドポイントは `com.amazonaws.region.iot-fips.api` の形式です。これはコントロールプレーン専用です。
**注記**  
中国リージョン AWS IoT Core のデータプレーンのサービス名は、 の形式になります`cn.com.amazonaws.region.iot.data`。中国リージョンの AWS IoT Core コントロールプレーンのサービス名は、 の形式になります`com.amazonaws.region.iot.api`。
   + [**VPC**] と [**Subnets**] (サブネット) には、エンドポイントを作成する VPC と、エンドポイントネットワークを作成するアベイラビリティーゾーン (AZ) を選択します。
   + **DNS 名を有効にする** では、**このエンドポイントの有効化**が AWS IoT Core データプレーンと AWS IoT Core 認証情報プロバイダーに対して選択されていないことを確認してください。 AWS IoT Core データプレーンも AWS IoT Core 認証情報プロバイダーもプライベート DNS 名をまだサポートしていません。

      AWS IoT Core コントロールプレーンの場合、デフォルトで **Enable DNS name** が選択されます。これにより、コントロールプレーンの AWS IoT Core パブリックエンドポイントへのリクエストは、代わりに VPC エンドポイントを介してルーティングされます。これを有効にすると、プライベートホストゾーンを設定する必要はありません。
   + [**Security group**] (セキュリティグループ) には、エンドポイントネットワークインターフェイスに関連付けるセキュリティグループを選択します。
   + オプションで、タグを追加または削除できます。タグとは名前と値のペアで、エンドポイントに関連付けるために使用します。

1. **[Create Endpoint]** (エンドポイントの作成) をクリックして、VPC エンドポイントを作成します。

 AWS PrivateLink エンドポイントを作成すると、エンドポイント**の詳細**タブに DNS 名のリストが表示されます。このセクションで作成したこれらの DNS 名のいずれかを使用して、[プライベートホストゾーンを設定できます](#connect-iot-core-create-phz-lns)。 AWS IoT Core コントロールプレーンを使用している場合は、プライベートホストゾーンを設定する必要はありません。

## プライベートホストゾーンを設定
<a name="connect-iot-core-create-phz-lns"></a>

**注記**  
 AWS IoT Core コントロールプレーンを使用していて、**DNS 名の有効化**が選択されている場合は、プライベートホストゾーンを設定する必要はありません。無効にする場合は、以下の手順に従ってプライベートホストゾーンを設定する必要があります。

前のセクションで作成したこれらの DNS 名のいずれかを使用して、プライベートホストゾーンを設定できます。

 ** AWS IoT Core データプレーンの場合** 

DNS 名は、ドメイン設定名または `IoT:Data-ATS` エンドポイントである必要があります。例えば、DNS 名は、` xxx-ats.data.iot.region.amazonaws.com` などがあります。

 ** AWS IoT Core 認証情報プロバイダーの場合** 

DNS 名は `iot:CredentialProvider` エンドポイントである必要があります。例えば、DNS 名は、` xxxx.credentials.iot.region.amazonaws.com` などがあります。

 ** AWS IoT Core コントロールプレーンの場合** 

DNS 名は AWS IoT Core コントロールプレーンエンドポイントである必要があります。 AWS IoT Core コントロールプレーンの DNS 名の例は です` xxxx.api.iot.region.amazonaws.com`。

**注記**  
 AWS IoT Core データプレーンと AWS IoT Core 認証情報プロバイダーのプライベートホストゾーンを設定するプロセスは似ていますが、接続を機能させるにはエンドポイント固有の変更を行う必要があります。

### プライベートホストゾーンを作成します。
<a name="connect-iot-core-create-phz-lns-private-hosted-zone"></a>

 **Route 53 コンソールを使用してプライベートホストゾーンを作成するには** 

1. [Route 53](https://console.aws.amazon.com/route53/v2/hostedzones#/) の [**Hosted zones**] (ホストゾーン) コンソールに移動して、[**Create hosted zone**] (ホストゾーンの作成) をクリックします。

1. [**Create hosted zone**] (ホストゾーンの作成) ページで、以下の情報を指定します。
   + **[ドメイン名]** には、`iot:Data-ATS` または `iot:CredentialProvider` エンドポイントのエンドポイントアドレスを入力します。次の AWS CLI コマンドは、パブリックネットワークの `aws iot describe-endpoint --endpoint-type iot:Data-ATS` または `aws iot describe-endpoint --endpoint-type iot:CredentialProvider` を通じてエンドポイントを取得する方法を示しています。
**注記**  
カスタムドメインを使用している場合は、「[VPC コマンドでのカスタムドメインの使用](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html#VPC-custom-domains)」を参照してください。カスタムドメインは、 AWS IoT Core 認証情報プロバイダーではサポートされていません。
   + **[タイプ]** には、**[プライベートホストゾーン]** を選択します。
   + 必要に応じて、タグを追加または削除してホストゾーンに関連付けることができます。

1. プライベートホストゾーンを作成するには、**ホストゾーンの作成**を選んでください。

詳細については、「[プライベートホストゾーンの作成](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html)」を参照してください。

### レコードを作成する
<a name="connect-iot-core-create-phz-lns-create-record"></a>

プライベートホストゾーンを作成したら、そのドメインにトラフィックをルーティングする方法を DNS に指示するレコードを作成できます。

 **レコードを作成するには** 

1. 表示されるホストゾーンのリストで、前に作成したプライベートホストゾーンを選び、**レコードを作成する**を選びます。

1. ウィザードを使用してレコードを作成します。コンソールに [**Quick create**] (クイック作成) 方式が表示された場合は、[**Switch to wizard**] (ウィザードに切り替える) をクリックします。

1. [**Routing policy**] (ルーティングポリシー) に [**Simple Routing**] (シンプルルーティング) を選択し、[**Next**] (次へ) を選びます。

1. [**Configure records**] (レコードを設定)ページで、[**Define simple record**] (シンプルなレコードを定義) を選択します。

1. [**Define simple record**] (シンプルなレコードを定義) ページで
   + **[レコード名]** に `iot:Data-ATS` エンドポイントまたは `iot:CredentialProvider` エンドっポイントを入力します。これは、プライベートホストゾーン名と同じである必要があります。
   + **[レコードタイプ]** では、IPv4 サポートのみが必要な場合は、値を `A - Routes traffic to an IPv4 address and some AWS resources` にします。IPv6 サポートのみが必要な場合は、値を `AAAA - Routes traffic to an IPv6 address and some AWS resources` にします。デュアルスタックのサポート (IPv4 と IPv6 の両方) が必要な場合は、同じ**レコード名**と**値/トラフィックのルーティング先**を使用して 2 つのレコード (`A` と `AAAA`) をホストゾーンに作成します。
   + [**Value/Route traffic to (値/トラフィックのルーティング先)**] には、[**Alias to VPC endpoint ( VPCエンドポイントへのエイリアス)**] を選択します。次に、お使いの [**Region**] (地域）を選択し、表示されたエンドポイントのリストから、「[Amazon VPC インターフェイスエンドポイントの作成](#Create-VPC-endpoints-core-create-vpc)」の説明に従って先ほど作成したエンドポイントを選択します。

1. [**Define simple record**] (シンプルなレコードを定義) をクリックしてレコードを作成します。

## VPC エンドポイント AWS IoT Core を介した へのアクセスの制御
<a name="Control-VPC-access"></a>

VPC [条件コンテキストキー](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html)を使用して、VPC エンドポイントを介してのみデバイスアクセスを許可する AWS IoT Core ように制限できます。 は、次の VPC 関連のコンテキストキー AWS IoT Core をサポートしています。
+  [SourceVpc](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpc) 
+  [SourceVpce](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpce) 
+  [VPCSourceIp](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-vpcsourceip) 

**注記**  
AWS IoT Core は [VPC エンドポイントのエンドポイントポリシー](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-access.html#vpc-endpoint-policies)をサポートしていません。

例えば、次のポリシーは、モノの名前に一致するクライアント ID AWS IoT Core を使用して に接続し、モノの名前のプレフィックスが付いた任意のトピックに発行するアクセス許可を付与します。これは、特定の VPC エンドポイント ID を持つ VPC エンドポイントに接続するデバイスを条件とします。このポリシーでは、パブリック IoT データエンドポイントへの接続試行が拒否されます。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpce": "vpce-1a2b3c4d"
            }
        }
            
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}/*"
            ]
        }
    ]
}
```

## 制限事項
<a name="VPC-limitations"></a>

VPC エンドポイントは現在、[AWS IoT Core コントロールプレーンエンドポイント](https://docs.aws.amazon.com//iot/latest/developerguide/connect-to-iot.html#iot-service-endpoint-intro)、[AWS IoT Core データエンドポイント](https://docs.aws.amazon.com//iot/latest/developerguide/iot-connect-devices.html#iot-connect-device-endpoints)、[AWS IoT Core 認証情報プロバイダー](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.htm)エンドポイントでサポートされています。VPC エンドポイントは、コントロールプレーンを使用する場合、[連邦情報処理規格 (FIPS) エンドポイント](https://docs.aws.amazon.com//iot/latest/developerguide/iot-connect-fips.html)でのみサポートされます。 AWS IoT Core 

### IoT コントロールプレーン VPC エンドポイントの制限事項
<a name="VPC-limitations-iot-control"></a>

このセクションでは、IoT コントロールプレーン VPC エンドポイントの制限について説明します。
+ VPC エンドポイントは ATS 証明書のみを提供します。
+ カスタムドメインは、コントロールプレーンエンドポイントではサポートされていません。
+ FIPS セキュリティポリシーの詳細については、[「FIPS セキュリティポリシー](https://docs.aws.amazon.com//elasticloadbalancing/latest/application/describe-ssl-policies.html#fips-security-policies)」を参照してください。

### IoT データ VPC エンドポイントの制限
<a name="VPC-limitations-iot-data"></a>

このセクションでは、IoT データ VPC エンドポイントの制限について説明します。
+ MQTT キープアライブ期間は 230 秒に制限されています。これ以上のキープアライブ期間は、自動的に 230 秒に短縮されます。
+ 各 VPC エンドポイントは、合計で 100,000 台の同時接続デバイスをサポートします。さらに接続が必要な場合は、[を使用した VPC エンドポイントのスケーリング AWS IoT Core](#Scaling-VPC-endpoints)「」を参照してください。
+ VPC エンドポイントは [ATS 証明書](https://docs.aws.amazon.com//iot/latest/developerguide/server-authentication.html)のみに対応します (カスタムドメインを除く)。
+  [VPC エンドポイントポリシー](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-access.html)はサポートされません。
+  AWS IoT Core データプレーン用に作成された VPC エンドポイントの場合、 AWS IoT Core はゾーンまたはリージョンのパブリック DNS レコードの使用をサポートしていません。

### 認証情報プロバイダーエンドポイントの制限
<a name="VPC-limitations-credential-provider"></a>

このセクションでは、認証情報プロバイダー VPC エンドポイントの制限について説明します。
+ VPC エンドポイントは [ATS 証明書](https://docs.aws.amazon.com//iot/latest/developerguide/server-authentication.html)のみを提供します。
+  [VPC エンドポイントポリシー](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-access.html)はサポートされません。
+ 認証情報プロバイダーエンドポイントでは、カスタムドメインはサポートされていません。
+  AWS IoT Core 認証情報プロバイダー用に作成された VPC エンドポイントの場合、 AWS IoT Core はゾーンまたはリージョンのパブリック DNS レコードの使用をサポートしていません。

## を使用した VPC エンドポイントのスケーリング AWS IoT Core
<a name="Scaling-VPC-endpoints"></a>

AWS IoT Core インターフェイス VPC エンドポイントは、1 つのインターフェイスエンドポイントで 100,000 台の接続デバイスに制限されています。ユースケースでブローカーに対する同時接続がこれ以上必要になる場合は、複数の VPC エンドポイントを使用して、インターフェイスエンドポイント間でのデバイスのルーティングを手動で行うことをお勧めします。VPC エンドポイントにトラフィックをルーティングするプライベート DNS レコードを作成するときは、VPC エンドポイントと同じ数の加重レコードを作成して、複数のエンドポイント全体にトラフィックを分散するようにしてください。

## VPC エンドポイントでのカスタムドメインの使用
<a name="VPC-custom-domains"></a>

VPC エンドポイントでカスタムドメインを使用する場合は、プライベートホストゾーンにカスタムドメイン名レコードを作成し、Route53 でルーティングレコードを作成する必要があります。詳細については、「[プライベートホストゾーンの作成](https://docs.aws.amazon.com//Route53/latest/DeveloperGuide/hosted-zone-private-creating.html)」を参照してください。

**注記**  
カスタムドメインは、 AWS IoT Core データエンドポイントでのみサポートされています。

## の VPC エンドポイントの可用性 AWS IoT Core
<a name="VPC-availability"></a>

AWS IoT Core インターフェイス VPC エンドポイントは、[AWS IoT Core サポートされているすべてのリージョン](https://aws.amazon.com//about-aws/global-infrastructure/regional-product-services/)で使用できます。認証情報プロバイダーの AWS IoT Core AWS IoT Core インターフェイス VPC エンドポイントは、中国リージョンおよび ではサポートされていません AWS GovCloud (US) Regions。

# インターフェイス VPC エンドポイントでの AWS IoT Device Management セキュアトンネリングの使用
<a name="IoTCore-ST-VPC"></a>

AWS IoT Device Management セキュアトンネリングは、インターフェイス VPC エンドポイントをサポートします。VPC エンドポイントを使用すると、インターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続を必要とせずに、VPC と AWS ネットワーク AWS IoT Secure Tunneling 間のトラフィックを維持できます。

インターフェイス VPC エンドポイントは[AWS PrivateLink](https://docs.aws.amazon.com//vpc/latest/privatelink/what-is-privatelink.html)、プライベート IP アドレスを使用して サービスにプライベートにアクセスできるテクノロジーである を利用しています。詳細については、「 AWS PrivateLink ガイド[」の「インターフェイス VPC エンドポイントを使用して AWS サービスにアクセスする](https://docs.aws.amazon.com//vpc/latest/privatelink/create-interface-endpoint.html)」を参照してください。

**Topics**
+ [前提条件](#Create-ST-VPC-endpoints-prereq)
+ [VPC エンドポイントを介したトンネル通知の受信](#ST-VPC-Receive-notifications)
+ [セキュアトンネリング用の VPC エンドポイントの作成](#Create-ST-VPC-endpoints-Create)
+ [Proxy Server での VPC エンドポイントポリシーの設定](#Create-ST-VPC-endpoints-Configure)
+ [次の手順](#Create-ST-VPC-endpoints-Next)

## 前提条件
<a name="Create-ST-VPC-endpoints-prereq"></a>

の VPC エンドポイントを作成する前に AWS IoT Secure Tunneling、以下があることを確認します。
+ VPC エンドポイントを作成するために必要なアクセス許可を持つ AWS アカウント。
+  AWS アカウントの VPC。
+  AWS IoT Device Management セキュアトンネリングの概念の理解。
+ VPC エンドポイントポリシーと AWS Identity and Access Management (IAM) に精通していること

## VPC エンドポイントを介したトンネル通知の受信
<a name="ST-VPC-Receive-notifications"></a>

VPC エンドポイントを介してトンネル通知を受信するために、デバイスは VPC エンドポイントを介して AWS IoT Core データプレーンに接続し、セキュアトンネリング予約 MQTT トピックにサブスクライブできます。

 AWS IoT Core データプレーンで VPC エンドポイントを作成して設定する手順については、「 AWS IoT デベロッパーガイド」の[「インターフェイス VPC エンドポイント AWS IoT Core で ](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html)を使用する」を参照してください。

## セキュアトンネリング用の VPC エンドポイントの作成
<a name="Create-ST-VPC-endpoints-Create"></a>

セキュアトンネリングコントロールプレーンとプロキシサーバーの両方の VPC エンドポイントを作成できます。

**セキュアトンネリング用の VPC エンドポイントを作成するには**

1. 「Amazon VPC [デベロッパーガイド」の「インターフェイスエンドポイントの作成](https://docs.aws.amazon.com//vpc/latest/privatelink/create-interface-endpoint.html)」のステップに従います。

1. **サービス名**で、エンドポイントタイプに基づいて次のいずれかのオプションを選択します。

**コントロールプレーン**
   + 標準: `com.amazonaws.<region>.iot.tunneling.api` 
   + FIPS (FIPS リージョンで利用可能): `com.amazonaws.<region>.iot-fips.tunneling.api` 

**プロキシサーバー**
   + 標準: `com.amazonaws.<region>.iot.tunneling.data` 
   + FIPS (FIPS リージョンで利用可能): `com.amazonaws.<region>.iot-fips.tunneling.data` 

   *<region>* を に置き換えます AWS リージョン。例えば、`us-east-1`。

1. ネットワーク要件に従って、VPC エンドポイント作成プロセスの残りのステップを完了します。

## Proxy Server での VPC エンドポイントポリシーの設定
<a name="Create-ST-VPC-endpoints-Configure"></a>

トンネルへの接続を許可するために使用されるクライアントアクセストークンベースの認可に加えて、VPC エンドポイントポリシーを使用して、デバイスが VPC エンドポイントを使用して Secure Tunneling Proxy Server に接続する方法をさらに制限できます。VPC エンドポイントポリシーは IAM のような構文に従い、VPC エンドポイント自体で設定されます。

プロキシサーバー VPC エンドポイントポリシーでサポートされている IAM アクションは のみです`iot:ConnectToTunnel`。

以下は、さまざまな VPC エンドポイントポリシーの例です。

### プロキシサーバー VPC エンドポイントポリシーの例
<a name="w2aac17c35c31c15b9"></a>

次の例は、一般的なユースケースの Proxy Server VPC エンドポイントポリシー設定を示しています。

**Example - デフォルトポリシー**  
このポリシーにより、VPC 内のデバイスは、任意のアカウントで AWS リージョン エンドポイントが作成されたのと同じ 内の任意の AWS トンネルに接続できます。  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": "*"
        }
    ]
}
```

**Example - 特定の AWS アカウントへのアクセスを制限する**  
このポリシーにより、VPC エンドポイントは特定の AWS アカウントのトンネルにのみ接続できます。  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": [
                "arn:aws:iot:us-east-1:111122223333:tunnel/*",
                "arn:aws:iot:us-east-1:444455556666:tunnel/*"
            ]
        }
    ]
}
```

**Example - トンネルエンドポイントによる接続の制限**  
VPC エンドポイントへのアクセスを制限して、デバイスがトンネルの送信元または送信先の端に接続することのみを許可できます。  
ソースのみ:  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iot:ClientMode": "source"
                }
            }
        }
    ]
}
```

送信先のみ:

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iot:ClientMode": "destination"
                }
            }
        }
    ]
}
```

**Example - リソースタグに基づいてアクセスを制限する**  
このポリシーにより、VPC エンドポイントは、特定のキーと値のペアでタグ付けされたトンネルにのみ接続できます。  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Environment": "Production"
                }
            }
        }
    ]
}
```

**Example - 結合ポリシー条件**  
このポリシーは、複数のポリシー要素を組み合わせる方法を示しています。これにより、特定の AWS アカウントの任意のトンネルへの接続が許可されますが、トンネルが `AllowConnectionsThroughPrivateLink`に設定され`true`、クライアントがトンネルの送信先端に接続していないというタグが付けられている場合に限られます。  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": [
                "arn:aws:iot:us-east-1:111122223333:tunnel/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AllowConnectionsThroughPrivateLink": "true"
                }
            }
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "iot:ConnectToTunnel",
            "Resource": [
                "arn:aws:iot:us-east-1:111122223333:tunnel/*"
            ],
            "Condition": {
                "StringEquals": {
                    "iot:ClientMode": "destination"
                }
            }
        }
    ]
}
```

## 次の手順
<a name="Create-ST-VPC-endpoints-Next"></a>

の VPC エンドポイントを作成して設定したら AWS IoT Secure Tunneling、次の点を考慮してください。
+ エンドポイントを介してデバイスを接続して、VPC エンドポイント設定をテストします。
+  Amazon CloudWatch メトリクスを使用して VPC エンドポイントの使用状況をモニタリングします。
+ セキュリティ要件に応じて、VPC エンドポイントポリシーを確認して更新します。

 AWS IoT Device Management セキュアトンネリングの詳細については、「」を参照してください[AWS IoT Secure Tunneling](https://docs.aws.amazon.com//iot/latest/developerguide/secure-tunneling.html)。

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

マネージドサービスのコレクションとして、 AWS IoT は、ホワイトペーパー[「Amazon Web Services: セキュリティプロセスの概要](https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf)」に記載されている AWS グローバルネットワークセキュリティ手順で保護されています。

 AWS が発行した API コールを使用して、ネットワーク AWS IoT 経由で にアクセスします。クライアントは、Transport Layer Security (TLS) 1.2 以降をサポートする必要があります。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman (ECDHE) などの Perfect Forward Secrecy (PFS) を使用した暗号スイートもクライアントでサポートされている必要があります。これらのモードは、Java 7 以降など、最近のほとんどのシステムでサポートされています。詳細については、「[のトランスポートセキュリティ AWS IoT Core](transport-security.md)」を参照してください。

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

# AWS IoT Core を使用した本番稼働用フリートまたはデバイスのセキュリティモニタリング
<a name="security-monitoring"></a>

IoT フリートは、多様な機能を持ち、存続期間が長く、地理的に分散される多数のデバイスで構成されることがあります。このような特性によってフリートのセットアップが複雑になり、エラーを起こしやすくなります。また、デバイスの計算能力、メモリ、ストレージの機能には制約があるため、デバイス自体での暗号化や他の形式のセキュリティの使用が制限されます。さらに、デバイスは多く場合、既知の脆弱性を持つソフトウェアを使用しています。このような要素が原因で、IoT フリートはハッカーの魅力的なターゲットとなり、デバイスフリートを継続的に保護することが困難になっています。

AWS IoT Device Defender は、セキュリティの問題やベストプラクティスからの逸脱を特定するためのツールを提供することで、これらの課題に対処します。 AWS IoT Device Defender を使用して、接続されたデバイスを分析、監査、モニタリングして異常な動作を検出し、セキュリティリスクを軽減できます。 AWS IoT Device Defender は、デバイスフリートを監査して、セキュリティのベストプラクティスに準拠していることを確認して、デバイスの異常な動作を検出できます。これにより、 AWS IoT デバイスフリート全体に一貫したセキュリティポリシーを適用し、デバイスが侵害されたときに迅速に対応できます。詳細については、「[AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html)」を参照してください。

AWS IoT Device Advisor は、必要に応じてフリートの更新とパッチをプッシュします。 AWS IoT Device Advisor はテストケースを自動的に更新します。選択するテストケースには常に最新バージョンが使用されています。詳細については、「[Device Advisor](device-advisor.md)」を参照してください。

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

このセクションでは、 のセキュリティのベストプラクティスについて説明します AWS IoT Core。産業における IoT ソリューションのセキュリティルールについては、「[産業における IoT ソリューションにおける 10 のセキュリティゴールデンルール](https://aws.amazon.com/blogs/iot/ten-security-golden-rules-for-industrial-iot-solutions/)」を参照してください。

## での MQTT 接続の保護 AWS IoT
<a name="secure-mqtt"></a>

[AWS IoT Core](https://aws.amazon.com/iot-core/) は、接続されたデバイスがクラウドアプリケーションやその他のデバイスと簡単かつ安全にやり取りできるようにするマネージドクラウドサービスです。 は、断続的な接続を許容するように特別に設計された軽量通信プロトコルである HTTP、[WebSocket](https://en.wikipedia.org/wiki/WebSocket)、および [MQTT](https://en.wikipedia.org/wiki/MQTT) AWS IoT Core をサポートしています。MQTT AWS IoT を使用して に接続する場合は、各接続をクライアント ID と呼ばれる識別子に関連付ける必要があります。MQTT クライアント ID は、MQTT 接続を一意に識別します。別の接続に対して既に要求されているクライアント ID を使用して新しい接続が確立された場合、 AWS IoT メッセージブローカーは古い接続を削除して新しい接続を許可します。クライアント IDsは、それぞれ内で一意である必要があります AWS アカウント AWS リージョン。つまり、 の外部 AWS アカウント または 内のリージョン間でクライアント IDs のグローバル一意性を適用する必要はありません AWS アカウント。

デバイスフリートでの MQTT 接続の中断の影響と重大度は、多くの要因によって異なります。具体的には次のとおりです。
+ ユースケース (デバイスが送信するデータ、データ AWS IoTの量、データの送信頻度など）。
+ MQTT クライアント設定 (例えば、自動再接続設定、関連するバックオフタイミング、[MQTT 永続セッション](mqtt.md#mqtt-persistent-sessions)の使用など)。
+ デバイスリソースの制約。
+ 切断の根本原因、その積極性、永続性。

クライアント ID の競合とその潜在的な悪影響を回避するには、各デバイスまたはモバイルアプリケーションに、 AWS IoT メッセージブローカーへの MQTT 接続に使用できるクライアント IDs を制限する AWS IoT または IAM ポリシーがあることを確認してください。例えば、IAM ポリシーを使用すると、既に使用中のクライアント ID を使用することによりデバイスが意図せず別のデバイスの接続を閉じないようにすることができます。詳細については、「[Authorization](iot-authorization.md)」を参照してください。

フリート内のすべてのデバイスには、意図したアクションのみを認可する権限を持つ認証情報が必要です。これには、メッセージの発行や特定のスコープとコンテキストを持つトピックへのサブスクライブなどの AWS IoT MQTT アクションが含まれますが、これらに限定されません。特定のアクセス許可ポリシーは、ユースケースによって異なる場合があります。ビジネス要件とセキュリティ要件に最も合うアクセス許可ポリシーを特定します。

アクセス許可ポリシーの作成と管理を簡素化するために、[AWS IoT Core ポリシー変数](iot-policy-variables.md) および [IAM ポリシー変数](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)を使用できます。ポリシー変数はポリシーに配置でき、ポリシーが評価されると、変数はデバイスのリクエストから取得された値に置き換えられます。ポリシー変数を使用して、複数のデバイスにアクセス許可を付与する単一のポリシーを作成できます。 AWS IoT メッセージブローカーへの接続に使用される AWS IoT アカウント設定、認証メカニズム、ネットワークプロトコルに基づいて、ユースケースに関連するポリシー変数を特定できます。ただし、最良のアクセス許可ポリシーを記述するには、使用状況と[脅威モデル](https://en.wikipedia.org/wiki/Threat_model)の詳細を考慮してください。

たとえば、デバイスを AWS IoT レジストリに登録した場合、 AWS IoT ポリシーで[モノのポリシー変数](thing-policy-variables.md)を使用して、モノの名前、モノのタイプ、モノの属性値などのモノのプロパティに基づいてアクセス許可を付与または拒否できます。モノの名前は、モノの接続時に送信される MQTT 接続メッセージのクライアント ID から取得されます AWS IoT。モノのポリシー変数は、モノが TLS 相互認証を使用して MQTT AWS IoT 経由で に接続するか、認証された [Amazon Cognito ID](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identities.html) を使用して WebSocket プロトコル経由で MQTT に接続すると置き換えられます。[AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html) API を使用して、証明書と認証された Amazon Cognito ID をモノにアタッチできます。`iot:Connection.Thing.ThingName` は、クライアント ID の制限を適用するために便利なモノのポリシー変数です。次の AWS IoT ポリシー例では、 AWS IoT メッセージブローカーへの MQTT 接続のクライアント ID として登録済みモノの名前を使用する必要があります。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "iot:Connect",
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			]
		}
	]
}
```

進行中のクライアント ID の競合を特定する場合は、[CloudWatch Logs AWS IoT](cloud-watch-logs.md)を有効にして使用できます。クライアント ID の競合により AWS IoT メッセージブローカーが切断する MQTT 接続ごとに、次のようなログレコードが生成されます。

```
{
    "timestamp": "2019-04-28 22:05:30.105",
    "logLevel": "ERROR",
    "traceId": "02a04a93-0b3a-b608-a27c-1ae8ebdb032a",
    "accountId": "123456789012",
    "status": "Failure",
    "eventType": "Disconnect",
    "protocol": "MQTT",
    "clientId": "clientId01",
    "principalId": "1670fcf6de55adc1930169142405c4a2493d9eb5487127cd0091ca0193a3d3f6",
    "sourceIp": "203.0.113.1",
    "sourcePort": 21335,
    "reason": "DUPLICATE_CLIENT_ID",
    "details": "A new connection was established with the same client ID"
}
```

`{$.reason= "DUPLICATE_CLIENT_ID" }` などの [CloudWatch Logs フィルター](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)を使用して、クライアント ID が競合するインスタンスを検索したり、[CloudWatch メトリクスフィルター](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringPolicyExamples.html)および対応する CloudWatch アラームを設定して、継続的なモニタリングとレポートを作成したりできます。

[AWS IoT Device Defender ](https://aws.amazon.com/iot-device-defender/)を使用して、過度に寛容なポリシー AWS IoT と IAM ポリシーを特定できます。 AWS IoT Device Defender は、フリート内の複数のデバイスが同じクライアント ID を使用して AWS IoT メッセージブローカーに接続しているかどうかを通知する監査チェックも提供します。

 AWS IoT Device Advisor を使用して、デバイスが確実に に接続 AWS IoT Core し、セキュリティのベストプラクティスに従うことができることを検証できます。

### 関連情報
<a name="mqtt-security-see-also"></a>
+ [AWS IoT Core](https://aws.amazon.com/iot-core/)
+ [AWS IoTのセキュリティ機能](authentication.md)
+ [AWS IoT Core ポリシー変数](iot-policy-variables.md)
+ [IAM ポリシー変数](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_variables.html)
+ [Amazon Cognito ID](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identities.html)
+ [AWS IoT Device Defender](https://aws.amazon.com/iot-device-defender/)
+ [の CloudWatch Logs AWS IoT](cloud-watch-logs.md)

## デバイスのクロックを同期させる
<a name="device-clock"></a>

デバイスの時刻を正確に保つことが重要です。X.509 証明書には有効期限の日時があります。デバイスのクロックは、サーバー証明書が現在も有効であることを確認するために使用されます。商用 IoT デバイスを構築する場合は、製品が販売される前に長期間保管される可能性があることに注意してください。この間、リアルタイムクロックがドリフトし、電池が放電する可能性があるため、工場での設定時間では不十分です。

ほとんどのシステムでは、デバイスのソフトウェアに Network Time Protocol (NTP) クライアントを含める必要があります。デバイスは、 AWS IoT Coreへの接続を試行する前に、NTP サーバーと同期するまで待機する必要があります。これが不可能な場合は、後続の接続が成功するように、ユーザーがデバイスの時刻を設定する方法を提供する必要があります。

デバイスが NTP サーバーと同期されると、 AWS IoT Coreとの接続を開くことができます。許容されるクロックスキューの量は、接続で何をしようとしているかによって異なります。

## サーバー証明書の検証
<a name="validate-server-cert"></a>

デバイスが最初に操作するのは AWS IoT 、安全な接続を開くことです。デバイスを に接続するときは AWS IoT、別のサーバーを偽装するのではなく AWS IoT 、 と話していることを確認してください AWS IoT。各 AWS IoT サーバーは、`iot.amazonaws.com`ドメインに対して発行された証明書でプロビジョニングされます。この証明書は、ドメインのアイデンティティと所有権を検証した信頼できる認証機関 AWS IoT によって に発行されました。

デバイスが接続するときに最初に AWS IoT Core 行うことの 1 つは、デバイスにサーバー証明書を送信することです。デバイスは、`iot.amazonaws.com` に接続する予定だったことと、その接続の最後のサーバーが、そのドメインの信頼された機関からの証明書を持っていることを確認できます。

TLS 証明書は X.509 形式で、組織の名前、場所、ドメイン名、有効期間などのさまざまな情報が含まれています。有効期間は、`notBefore` と `notAfter` と呼ばれる時間値のペアとして指定されます。などのサービスは、サーバー証明書に限られた有効期間 (1 年など) AWS IoT Core を使用し、古い証明書の有効期限が切れる前に新しい証明書の提供を開始します。

## デバイスごとの単一の ID を使用する
<a name="cert-per-device"></a>

クライアントごとに 1 つの ID を使用します。通常、デバイスでは X.509 クライアント証明書が使用されます。ウェブおよびモバイルアプリケーションは Amazon Cognito ID を使用します。これにより、デバイスにきめ細かなアクセス許可を適用できます。

例えば、電球とサーモスタットの 2 つの異なるスマートホームオブジェクトからステータス更新を受け取る携帯電話デバイスで構成されるアプリケーションがあるとします。電球は、バッテリーレベルのステータスを送信し、サーモスタットは温度を報告するメッセージを送信します。

AWS IoT はデバイスを個別に認証し、各接続を個別に処理します。承認ポリシーを使用してきめ細かなアクセス制御を適用できます。サーモスタットのポリシーを定義して、トピックスペースに公開することができます。電球に別のポリシーを定義して、別のトピックスペースに公開することができます。最後に、これらのデバイスからのメッセージを受信するために、サーモスタットと電球のトピックへの接続とサブスクライブのみを許可するモバイルアプリのポリシーを定義できます。

最小権限の原則を適用し、デバイスごとのアクセス許可を可能な限り絞り込みます。すべてのデバイスまたはユーザーには、既知のクライアント ID との接続と、識別および固定されたトピックのセットの発行とサブスクライブ AWS IoT のみを許可する AWS IoT ポリシーが必要です。

## バックアップ AWS リージョン として 2 番目の を使用する
<a name="use-second-region"></a>

データのコピーをバックアップ AWS リージョン として 1 秒に保存することを検討してください。[Disaster Recovery for AWS IoT](https://aws.amazon.com/solutions/implementations/disaster-recovery-for-aws-iot/)という名前の AWS ソリューションは使用できなくなりました。関連付けられた [GitHub ライブラリ](https://github.com/awslabs/disaster-recovery-for-aws-iot)は引き続きアクセス可能ですが、2023 年 7 月に AWS 廃止され、メンテナンスやサポートは提供されなくなりました。独自のソリューションを実装したり、追加のサポートオプションを確認したりするには、「[AWSへのお問い合わせ](https://aws.amazon.com/contact-us/)」を参照してください。アカウントに関連付けられている AWS Technical Account Manager がある場合は、サポートを依頼してください。

## ジャストインタイムプロビジョニングの使用
<a name="use-jitp"></a>

各デバイスの手動作成とプロビジョニングには時間がかかる場合があります。 は、最初に接続するときにデバイスをプロビジョニングするテンプレートを定義する方法 AWS IoT を提供します AWS IoT。詳細については、「[ジャストインタイムプロビジョニング](jit-provisioning.md)」を参照してください。

## AWS IoT Device Advisor テストを実行するアクセス許可
<a name="device-advisor-perms"></a>

次のポリシーテンプレートは、 AWS IoT Device Advisor テストケースの実行に必要な最小限のアクセス許可と IAM エンティティを示しています。*your-device-role-arn* を、[前提条件](https://docs.aws.amazon.com/iot/latest/developerguide/device-advisor-workflow.html#device-advisor-workflow-prereqs)の下で作成したデバイスロール Amazon Resource Name (ARN) に置き換える必要があります。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iot:us-east-1:123456789012:thinggroup/your-thing-group",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "iotdeviceadvisor.amazonaws.com"
            }
        }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke*",
                "iam:ListRoles",
                "iot:Connect",
                "iot:CreateJob",
                "iot:DeleteJob",
                "iot:DescribeCertificate",
                "iot:DescribeEndpoint",
                "iotjobsdata:DescribeJobExecution",
                "iot:DescribeJob",
                "iot:DescribeThing",
                "iotjobsdata:GetPendingJobExecutions",
                "iot:GetPolicy",
                "iot:ListAttachedPolicies",
                "iot:ListCertificates",
                "iot:ListPrincipalPolicies",
                "iot:ListThingPrincipals",
                "iot:ListThings",
                "iot:Publish",
                "iotjobsdata:StartNextPendingJobExecution",
                "iotjobsdata:UpdateJobExecution",
                "iot:UpdateThingShadow",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents",
                "logs:PutRetentionPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "iotdeviceadvisor:*",
            "Resource": "*"
        }
    ]
}
```

## デバイスアドバイザーのクロスサービスでの混乱した代理の防止
<a name="cross-service-confused-deputy-prevention-DA"></a>

混乱した代理問題は、アクションを実行する許可を持たないエンティティが、より特権のあるエンティティにアクションを実行するように強制できるセキュリティの問題です。では AWS、サービス間のなりすましにより、混乱した代理問題が発生する可能性があります。サービス間でのなりすましは、1 つのサービス (*呼び出し元サービス*) が、別のサービス (*呼び出し対象サービス*) を呼び出すときに発生する可能性があります。呼び出し元サービスは、本来ならアクセスすることが許可されるべきではない方法でその許可を使用して、別のお客様のリソースに対する処理を実行するように操作される場合があります。これを防ぐために、 は、アカウント内のリソースへのアクセス権が付与されたサービスプリンシパルを持つすべてのサービスのデータを保護するのに役立つツール AWS を提供します。

リソースポリシー内のグローバル条件コンテキストキー [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) と [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) を使用して、リソースについてデバイスアドバイザーが別のサービスに付与する許可を制限することをお勧めします。両方のグローバル条件コンテキストキーを同じポリシーステートメントで使用する場合は、`aws:SourceAccount` 値と、`aws:SourceArn` 値に含まれるアカウントが、同じアカウント ID を示している必要があります。

`aws:SourceArn` の値は、スイート定義リソースの ARN である必要があります。スイート定義リソースは、デバイスアドバイザーで作成したテストスイートを指します。

混乱した代理問題から保護するための最も効果的な方法は、リソースの完全な ARN を指定して `aws:SourceArn` グローバル条件コンテキストキーを使用することです。リソースの完全な ARN が不明な場合や、複数のリソースを指定する場合は、`aws:SourceArn` グローバルコンテキスト条件キーを使用して、ARN の未知部分をワイルドカード (`*`) で表します。例えば、`arn:aws:iotdeviceadvisor:*:account-id:suitedefinition/*` です 

次の例では、デバイスアドバイザーで `aws:SourceArn` および `aws:SourceAccount` グローバル条件コンテキストキーを使用して、混乱した代理問題を回避する方法を示します。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "ConfusedDeputyPreventionExamplePolicy",
        "Effect": "Allow",
        "Principal": {
            "Service": "iotdeviceadvisor.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "ArnLike": {
                "aws:SourceArn": "arn:aws:iotdeviceadvisor:us-east-1:123456789012:suitedefinition/ygp6rxa3tzvn"
        },
            "StringEquals": {
                "aws:SourceAccount": "123456789012"
        }
        }
    }
}
```

## AWS トレーニングと認定
<a name="iot-security-training"></a>

 AWS IoT セキュリティの主要な概念については、Security [AWS IoT Primer ](https://www.aws.training/Details/Curriculum?id=42304)を参照してください。