

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

# OTA 更新の前提条件
<a name="ota-prereqs"></a>

無線経由 (OTA) 更新を使用するには、次の作業を行います。
+ [HTTP を使用した OTA 更新の前提条件](ota-http-freertos.md) または [MQTT を使用した OTA 更新の前提条件](ota-mqtt-freertos.md) を確認します。
+ [更新を保存する Amazon S3 バケットを作成する](dg-ota-bucket.md).
+ [OTA 更新サービスロールを作成する](create-service-role.md).
+ [OTA ユーザーポリシーの作成](create-ota-user-policy.md).
+ [コード署名証明書の作成](ota-code-sign-cert.md).
+ Code Signing for を使用している場合は AWS IoT、[のコード署名へのアクセス権を付与する AWS IoT](code-sign-policy.md)。
+ [OTA ライブラリで FreeRTOS をダウンロードする](ota-download-freertos.md).

# 更新を保存する Amazon S3 バケットを作成する
<a name="dg-ota-bucket"></a>

OTA 更新ファイルは Amazon S3 バケットに保存されます。

Code Signing for を使用している場合 AWS IoT、コード署名ジョブの作成に使用するコマンドは、ソースバケット (署名されていないファームウェアイメージがある場所) と宛先バケット (署名されたファームウェアイメージが書き込まれる場所) を取得します。ソースと出力先に同じバケットを指定できます。元のファイルが上書きされないように、ファイル名は GUID に変更されます。<a name="create-bucket"></a>

**Amazon S3 バケットを作成するには**

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

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

1. **バケット名**を入力します。

1. **[Bucket settings for Block Public Access]** (ブロックパブリックアクセスのバケット設定) で、**[Block all public access]** (パブリックアクセスをすべてブロック) を選択したままにして、デフォルトのアクセス許可を受け入れます。

1. [**Bucket Versioning**] (バケットのバージョニング) で、[**Enable**] (有効) を選択し、同じバケット内ですべてのバージョンを保持します。

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

Amazon S3 に関する詳細は、[Amazon Simple Storage Service ユーザーガイド](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)を参照してください。

# OTA 更新サービスロールを作成する
<a name="create-service-role"></a>

OTA 更新サービスは、ユーザーに代わって OTA アップデートジョブを作成および管理するためにこのロールを引き受けます。<a name="create-service-role-steps"></a>

**OTA サービスロールを作成するには**

1. [https://console.aws.amazon.com/iam](https://console.aws.amazon.com/iam/) にサインインします。

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

1. **[Create role]** (ロールの作成) を選択します。

1. [**Select type of trusted entity**] (信頼されたエンティティの種類を選択) の下で、[**AWS Service**] (AWS サービス) を選択します。

1.  AWS サービスのリストから **IoT** を選択します。

1. [**ユースケースの選択**] で、[**IoT**] を選択します。

1. [**Next: Permissions (次へ: アクセス許可)**] を選択します。

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

1. [**Next: Review**] (次へ: レビュー) を選択します。

1. ロールの名前と説明を入力し、[**ロールの作成**] を選択します。

IAM ロールの詳細については、[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を参照してください。

**重要**  
混乱した代理のセキュリティ問題に対処するには、「[AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/cross-service-confused-deputy-prevention.html) ガイド」の指示に従う必要があります。<a name="add-ota-permissions"></a>

**OTA サービスロールに OTA 更新アクセス許可を追加するには**

1. IAM コンソールページの検索ボックスに、ロールの名前を入力して、リストから選択します。

1. **ポリシーのアタッチ** を選択します。

1. [**検索**] ボックスに「AmazonFreeRTOSOTAUpdate」と入力し、フィルタリングされたポリシーの一覧で [**AmazonFreeRTOSOTAUpdate**] を選択してから、[**ポリシーのアタッチ**] を選択してポリシーをサービスロールにアタッチします。<a name="add-iam-permissions"></a>

**OTA サービスロールに必要な IAM アクセス許可を追加するには**

1. IAM コンソールページの検索ボックスに、ロールの名前を入力して、リストから選択します。

1. [**Add inline policy**] (インラインポリシーの追加) を選択します。

1. [**JSON**] タブを選択します。

1. 次のポリシードキュメントをコピーしてテキストボックスに貼り付けます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iam:GetRole",
                   "iam:PassRole"
               ],
               "Resource": "arn:aws:iam::111122223333:role/your_role_name"
           }
       ]
   }
   ```

------

   *your\$1account\$1id* を AWS アカウント ID に置き換え、*your\$1role\$1name* を OTA サービスロールの名前に置き換えてください。

1. [**Review policy**] (ポリシーの確認) を選択します。

1. ポリシーの名前を入力し、[**Create policy**] (ポリシーの作成) を選択します。

**注記**  
Amazon S3 バケット名が 「afr-ota」で始まる場合、以下の手順は不要です。その場合は、 AWS 管理ポリシーに必要なアクセス許可が`AmazonFreeRTOSOTAUpdate`既に含まれています。<a name="add-s3-permissions"></a>

****OTA サービスロールに必要な Amazon S3 のアクセス許可を追加するには****

1. IAM コンソールページの検索ボックスに、ロールの名前を入力して、リストから選択します。

1. [**Add inline policy**] (インラインポリシーの追加) を選択します。

1. [**JSON**] タブを選択します。

1. 次のポリシードキュメントをコピーしてボックスに貼り付けます。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObjectVersion",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::example-bucket/*"
               ]
           }
       ]
   }
   ```

