

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

# でのデータ保護 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"
}
```