------

   このポリシーでは、Amazon S3 オブジェクトを読み取るための OTA サービスロールのアクセス許可が付与されます。*example-bucket* は、お使いのバケットの名前に置き換えてください。

1. [**Review policy**] (ポリシーの確認) を選択します。

1. ポリシーの名前を入力し、[**Create policy**] (ポリシーの作成) を選択します。

# OTA ユーザーポリシーの作成
<a name="create-ota-user-policy"></a>

 ユーザーに無線通信経由の更新を実行するアクセス許可を与える必要があります。 ユーザーには次のアクセス許可が必要です。
+ ファームウェアの更新が保存されている S3 バケットにアクセスする。
+ に保存されている証明書にアクセスします AWS Certificate Manager。
+  AWS IoT MQTT ベースのファイル配信機能にアクセスします。
+ FreeRTOS OTA 更新にアクセスする。
+ アクセス AWS IoT ジョブ。
+ IAM にアクセスする。
+ アクセスコード署名 AWS IoT「[のコード署名へのアクセス権を付与する AWS IoT](code-sign-policy.md)」を参照してください。
+ FreeRTOS ハードウェアプラットフォームを一覧表示する。
+  AWS IoT リソースにタグを付け、タグを解除します。

ユーザーに必要なアクセス権限を付与するには、「[IAM ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)」を参照してください。また、[AWS IoT 「ジョブの使用をユーザーとクラウドサービスに許可する](https://docs.aws.amazon.com/iot/latest/developerguide/iam-policy-users-jobs.html)」も参照してください。

アクセスを提供するには、ユーザー、グループ、またはロールにアクセス許可を追加します。
+ 以下のユーザーとグループ AWS IAM アイデンティティセンター:

  アクセス許可セットを作成します。「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)」の手順に従ってください。
+ IAM 内で、ID プロバイダーによって管理されているユーザー:

  ID フェデレーションのロールを作成します。詳細については *IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。
+ IAM ユーザー:
  + ユーザーが担当できるロールを作成します。手順については *IAM ユーザーガイド* の [IAM ユーザーのロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) を参照してください。
  + (お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。*IAM ユーザーガイド* の [ユーザー (コンソール) へのアクセス許可の追加](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) の指示に従います。

# コード署名証明書の作成
<a name="ota-code-sign-cert"></a>

ファームウェアイメージにデジタル署名するには、コード署名証明書とプライベートキーが必要です。テストの目的で、自己署名証明書とプライベートキーを作成できます。本番稼働環境向けには、信頼された証明機関 (CA) を通じて証明書を購入してください。

プラットフォームごとに異なるタイプのコード署名証明書が必要です。次のセクションでは、各 FreeRTOS 認定プラットフォームのコード署名証明書を作成する方法について説明します。

**Topics**
+ [Texas Instruments CC3220SF-LAUNCHXL のコード署名証明書の作成](ota-code-sign-cert-ti.md)
+ [Espressif ESP32 のコード署名証明書の作成](ota-code-sign-cert-esp.md)
+ [Nordic nrf52840-dk のコード署名証明書の作成](ota-code-sign-cert-nordic.md)
+ [FreeRTOS Windows Simulator のコード署名証明書の作成](ota-code-sign-cert-win.md)
+ [カスタムハードウェアのコード署名証明書の作成](ota-code-sign-cert-other.md)

# Texas Instruments CC3220SF-LAUNCHXL のコード署名証明書の作成
<a name="ota-code-sign-cert-ti"></a>

**重要**  <a name="deprecation-message"></a>
このリファレンス統合は、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、[ここから始める](freertos-getting-started-modular.md)ことをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「[Amazon FreeRTOS Github リポジトリ移行ガイド](github-repo-migration.md)」を参照してください。

SimpleLink Wi-Fi CC3220SF Wireless Microcontroller Launchpad 開発キットは、ファームウェアコード署名用の 2 つの証明書チェーンをサポートしています。
+ 本番稼働用 (証明書カタログ)

  本番稼働用証明書チェーンを使用するには、商用コード署名証明書を購入し、[TI Uniflash ツール](http://www.ti.com/tool/UNIFLASH)を使用してボードを本番モードに設定する必要があります。
+ テストおよび開発 (証明書-プレイグラウンド) 

  プレイグラウンド証明書チェーンを使用すると、自己署名コード署名証明書を使用して OTA の更新を試すことができます。

を使用して AWS Command Line Interface 、コード署名証明書、プライベートキー、証明書チェーンを にインポートします AWS Certificate Manager。詳細については、*AWS Command Line Interface ユーザーガイド*の[AWS CLIのインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)を参照してください。

[SimpleLink CC3220 SDK](http://www.ti.com/tool/download/SIMPLELINK-CC3220-SDK) の最新バージョンをダウンロードしてインストールします。デフォルトでは、必要なファイルは次の場所にあります。

`C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground` (Windows) 

`/Applications/Ti/simplelink_cc32xx_version/tools/cc32xx_tools/certificate-playground` (macOS)

SimpleLink CC3220 SDK の証明書は DER 形式です。自己署名コード署名証明書を作成するには、それらを PEM 形式に変換する必要があります。

Texas Instruments プレイグラウンド証明書階層にリンクされ、 AWS Certificate Manager および Code Signing for AWS IoT criteria を満たすコード署名証明書を作成するには、次の手順に従います。

**注記**  
コード署名証明書を作成するには、[OpenSSL](https://www.openssl.org/) をマシンにインストールします。OpenSSL をインストールした後、コマンドプロンプトまたは端末環境で `openssl` が OpenSSL 実行可能ファイルに割り当てられていることを確認してください。

**自己署名コード署名証明書を作成するには**

1. 管理者権限でコマンドプロンプトまたは端末を開きます。

1. 作業ディレクトリで、次のテキストを使用して `cert_config.txt` という名前のファイルを作成します。*test\$1signer@amazon.com* をユーザーの E メールアドレスに置き換えてください。

   ```
   [ req ]
   prompt             = no
   distinguished_name = my dn
   
   [ my dn ]
   commonName = test_signer@amazon.com
   
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. プライベートキーと証明書署名リクエスト (CSR) を作成します。

   ```
   openssl req -config cert_config.txt -extensions my_exts -nodes -days 365 -newkey rsa:2048 -keyout tisigner.key -out tisigner.csr
   ```

1. Texas Instruments のプレイグラウンドルート CA プライベートキーを DER 形式から PEM 形式に変換します。

   TI のプレイグラウンドルート CA プライベートキーは次の場所にあります。

   `C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground\dummy-root-ca-cert-key` (Windows) 

   `/Applications/Ti/simplelink_cc32xx_sdk_version/tools/cc32xx_tools/certificate-playground/dummy-root-ca-cert-key` (macOS)

   ```
   openssl rsa -inform DER -in dummy-root-ca-cert-key -out dummy-root-ca-cert-key.pem
   ```

1. Texas Instruments のプレイグラウンドルート CA 証明書を DER 形式から PEM 形式に変換します。

   TI のプレイグラウンドルート CA 証明書は次の場所にあります。

   `C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground/dummy-root-ca-cert` (Windows) 

   `/Applications/Ti/simplelink_cc32xx_sdk_version/tools/cc32xx_tools/certificate-playground/dummy-root-ca-cert` (macOS)

   ```
   openssl x509 -inform DER -in dummy-root-ca-cert -out dummy-root-ca-cert.pem
   ```

1. Texas Instruments のルート CA で CSR に署名してください。

   ```
   openssl x509 -extfile cert_config.txt -extensions my_exts  -req -days 365 -in tisigner.csr -CA dummy-root-ca-cert.pem -CAkey dummy-root-ca-cert-key.pem -set_serial 01 -out tisigner.crt.pem -sha1
   ```

1. コード署名証明書 (`tisigner.crt.pem`) を DER 形式に変換します。

   ```
   openssl x509 -in tisigner.crt.pem -out tisigner.crt.der -outform DER
   ```
**注記**  
`tisigner.crt.der` 証明書を TI 開発ボードに作成します。

1. コード署名証明書、プライベートキー、証明書チェーンを にインポートします AWS Certificate Manager。

   ```
   aws acm import-certificate --certificate fileb://tisigner.crt.pem --private-key fileb://tisigner.key --certificate-chain fileb://dummy-root-ca-cert.pem
   ```

   このコマンドは、証明書の ARN を表示します。OTA 更新ジョブを作成するときは、この ARN が必要です。
**注記**  
このステップは、Code Signing for を使用してファームウェアイメージに署名することを前提 AWS IoT としています。Code Signing for の使用 AWS IoT が推奨されますが、ファームウェアイメージを手動で署名できます。

# Espressif ESP32 のコード署名証明書の作成
<a name="ota-code-sign-cert-esp"></a>

**重要**  <a name="deprecation-message"></a>
このリファレンス統合は、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、[ここから始める](freertos-getting-started-modular.md)ことをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「[Amazon FreeRTOS Github リポジトリ移行ガイド](github-repo-migration.md)」を参照してください。

Espressif ESP32 ボードは、SHA-256 と ECDSA による自己署名コード署名証明書をサポートしています。

**注記**  
コード署名証明書を作成するには、[OpenSSL](https://www.openssl.org/) をマシンにインストールします。OpenSSL をインストールした後、コマンドプロンプトまたは端末環境で `openssl` が OpenSSL 実行可能ファイルに割り当てられていることを確認してください。  
を使用して AWS Command Line Interface 、コード署名証明書、プライベートキー、証明書チェーンを にインポートします AWS Certificate Manager。のインストールの詳細については AWS CLI、[「 のインストール AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。

1. 作業ディレクトリで、次のテキストを使用して `cert_config.txt` という名前のファイルを作成します。*test\$1signer@amazon.com* をユーザーの E メールアドレスに置き換えてください。

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. ECDSA のコード署名プライベートキーを作成します。

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. ECDSA のコード署名証明書を作成します。

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. コード署名証明書、プライベートキー、証明書チェーンを にインポートします AWS Certificate Manager。

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   このコマンドは、証明書の ARN を表示します。OTA 更新ジョブを作成するときは、この ARN が必要です。
**注記**  
このステップは、Code Signing for を使用してファームウェアイメージに署名することを前提 AWS IoT としています。Code Signing for の使用 AWS IoT が推奨されますが、ファームウェアイメージを手動で署名できます。

# Nordic nrf52840-dk のコード署名証明書の作成
<a name="ota-code-sign-cert-nordic"></a>

**重要**  <a name="deprecation-message"></a>
このリファレンス統合は、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、[ここから始める](freertos-getting-started-modular.md)ことをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「[Amazon FreeRTOS Github リポジトリ移行ガイド](github-repo-migration.md)」を参照してください。

Nordic nrf52840-dk は、ECDSA コード署名証明書付きの自己署名 SHA256 をサポートしています。

**注記**  
コード署名証明書を作成するには、[OpenSSL](https://www.openssl.org/) をマシンにインストールします。OpenSSL をインストールした後、コマンドプロンプトまたは端末環境で `openssl` が OpenSSL 実行可能ファイルに割り当てられていることを確認してください。  
を使用して AWS Command Line Interface 、コード署名証明書、プライベートキー、証明書チェーンを にインポートします AWS Certificate Manager。のインストールの詳細については AWS CLI、[「 のインストール AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。

1. 作業ディレクトリで、次のテキストを使用して `cert_config.txt` という名前のファイルを作成します。*test\$1signer@amazon.com* をユーザーの E メールアドレスに置き換えてください。

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. ECDSA のコード署名プライベートキーを作成します。

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. ECDSA のコード署名証明書を作成します。

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. コード署名証明書、プライベートキー、証明書チェーンを にインポートします AWS Certificate Manager。

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   このコマンドは、証明書の ARN を表示します。OTA 更新ジョブを作成するときは、この ARN が必要です。
**注記**  
このステップは、Code Signing for を使用してファームウェアイメージに署名することを前提 AWS IoT としています。Code Signing for の使用 AWS IoT が推奨されますが、ファームウェアイメージを手動で署名できます。

# FreeRTOS Windows Simulator のコード署名証明書の作成
<a name="ota-code-sign-cert-win"></a>

FreeRTOS Windows Simulator では、ECDSA P-256 キーおよび SHA-256 ハッシュを使用して OTA 更新を実行するコード署名証明書が必要です。コード署名証明書がない場合は、以下のステップを使用して証明書を作成します。

**注記**  
コード署名証明書を作成するには、[OpenSSL](https://www.openssl.org/) をマシンにインストールします。OpenSSL をインストールした後、コマンドプロンプトまたは端末環境で `openssl` が OpenSSL 実行可能ファイルに割り当てられていることを確認してください。  
を使用して AWS Command Line Interface 、コード署名証明書、プライベートキー、証明書チェーンを にインポートします AWS Certificate Manager。のインストールの詳細については AWS CLI、[「 のインストール AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。

1. 作業ディレクトリで、次のテキストを使用して `cert_config.txt` という名前のファイルを作成します。*test\$1signer@amazon.com* をユーザーの E メールアドレスに置き換えてください。

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. ECDSA のコード署名プライベートキーを作成します。

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. ECDSA のコード署名証明書を作成します。

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. コード署名証明書、プライベートキー、証明書チェーンを にインポートします AWS Certificate Manager。

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   このコマンドは、証明書の ARN を表示します。OTA 更新ジョブを作成するときは、この ARN が必要です。
**注記**  
このステップは、Code Signing for を使用してファームウェアイメージに署名することを前提 AWS IoT としています。Code Signing for の使用 AWS IoT が推奨されますが、ファームウェアイメージを手動で署名できます。

# カスタムハードウェアのコード署名証明書の作成
<a name="ota-code-sign-cert-other"></a>

適切なツールセットを使用して、ハードウェアの自己署名証明書とプライベートキーを作成します。

を使用して AWS Command Line Interface 、コード署名証明書、プライベートキー、証明書チェーンを にインポートします AWS Certificate Manager。のインストールの詳細については AWS CLI、[「 のインストール AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。

コード署名証明書を作成したら、 AWS CLI を使用して ACM にインポートできます。

```
aws acm import-certificate --certificate fileb://code-sign.crt --private-key fileb://code-sign.key
```

このコマンドの出力には、証明書の ARN が表示されます。OTA 更新ジョブを作成するときは、この ARN が必要です。

ACM では、特定のアルゴリズムとキーサイズを使用するために証明書が必要です。詳細については、「[証明書をインポートする前提条件](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-prerequisites.html)」を参照してください。ACM の詳細については、[AWS Certificate Managerへの証明書のインポート](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)を参照してください。

後でダウンロードする FreeRTOS コードの一部である `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` ファイルに、コード署名証明書の内容をコピー、貼り付け、フォーマットする必要があります。

# のコード署名へのアクセス権を付与する AWS IoT
<a name="code-sign-policy"></a>

アクセスを提供するには、ユーザー、グループ、またはロールにアクセス許可を追加します。
+ 以下のユーザーとグループ AWS IAM アイデンティティセンター:

  アクセス許可セットを作成します。「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)」の手順に従ってください。
+ IAM 内で、ID プロバイダーによって管理されているユーザー:

  ID フェデレーションのロールを作成します。詳細については *IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。
+ IAM ユーザー:
  + ユーザーが担当できるロールを作成します。手順については *IAM ユーザーガイド* の [IAM ユーザーのロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) を参照してください。
  + (お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。*IAM ユーザーガイド* の [ユーザー (コンソール) へのアクセス許可の追加](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) の指示に従います。

# OTA ライブラリで FreeRTOS をダウンロードする
<a name="ota-download-freertos"></a>

FreeRTOS は [GitHub](https://github.com/freertos/freertos) からクローンを作成またはダウンロードできます。手順については、[README.md](https://github.com/freertos/freertos/blob/main/README.md) ファイルを参照してください。

OTA デモアプリケーションの設定と実行については、「[無線通信経由更新デモアプリケーション](ota-demo.md)」を参照してください。

**重要**  
このトピックでは、FreeRTOS ダウンロードディレクトリへのパスを `freertos` とします。
`freertos` パスにスペース文字が含まれていると、構築が失敗する可能性があります。リポジトリをクローンまたはコピーするときは、作成するパスにスペース文字が含まれていないことを確認してください。
Microsoft Windows でのファイルパスの最大長は 260 文字です。FreeRTOS のダウンロードディレクトリパスが長くなると、構築が失敗する可能性があります。
ソースコードにはシンボリックリンクが含まれている可能性があるため、Windows を使用してアーカイブを抽出する場合は、次の操作を行う必要があります。  
[開発者モード](https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development)を有効にするか、または、
管理者としてコンソールを使用します。
この操作を行えば、Windows でアーカイブを抽出する際にシンボリックリンクを適切に作成できます。この操作を行わないと、シンボリックリンクは、そのパスがテキストとして含まれる、または空白の通常ファイルとして書き込まれます。詳細については、ブログの投稿「[Symlinks in Windows 10\$1](https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/)」を参照してください。  
Windows で Git を使用する場合は、開発者モードを有効にするか、以下を実行する必要があります。  
次のコマンドを使用して、`core.symlinks` を true に設定します。  

    ```
    git config --global core.symlinks true
    ```
システムへの書き込みを行う git コマンド (**git pull**、**git clone**、**git submodule update --init --recursive** など) を使用する場合は、管理者としてコンソールを使用します。

# MQTT を使用した OTA 更新の前提条件
<a name="ota-mqtt-freertos"></a>

このセクションでは、MQTT を使用して Over-the-air (OTA) による更新を実行するための一般的な要件について説明します。

## 最小要件
<a name="ota-mqtt-freertos-min-requirements"></a>
+ デバイスファームウェアに必要な FreeRTOS ライブラリ (coreMQTT エージェント、OTA 更新、その依存関係) が含まれている必要があります。
+ FreeRTOS バージョン 1.4.0 以降が必要です。ただし、可能な場合は最新バージョンを使用することをお勧めします。

## Configurations
<a name="ota-mqtt-freertos-config"></a>

バージョン 201912.00 以降、FreeRTOS OTA は HTTP プロトコルまたは MQTT プロトコルを使用して、 からデバイスにファームウェア更新イメージ AWS IoT を転送できます。FreeRTOS で OTA 更新を作成するときに両方のプロトコルを指定すると、各デバイスによってイメージの転送に使用するプロトコルが決定されます。詳細については「[HTTP を使用した OTA 更新の前提条件](ota-http-freertos.md)」を参照してください。

デフォルトでは、[https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h](https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h) での OTA プロトコルの設定は、MQTT プロトコルを使用します。

## デバイス固有の設定
<a name="ota-mqtt-freertos-dev-config"></a>

なし。

## メモリ使用量
<a name="ota-mqtt-freertos-memory"></a>

MQTT をデータ転送に使用する場合、MQTT 接続は制御オペレーションとデータオペレーションの間で共有されるため、追加のメモリは必要ありません。

## デバイスポリシー
<a name="ota-mqtt-freertos-device-policy"></a>

MQTT を使用して OTA 更新を受信する各デバイスは、 にモノとして登録する必要があり AWS IoT 、モノにはここにリストされているようなポリシーがアタッチされている必要があります。`"Action"` および `"Resource"` オブジェクトの項目の詳細については、[AWS IoT Core ポリシーアクション](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html)と[AWS IoT Core アクションリソース](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html)を参照してください。

**注意事項**
+ アクセス`iot:Connect`許可により、デバイスは MQTT AWS IoT 経由で に接続できます。
+  AWS IoT ジョブ (`.../jobs/*`) のトピックに対する `iot:Subscribe`および アクセス`iot:Publish`許可により、接続されたデバイスはジョブ通知とジョブドキュメントを受信し、ジョブ実行の完了状態を発行できます。
+ OTA ストリーム (`.../streams/*`) AWS IoT のトピックに対する `iot:Subscribe`および アクセス`iot:Publish`許可により、接続されたデバイスは OTA 更新データを取得できます AWS IoT。これらのアクセス許可は、MQTT を介してファームウェア更新を実行するために必要です。
+ アクセス`iot:Receive`許可により、 AWS IoT Core はそれらのトピックに関するメッセージを接続されたデバイスに発行できます。このアクセス許可は、MQTT メッセージの配信ごとにチェックされます。このアクセス許可を使用して、トピックに現在サブスクライブしているクライアントへのアクセスを取り消すことができます。

# HTTP を使用した OTA 更新の前提条件
<a name="ota-http-freertos"></a>

このセクションでは、HTTP を使用して無線 (OTA) による更新を実行するための一般的な要件について説明します。バージョン 201912.00 以降、FreeRTOS OTA は HTTP プロトコルまたは MQTT プロトコルを使用して、 からデバイスにファームウェア更新イメージ AWS IoT を転送できます。

**注記**  
HTTP プロトコルを使用してファームウェアイメージを転送できますが、 との他のやり取りでは、ジョブ実行通知、ジョブドキュメント、実行ステータスの更新の送受信など、coreMQTT エージェントライブラリ AWS IoT Core が使用されるため、coreMQTT エージェントライブラリは依然として必要です。
OTA 更新ジョブに MQTT プロトコルと HTTP プロトコルの両方を指定すると、各デバイスの OTA エージェントソフトウェアの設定によって、ファームウェアイメージの転送に使用するプロトコルが決定されます。OTA エージェントをデフォルトの MQTT プロトコルメソッドから HTTP プロトコルに変更するには、デバイスの FreeRTOS ソースコードのコンパイルに使用するヘッダーファイルを変更します。

## 最小要件
<a name="ota-http-freertos-min-requirements"></a>
+ デバイスファームウェアに必要な FreeRTOS ライブラリ (coreMQTT 、HTTP、OTA エージェント、その依存関係) が含まれている必要があります。
+ FreeRTOS バージョン 201912.00 以降では、HTTP 経由の OTA データ転送を有効にするために OTA プロトコルの設定を変更する必要があります。

## Configurations
<a name="ota-http-freertos-config"></a>

[https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h](https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h) ファイルにある以下の OTA プロトコルの設定を参照してください。

**HTTP 経由で OTA データの転送を有効にするには**

1. `configENABLED_DATA_PROTOCOLS` を `OTA_DATA_OVER_HTTP` に変更します。

1. OTA が更新されると、MQTT または HTTP のプロトコルのいずれかを使用できるように、両方のプロトコルを指定できます。`configOTA_PRIMARY_DATA_PROTOCOL` を `OTA_DATA_OVER_HTTP` に変更することで、デバイスが使用するプライマリプロトコルを HTTP に設定できます。

**注記**  
HTTP は、OTA データオペレーションに対してのみサポートされます。制御オペレーションには MQTT を使用する必要があります。

## デバイス固有の設定
<a name="ota-http-freertos-device-configuration"></a>

**ESP32**  
RAM の容量が限られているため、OTA データプロトコルとして HTTP を有効にする場合は、BLE をオフにする必要があります。[https://github.com/aws/amazon-freertos/blob/main/vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h](https://github.com/aws/amazon-freertos/blob/main/vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h) ファイルで、`configENABLED_NETWORKS` を `AWSIOT_NETWORK_TYPE_WIFI` のみに変更します。  

```
/**
     * @brief Configuration flag which is used to enable one or more network interfaces for a board.
     *
     * The configuration can be changed any time to keep one or more network enabled or disabled.
     * More than one network interfaces can be enabled by using 'OR' operation with flags for
     * each network types supported. Flags for all supported network types can be found
     * in "aws_iot_network.h"
     *
     */
    #define configENABLED_NETWORKS      ( AWSIOT_NETWORK_TYPE_WIFI )
```

## メモリ使用量
<a name="ota-http-freertos-memory"></a>

MQTT をデータ転送に使用する場合、MQTT 接続は制御オペレーションとデータオペレーションの間で共有されるため、追加のヒープメモリは必要ありません。ただし、HTTP 経由でデータを有効化するには、追加のヒープメモリが必要です。以下は、FreeRTOS `xPortGetFreeHeapSize` API を使用して計算された、サポートされているすべてのプラットフォームのヒープメモリの使用状況のデータです。OTA ライブラリを使用するのに十分な RAM があることを確認する必要があります。

****Texas Instruments CC3220SF-LAUNCHXL****  
制御オペレーション (MQTT): 12 KB  
データオペレーション (HTTP): 10 KB  
 TI はハードウェアで SSL を行うため、使用する RAM は大幅に少なくなります。そのため、mbedtls ライブラリを使用しません。

****Microchip Curiosity PIC32MZEF****  
制御オペレーション (MQTT): 65 KB  
データオペレーション (HTTP): 43 KB

****Espressif ESP32****  
制御オペレーション (MQTT): 65 KB  
データオペレーション (HTTP): 45 KB  
ESP32 の BLE では、約 87 KB の RAM を使用します。上記のデバイス固有の設定で説明されているように、すべての設定を有効にするのに十分な RAM がありません。

****Windows simulator****  
制御オペレーション (MQTT): 82 KB   
データオペレーション (HTTP): 63 KB 

****Nordic nrf52840-dk****  
HTTP はサポートされていません。

## デバイスポリシー
<a name="ota-http-freertos-device-policy"></a>

このポリシーでは、OTA アップデートに MQTT または HTTP を使用できます。

HTTP を使用して OTA 更新を受信する各デバイスは、 AWS IoT にモノとして登録する必要があります。また、モノには、ここに記載されているようなポリシーがアタッチされている必要があります。`"Action"` および `"Resource"` オブジェクトの項目の詳細については、[AWS IoT Core ポリシーアクション](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html)と[AWS IoT Core アクションリソース](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html)を参照してください。

**注意事項**
+ この `iot:Connect` アクセス許可により、デバイスが MQTT 経由で AWS IoT に接続できるようになります。
+  AWS IoT ジョブ (`.../jobs/*`) のトピックに対する `iot:Subscribe`および アクセス`iot:Publish`許可により、接続されたデバイスはジョブ通知とジョブドキュメントを受信し、ジョブ実行の完了状態を発行できます。
+ アクセス`iot:Receive`許可により、 AWS IoT Core はそれらのトピックに関するメッセージを現在の接続デバイスに発行できます。このアクセス許可は、MQTT メッセージの配信ごとにチェックされます。このアクセス許可を使用して、トピックに現在サブスクライブしているクライアントへのアクセスを取り消すことができます。