

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

# のセキュリティ AWS IoT Greengrass
<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 Greengrass、「コンプライアンスプログラム[AWS による対象範囲内のサービスコンプライアンスプログラム](https://aws.amazon.com/compliance/services-in-scope/)」を参照してください。
+ **クラウド内のセキュリティ** - ユーザーの責任は、使用する AWS のサービスに応じて異なります。また、お客様は、お客様のデータの機密性、企業の要件、および適用可能な法律および規制などの他の要因についても責任を担います。

を使用する場合 AWS IoT Greengrass、デバイス、ローカルネットワーク接続、プライベートキーを保護する責任もあります。

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

**Topics**
+ [でのデータ保護 AWS IoT Greengrass](data-protection.md)
+ [AWS IoT Greengrassのデバイス認証と認可](device-auth.md)
+ [の ID とアクセスの管理 AWS IoT Greengrass](security-iam.md)
+ [プロキシまたはファイアウォールを介したデバイストラフィックを許可する](allow-device-traffic.md)
+ [のコンプライアンス検証AWS IoT Greengrass](compliance-validation.md)
+ [FIPS エンドポイント](FIPS.md)
+ [AWS IoT Greengrass での耐障害性](disaster-recovery-resiliency.md)
+ [のインフラストラクチャセキュリティ AWS IoT Greengrass](infrastructure-security.md)
+ [での設定と脆弱性の分析 AWS IoT Greengrass](vulnerability-analysis-and-management.md)
+ [AWS IoT Greengrass V2 におけるコードの整合性](code-integrity.md)
+ [AWS IoT Greengrass およびインターフェイス VPC エンドポイント (AWS PrivateLink)](vpc-interface-endpoints.md)
+ [のセキュリティのベストプラクティス AWS IoT Greengrass](security-best-practices.md)

# でのデータ保護 AWS IoT Greengrass
<a name="data-protection"></a>

責任 AWS [共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)、 でのデータ保護に適用されます AWS IoT Greengrass。このモデルで説明されているように、 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 Greengrass 、API、または SDK を使用して AWS CLIまたは他の AWS のサービス を操作する場合も同様です。 AWS SDKs タグ、または名前に使用される自由記述のテキストフィールドに入力したデータは、請求または診断ログに使用される場合があります。外部サーバーに URL を提供する場合、そのサーバーへのリクエストを検証できるように、認証情報を URL に含めないことを強くお勧めします。

での機密情報の保護の詳細については AWS IoT Greengrass、「」を参照してください[機密情報を記録しない](security-best-practices.md#protect-pii)。

データ保護の詳細については、*AWS セキュリティブログ* のブログ投稿「[AWS の責任共有モデルと GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」を参照してください。

**Topics**
+ [データ暗号化](data-encryption.md)
+ [ハードウェアセキュリティ統合](hardware-security.md)

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

AWS IoT Greengrass は暗号化を使用して、転送中 (インターネットまたはローカルネットワーク経由) および保管中 ( に保存) のデータを保護します AWS クラウド。

 AWS IoT Greengrass 環境内のデバイスは、多くの場合、さらなる処理のために AWS サービスに送信されるデータを収集します。他の AWS サービスのデータ暗号化の詳細については、そのサービスのセキュリティドキュメントを参照してください。

**Topics**
+ [転送中の暗号化](encryption-in-transit.md)
+ [保管中の暗号化](encryption-at-rest.md)
+ [Greengrass Core Device のキー管理](key-management.md)

# 転送中の暗号化
<a name="encryption-in-transit"></a>

AWS IoT Greengrass には、データが転送中の 2 つの通信モードがあります。
+ [インターネット経由で転送されるデータ](#data-in-transit-internet). インターネットを介した Greengrass コアと AWS IoT Greengrass 間の通信は暗号化されます。
+ [コアデバイス上のデータ](#data-in-transit-locally): Greengrass コアデバイス上のコンポーネント間の通信は暗号化されません。

## インターネット経由で転送されるデータ
<a name="data-in-transit-internet"></a>

AWS IoT Greengrass は、Transport Layer Security (TLS) を使用して、インターネット経由のすべての通信を暗号化します。AWS クラウド に送信されるすべてのデータは、MQTT または HTTPS プロトコルを使用して TLS 接続で送信されるため、デフォルトで安全に保護されています。AWS IoT Greengrass は、AWS IoT トランスポートセキュリティモデルを使用します。詳細については、「AWS IoT Core デベロッパーガイド**」の「[トランスポートセキュリティ](https://docs.aws.amazon.com/iot/latest/developerguide/transport-security.html)」を参照してください。

## コアデバイス上のデータ
<a name="data-in-transit-locally"></a>

AWS IoT Greengrass は、Greengrass コアデバイス上でローカルに交換されたデータを暗号化しません。これは、データがデバイスから離れることがないためです。これには、ユーザー定義コンポーネント間の通信、AWS IoT デバイスの SDK、およびストリームマネージャーなどのパブリックコンポーネントが含まれます。

# 保管中の暗号化
<a name="encryption-at-rest"></a>

AWS IoT Greengrass は、データを保存します。
+ [AWS クラウド クラウドに保管中のデータ](#data-at-rest-cloud). このデータは暗号化されます。
+ [Greengrass コアに保管されているデータ](#data-at-rest-device). このデータは暗号化されません (シークレットのローカルコピーを除きます)。

## AWS クラウド クラウドに保管中のデータ
<a name="data-at-rest-cloud"></a>

AWS IoT Greengrass は、AWS クラウド 内に保管中のお客様データを暗号化します。このデータは、AWS KMS によって管理される AWS IoT Greengrass キーを使用して保護されます。

## Greengrass コアに保管されているデータ
<a name="data-at-rest-device"></a>

AWS IoT Greengrass は、Unix ファイルアクセス許可とフルディスク暗号化 (有効になっている場合) に依存して、コアに保管されているデータを保護します。ファイルシステムとデバイスを保護するのはお客様の責任となります。

ただし、AWS IoT Greengrass は AWS Secrets Manager から取得したシークレットのローカルコピーを暗号化します。詳細については、[Secrets Manager](secret-manager-component.md) コンポーネントを参照してください。

# Greengrass Core Device のキー管理
<a name="key-management"></a>

Greengrass Core Device の暗号化 (パブリックおよびプライベート) キーを安全に保管するのは、お客様の責任です。AWS IoT Greengrass は次のシナリオでパブリックキーおよびプライベートキーを使用します。
+ IoT クライアントキーは IoT 証明書とともに使用され、Greengrass Core が AWS IoT Core に接続すると Transport Layer Security (TLS) ハンドシェイクを認証します。詳細については、「[AWS IoT Greengrassのデバイス認証と認可](device-auth.md)」を参照してください。
**注記**  
キーおよび証明書は、コアプライベートキーおよびコアデバイス証明書とも呼ばれます。

Greengrass Core デバイスは、ファイルシステムのアクセス許可、または[ハードウェアセキュリティモジュール](hardware-security.md)を使用して、プライベートキーストレージをサポートします。ファイルシステムベースのプライベートキーを使用する場合は、お客様がコアデバイス上の安全な保管の責任を負います。

# ハードウェアセキュリティ統合
<a name="hardware-security"></a>

**注記**  
この機能は、[Greengrass nucleus コンポーネントの](greengrass-nucleus-component.md) v2.5.3 以降で使用できます。現在、この機能は Windows AWS IoT Greengrass コアデバイスでサポートされていません。

[PKCS\$111 インターフェイス](https://en.wikipedia.org/wiki/PKCS_11)を介してハードウェアセキュリティモジュール (HSM) を使用するように AWS IoT Greengrass Core ソフトウェアを設定できます。この機能を使用すると、デバイスのプライベートキーと証明書を安全に保存して、ソフトウェアで公開または複製されないようにできます。プライベートキーと証明書は、HSM やトラステッドプラットフォームモジュール (TPM) などのハードウェアモジュールに保存できます。

 AWS IoT Greengrass Core ソフトウェアは、プライベートキーと X.509 証明書を使用して、 AWS IoT および AWS IoT Greengrass サービスへの接続を認証します。[シークレットマネージャーコンポーネント](secret-manager-component.md)は、このプライベートキーを使用することで、Greengrass コアデバイスにデプロイするシークレットの暗号化と復号化を安全に行うことができます。HSM を使用するようにコアデバイスを設定する場合、これらのコンポーネントは HSM に保存したプライベートキーと証明書を使用します。

[Moquette MQTT ブローカーコンポーネント](mqtt-broker-moquette-component.md)も、ローカルの MQTT サーバー証明書のプライベートキーを格納します。このコンポーネントは、プライベートキーをデバイスのファイルシステム上のコンポーネントのワークフォルダに保存します。現在、このプライベートキーまたは証明書の HSM への保存は AWS IoT Greengrass サポートされていません。

**ヒント**  
この機能をサポートするデバイスを検索するには、「[AWS Partner Device Catalog](https://devices.amazonaws.com/search?kw=%22HSI%22&page=1)」を参照してください。

**Topics**
+ [要件](#hardware-security-requirements)
+ [ハードウェアセキュリティのベストプラクティス](#hardware-security-best-practices)
+ [ハードウェアセキュリティで AWS IoT Greengrass Core ソフトウェアをインストールする](#install-with-hardware-security)
+ [既存のコアデバイスでのハードウェアセキュリティの設定](#enable-hardware-security)
+ [PKCS\$111 をサポートしないハードウェア](#hardware-without-pkcs11)
+ [関連情報](#hardware-security-see-also)

## 要件
<a name="hardware-security-requirements"></a>

Greengrass コアデバイスで HSM を使用するには、以下の要件を満たしている必要があります。
+ [Greengrass nucleus](greengrass-nucleus-component.md) v2.5.3 以降がコアデバイスにインストールされている。Core ソフトウェアを AWS IoT Greengrass コアデバイスにインストールするときに、互換性のあるバージョンを選択できます。
+ [PKCS\$111 プロバイダコンポーネント](pkcs11-provider-component.md)がコアデバイスにインストールされている。Core ソフトウェアを AWS IoT Greengrass コアデバイスにインストールするときに、このコンポーネントをダウンロードしてインストールできます。
+ <a name="hardware-security-module-requirements-key"></a>[PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 署名スキームと RSA-2048 キーサイズ (またはそれ以上の規模) または ECC キーを備えた RSA キーをサポートするハードウェアセキュリティモジュール。
**注記**  <a name="hardware-security-module-requirements-key-notes"></a>
ECC キーを備えたハードウェアセキュリティモジュールを使用するには、v2.5.6 以降の [Greengrass nucleus](greengrass-nucleus-component.md) を使用する必要があります。  
ハードウェアセキュリティモジュールと[シークレットマネージャー](secret-manager-component.md)を使用するには、RSA キーを備えたハードウェアセキュリティモジュールを使用する必要があります。
+ <a name="hardware-security-module-requirements-pkcs11-provider-library"></a> AWS IoT Greengrass Core ソフトウェアが実行時に (libdl を使用して) PKCS\$111 関数を呼び出すためにロードできる PKCS\$111 プロバイダーライブラリ。PKCS\$111 プロバイダライブラリは、次の PKCS\$111 API オペレーションを実装する必要があります。
  + `C_Initialize`
  + `C_Finalize`
  + `C_GetSlotList`
  + `C_GetSlotInfo`
  + `C_GetTokenInfo`
  + `C_OpenSession`
  + `C_GetSessionInfo`
  + `C_CloseSession`
  + `C_Login`
  + `C_Logout`
  + `C_GetAttributeValue`
  + `C_FindObjectsInit`
  + `C_FindObjects`
  + `C_FindObjectsFinal`
  + `C_DecryptInit`
  + `C_Decrypt`
  + `C_DecryptUpdate`
  + `C_DecryptFinal`
  + `C_SignInit`
  + `C_Sign`
  + `C_SignUpdate`
  + `C_SignFinal`
  + `C_GetMechanismList`
  + `C_GetMechanismInfo`
  + `C_GetInfo`
  + `C_GetFunctionList`
+ <a name="hardware-security-module-requirements-slot-label"></a>ハードウェアモジュールは、「PKCS\$111 仕様」で定義されているスロットラベルで解決できる必要があります。
+ <a name="hardware-security-module-requirements-private-key-and-certificate"></a>プライベートキーと証明書は HSM の同じスロットに保存する必要があり、HSM がオブジェクト ID をサポートしている場合、同じオブジェクトラベルとオブジェクト ID を使用する必要があります。
+ <a name="hardware-security-module-requirements-object-label"></a>証明書とプライベートキーがオブジェクトラベルで解決できる必要があります。
+ <a name="hardware-security-module-requirements-private-key-permissions"></a>プライベートキーには、次の許可が必要です。
  + `sign`
  + `decrypt`
+ <a name="hardware-security-module-requirements-secret-manager-permissions"></a>(オプション) [シークレットマネージャーコンポーネント](secret-manager-component.md)を使用する場合、バージョン 2.1.0 以降を使用する必要があります。また、プライベートキーには次の許可が必要です。
  + `unwrap`
  + `wrap`

## ハードウェアセキュリティのベストプラクティス
<a name="hardware-security-best-practices"></a>

Greengrass コアデバイスでハードウェアセキュリティを設定する場合は、以下のベストプラクティスを考慮してください。
+ 内部ハードウェア乱数ジェネレーターを使用して、HSM に直接プライベートキーを生成します。この方法では、プライベートキーが HSM 内に残るため、他の場所で生成したプライベートキーをインポートするよりも安全です。
+ プライベートキーを変更不可およびエクスポートを禁止するように設定します。
+ HSM ハードウェアベンダーが推奨するプロビジョニングツールを使用して、ハードウェアで保護されたプライベートキーを使用して証明書署名リクエスト (CSR) を生成し、 AWS IoT コンソールまたは API を使用してクライアント証明書を生成します。

**注記**  
HSM でプライベートキーを生成する場合は、キーをローテーションするセキュリティ上のベストプラクティスは適用されません。

## ハードウェアセキュリティで AWS IoT Greengrass Core ソフトウェアをインストールする
<a name="install-with-hardware-security"></a>

 AWS IoT Greengrass Core ソフトウェアをインストールするときに、HSM で生成したプライベートキーを使用するように設定できます。このアプローチは、HSM でプライベートキーを生成するための[セキュリティ上のベストプラクティス](#hardware-security-best-practices)に従うため、プライベートキーは HSM 内に残ります。

Core AWS IoT Greengrass ソフトウェアをハードウェアセキュリティでインストールするには、以下を実行します。

1. HSM でプライベートキーを生成します。

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

1. CSR から証明書を作成します。 AWS IoT または別のルート認証機関 (CA) によって署名された証明書を作成できます。別のルート CA の使用方法の詳細については、「AWS IoT Core デベロッパーガイド」の「[独自のクライアント証明書を作成する](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html)」を参照してください。

1.  AWS IoT 証明書をダウンロードし、HSM にインポートします。

1. PKCS\$111 プロバイダーコンポーネントと HSM のプライベートキーと証明書を使用するように指定する設定ファイルから AWS IoT Greengrass Core ソフトウェアをインストールします。

次のいずれかのインストールオプションを選択して、ハードウェアセキュリティで AWS IoT Greengrass Core ソフトウェアをインストールできます。
+ **手動インストール**

  必要な AWS リソースを手動で作成し、ハードウェアセキュリティを設定するには、このオプションを選択します。詳細については、「[手動リソースプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールする](manual-installation.md)」を参照してください。
+ **カスタムプロビジョニングを使用したインストール**

  必要な AWS リソースを自動的に作成し、ハードウェアセキュリティを設定するカスタム Java アプリケーションを開発するには、このオプションを選択します。詳細については、「[カスタムリソースプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールする](custom-provisioning.md)」を参照してください。

現在、自動リソースプロビジョニングまたは[AWS IoT フリー](fleet-provisioning.md)トプロビジョニングを使用して をインストールする場合、 はハードウェアセキュリティを備えた AWS IoT Greengrass Core ソフトウェアのインストールをサポート AWS IoT Greengrass していません。 [自動リソースプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールする](quick-installation.md)

## 既存のコアデバイスでのハードウェアセキュリティの設定
<a name="enable-hardware-security"></a>

コアデバイスのプライベートキーと証明書を HSM にインポートして、ハードウェアセキュリティを設定できます。

**考慮事項**  
コアデバイスのファイルシステムへのルートアクセス権が必要です。
この手順では、 AWS IoT Greengrass Core ソフトウェアをシャットダウンして、ハードウェアセキュリティの設定中にコアデバイスがオフラインになり、使用不可になるようにします。

既存のコアデバイスでハードウェアセキュリティを設定するには、次の手順を実行します。

1. HSM を初期化します。

1. [PKCS\$111 プロバイダコンポーネント](pkcs11-provider-component.md)をコアデバイスにデプロイします。

1.  AWS IoT Greengrass Core ソフトウェアを停止します。

1. コアデバイスのプライベートキーと証明書を HSM にインポートします。

1. HSM でプライベートキーと証明書を使用するように AWS IoT Greengrass Core ソフトウェアの設定ファイルを更新します。

1.  AWS IoT Greengrass Core ソフトウェアを起動します。

### ステップ 1: ハードウェアセキュリティモジュールを初期化する
<a name="enable-hardware-security-initialize-hsm"></a>

次の手順を実行して、コアデバイスで HSM を初期化します。

**ハードウェアセキュリティモジュールを初期化するには**
+ HSM で PKCS\$111 トークンを初期化し、トークンのスロット ID とユーザー PIN を保存します。トークンの初期化方法については、HSM のドキュメントを参照してください。スロット ID とユーザー PIN は、後で PKCS\$111 プロバイダーコンポーネントをデプロイして設定するときに使用します。

### ステップ 2: PKCS\$111 プロバイダコンポーネントをデプロイする
<a name="enable-hardware-security-deploy-pkcs11-provider"></a>

[PKCS\$111 プロバイダコンポーネント](pkcs11-provider-component.md)をデプロイして設定するには、以下の操作を行います。コンポーネントは 1 つ以上のコアデバイスに展開できます。

#### PKCS\$111 プロバイダコンポーネントをデプロイするには (コンソール)
<a name="deploy-pkcs11-provider-component-console"></a>

1. [AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass)のナビゲーションメニューで、**[Components]** (コンポーネント) を選択します。

1. **[Components]** (コンポーネント) ページで、**[Public components]** (公開コンポーネント) タブを選択し、次に **aws.greengrass.crypto.Pkcs11Provider** を選択します。

1. **aws.greengrass.crypto.Pkcs11Provider** ページで、**[Deploy]** (デプロイ) を選択します。

1. <a name="deploy-component-choose-deployment-step"></a>**[Add to deployment]** (デプロイに追加) で、改訂する既存のデプロイを選択するか、新しいデプロイを作成することを選択して、**[Next]** (次へ) を選択します。

1. <a name="deploy-component-choose-target-step"></a>新しいデプロイの作成を選択した場合、デプロイのターゲットコアデバイスまたはモノグループを選択します。リポジトリの **[Specify target]** (ターゲットを指定) ページの、**[Deployment target]** (ターゲットのデプロイ) で、コアデバイスまたはモノグループを選択し、**[Next]** (次へ) を選択します。

1. **[Select components]** (コンポーネントを選択) ページの**[Public components]** (パブリックコンポーネント) から、**[aws.greengrass.crypto.Pkcs11Provider]** を選択してから、**[Next]** (次へ) をクリックします。

1. **[Configure components]** (コンポーネントを設定) ページで、**aws.greengrass.crypto.Pkcs11Provider** を選択したら、次の操作を行います。

   1. **[Configure component]** (コンポーネントを設定) を選択します。

   1. **[aws.greengrass.crypto.Pkcs11Provider を設定]** モーダルの **[設定の更新]** の下にある **[マージする設定]** に、以下の設定更新を入力します。ターゲットコアデバイスの値を使用して、次の設定パラメータを更新します。PKCS\$111 トークンを初期化したスロット ID とユーザー PIN を指定します。プライベートキーと証明書は、後で HSM のこのスロットにインポートします。<a name="pkcs11-provider-component-configuration-parameters"></a>  
`name`  
PKCS\$111 設定の名前。  
`library`  
 AWS IoT Greengrass Core ソフトウェアが libdl でロードできる PKCS\$111 実装のライブラリへの絶対ファイルパス。  
`slot`  
プライベートキーとデバイス証明書を含むスロットの ID。この値は、スロットインデックスやスロットラベルとは異なります。  
`userPin`  
スロットへのアクセスに使用するユーザー PIN。

      ```
      {
        "name": "softhsm_pkcs11",
        "library": "/usr/lib/softhsm/libsofthsm2.so",
        "slot": 1,
        "userPin": "1234"
      }
      ```

   1. **[Confirm]** (確認) を選択してモーダルを閉じ、次に **[Next]** (次) を選択します。

1. <a name="deploy-component-configure-advanced-settings-step"></a>**[Configure advanced settings]** (詳細設定) ページはデフォルト設定のままにし、**[Next]** (次へ) を選択します。

1. <a name="deploy-component-review-and-deploy-step"></a>[**Review**] ページで、[**デプロイ**] を選択します。

   デプロイに最大 1 分かかる場合があります。

#### PKCS\$111 プロバイダコンポーネントをデプロイするには (AWS CLI)
<a name="deploy-pkcs11-provider-component-cli"></a>

PKCS\$111 プロバイダコンポーネントをデプロイするには、`components` オブジェクトの `aws.greengrass.crypto.Pkcs11Provider` を含むデプロイドキュメントを作成し、コンポーネントのコンフィギュレーション更新を指定します。[デプロイの作成](create-deployments.md) の指示に従って、新しいデプロイを作成または既存のデプロイを改訂します。

次の部分デプロイドキュメントの例では、PKCS\$111 プロバイダコンポーネントのデプロイと設定を行うよう指定しています。ターゲットコアデバイスの値を使用して、次の設定パラメータを更新します。後でプライベートキーと証明書を HSM にインポートする際に使用するスロット ID とユーザー PIN を保存します。<a name="pkcs11-provider-component-configuration-parameters"></a>

`name`  
PKCS\$111 設定の名前。

`library`  
 AWS IoT Greengrass Core ソフトウェアが libdl でロードできる PKCS\$111 実装のライブラリへの絶対ファイルパス。

`slot`  
プライベートキーとデバイス証明書を含むスロットの ID。この値は、スロットインデックスやスロットラベルとは異なります。

`userPin`  
スロットへのアクセスに使用するユーザー PIN。

```
{
  "name": "softhsm_pkcs11",
  "library": "/usr/lib/softhsm/libsofthsm2.so",
  "slot": 1,
  "userPin": "1234"
}
```

```
{
  ...,
  "components": {
    ...,
    "aws.greengrass.crypto.Pkcs11Provider": {
      "componentVersion": "2.0.0",
      "configurationUpdate": {
        "merge": "{\"name\":\"softhsm_pkcs11\",\"library\":\"/usr/lib/softhsm/libsofthsm2.so\",\"slot\":1,\"userPin\":\"1234\"}"
      }
    }
  }
}
```

デプロイには数分かかる場合があります。 AWS IoT Greengrass サービスを使用して、デプロイのステータスを確認できます。 AWS IoT Greengrass Core ソフトウェアログをチェックして、PKCS\$111 プロバイダーコンポーネントが正常にデプロイされたことを確認できます。詳細については次を参照してください:
+ [デプロイのステータスを確認する](check-deployment-status.md)
+ [AWS IoT Greengrass ログのモニタリング](monitor-logs.md)

デプロイに失敗した場合は、各コアデバイスでデプロイのトラブルシューティングを行います。詳細については、「[トラブルシューティング AWS IoT Greengrass V2](troubleshooting.md)」を参照してください。

### ステップ 3: コアデバイスの設定を更新する
<a name="enable-hardware-security-configure-core-device"></a>

 AWS IoT Greengrass Core ソフトウェアは、デバイスの動作を指定する設定ファイルを使用します。この設定ファイルには、デバイスが AWS クラウドに接続するために使用するプライベートキーおよび証明書の所在が含まれています。次の手順を実行して、コアデバイスのプライベートキーと証明書を HSM にインポートし、HSM を使用するように設定ファイルを更新します。

**ハードウェアセキュリティを使用するようにコアデバイスの設定を更新するには**

1.  AWS IoT Greengrass Core ソフトウェアを停止します。[AWS IoT Greengrass systemd で Core ソフトウェアをシステムサービスとして設定](configure-greengrass-core-v2.md#configure-system-service)した場合は、次のコマンドを実行してソフトウェアを停止できます。

   ```
   sudo systemctl stop greengrass.service
   ```

1. コアデバイスのプライベートキーと証明書ファイルを検索します。
   + [自動プロビジョニング](quick-installation.md)または[フリート](fleet-provisioning.md)プロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールした場合、プライベートキーは に存在し`/greengrass/v2/privKey.key`、証明書は にあります`/greengrass/v2/thingCert.crt`。
   + [手動プロビジョニング](manual-installation.md)で AWS IoT Greengrass Core ソフトウェアをインストールした場合、プライベートキーは`/greengrass/v2/private.pem.key`デフォルトで に存在し、証明書は`/greengrass/v2/device.pem.crt`デフォルトで にあります。

   `/greengrass/v2/config/effectiveConfig.yaml` の `system.privateKeyPath` と `system.certificateFilePath` のプロパティで、これらのファイルの場所を確認します。

1. プライベートキーと証明書を HSM にインポートします。プライベートキーと証明書をインポートする方法については、HSM のドキュメントを参照してください。PKCS\$111 トークンを初期化したスロット ID とユーザー PIN を使用して、プライベートキーと証明書をインポートします。プライベートキーと証明書には、同じオブジェクトラベルとオブジェクト ID を使用する必要があります。各ファイルをインポートしたときに指定したオブジェクトラベルを保存します。このラベルは、後で AWS IoT Greengrass Core ソフトウェア設定を更新して HSM のプライベートキーと証明書を使用するときに使用します。

1. HSM でプライベートキーと証明書を使用するように AWS IoT Greengrass Core 設定を更新します。設定を更新するには、 AWS IoT Greengrass Core 設定ファイルを変更し、更新された設定ファイルで AWS IoT Greengrass Core ソフトウェアを実行して新しい設定を適用します。

   以下の操作を実行します。

   1.  AWS IoT Greengrass Core 設定ファイルのバックアップを作成します。ハードウェアセキュリティの設定時に問題が発生した場合は、このバックアップを使用してコアデバイスを復元できます。

      ```
      sudo cp /greengrass/v2/config/effectiveConfig.yaml ~/ggc-config-backup.yaml
      ```

   1. テキストエディタで AWS IoT Greengrass Core 設定ファイルを開きます。例えば、次のコマンドを実行して GNU nano を使用してファイルを編集できます。`/greengrass/v2` を Greengrass ルートフォルダへのパスに置き換えます。

      ```
      sudo nano /greengrass/v2/config/effectiveConfig.yaml
      ```

   1. `system.privateKeyPath` の値を HSM のプライベートキーの PKCS\$111 URI に置き換えます。*iotdeviceKey* を以前にプライベートキーと証明書をインポートしたオブジェクトラベルに置き換えます。

      ```
      pkcs11:object=iotdevicekey;type=private
      ```

   1. `system.certificateFilePath` の値を HSM の証明書の PKCS\$111 URI に置き換えます。*iotdeviceKey* を以前にプライベートキーと証明書をインポートしたオブジェクトラベルに置き換えます。

      ```
      pkcs11:object=iotdevicekey;type=cert
      ```

   これらのステップを完了すると、 AWS IoT Greengrass Core 設定ファイルの `system`プロパティは次の例のようになります。

   ```
   system:
     certificateFilePath: "pkcs11:object=iotdevicekey;type=cert"
     privateKeyPath: "pkcs11:object=iotdevicekey;type=private"
     rootCaPath: "/greengrass/v2/rootCA.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   ```

1. 更新済みの `effectiveConfig.yaml` ファイルの設定を適用します。`Greengrass.jar` を `--init-config` パラメータで実行して、`effectiveConfig.yaml` の設定を適用します。`/greengrass/v2` を Greengrass ルートフォルダへのパスに置き換えます。

   ```
   sudo java -Droot="/greengrass/v2" \
     -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \
     --start false \
     --init-config /greengrass/v2/config/effectiveConfig.yaml
   ```

1.  AWS IoT Greengrass Core ソフトウェアを起動します。systemd で[システムサービスとして AWS IoT Greengrass Core ソフトウェアを設定](configure-greengrass-core-v2.md#configure-system-service)した場合は、次のコマンドを実行してソフトウェアを起動できます。

   ```
   sudo systemctl start greengrass.service
   ```

   詳細については、「[AWS IoT Greengrass Core ソフトウェアを実行する](run-greengrass-core-v2.md)」を参照してください。

1.  AWS IoT Greengrass Core ソフトウェアログをチェックして、ソフトウェアが起動し、 に接続されていることを確認します AWS クラウド。 AWS IoT Greengrass Core ソフトウェアは、プライベートキーと証明書を使用して AWS IoT および AWS IoT Greengrass サービスに接続します。

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

   次の INFO レベルのログメッセージは、 AWS IoT Greengrass Core ソフトウェアが AWS IoT および AWS IoT Greengrass サービスに正常に接続することを示しています。

   ```
   2021-12-06T22:47:53.702Z [INFO] (Thread-3) com.aws.greengrass.mqttclient.AwsIotMqttClient: Successfully connected to AWS IoT Core. {clientId=MyGreengrassCore5, sessionPresent=false}
   ```

1. (オプション) AWS IoT Greengrass Core ソフトウェアが HSM のプライベートキーと証明書で動作することを確認したら、デバイスのファイルシステムからプライベートキーと証明書ファイルを削除します。次のコマンドを実行し、ファイルパスをプライベートキーおよび証明書ファイルへのパスに置き換えます。

   ```
   sudo rm /greengrass/v2/privKey.key
   sudo rm /greengrass/v2/thingCert.crt
   ```

## PKCS\$111 をサポートしないハードウェア
<a name="hardware-without-pkcs11"></a>

PKCS\$111 ライブラリは通常、ハードウェアベンダーによって提供されるか、オープンソースです。例えば、標準準拠のハードウェア (TPM1.2 など) では、既存のオープンソースソフトウェアを使用できます。ただし、ハードウェアに対応する PKCS\$111 ライブラリ実装がない場合、またはカスタム PKCS\$111 プロバイダを作成する場合、統合については Amazon Web Service エンタープライズサポート担当者までお問い合わせください。

## 関連情報
<a name="hardware-security-see-also"></a>
+ [PKCS \$111 Cryptographic Token Interface Usage Guide Version 2.4.0](http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html) (PKCS \$111 暗号トークンインターフェース使用ガイド バージョン 2.4.0)
+ [RFC 7512](https://tools.ietf.org/html/rfc7512)
+ [PKCS \$11: RSA Encryption Version 1.5](https://tools.ietf.org/html/rfc2313)

# AWS IoT Greengrassのデバイス認証と認可
<a name="device-auth"></a>

 AWS IoT Greengrass 環境にあるデバイスは、認証に X.509 証明書を使用し、認可に AWS IoT ポリシーを使用します。証明書とポリシーにより、デバイスは、 AWS IoT Coreと AWS IoT Greengrassに安全に接続できます。

X.509 証明書は、X.509 パブリックキーインフラストラクチャ規格を使用して、パブリックキーと証明書内の ID を関連付けるための、デジタル証明書です。X.509 証明書は、証明機関 (CA) と呼ばれる信頼された団体によって発行されます。CA は、CA 証明書と呼ばれる 1 つ以上の特別な証明書を管理しており、この証明書は X.509 証明書を発行するために使用されます。証明機関にのみ CA 証明書に対するアクセス権限があります。

AWS IoT ポリシーは、 AWS IoT デバイスに対して許可される一連のオペレーションを定義します。具体的には、MQTT メッセージの発行やデバイスシャドウの取得など、 AWS IoT Core および AWS IoT Greengrass データプレーンオペレーションへのアクセスを許可および拒否します。

すべてのデバイスには、 AWS IoT Core レジストリにエントリと、 AWS IoT ポリシーがアタッチされたアクティブ化された X.509 証明書が必要です。デバイスは、次の 2 つのカテゴリに分類されます。
+ **Greengrass コアデバイス**

  Greengrass コアデバイスは、証明書と AWS IoT ポリシーを使用して AWS IoT Core と に接続します AWS IoT Greengrass。証明書とポリシーにより、 はコンポーネントと設定 AWS IoT Greengrass をコアデバイスにデプロイすることもできます。
+ **クライアントデバイス**

  MQTT クライアントデバイスは、証明書とポリシーを使用して AWS IoT Core および AWS IoT Greengrass サービスに接続します。これにより、クライアントデバイスは AWS IoT Greengrass クラウド検出を使用して Greengrass コアデバイスを検索して接続できます。クライアントデバイスは、同じ証明書を使用して AWS IoT Core クラウドサービスとコアデバイスに接続します。また、クライアントデバイスは、コアデバイスとの相互認証に検出情報を使用します。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。

## X.509 証明書
<a name="x509-certificates"></a>

コアデバイスとクライアントデバイス間、およびデバイスと AWS IoT Core または 間の通信は認証 AWS IoT Greengrass する必要があります。この相互認証は、登録された X.509 デバイス証明書と暗号化キーに基づいています。

 AWS IoT Greengrass 環境では、デバイスは次の Transport Layer Security (TLS) 接続にパブリックキーとプライベートキーを持つ証明書を使用します。
+ インターネットに接続 AWS IoT Core し、 AWS IoT Greengrass インターネット経由で接続する Greengrass コアデバイスの AWS IoT クライアントコンポーネント。
+ インターネット AWS IoT Greengrass 経由で に接続してコアデバイスを検出するクライアントデバイス。
+ ローカルネットワークを介してグループ内の Greengrass デバイスに接続する Greengrass コアにある MQTT ブローカーコンポーネント。

AWS IoT Greengrass コアデバイスは Greengrass ルートフォルダに証明書を保存します。

### 認証機関 (CA) 証明書
<a name="ca-certificates"></a>

Greengrass コアデバイスとクライアントデバイスは、 AWS IoT Core および AWS IoT Greengrass サービスでの認証に使用されるルート CA 証明書をダウンロードします。[Amazon ルート CA 1](https://www.amazontrust.com/repository/AmazonRootCA1.pem) など、Amazon Trust Services (ATS) のルート CA 証明書を使用することをお勧めします。詳細については、「AWS IoT Core デベロッパーガイド」の「[サーバー認証用の CA 証明書](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html#server-authentication-certs)」を参照してください。

クライアントデバイスは Greengrass コアデバイスの CA 証明書もダウンロードします。この証明書は、相互認証中にコアデバイスにある MQTT サーバー証明書を検証するために使用されます。

### ローカル MQTT ブローカー上での証明書ローテーション
<a name="mqtt-certificate-expiration"></a>

[クライアントデバイスのサポート](interact-with-local-iot-devices.md)を有効にすると、Greengrass コアデバイスは、クライアントデバイスが相互認証のために使用するローカル MQTT サーバー証明書を生成します。この証明書は、コアデバイスが AWS IoT Greengrass クラウドに保存するコアデバイス CA 証明書によって署名されます。クライアントデバイスは、コアデバイスを検出したときにコアデバイスの CA 証明書を取得します。コアデバイスの CA 証明書は、コアデバイスに接続するときに、コアデバイスの MQTT サーバー証明書を検証するために使用します。コアデバイスの CA 証明書は 5 年後に期限切れになります。

MQTT サーバー証明書はデフォルトで 7 日ごとに期限切れとなりますが、この期間は 2～10 日の間に設定できます。この制限期間は、セキュリティのベストプラクティスに基づいています。このローテーションは、攻撃者が MQTT サーバー証明書と秘密キーを盗んで Greengrass コアデバイスを偽装する脅威を軽減するために役立ちます。

Greengrass コアデバイスは、有効期限が切れる 24 時間前に、MQTT サーバー証明書をローテーションします。Greengrass コアデバイスは新しい証明書を生成し、ローカル MQTT ブローカーを再起動します。これが実行されると、Greengrass コアデバイスに接続されているすべてのクライアントデバイスが切断されます。クライアントデバイスは、短時間待機した後に、Greengrass コアデバイスに再度接続できます。

## AWS IoT データプレーンオペレーションの ポリシー
<a name="iot-policies"></a>

 AWS IoT ポリシーを使用して、 AWS IoT Core および AWS IoT Greengrass データプレーンへのアクセスを許可します。 AWS IoT Core データプレーンは、デバイス、ユーザー、およびアプリケーションへの操作を提供します。これらのオペレーションには、 トピックに接続 AWS IoT Core してサブスクライブする機能が含まれます。 AWS IoT Greengrass データプレーンは、Greengrass デバイスのオペレーションを提供します。詳細については、「[AWS IoT Greengrass V2 ポリシーアクション](#greengrass-policy-actions)」を参照してください。これらの操作には、コンポーネントの依存関係を解決し、パブリックコンポーネントのアーティファクトをダウンロードする機能が含まれます。

 AWS IoT ポリシーは、[IAM ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-json)に似た JSON ドキュメントです。これには、次のプロパティを指定する 1 つ以上のポリシーステートメントが含まれます。
+ `Effect`。アクセスモードを指定するプロパティで、`Allow` か `Deny` のどちらかになります。
+ `Action`。ポリシーによって許可または拒否されるアクションのリストです。
+ `Resource`。アクションが許可または拒否されるリソースのリストです。

AWS IoT ポリシーは、 をワイルドカード文字`*`としてサポートし、MQTT ワイルドカード文字 (`+` および `#`) をリテラル文字列として扱います。`*` ワイルドカードの詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[リソース ARN でのワイルドカードの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html#reference_policies_elements_resource_wildcards)」を参照してください。

詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT policies](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policies.html)」と「[AWS IoT policy actions](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html)」を参照してください。

**重要**  
<a name="thing-policy-variable-not-supported"></a>[モノのポリシー変数](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`) は コアデバイスまたは Greengrass データプレーン操作用の AWS IoT ポリシーではサポートされていません。代わりに、ワイルドカードを使用して名前が似ている複数のデバイスと一致させることができます。たとえば、`MyGreengrassDevice*` と指定すると `MyGreengrassDevice1`、`MyGreengrassDevice2` などと一致します。

**注記**  
AWS IoT Core では、モノのグループに AWS IoT ポリシーをアタッチして、デバイスのグループのアクセス許可を定義できます。モノのグループポリシーは、 AWS IoT Greengrass データプレーンオペレーションへのアクセスを許可しません。 AWS IoT Greengrass データプレーンオペレーションへのモノのアクセスを許可するには、モノの証明書にアタッチする AWS IoT ポリシーに アクセス許可を追加します。

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

AWS IoT Greengrass V2 では、Greengrass コアデバイスとクライアントデバイスがポリシーで使用できる以下の AWS IoT ポリシーアクションを定義します。ポリシーアクションのリソースを指定するには、リソースの Amazon リソースネーム (ARN) を使用することができます。コアデバイスのアクション

`greengrass:GetComponentVersionArtifact`  <a name="greengrass-get-component-version-artifact-action"></a>
パブリックコンポーネントアーティファクトまたは Lambda コンポーネントアーティファクトのダウンロードに使用する、署名付き URL を取得するアクセス許可を付与します。  
このアクセス許可は、コアデバイスがパブリックコンポーネントまたはアーティファクトを持つ Lambda を指定するデプロイを受信したときに評価されます。コアデバイスにアーティファクトがすでに存在する場合、アーティファクトが再度ダウンロードされることはありません。  
リソースタイプ: `componentVersion`  
リソース ARN 形式: `arn:aws:greengrass:region:account-id:components:component-name:versions:component-version`

`greengrass:ResolveComponentCandidates`  <a name="greengrass-resolve-component-candidates-action"></a>
デプロイのコンポーネント、バージョン、およびプラットフォームの要件を満たすコンポーネントのリストを特定するためのアクセス許可を付与します。要件が競合する場合、または要件を満たすコンポーネントが存在しない場合は、この操作はエラーを返し、デバイスでのデプロイが失敗します。  
このアクセス許可は、コアデバイスがコンポーネントを指定するデプロイを受信したときに評価されます。  
リソースタイプ: なし  
リソース ARN 形式: `*`

`greengrass:GetDeploymentConfiguration`  <a name="greengrass-get-deployment-configuration-action"></a>
大規模なデプロイドキュメントをダウンロードするための署名付き URL を取得するアクセス許可を付与します。  
このアクセス許可は、コアデバイスが 7 KB (デプロイがモノをターゲットとする場合) または 31 KB (デプロイがモノグループをターゲットとする場合) を超えるデプロイを指定しているデプロイを受信したときに評価されます。デプロイドキュメントには、コンポーネント設定、デプロイポリシー、およびデプロイメタデータが含まれます。詳細については、「[AWS IoT Greengrass コンポーネントをデバイスにデプロイする](manage-deployments.md)」を参照してください。  
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.3.0 以降に利用できます。  
リソースタイプ: なし  
リソース ARN 形式: `*`

`greengrass:ListThingGroupsForCoreDevice`  <a name="greengrass-list-thing-groups-for-core-device-action"></a>
コアデバイスのモノグループ階層を取得するアクセス許可を付与します。  
このアクセス許可は、コアデバイスがデプロイを受信するときにチェックされます AWS IoT Greengrass。コアデバイスはこのアクションを使用して、前回のデプロイ以降にモノグループから削除されていないかどうかを識別します。コアデバイスがモノグループから削除されており、そのモノグループがコアデバイスへのデプロイターゲットである場合、コアデバイスはそのデプロイでインストールされたコンポーネントを削除します。  
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.5.0 以降で使用されます。  
リソースタイプ: `thing` (コアデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/core-device-thing-name`

`greengrass:VerifyClientDeviceIdentity`  <a name="greengrass-verify-client-device-identity-action"></a>
コアデバイスに接続するクライアントデバイスの ID を確認するためのアクセス許可を付与します。  
このアクセス許可は、コアデバイスが[クライアントデバイス認証コンポーネント](client-device-auth-component.md)を実行し、クライアントデバイスから MQTT 接続を受信したときに評価されます。クライアントデバイスは、この AWS IoT デバイス証明書を提示します。その後、コアデバイスはクライアントデバイスの ID を検証するため、デバイス証明書を AWS IoT Greengrass クラウドサービスに送信します。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
リソースタイプ: なし  
リソース ARN 形式: `*`

`greengrass:VerifyClientDeviceIoTCertificateAssociation`  <a name="greengrass-verify-client-device-iot-certificate-association-action"></a>
クライアントデバイスが AWS IoT 証明書と関連付けられているかどうかを検証するためのアクセス許可を付与します。  
このアクセス許可は、コアデバイスが[クライアントデバイス認証コンポーネント](client-device-auth-component.md)を実行し、クライアントデバイスに MQTT 経由での接続を承認したときに評価されます。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
コアデバイスがこのオペレーションを使用するには、[Greengrass サービスロール](greengrass-service-role.md)が に関連付けられ AWS アカウント 、 アクセス`iot:DescribeCertificate`許可が付与されている必要があります。
リソースタイプ: `thing` (クライアントデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/client-device-thing-name`

`greengrass:PutCertificateAuthorities`  <a name="greengrass-put-certificate-authorities-action"></a>
コアデバイスを検証するためにクライアントデバイスがダウンロードできる認証機関 (CA) 証明書をアップロードするためのアクセス許可を付与します。  
このアクセス許可は、コアデバイスが[クライアントデバイス認証コンポーネント](client-device-auth-component.md)をインストールして実行したときに評価されます。このコンポーネントは、ローカル認証機関を作成し、この操作を使用して CA 証明書をアップロードします。クライアントデバイスは、[Discover](#greengrass-discover-action) 操作を使用して接続可能なコアデバイスを検出するときに、これらの CA 証明書をダウンロードします。クライアントデバイスがコアデバイス上の MQTT ブローカーに接続するときに、これらの CA 証明書を使用してコアデバイスの ID を検証します。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
リソースタイプ: なし  
ARN 形式: `*`

`greengrass:GetConnectivityInfo`  <a name="greengrass-get-connectivity-info-action"></a>
コアデバイスの接続情報を取得するアクセス許可を付与します。この情報は、クライアントデバイスがコアデバイスに接続する方法を説明するものです。  
このアクセス許可は、コアデバイスが[クライアントデバイス認証コンポーネント](client-device-auth-component.md)をインストールして実行したときに評価されます。このコンポーネントは、接続情報を使用して有効な CA 証明書を生成し、[PutCertificateAuthories](#greengrass-put-certificate-authorities-action) オペレーションを使用して AWS IoT Greengrass クラウドサービスにアップロードします。クライアントデバイスは、これらの CA 証明書を使用して、コアデバイスの ID を検証します。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
 AWS IoT Greengrass コントロールプレーンでこのオペレーションを使用して、コアデバイスの接続情報を表示することもできます。詳細については、「AWS IoT Greengrass V1 API リファレンス」の「[GetConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/getconnectivityinfo-get.html)」を参照してください。  
リソースタイプ: `thing` (コアデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/core-device-thing-name`

`greengrass:UpdateConnectivityInfo`  <a name="greengrass-update-connectivity-info-action"></a>
コアデバイスの接続情報を更新するためのアクセス許可を付与します。この情報は、クライアントデバイスがコアデバイスに接続する方法を説明するものです。  
このアクセス許可は、コアデバイスが [IP 検出コンポーネント](ip-detector-component.md)を実行したときに評価されます。このコンポーネントは、クライアントデバイスがローカルネットワーク上のコアデバイスに接続するために必要な情報を特定します。次に、このコンポーネントはこのオペレーションを使用して接続情報を AWS IoT Greengrass クラウドサービスにアップロードするため、クライアントデバイスは [Discover ](#greengrass-discover-action)オペレーションでこの情報を取得できます。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
 AWS IoT Greengrass コントロールプレーンでこのオペレーションを使用して、コアデバイスの接続情報を手動で更新することもできます。詳細については、「AWS IoT Greengrass V1 API リファレンス」の「[UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/updateconnectivityinfo-put.html)」を参照してください。  
リソースタイプ: `thing` (コアデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/core-device-thing-name`クライアントデバイスのアクション

`greengrass:Discover`  <a name="greengrass-discover-action"></a>
クライアントデバイスが接続できるコアデバイスの接続情報を検出するためのアクセス許可を付与します。この情報は、クライアントデバイスがコアデバイスに接続する方法を説明するものです。クライアントデバイスは、[BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html) 操作を使用して関連付けたコアデバイスのみを検出することができます。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
リソースタイプ: `thing` (クライアントデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/client-device-thing-name`

## コアデバイスの AWS IoT ポリシーを更新する
<a name="update-core-device-iot-policy"></a>

 AWS IoT Greengrass および AWS IoT コンソールまたは AWS IoT API を使用して、コアデバイスの AWS IoT ポリシーを表示および更新できます。

**注記**  
[AWS IoT Greengrass Core ソフトウェアインストーラを使用してリソースをプロビジョニング](quick-installation.md)した場合、コアデバイスには、すべての AWS IoT Greengrass アクション () へのアクセスを許可する AWS IoT ポリシーがあります`greengrass:*`。コアデバイスが使用するアクションのみにアクセスを制限するには、次の手順を実行します。

### コアデバイスの AWS IoT ポリシーの確認と更新 (コンソール)
<a name="update-core-device-iot-policy-console"></a>

1. <a name="update-iot-policy-console-open-greengrass-console"></a>[AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass)のナビゲーションメニューで、**[Core devices]** (コアデバイス) を選択します。

1. <a name="update-iot-policy-console-choose-core-device"></a>**[Core devices]** (コアデバイス) ページで、更新するコアデバイスを選択します。

1. <a name="update-iot-policy-console-choose-core-device-thing"></a>コアデバイスの詳細ページで、コアデバイスの **[Thing]** (モノ) へのリンクを選択します。このリンクをクリックすると、 AWS IoT コンソールの [thing details] (モノ詳細) ページが開きます。

1. <a name="update-iot-policy-console-choose-thing-security"></a>[thing details] (モノ詳細) ページで、**[Certificates]** (証明書) を選択します。

1. <a name="update-iot-policy-console-choose-thing-certificate"></a>**[Certificates]** (証明書) タブで、モノのアクティブな証明書を選択します。

1. <a name="update-iot-policy-console-choose-certificate-policies"></a>[certificate details] (証明書詳細) ページで、**[Policies]** (ポリシー) を選択します。

1. <a name="update-iot-policy-console-choose-policy"></a>**ポリシー**タブで、確認および更新する AWS IoT ポリシーを選択します。コアデバイスのアクティブな証明書にアタッチされている任意のポリシーに、必要なアクセス許可を追加できます。
**注記**  <a name="quick-installation-iot-policies-note"></a>
[AWS IoT Greengrass Core ソフトウェアインストーラを使用してリソースをプロビジョニング](quick-installation.md)した場合、2 つの AWS IoT ポリシーがあります。存在する場合は、**GreengrassV2IoTThingPolicy** という名前のポリシーを選択することをお勧めします。クイックインストーラで作成するコアデバイスは、デフォルトでこのポリシー名を使用します。このポリシーにアクセス許可を追加すると、このポリシーを使用する他のコアデバイスにもこれらのアクセス許可が付与されます。

1. <a name="update-iot-policy-console-edit-policy"></a>[policy overview] (ポリシーの概要) で、**[Edit active version]** (アクティブなバージョンの編集) を選択します。

1. ポリシーを確認し、必要に応じてアクセス許可を追加、削除、または編集します。

1. <a name="update-iot-policy-console-set-as-active-version"></a>新しいポリシーバージョンをアクティブなバージョンとして設定するには、**[Policy version status]** (ポリシーバージョンのステータス) で、**[Set the edited version as the active version for this policy]** (編集したバージョンをこのポリシーのアクティブバージョンとして設定) を選択します。

1. <a name="update-iot-policy-console-save-policy"></a>**[Save as new version]** (新しいバージョンとして保存) を選択します。

### コアデバイスの AWS IoT ポリシーの確認と更新 (AWS CLI)
<a name="update-core-device-iot-policy-cli"></a>

1. <a name="update-iot-policy-cli-list-thing-principals"></a>コアデバイスの AWS IoT モノのプリンシパルを一覧表示します。モノのプリンシパルは X.509 デバイス証明書またはその他の識別子にすることができます。以下のコマンドを実行して、*MyGreengrassCore* をコアデバイスの名前に置き換えます。

   ```
   aws iot list-thing-principals --thing-name MyGreengrassCore
   ```

   この動作は、コアデバイスのモノのプリンシパルをリスト表示するレスポンスを返します。

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:123456789012:cert/certificateId"
       ]
   }
   ```

1. <a name="update-iot-policy-cli-identify-active-certificate"></a>コアデバイスのアクティブな証明書を特定します。以下のコマンドを実行して、アクティブな証明書が見つかるまで、*certificateId* を前の手順からの各証明書の ID に置き換えます。証明書 ID は、証明書 ARN の末尾にある 16 進数の文字列です。`--query` 引数は、証明書のステータスのみを出力するように指定しています。

   ```
   aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'
   ```

   この操作では、証明書の状態が文字列で返されます。例えば、証明書がアクティブな場合、この操作は `"ACTIVE"` を出力します。

1. <a name="update-iot-policy-cli-list-certificate-policies"></a>証明書にアタッチされている AWS IoT ポリシーを一覧表示します。次のコマンドを実行し、証明書 ARN を証明書の ARN に置き換えます。

   ```
   aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId
   ```

   オペレーションは、証明書にアタッチされている AWS IoT ポリシーを一覧表示するレスポンスを返します。

   ```
   {
       "policies": [
           {
               "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias"
           },
           {
               "policyName": "GreengrassV2IoTThingPolicy",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy"
           }
       ]
   }
   ```

1. <a name="update-iot-policy-cli-choose-policy"></a>表示して更新するポリシーを選択します。
**注記**  <a name="quick-installation-iot-policies-note"></a>
[AWS IoT Greengrass Core ソフトウェアインストーラを使用してリソースをプロビジョニング](quick-installation.md)した場合、2 つの AWS IoT ポリシーがあります。存在する場合は、**GreengrassV2IoTThingPolicy** という名前のポリシーを選択することをお勧めします。クイックインストーラで作成するコアデバイスは、デフォルトでこのポリシー名を使用します。このポリシーにアクセス許可を追加すると、このポリシーを使用する他のコアデバイスにもこれらのアクセス許可が付与されます。

1. <a name="update-iot-policy-cli-get-policy-document"></a>ポリシーのドキュメントを取得します。以下のコマンドを実行して、*GreengrassV2IoTThingPolicy* をポリシーの名前に置き換えます。

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy
   ```

   この操作は、ポリシーのドキュメントとポリシーに関するその他の情報が含まれるレスポンスを返します。ポリシードキュメントは、文字列としてシリアル化された JSON オブジェクトです。

   ```
   {
       "policyName": "GreengrassV2IoTThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
                   \\"iot:Connect\\",\
                   \\"iot:Publish\\",\
                   \\"iot:Subscribe\\",\
                   \\"iot:Receive\\",\
                   \\"greengrass:*\\"\
   ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "defaultVersionId": "1",
       "creationDate": "2021-02-05T16:03:14.098000-08:00",
       "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00",
       "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f"
   }
   ```

1. <a name="update-iot-policy-cli-create-policy-document-file"></a>オンラインコンバータまたはその他のツールを使用して、ポリシードキュメント文字列を JSON オブジェクトに変換し、`iot-policy.json` という名前のファイルに保存します。

   例えば、[jq](https://stedolan.github.io/jq/) ツールがインストールされている場合には、次のコマンドを実行してポリシードキュメントを取得し、JSON オブジェクトに変換してから、ポリシードキュメントを JSON オブジェクトとして保存することができます。

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
   ```

1. ポリシードキュメントを確認し、必要に応じてアクセス許可を追加、削除、または編集します。

   <a name="nano-command-intro-existing-file"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを開きます。

   ```
   nano iot-policy.json
   ```

   完了すると、ポリシードキュメントは[コアデバイスの最小 AWS IoT ポリシー](#greengrass-core-minimal-iot-policy)のようになります。

1. <a name="update-iot-policy-cli-create-policy-version"></a>変更をポリシーの新しいバージョンとして保存します。以下のコマンドを実行して、*GreengrassV2IoTThingPolicy* をポリシーの名前に置き換えます。

   ```
   aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default
   ```

   成功すると、次の例に類似したレスポンスが返されます。

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
   \\t\\t\\"iot:Connect\\",\
   \\t\\t\\"iot:Publish\\",\
   \\t\\t\\"iot:Subscribe\\",\
   \\t\\t\\"iot:Receive\\",\
   \\t\\t\\"greengrass:*\\"\
         ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

## AWS IoT Greengrass V2 コアデバイスの最小 AWS IoT ポリシー
<a name="greengrass-core-minimal-iot-policy"></a>

**重要**  
[Greengrass nucleus コンポーネントの](greengrass-nucleus-component.md)それ以降のバージョンでは、最小限の AWS IoT ポリシーに対する追加のアクセス許可が必要です。追加の許可を付与するにあたり、[コアデバイスの AWS IoT ポリシーを更新する](#update-core-device-iot-policy)必要が生じる場合があります。  
Greengrass nucleus v2.5.0 以降を実行しているコアデバイスでは、モノグループからコアデバイスを削除するときにコンポーネントをアンインストールするにあたり、`greengrass:ListThingGroupsForCoreDevice` アクセス許可を使用します。
Greengrass nucleus v2.3.0 以降を実行しているコアデバイスでは、大規模なデプロイ設定ドキュメントをサポートするにあたり、`greengrass:GetDeploymentConfiguration` アクセス許可を使用します。

次のポリシーの例には、コアデバイスの基本的な Greengrass 機能をサポートするのに必要な最小限のアクションが含まれています。
+ `Connect` ポリシーには、コアデバイスのモノ名の後に `*` ワイルドカードが含まれます (例: `core-device-thing-name*`)。コアデバイスは同じデバイス証明書を使用して複数の同時サブスクリプションを行いますが AWS IoT Core、接続内のクライアント ID がコアデバイスのモノの名前と完全に一致しない場合があります。最初の 50 件のサブスクリプション以降、コアデバイスは `core-device-thing-name#number` をクライアント ID として使用します。ここにある `number` は、サブスクリプションが 50 件増えるごと増分されます。例えば、`MyCoreDevice` という名のコアデバイスが 150 件の同時サブスクリプションを作成する場合には、次のクライアント ID を使用します。
  + サブスクリプション 1 から 50: `MyCoreDevice`
  + サブスクリプション 51 から 100: `MyCoreDevice#2`
  + サブスクリプション 101 から 150: `MyCoreDevice#3`

  ワイルドカードを使用すると、サフィックスのあるクライアント ID を使用する場合に、コアデバイスが接続できるようになります。
+ ポリシーには、シャドウステータスに使用されるトピックを含む、コアデバイスがメッセージを発行、サブスクライブし、メッセージを受信できる、MQTT トピックとトピックのフィルターが一覧表示されます。 AWS IoT Core Greengrass コンポーネントとクライアントデバイス間のメッセージ交換をサポートするには、許可するトピックとトピックフィルターを指定します。詳細については、「AWS IoT Core デベロッパーガイド」の「[パブリッシュ/サブスクライブポリシーの例](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html)」を参照してください。
+ このポリシーは、テレメトリデータに関する次のトピックにパブリッシュするためのアクセス許可を付与します。

  ```
  $aws/things/core-device-thing-name/greengrass/health/json
  ```

  テレメトリを無効にしたコアデバイスでは、このアクセス許可を外すことができます。詳細については、「[AWS IoT Greengrass コアデバイスからシステムヘルステレメトリデータを収集する](telemetry.md)」を参照してください。
+ このポリシーは、ロールエイリアスを通じて IAM AWS IoT ロールを引き受けるアクセス許可を付与します。コアデバイスは、トークン交換ロールと呼ばれるこのロールを使用して、 AWS リクエストの認証に使用できる AWS 認証情報を取得します。詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

   AWS IoT Greengrass Core ソフトウェアをインストールするときは、このアクセス許可のみを含む 2 番目の AWS IoT ポリシーを作成してアタッチします。このアクセス許可をコアデバイスのプライマリ AWS IoT ポリシーに含めると、他の AWS IoT ポリシーをデタッチおよび削除できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/core-device-thing-name*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive",
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/greengrass/health/json",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/greengrassv2/health/json",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/jobs/*",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/shadow/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name/jobs/*",
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name/shadow/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/token-exchange-role-alias-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:GetComponentVersionArtifact",
                "greengrass:ResolveComponentCandidates",
                "greengrass:GetDeploymentConfiguration",
                "greengrass:ListThingGroupsForCoreDevice"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## クライアントデバイスをサポートする最小 AWS IoT ポリシー
<a name="client-device-support-minimal-iot-policy"></a>

次のポリシー例には、コアデバイス上のクライアントデバイスとの対話をサポートするために必要となる最低限のアクションが含まれています。クライアントデバイスをサポートするには、基本オペレーションの最小 AWS IoT ポリシーに加えて、コアデバイスにこのポリシーのアクセス許可が必要です。 [AWS IoT](#greengrass-core-minimal-iot-policy)
+ このポリシーにより、コアデバイスは自身の接続情報を更新できるようになります。このアクセス許可 (`greengrass:UpdateConnectivityInfo`) は、コアデバイスに [IP 検出コンポーネント](ip-detector-component.md)をデプロイする場合にのみ必要となります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name-gci/shadow/get"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name-gci/shadow/update/delta",
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name-gci/shadow/get/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name-gci/shadow/update/delta",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name-gci/shadow/get/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:PutCertificateAuthorities",
                "greengrass:VerifyClientDeviceIdentity"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:VerifyClientDeviceIoTCertificateAssociation"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:thing/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:GetConnectivityInfo",
                "greengrass:UpdateConnectivityInfo"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:thing/core-device-thing-name"
            ]
        }
    ]
}
```

------

## クライアントデバイスの最小 AWS IoT ポリシー
<a name="client-device-minimal-iot-policy"></a>

次のポリシー例には、クライアントデバイスが MQTT 経由で接続して通信するコアデバイスを検出するために必要となる最低限のアクションが含まれています。クライアントデバイスの AWS IoT ポリシーには、デバイスが関連する Greengrass コアデバイスの接続情報を検出できるようにする `greengrass:Discover`アクションを含める必要があります。`Resource` セクションには、Greengrass コアデバイスの ARN ではなく、クライアントデバイスの Amazon リソースネーム (ARN) を指定します。
+ このポリシーは、すべての MQTT トピックでの通信を許可します。セキュリティのベストプラクティスに沿うように、`iot:Publish`、`iot:Subscribe`、および `iot:Receive` のアクセス許可は、ユースケースに必要とされる最小限のトピックセットのみに制限してください。
+ このポリシーにより、モノはすべての AWS IoT モノのコアデバイスを検出できます。ベストプラクティスに従うには、アクセス`greengrass:Discover`許可をクライアントデバイスの AWS IoT モノ、または AWS IoT モノのセットに一致するワイルドカードに制限します。
**重要**  
<a name="thing-policy-variable-not-supported"></a>[モノのポリシー変数](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`) は コアデバイスまたは Greengrass データプレーン操作用の AWS IoT ポリシーではサポートされていません。代わりに、ワイルドカードを使用して名前が似ている複数のデバイスと一致させることができます。たとえば、`MyGreengrassDevice*` と指定すると `MyGreengrassDevice1`、`MyGreengrassDevice2` などと一致します。
+ Greengrass コアデバイスがクライアントデバイスのシャドウ同期オペレーションを処理するため、クライアントデバイスの AWS IoT ポリシーには通常`iot:GetThingShadow`、`iot:UpdateThingShadow`、、または `iot:DeleteThingShadow`アクションのアクセス許可は必要ありません。コアデバイスがクライアントデバイスシャドウを処理できるようにするには、コアデバイスの AWS IoT ポリシーでこれらのアクションが許可されていること、および `Resource`セクションにクライアントデバイスの ARNs が含まれていることを確認します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:Discover"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:thing/*"
            ]
        }
    ]
}
```

------

# の ID とアクセスの管理 AWS IoT Greengrass
<a name="security-iam"></a>

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

**注記**  
このトピックでは、IAM の概念と機能について説明します。でサポートされている IAM 機能の詳細については AWS IoT Greengrass、「」を参照してください[が IAM と AWS IoT Greengrass 連携する方法](security_iam_service-with-iam.md)。

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

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

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

認証とは、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 アカウント *root ユーザー*と呼ばれる 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)」を参照してください。

## 関連情報
<a name="security_iam_service-see-also"></a>
+ [が IAM と AWS IoT Greengrass 連携する方法](security_iam_service-with-iam.md)
+ [のアイデンティティベースのポリシーの例 AWS IoT Greengrass](security_iam_id-based-policy-examples.md)
+ [のアイデンティティとアクセスの問題のトラブルシューティング AWS IoT Greengrass](security_iam_troubleshoot.md)

# が IAM と AWS IoT Greengrass 連携する方法
<a name="security_iam_service-with-iam"></a>

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


| IAM 機能 | Greengrass によってサポートされていますか。 | 
| --- | --- | 
| [リソースレベルのアクセス許可を持つアイデンティティベースポリシー](#security_iam_service-with-iam-id-based-policies) | はい | 
| [リソースベースのポリシー](#security_iam_service-with-iam-resource-based-policies) | いいえ | 
| [アクセスコントロールリスト (ACL) ](#security_iam_service-with-iam-acls) | いいえ | 
| [タグベースの承認](#security_iam_service-with-iam-tags) | はい | 
| [一時的な認証情報](#security_iam_service-with-iam-roles-tempcreds) | はい | 
| [サービスリンクロール](#security_iam_service-with-iam-roles-service-linked) | いいえ | 
| [サービスロール](#security_iam_service-with-iam-roles-service-linked) | はい | 

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

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

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

### アクション
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

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

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

のポリシーアクションは、アクションの前に `greengrass:` プレフィックス AWS IoT Greengrass を使用します。たとえば、API `ListCoreDevices`オペレーションを使用してコアデバイスをリストできるようにするには AWS アカウント、ポリシーに `greengrass:ListCoreDevices`アクションを含めます。ポリシーステートメントには、 `Action`または `NotAction` element を含める必要があります。 は、このサービスで実行できるタスクを記述する独自のアクションのセット AWS IoT Greengrass を定義します。

1 つのステートメントで複数のアクションを指定するには、次のようにアクションをカンマで区切って全体を括弧 (`[` `]`) で囲って表示します。

```
"Action": [
  "greengrass:action1",
  "greengrass:action2",
  "greengrass:action3"
]
```

ワイルドカード (`*`) を使用して、複数のアクションを指定できます。例えば、`List` という単語で始まるすべてのアクションを指定するには次のアクションを含めます。

```
"Action": "greengrass:List*"
```

**注記**  
サービスに対して使用可能なすべてのアクションを指定するには、ワイルドカードを使用しないことをお勧めします。ベストプラクティスとして、ポリシー内で最小限の特権と狭い範囲のアクセス許可を付与する必要があります。詳細については、「[最小限のアクセス許可を付与する](security-best-practices.md#least-privilege)」を参照してください。

 AWS IoT Greengrass アクションの完全なリストについては、*IAM ユーザーガイド*の[「 で定義されるアクション AWS IoT Greengrass](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awsiotgreengrass.html#awsiotgreengrass-actions-as-permissions)」を参照してください。

### リソース
<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": "*"
```

次の表に、ポリシーステートメントの `Resource` 要素で使用できる AWS IoT Greengrass リソース ARN を示します。 AWS IoT Greengrass アクションでサポートされているリソースレベルのアクセス許可のマッピングについては、*IAM ユーザーガイド*の[「 で定義されるアクション AWS IoT Greengrass](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awsiotgreengrass.html#awsiotgreengrass-actions-as-permissions)」を参照してください。

一部の AWS IoT Greengrass アクション (一部のリストオペレーションなど) は、特定のリソースで実行できません。このような場合は、ワイルドカードのみを使用する必要があります。

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

ステートメントで複数のリソース ARN を指定するには、次のようにアクションをカンマで区切って全体を括弧 (`[` `]`) で囲って表示します。

```
"Resource": [
  "resource-arn1",
  "resource-arn2",
  "resource-arn3"
]
```

ARN 形式の詳細については、[ARNs) と AWS サービス名前空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)」を参照してください*Amazon Web Services 全般のリファレンス*。

### 条件キー
<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)」を参照してください。

### 例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



 AWS IoT Greengrass アイデンティティベースのポリシーの例を表示するには、「」を参照してください[のアイデンティティベースのポリシーの例 AWS IoT Greengrass](security_iam_id-based-policy-examples.md)。

## のリソースベースのポリシー AWS IoT Greengrass
<a name="security_iam_service-with-iam-resource-based-policies"></a>

AWS IoT Greengrass は[リソースベースのポリシー](security-iam.md#security_iam_access-manage-resource-based-policies)をサポートしていません。

## アクセスコントロールリスト (ACL)
<a name="security_iam_service-with-iam-acls"></a>

AWS IoT Greengrass は [ACLs](security-iam.md#security_iam_access-manage-acl) をサポートしていません。

## AWS IoT Greengrass タグに基づく認可
<a name="security_iam_service-with-iam-tags"></a>

サポートされている AWS IoT Greengrass リソースにタグをアタッチするか、リクエストでタグを渡すことができます AWS IoT Greengrass。タグに基づいてアクセスを管理するには、`aws:ResourceTag/${TagKey}`、`aws:RequestTag/${TagKey}`、または `aws:TagKeys` の条件キーを使用して、ポリシーの [[Condition element]](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) (条件要素) でタグ情報を提供します。詳細については、「[AWS IoT Greengrass Version 2 リソースにタグを付ける](tag-resources.md)」を参照してください。

## の IAM ロール AWS IoT Greengrass
<a name="security_iam_service-with-iam-roles"></a>

[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) は、特定の権限を持つ、 AWS アカウント 内のエンティティです。

### での一時的な認証情報の使用 AWS IoT Greengrass
<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 オペレーションを呼び出します。

Greengrass コアでは、[[device role]](device-service-role.md) (デバイスロール) の一時的な認証情報が Greengrass コンポーネントで利用可能になります。コンポーネントが AWS SDK を使用している場合は、 AWS SDK がユーザーに代わってこれを行うため、認証情報を取得するためのロジックを追加する必要はありません。

### サービスリンクロール
<a name="security_iam_service-with-iam-roles-service-linked"></a>

AWS IoT Greengrass は、[サービスにリンクされたロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)をサポートしていません。

### サービス役割
<a name="security_iam_service-with-iam-roles-service"></a>

この機能により、ユーザーに代わってサービスが[サービスロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role)を引き受けることが許可されます。この役割により、サービスがお客様に代わって他のサービスのリソースにアクセスし、アクションを完了することが許可されます。サービスロールはIAM アカウントに表示され、アカウントによって所有されます。つまり、IAM 管理者はこの役割の権限を変更できます。ただし、それにより、サービスの機能が損なわれる場合があります。

AWS IoT Greengrass コアデバイスはサービスロールを使用して、Greengrass コンポーネントと Lambda 関数がユーザーに代わって一部の AWS リソースにアクセスできるようにします。詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

AWS IoT Greengrass はサービスロールを使用して、ユーザーに代わって一部の AWS リソースにアクセスします。詳細については、「[Greengrass サービスロール](greengrass-service-role.md)」を参照してください。

# のアイデンティティベースのポリシーの例 AWS IoT Greengrass
<a name="security_iam_id-based-policy-examples"></a>

デフォルトでは、IAM ユーザーおよびロールには、 AWS IoT Greengrass リソースを作成または変更するアクセス許可はありません。また、 AWS マネジメントコンソール、 AWS CLI、または AWS API を使用してタスクを実行することはできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行する権限をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらの権限が必要な IAM ユーザーまたはグループにそのポリシーをアタッチする必要があります。

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

ID ベースのポリシーは、アカウント内の AWS IoT Greengrass リソースを作成、アクセス、または削除できるかどうかを決定します。これらのアクションでは、 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)を参照してください。

## ポリシーの例
<a name="security_iam_id-based-policy-examples-list"></a>

以下のお客様定義のポリシーは、一般的なシナリオのアクセス許可を付与します。

**Topics**
+ [自分の権限の表示をユーザーに許可する](#security_iam_id-based-policy-examples-view-own-permissions)

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

### 自分の権限の表示をユーザーに許可する
<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 サービスとやり取りできるように認可する
<a name="device-service-role"></a>

AWS IoT Greengrass コアデバイスは、 AWS IoT Core 認証情報プロバイダーを使用して サービスへの AWS 呼び出しを承認します。 AWS IoT Core 認証情報プロバイダーを使用すると、デバイスは X.509 証明書を一意のデバイス ID として使用して AWS リクエストを認証できます。これにより、 AWS アクセスキー ID とシークレットアクセスキーを AWS IoT Greengrass コアデバイスに保存する必要がなくなります。詳細については、「 *AWS IoT Core デベロッパーガイド*[」の「 AWS サービスへの直接呼び出しの承認](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)」を参照してください。

 AWS IoT Greengrass Core ソフトウェアを実行するときに、コアデバイスが必要とする AWS リソースをプロビジョニングすることを選択できます。これには、コアデバイスが AWS IoT Core 認証情報プロバイダーを通じて引き受ける AWS Identity and Access Management (IAM) ロールが含まれます。`--provision true` 引数を使用して、コアデバイスが一時的な AWS 認証情報を取得できるようにするロールとポリシーを設定します。この引数は、この IAM AWS IoT ロールを指すロールエイリアスも設定します。使用する IAM ロールと AWS IoT ロールエイリアスの名前を指定できます。これらの他の名前パラメータなしで `--provision true` を指定した場合、Greengrass コアデバイスは次のデフォルトリソースを作成して使用します。
+ IAM ロール: `GreengrassV2TokenExchangeRole`

  この役割には、`GreengrassV2TokenExchangeRoleAccess` という名前のポリシーと、`credentials.iot.amazonaws.com` がロールを継承することができる信頼関係があります。ポリシーには、コアデバイスに対する最低限のアクセス許可が含まれます。
**重要**  
このポリシーには、S3 バケット内のファイルへのアクセスは含まれません。コアデバイスが S3 バケットからコンポーネントアーティファクトを取得できるように、ロールにアクセス許可を追加する必要があります。詳細については、「[コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する](#device-service-role-access-s3-bucket)」を参照してください。
+ AWS IoT ロールエイリアス: `GreengrassV2TokenExchangeRoleAlias`

  このロールエイリアスは IAM ロールを参照します。

詳細については、「[ステップ 3: AWS IoT Greengrass Core ソフトウェアをインストールする](install-greengrass-v2.md)」を参照してください。

既存のコアデバイスにロールエイリアスを設定することもできます。設定するには、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の `iotRoleAlias` 設定パラメータを設定します。

この IAM ロールの一時的な AWS 認証情報を取得して、カスタムコンポーネントで AWS オペレーションを実行できます。詳細については、「[AWS サービスとやり取り](interact-with-aws-services.md)」を参照してください。

**Topics**
+ [コアデバイスに対するサービスロールのアクセス許可](#device-service-role-permissions)
+ [コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する](#device-service-role-access-s3-bucket)

## コアデバイスに対するサービスロールのアクセス許可
<a name="device-service-role-permissions"></a>

このロールにより、次のサービスがロールを継承できます。
+ `credentials.iot.amazonaws.com`

 AWS IoT Greengrass Core ソフトウェアを使用してこのロールを作成する場合、次のアクセス許可ポリシーを使用して、コアデバイスがログに接続して送信できるようにします AWS。ポリシーの名前は、デフォルトで `Access` で終わる IAM ロールの名前になります。例えば、デフォルトの IAM ロール名を使用した場合には、このポリシーの名前は `GreengrassV2TokenExchangeRoleAccess` になります。

------
#### [ Greengrass nucleus v2.5.0 and later ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

------
#### [ v2.4.x ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:DescribeCertificate",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

------
#### [ Earlier than v2.4.0 ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:DescribeCertificate",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams",
        "iot:Connect",
        "iot:Publish",
        "iot:Subscribe",
        "iot:Receive",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

------

## コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する
<a name="device-service-role-access-s3-bucket"></a>

コアデバイスのロールは、デフォルトではコアデバイスが S3 バケットにアクセスすることを許可しません。S3 バケットにアーティファクトを持つコンポーネントをデプロイするには、コアデバイスがコンポーネントアーティファクトをダウンロードすることを許可する `s3:GetObject` アクセス許可を追加する必要があります。コアデバイスに新しいポリシーを追加することで、このアクセス許可を付与できます。

**Amazon S3 のコンポーネントアーティファクトへのアクセスを許可するポリシーを追加するには**

1. `component-artifact-policy.json` という名前のファイルを作成して、次の JSON をファイルにコピーします。このポリシーは、S3 バケット内のすべてのファイルへのアクセスを許可します。amzn-s3-demo-bucket を S3 バケットの名前に置き換えて、コアデバイスにアクセスを許可します。

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

****  

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

------

1. 次のコマンドを実行して、`component-artifact-policy.json` のポリシードキュメントからポリシーを作成します。

------
#### [ Linux or Unix ]

   ```
   aws iam create-policy \
     --policy-name MyGreengrassV2ComponentArtifactPolicy \
     --policy-document file://component-artifact-policy.json
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws iam create-policy ^
     --policy-name MyGreengrassV2ComponentArtifactPolicy ^
     --policy-document file://component-artifact-policy.json
   ```

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

   ```
   aws iam create-policy `
     --policy-name MyGreengrassV2ComponentArtifactPolicy `
     --policy-document file://component-artifact-policy.json
   ```

------

   出力のポリシーメタデータから、ポリシーの Amazon リソースネーム (ARN) をコピーします。この ARN を使用して、次の手順で、このポリシーをコアデバイスのロールにアタッチします。

1. 次のコマンドを実行して、ポリシーをコアデバイスのロールにアタッチします。*GreengrassV2TokenExchangeRole* を AWS IoT Greengrass Core ソフトウェアの実行時に指定したロールの名前に置き換えます。その後、ポリシー ARN を、前のステップで書き留めた ARN に置き換えます。

------
#### [ Linux or Unix ]

   ```
   aws iam attach-role-policy \
     --role-name GreengrassV2TokenExchangeRole \
     --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws iam attach-role-policy ^
     --role-name GreengrassV2TokenExchangeRole ^
     --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
   ```

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

   ```
   aws iam attach-role-policy `
     --role-name GreengrassV2TokenExchangeRole `
     --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
   ```

------

   コマンドに出力がない場合は成功したことを意味しており、コアデバイスがこの S3 バケットにアップロードしたアーティファクトにアクセスできるようになります。

# インストーラがリソースをプロビジョニングするための最小限の IAM ポリシー
<a name="provision-minimal-iam-policy"></a>

 AWS IoT Greengrass Core ソフトウェアをインストールすると、デバイスの AWS IoT モノや IAM ロールなどの必要な AWS リソースをプロビジョニングできます。ローカル開発ツールをデバイスにデプロイすることもできます。インストーラには、 でこれらのアクションを実行できるように AWS 認証情報が必要です AWS アカウント。詳細については、「[AWS IoT Greengrass Core ソフトウェアをインストールします。](install-greengrass-core-v2.md)」を参照してください。

次のポリシーの例には、インストーラがこれらのリソースをプロビジョニングするため、必要な最小限の一連のアクションが含まれています。これらの権限は、インストーラの `--provision` 引数を指定する場合は必要です。*account-id* を AWS アカウント ID に置き換えて、*GreengrassV2TokenExchangeRole* を `--tes-role-name` [インストーラ因数](configure-installer.md)で指定したトークン交換ロールの名前に置き換えます。

**注記**  
`DeployDevTools` ポリシーステートメントは、インストーラの `--deploy-dev-tools` 引数を指定する場合のみ必要です。

------
#### [ Greengrass nucleus v2.5.0 and later ]

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateTokenExchangeRole",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreatePolicy",
                "iam:CreateRole",
                "iam:GetPolicy",
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
                "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
                "arn:aws:iam::aws:policy/GreengrassV2TokenExchangeRoleAccess"
            ]
        },
        {
            "Sid": "CreateIoTResources",
            "Effect": "Allow",
            "Action": [
                "iot:AddThingToThingGroup",
                "iot:AttachPolicy",
                "iot:AttachThingPrincipal",
                "iot:CreateKeysAndCertificate",
                "iot:CreatePolicy",
                "iot:CreateRoleAlias",
                "iot:CreateThing",
                "iot:CreateThingGroup",
                "iot:DescribeEndpoint",
                "iot:DescribeRoleAlias",
                "iot:DescribeThingGroup",
                "iot:GetPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeployDevTools",
            "Effect": "Allow",
            "Action": [
                "greengrass:CreateDeployment",
                "iot:CancelJob",
                "iot:CreateJob",
                "iot:DeleteThingShadow",
                "iot:DescribeJob",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:GetThingShadow",
                "iot:UpdateJob",
                "iot:UpdateThingShadow"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------
#### [ Earlier than v2.5.0 ]

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateTokenExchangeRole",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreatePolicy",
                "iam:CreateRole",
                "iam:GetPolicy",
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": [
            "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
    "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
                "arn:aws:iam::aws:policy/GreengrassV2TokenExchangeRoleAccess"
            ]
        },
        {
            "Sid": "CreateIoTResources",
            "Effect": "Allow",
            "Action": [
                "iot:AddThingToThingGroup",
                "iot:AttachPolicy",
                "iot:AttachThingPrincipal",
                "iot:CreateKeysAndCertificate",
                "iot:CreatePolicy",
                "iot:CreateRoleAlias",
                "iot:CreateThing",
                "iot:CreateThingGroup",
                "iot:DescribeEndpoint",
                "iot:DescribeRoleAlias",
                "iot:DescribeThingGroup",
                "iot:GetPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeployDevTools",
            "Effect": "Allow",
            "Action": [
                "greengrass:CreateDeployment",
                "iot:CancelJob",
                "iot:CreateJob",
                "iot:DeleteThingShadow",
                "iot:DescribeJob",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:GetThingShadow",
                "iot:UpdateJob",
                "iot:UpdateThingShadow"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------

# Greengrass サービスロール
<a name="greengrass-service-role"></a>

<a name="greengrass-service-role-intro"></a>Greengrass サービスロールは、 がユーザーに代わって のサービスからリソースにアクセス AWS IoT Greengrass することを許可する AWS Identity and Access Management (IAM) AWS サービスロールです。このロールにより、 AWS IoT Greengrass はクライアントデバイスの ID を検証し、コアデバイス接続情報を管理できます。

**注記**  
AWS IoT Greengrass V1 は、このロールを使用して重要なタスクも実行します。詳細については、「AWS IoT Greengrass V1 デベロッパーガイド」の「[Greengrass サービスロール](https://docs.aws.amazon.com/greengrass/v1/developerguide/service-role.html)」を参照してください。

 AWS IoT Greengrass が リソースにアクセスできるようにするには、Greengrass サービスロールを に関連付け AWS アカウント 、信頼されたエンティティ AWS IoT Greengrass として を指定する必要があります。ロールには、[AWSGreengrassResourceAccessRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy) 管理ポリシー、または使用する AWS IoT Greengrass 機能に対する同等のアクセス許可を定義するカスタムポリシーを含める必要があります。 は、このポリシー AWS を維持し、 AWS IoT Greengrass が AWS リソースにアクセスするために使用する一連のアクセス許可を定義します。詳細については、「[AWS マネージドポリシー: AWSGreengrassResourceAccessRolePolicy](security-iam-aws-managed-policies.md#aws-managed-policies-AWSGreengrassResourceAccessRolePolicy)」を参照してください。

同じ Greengrass サービスロールを 全体で再利用できますが AWS リージョン、使用するすべての AWS リージョン でアカウントに関連付ける必要があります AWS IoT Greengrass。サービスロールが現在の で設定されていない場合 AWS リージョン、コアデバイスはクライアントデバイスの検証に失敗し、接続情報の更新に失敗します。

以下のセクションでは、 AWS マネジメントコンソール または を使用して Greengrass サービスロールを作成および管理する方法を説明します AWS CLI。

**Topics**
+ [Greengrass サービスロールを管理する (コンソール)](#manage-greengrass-service-role-console)
+ [Greengrass サービスロールを管理する (CLI)](#manage-service-role-cli)
+ [関連情報](#service-role-see-also)

**注記**  
サービスレベルのアクセスを承認するサービスロールに加えて、Greengrass コアデバイスにトークン交換サービスを割り当てます。トークン交換ロールは、コアデバイスの Greengrass コンポーネントと Lambda 関数が AWS サービスにアクセスする方法を制御する別の IAM ロールです。詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

## Greengrass サービスロールを管理する (コンソール)
<a name="manage-greengrass-service-role-console"></a>

 AWS IoT コンソールを使用すると、Greengrass サービスロールを簡単に管理できます。たとえば、コアデバイスに対してクライアントデバイスの検出を設定すると、コンソールでユーザーの AWS アカウント が現在の AWS リージョンの Greengrass サービスロールに添付されているかどうかの確認が行われます。アタッチされていない場合、コンソールによるサービスロールの作成および設定が可能です。詳細については、「[Greengrass サービスロールを作成する (コンソール)](#create-greengrass-service-role-console)」を参照してください。

コンソールは以下のロール管理タスクに使用できます。

**Topics**
+ [Greengrass サービスロールを見つける (コンソール)](#get-greengrass-service-role-console)
+ [Greengrass サービスロールを作成する (コンソール)](#create-greengrass-service-role-console)
+ [Greengrass サービスロールを変更する (コンソール)](#update-greengrass-service-role-console)
+ [Greengrass サービスロールをデタッチする (コンソール)](#remove-greengrass-service-role-console)

**注記**  
コンソールにサインインするユーザーには、サービスロールを表示、作成、または変更するためのアクセス許可が必要です。

### Greengrass サービスロールを見つける (コンソール)
<a name="get-greengrass-service-role-console"></a>

以下のステップを使用して、現在の で が AWS IoT Greengrass 使用するサービスロールを見つけます AWS リージョン。

1. <a name="open-iot-console"></a>[AWS IoT コンソール](https://console.aws.amazon.com/iot)に移動します。

1. <a name="open-iot-settings"></a>ナビゲーションペインで **[設定]** を選択します。

1. [**Greengrass service role (Greengrass サービスロール)**] セクションまでスクロールして、サービスロールとそのポリシーを表示します。

   サービスロールが表示されない場合は、コンソールでサービスロールの作成または設定が可能です。詳細については、「[Greengrass サービスロールを作成する](#create-greengrass-service-role-console)」を参照してください。

### Greengrass サービスロールを作成する (コンソール)
<a name="create-greengrass-service-role-console"></a>

コンソールによるデフォルトの Greengrass サービスロールの作成と設定が可能です。このロールには以下のプロパティがあります。


| プロパティ | 値 | 
| --- | --- | 
| 名前 | Greengrass\$1ServiceRole | 
| 信頼されたエンティティ | AWS service: greengrass | 
| ポリシー | [AWSGreengrassResourceAccessRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy) | 

**注記**  
このロールを[AWS IoT Greengrass V1 デバイスセットアップスクリプト](https://docs.aws.amazon.com/greengrass/v1/developerguide/quick-start.html)で作成する場合、ロール名は `GreengrassServiceRole_random-string` になります。

コアデバイスのクライアントデバイス検出を設定すると、コンソールは Greengrass サービスロールが現在の AWS アカウント の に関連付けられているかどうかを確認します AWS リージョン。そうでない場合、コンソールは がユーザーに代わって AWS のサービス AWS IoT Greengrass を読み書きすることを許可するように求めます。

許可を付与すると、コンソールでは、 AWS アカウントに `Greengrass_ServiceRole` という名前のロールがあるかどうかの確認が行われます。
+ ロールが存在する場合、コンソールはサービスロールを現在の AWS アカウント の にアタッチします AWS リージョン。
+ ロールが存在しない場合、コンソールはデフォルトの Greengrass サービスロールを作成し、それを現在の AWS アカウント の にアタッチします AWS リージョン。

**注記**  
カスタムロールポリシーを使用してサービスロールを作成する場合は、IAM コンソールを使用してロールを作成または変更します。詳細については、*IAM ユーザーガイド*の「 [AWS サービスにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」または[「ロールの変更](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)」を参照してください。使用する機能およびリソースの `AWSGreengrassResourceAccessRolePolicy` マネージドポリシーと同等のアクセス許可が、ロールによって付与されることを確認します。また、信頼ポリシーには、`aws:SourceArn` および `aws:SourceAccount` グローバル条件コンテキストキーも含めて、混乱した代理によるセキュリティ問題を防止することをお勧めします。条件コンテキストキーを使用すると、指定したアカウントと Greengrass ワークスペースからのリクエストのみを許可するようにアクセスを制限できます。混乱した代理に関する問題の詳細については、「[サービス間の混乱した代理の防止](cross-service-confused-deputy-prevention.md)」を参照してください。  
サービスロールを作成する場合は、 AWS IoT コンソールに戻り、ロールを にアタッチします AWS アカウント。これは、**[Settings]** (設定) ページの **[Greengrass service role]** (Greengrass サービスロール) で行えます。

### Greengrass サービスロールを変更する (コンソール)
<a name="update-greengrass-service-role-console"></a>

コンソール AWS アカウント で AWS リージョン 現在選択されている で にアタッチする別の Greengrass サービスロールを選択するには、次の手順に従います。

1. <a name="open-iot-console"></a>[AWS IoT コンソール](https://console.aws.amazon.com/iot)に移動します。

1. <a name="open-iot-settings"></a>ナビゲーションペインで **[設定]** を選択します。

1. **[Greengrass service role]** (Greengrass サービスロール) で、**[Choose different role]** (別のロールの選択) を選択します。

   **Greengrass サービスロールの更新**ダイアログボックスが開き、信頼 AWS アカウント されたエンティティ AWS IoT Greengrass として を定義する の IAM ロールが表示されます。

1. アタッチする Greengrass サービスロールを選択します。

1. **[Attach role]** (ロールをアタッチする)を選択します。

### Greengrass サービスロールをデタッチする (コンソール)
<a name="remove-greengrass-service-role-console"></a>

次の手順を使用して、現在の の AWS アカウントから Greengrass サービスロールをデタッチします AWS リージョン。これにより、 が現在の AWS のサービスにアクセス AWS IoT Greengrass するためのアクセス許可が取り消されます AWS リージョン。

**重要**  
サービスロールをデタッチすると、アクティブなオペレーションが中断される場合があります。

1. <a name="open-iot-console"></a>[AWS IoT コンソール](https://console.aws.amazon.com/iot)に移動します。

1. <a name="open-iot-settings"></a>ナビゲーションペインで **[設定]** を選択します。

1. **[Greengrass service role]** (Greengrass サービスロール) で、**[Detach role]** (ロールのデタッチ) を選択します。

1. 確認ダイアログボックスで、[**Detach**] (デタッチ) を選択します。

**注記**  
ロールが不要になった場合は、IAM コンソールで削除できます。詳細については、「IAM ユーザーガイド」の「[ロールまたはインスタンスプロファイルを削除する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)」を参照してください。  
他のロールでは、 AWS IoT Greengrass が リソースにアクセスできる場合があります。ユーザーに代わってアクセス権限を引き受けることを AWS IoT Greengrass に許可するロールをすべて見つけるには、IAM コンソールの **[Roles]** (ロール) ページにある **[Trusted entities]** (信頼済みエンティティ) 列で、**[AWS service: greengrass]** ( サービス: greengrass) を含むロールを探します。

## Greengrass サービスロールを管理する (CLI)
<a name="manage-service-role-cli"></a>

次の手順では、 AWS Command Line Interface がインストールされ、 を使用するように設定されていることを前提としています AWS アカウント。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[Installing, updating, and uninstalling the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)」と「[Configuring settings for the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)」を参照してください。

は、次のロール管理タスク AWS CLI に使用できます。

**Topics**
+ [Greengrass サービスロールを取得する (CLI)](#get-service-role)
+ [Greengrass サービスロールを作成する (CLI)](#create-service-role)
+ [Greengrass サービスロールを削除する (CLI)](#remove-service-role)

### Greengrass サービスロールを取得する (CLI)
<a name="get-service-role"></a>

Greengrass サービスロールが AWS リージョン内の AWS アカウント に関連付けられているかどうか調べるには、以下の手順を使用します。
+ サービスロールを取得します。*region* を に置き換えます AWS リージョン (例: `us-west-2`)。

  ```
  aws greengrassv2 get-service-role-for-account --region region
  ```

  Greengrass サービスロールが既にアカウントに関連付けられている場合、リクエストに対して以下のロールメタデータが返されます。

  ```
  {
    "associatedAt": "timestamp",
    "roleArn": "arn:aws:iam::account-id:role/path/role-name"
  }
  ```

  リクエストしてもロールメタデータが返されない場合は、サービスロールを作成し (存在しない場合)、 AWS リージョン内でアカウントに関連付ける必要があります。

### Greengrass サービスロールを作成する (CLI)
<a name="create-service-role"></a>

次のステップを使用してロールを作成し、 AWS アカウントに関連付けます。

**IAM を使用して、サービスロールを作成するには**

1. がロールを引き受け AWS IoT Greengrass ることができる信頼ポリシーを持つロールを作成します。この例では、`Greengrass_ServiceRole` という名前のロールを作成しますが、別の名前を使用できます。また、信頼ポリシーには、`aws:SourceArn` および `aws:SourceAccount` グローバル条件コンテキストキーも含めて、*混乱した代理*によるセキュリティ問題を防止することをお勧めします。条件コンテキストキーを使用すると、指定したアカウントと Greengrass ワークスペースからのリクエストのみを許可するようにアクセスを制限できます。混乱した代理に関する問題の詳細については、「[サービス間の混乱した代理の防止](cross-service-confused-deputy-prevention.md)」を参照してください。

------
#### [ Linux or Unix ]

   ```
   aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "greengrass.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "ArnLike": {
             "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
           },
           "StringEquals": {
             "aws:SourceAccount": "account-id"
           }
         }
       }
     ]
   }'
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"greengrass.amazonaws.com\"},\"Action\":\"sts:AssumeRole\",\"Condition\":{\"ArnLike\":{\"aws:SourceArn\":\"arn:aws:greengrass:region:account-id:*\"},\"StringEquals\":{\"aws:SourceAccount\":\"account-id\"}}}]}"
   ```

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

   ```
   aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "greengrass.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "ArnLike": {
             "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
           },
           "StringEquals": {
             "aws:SourceAccount": "account-id"
           }
         }
       }
     ]
   }'
   ```

------

1. 出力のロールメタデータからロールの ARN をコピーします。ARN を使用して、ロールをアカウントに関連付けます。

1. `AWSGreengrassResourceAccessRolePolicy` ポリシーをロールにアタッチします。

   ```
   aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
   ```

**サービスロールを に関連付けるには AWS アカウント**
+ ロールとアカウントを関連付けます。*role-arn* をサービスロール ARN に置き換え、*region* を に置き換えます AWS リージョン (例: `us-west-2`)。

  ```
  aws greengrassv2 associate-service-role-to-account --role-arn role-arn --region region
  ```

  成功すると、リクエストは、以下のようなレスポンスを返します。

  ```
  {
    "associatedAt": "timestamp"
  }
  ```

### Greengrass サービスロールを削除する (CLI)
<a name="remove-service-role"></a>

次のステップを使用して、Greengrass サービスロールの関連付けを AWS アカウントから解除します。
+ アカウントからサービスロールの関連付けを解除します。*region* を に置き換えます AWS リージョン (例: `us-west-2`)。

  ```
  aws greengrassv2 disassociate-service-role-from-account --region region
  ```

  成功すると、以下のレスポンスが返されます。

  ```
  {
    "disassociatedAt": "timestamp"
  }
  ```
**注記**  
サービスロールを使用していない場合は、削除する必要があります AWS リージョン。最初に、[https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role-policy.html) を使用して `AWSGreengrassResourceAccessRolePolicy` マネージドポリシーをロールからデタッチし、次に [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role.html) を使用してロールを削除します。詳細については、「IAM ユーザーガイド」の「[ロールまたはインスタンスプロファイルを削除する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)」を参照してください。

## 関連情報
<a name="service-role-see-also"></a>
+ *IAM ユーザーガイド*の [AWS サービスにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) 
+ 「IAM ユーザーガイド」の「[ロールの修正](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)」
+ 「IAM ユーザーガイド」の「[ロールまたはインスタンスプロファイルを削除する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)」
+ AWS IoT Greengrass コマンド*AWS CLI リファレンスの コマンド*
  + [associate-service-role-to-account](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/associate-service-role-to-account.html)
  + [disassociate-service-role-from-account](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/disassociate-service-role-from-account.html)
  + [get-service-role-for-account](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/get-service-role-for-account.html)
+ AWS CLI コマンドリファレンスで使用可能な IAM コマンド
  + [attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html)
  + [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html)
  + [delete-role](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role.html)
  + [delete-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role-policy.html)

# AWS の 管理ポリシー AWS IoT Greengrass
<a name="security-iam-aws-managed-policies"></a>

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

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

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

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

**Topics**
+ [AWS マネージドポリシー: AWSGreengrassFullAccess](#aws-managed-policies-AWSGreengrassFullAccess)
+ [AWS マネージドポリシー: AWSGreengrassReadOnlyAccess](#aws-managed-policies-AWSGreengrassReadOnlyAccess)
+ [AWS マネージドポリシー: AWSGreengrassResourceAccessRolePolicy](#aws-managed-policies-AWSGreengrassResourceAccessRolePolicy)
+ [AWS IoT Greengrass AWS 管理ポリシーの更新](#aws-managed-policy-updates)

## AWS マネージドポリシー: AWSGreengrassFullAccess
<a name="aws-managed-policies-AWSGreengrassFullAccess"></a>

`AWSGreengrassFullAccess` ポリシーを IAM アイデンティティにアタッチできます。

このポリシーは、プリンシパルにすべての AWS IoT Greengrass アクションへのフルアクセスを許可する管理者権限を付与します。

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

このポリシーには、以下のアクセス許可が含まれています。
+ `greengrass` – プリンシパルに AWS IoT Greengrass のすべてのアクションへのフルアクセスを許可します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## AWS マネージドポリシー: AWSGreengrassReadOnlyAccess
<a name="aws-managed-policies-AWSGreengrassReadOnlyAccess"></a>

`AWSGreengrassReadOnlyAccess` ポリシーを IAM アイデンティティにアタッチできます。

このポリシーにより、プリンシパルは AWS IoT Greengrassの情報を表示できるが、変更できないようにする読み取り専用のアクセス許可が付与されます。例えば、これらのアクセス許可を持つプリンシパルは、Greengrass コアデバイスにデプロイされたコンポーネントのリストを表示できますが、そのデバイスで実行されるコンポーネントを変更するためのデプロイを作成することはできません。

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

このポリシーには、以下のアクセス許可が含まれています。
+ `greengrass` - プリンシパルは、アイテムのリストまたはアイテムに関する詳細を返すアクションを実行することができます。これには、`List` または `Get` で始まる API オペレーションが含まれます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:List*",
                "greengrass:Get*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## AWS マネージドポリシー: AWSGreengrassResourceAccessRolePolicy
<a name="aws-managed-policies-AWSGreengrassResourceAccessRolePolicy"></a>

`AWSGreengrassResourceAccessRolePolicy` ポリシーを IAM エンティティにアタッチできます。 は、ユーザーに代わって がアクションを実行できるようにするサービスロール AWS IoT Greengrass にもこのポリシー AWS IoT Greengrass をアタッチします。詳細については、「[Greengrass サービスロール](greengrass-service-role.md)」を参照してください。

このポリシーは、 が Lambda 関数の取得、 AWS IoT デバイスシャドウの管理、Greengrass クライアントデバイスの検証などの重要なタスク AWS IoT Greengrass を実行できるようにする管理アクセス許可を付与します。

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

このポリシーには、以下のアクセス許可が含まれています。
+ `greengrass` - Greengrass リソースを管理します。
+ `iot` (`*Shadow`) – AWS IoT 名前に次の特別な識別子を持つシャドウを管理します。これらのアクセス許可は、 AWS IoT Greengrass がコアデバイスと通信できるようにするために必要です。
  + `*-gci` – このシャドウ AWS IoT Greengrass を使用してコアデバイス接続情報を保存し、クライアントデバイスがコアデバイスを検出して接続できるようにします。
  + `*-gcm` – AWS IoT Greengrass V1 はこのシャドウを使用して、Greengrass グループの認証機関 (CA) 証明書がローテーションされたことをコアデバイスに通知します。
  + `*-gda` – AWS IoT Greengrass V1 はこのシャドウを使用して、コアデバイスにデプロイを通知します。
  + `GG_*` – 未使用。
+ `iot` (`DescribeThing` と `DescribeCertificate`) – AWS IoT モノと証明書に関する情報を取得します。これらのアクセス許可は、 AWS IoT Greengrass がコアデバイスに接続するクライアントデバイスを検証するために必要です。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。
+ `lambda` – AWS Lambda 関数に関する情報を取得します。このアクセス許可は、 AWS IoT Greengrass V1 が Lambda 関数を Greengrass コアにデプロイできるようにするために必要です。詳細については、*AWS IoT Greengrass 「 V1 デベロッパーガイド*」の[AWS IoT Greengrass 「コアで Lambda 関数を実行する](https://docs.aws.amazon.com/greengrass/v1/developerguide/lambda-functions.html)」を参照してください。
+ `secretsmanager` – 名前が で始まる AWS Secrets Manager シークレットの値を取得します`greengrass-`。このアクセス許可は、 AWS IoT Greengrass V1 が Secrets Manager シークレットを Greengrass コアにデプロイできるようにするために必要です。詳細については、*AWS IoT Greengrass 「 V1 * [デベロッパーガイド」の AWS IoT Greengrass 「コアにシークレットをデプロイする](https://docs.aws.amazon.com/greengrass/v1/developerguide/secrets.html)」を参照してください。
+ `s3` - 名前に `greengrass` または `sagemaker` が含まれる S3 バケットからファイルオブジェクトを取得します。これらのアクセス許可は、 AWS IoT Greengrass V1 が S3 バケットに保存する機械学習リソースをデプロイできるようにするために必要です。詳細については、*AWS IoT Greengrass 「 V1 デベロッパーガイド*」の[「機械学習リソース](https://docs.aws.amazon.com/greengrass/v1/developerguide/ml-inference.html#ml-resources)」を参照してください。
+ `sagemaker` - Amazon SageMaker AI 機械学習推論モデルに関する情報を取得します。このアクセス許可は、 AWS IoT Greengrass V1 が ML モデルを Greengrass コアにデプロイできるようにするために必要です。詳細については、*AWS IoT Greengrass 「 V1 * [デベロッパーガイド」の「機械学習推論](https://docs.aws.amazon.com/greengrass/v1/developerguide/ml-inference.html)の実行」を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowGreengrassAccessToShadows",
            "Action": [
                "iot:DeleteThingShadow",
                "iot:GetThingShadow",
                "iot:UpdateThingShadow"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iot:*:*:thing/GG_*",
                "arn:aws:iot:*:*:thing/*-gcm",
                "arn:aws:iot:*:*:thing/*-gda",
                "arn:aws:iot:*:*:thing/*-gci"
            ]
        },
        {
            "Sid": "AllowGreengrassToDescribeThings",
            "Action": [
                "iot:DescribeThing"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:*:*:thing/*"
        },
        {
            "Sid": "AllowGreengrassToDescribeCertificates",
            "Action": [
                "iot:DescribeCertificate"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:*:*:cert/*"
        },
        {
            "Sid": "AllowGreengrassToCallGreengrassServices",
            "Action": [
                "greengrass:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "AllowGreengrassToGetLambdaFunctions",
            "Action": [
                "lambda:GetFunction",
                "lambda:GetFunctionConfiguration"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "AllowGreengrassToGetGreengrassSecrets",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:secretsmanager:*:*:secret:greengrass-*"
        },
        {
            "Sid": "AllowGreengrassAccessToS3Objects",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::*Greengrass*",
                "arn:aws:s3:::*GreenGrass*",
                "arn:aws:s3:::*greengrass*",
                "arn:aws:s3:::*Sagemaker*",
                "arn:aws:s3:::*SageMaker*",
                "arn:aws:s3:::*sagemaker*"
            ]
        },
        {
            "Sid": "AllowGreengrassAccessToS3BucketLocation",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "AllowGreengrassAccessToSageMakerTrainingJobs",
            "Action": [
                "sagemaker:DescribeTrainingJob"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:sagemaker:*:*:training-job/*"
            ]
        }
    ]
}
```

------

## AWS IoT Greengrass AWS 管理ポリシーの更新
<a name="aws-managed-policy-updates"></a>

このサービスがこれらの変更の追跡を開始した時点 AWS IoT Greengrass からの の AWS マネージドポリシーの更新に関する詳細を表示できます。このページの変更に関する自動アラートについては、[AWS IoT Greengrass V2 ドキュメント履歴ページの](document-history.md) RSS フィードにサブスクライブしてください。


| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
|  AWS IoT Greengrass が変更の追跡を開始しました  |  AWS IoT Greengrass は、 AWS 管理ポリシーの変更の追跡を開始しました。  |  2021 年 7 月 2 日  | 

# サービス間の混乱した代理の防止
<a name="cross-service-confused-deputy-prevention"></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 IoT Greengrass に付与するアクセス許可を制限することをお勧めします。両方のグローバル条件コンテキストキーを同じポリシーステートメントで使用する場合は、`aws:SourceAccount` 値と、`aws:SourceArn` 値に含まれるアカウントが、同じアカウント ID を示している必要があります。

`aws:SourceArn` の値は、`sts:AssumeRole` リクエストに関連付けられている Greengrass のカスタマーリソースである必要があります。

混乱した代理問題から保護するための最も効果的な方法は、リソースの完全な ARN を指定して `aws:SourceArn` グローバル条件コンテキストキーを使用することです。リソースの完全な ARN が不明な場合や、複数のリソースを指定する場合は、`aws:SourceArn` グローバルコンテキスト条件キーを使用して、ARN の未知部分をワイルドカード (`*`) で表します。例えば、`arn:aws:greengrass::account-id:*` です。

`aws:SourceArn` と `aws:SourceAccount` グローバル条件コンテキストキーを使用するポリシーの例については、「[Greengrass サービスロールを作成する](greengrass-service-role.md#create-service-role)」を参照してください。

# のアイデンティティとアクセスの問題のトラブルシューティング AWS IoT Greengrass
<a name="security_iam_troubleshoot"></a>

次の情報は、 および IAM の使用時に発生する可能性がある一般的な問題の診断 AWS IoT Greengrass と修復に役立ちます。

**Topics**
+ [でアクションを実行する権限がありません AWS IoT Greengrass](#security_iam_troubleshoot-no-permissions)
+ [iam: PassRole を実行する権限がない](#security_iam_troubleshoot-passrole)
+ [管理者として、他のユーザーにアクセスを許可したい AWS IoT Greengrass](#security_iam_troubleshoot-admin-delegate)
+ [自分の 以外のユーザーに自分の AWS IoT Greengrass リソース AWS アカウント へのアクセスを許可したい](#security_iam_troubleshoot-cross-account-access)

一般的なトラブルシューティングヘルプについては、「[トラブルシューティング AWS IoT Greengrass V2](troubleshooting.md)」を参照してください。

## でアクションを実行する権限がありません AWS IoT Greengrass
<a name="security_iam_troubleshoot-no-permissions"></a>

アクションを実行する権限がないというエラーが表示された場合、管理者に問い合わせてサポートを依頼する必要があります。お客様のユーザー名とパスワードを発行したのが、担当の管理者です。

以下の例のエラーは、`mateojackson` IAM ユーザーがコアデバイスの詳細を表示しようとしているが、`greengrass:GetCoreDevice` アクセス許可がない場合に発生します。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: greengrass:GetCoreDevice on resource: arn:aws:greengrass:us-west-2:123456789012:coreDevices/MyGreengrassCore
```

この場合、Mateo は、`greengrass:GetCoreDevice` アクションを使用して `arn:aws:greengrass:us-west-2:123456789012:coreDevices/MyGreengrassCore` リソースへのアクセスが許可されるように、管理者にポリシーの更新を依頼します。

以下は、 AWS IoT Greengrassを操作するときに発生する可能性がある一般的な IAM の問題です。

## iam: PassRole を実行する権限がない
<a name="security_iam_troubleshoot-passrole"></a>

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

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

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

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

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

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

## 管理者として、他のユーザーにアクセスを許可したい AWS IoT Greengrass
<a name="security_iam_troubleshoot-admin-delegate"></a>

他のユーザーにアクセスを許可するには AWS IoT Greengrass、アクセスを必要とするユーザーまたはアプリケーションにアクセス許可を付与する必要があります。 AWS IAM アイデンティティセンター を使用してユーザーとアプリケーションを管理する場合は、アクセスレベルを定義するアクセス許可セットをユーザーまたはグループに割り当てます。アクセス許可セットは、ユーザーまたはアプリケーションに関連付けられている IAM ロールに自動的に IAM ポリシーを作成して割り当てます。詳細については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セット](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)」を参照してください。

IAM アイデンティティセンターを使用していない場合は、アクセスを必要としているユーザーまたはアプリケーションの IAM エンティティ (ユーザーまたはロール) を作成する必要があります。次に、 AWS IoT Greengrassの適切なアクセス許可を付与するポリシーを、そのエンティティにアタッチする必要があります。アクセス許可が付与されたら、ユーザーまたはアプリケーション開発者に認証情報を提供します。これらの認証情報を使用して AWSにアクセスします。IAM ユーザー、グループ、ポリシー、アクセス許可の作成の詳細については、「*IAM ユーザーガイド*」の「[IAM アイデンティティ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)」と「[IAM のポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)」を参照してください。

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

他のアカウントのユーザーや組織外のユーザーが AWS リソースにアクセスするために使用できる IAM ロールを作成できます。ロールを引き受けるように信頼されたユーザーを指定することができます。詳細については、[「IAM ユーザーガイド」の「自分が所有 AWS アカウント している別の の IAM ユーザーへのアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)を提供する」および[「第三者が所有する へのアクセスを提供する AWS アカウント](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)」を参照してください。 **

AWS IoT Greengrass は、リソースベースのポリシーまたはアクセスコントロールリスト (ACLs) に基づくクロスアカウントアクセスをサポートしていません。

# プロキシまたはファイアウォールを介したデバイストラフィックを許可する
<a name="allow-device-traffic"></a>

Greengrass コアデバイスと Greengrass コンポーネントは、 AWS サービスやその他のウェブサイトへのアウトバウンドリクエストを実行します。セキュリティ対策として、アウトバウンドトラフィックを、狭い範囲のエンドポイントとポートに制限することがあります。エンドポイントとポートに関する以下の情報を活用することで、プロキシ、ファイアウォール、または [Amazon VPC セキュリティグループ](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)を通じてデバイストラフィックを制限することができます。プロキシを使用するようにコアデバイスを設定する方法の詳細については、「[ポート 443 での接続またはネットワークプロキシを通じた接続](configure-greengrass-core-v2.md#configure-alpn-network-proxy)」を参照してください。

**Topics**
+ [基本操作のためのエンドポイント](#core-endpoints)
+ [自動プロビジョニングを使用したインストール向けのエンドポイント](#automatic-provisioning-endpoints)
+ [AWSが提供するコンポーネントのエンドポイント](#public-component-endpoints)

## 基本操作のためのエンドポイント
<a name="core-endpoints"></a>

Greengrass コアデバイスは、基本的な操作に次のエンドポイントとポートを使用します。

### AWS IoT エンドポイントを取得する
<a name="retrieve-iot-endpoints"></a>

の AWS IoT エンドポイントを取得し AWS アカウント、後で使用するために保存します。デバイスはこれらのエンドポイントを使用して AWS IoTに接続します。以下の操作を実行します。

1.  AWS IoT のデータエンドポイントを取得します AWS アカウント。

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

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. の AWS IoT 認証情報エンドポイントを取得します AWS アカウント。

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```


| Endpoint | ポート | 必要 | 説明 | 
| --- | --- | --- | --- | 
|  `greengrass-ats.iot.region.amazonaws.com`  | 8443 または 443 | はい |  デプロイのインストールやクライアントデバイスの操作などの、データプレーンオペレーションに使用されます。  | 
|  `device-data-prefix-ats.iot.region.amazonaws.com`  |  MQTT: 8883 または 443 HTTPS: 8443 または 443  | はい |  MQTT 通信や AWS IoT Coreとのシャドウ同期など、デバイスを管理するためのデータプレーンオペレーションに使用されます。  | 
|  `device-credentials-prefix.credentials.iot.region.amazonaws.com`  | 443 | はい |  コアデバイスが Amazon S3 からコンポーネントアーティファクトをダウンロードし、他のオペレーションを実行するために使用する AWS 認証情報を取得するために使用されます。詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。  | 
|  `*.s3.amazonaws.com` `*.s3.region.amazonaws.com`  | 443 | はい |  デプロイに使用されます。エンドポイントのプレフィックスは内部的に制御されており、いつでも変更される可能性があるため、この形式には `*` 文字が含まれます。  | 
|  `data.iot.region.amazonaws.com`  | 443 | いいえ |  コアデバイスが [Greengrass nucleus](greengrass-nucleus-component.md) の v2.4.0 以前のバージョンを実行している場合に必要で、ネットワークプロキシを使用するように設定されています。コアデバイスは、プロキシの背後にある AWS IoT Core ときに との MQTT 通信にこのエンドポイントを使用します。詳細については、「[ネットワークプロキシを設定する](configure-greengrass-core-v2.md#configure-network-proxy)」を参照してください。  | 

## 自動プロビジョニングを使用したインストール向けのエンドポイント
<a name="automatic-provisioning-endpoints"></a>

Greengrass コアデバイスは、[リソースの自動プロビジョニングで AWS IoT Greengrass Core ソフトウェアをインストールする](quick-installation.md)ときに、次のエンドポイントとポートを使用します。


| Endpoint | ポート | 必要 | 説明 | 
| --- | --- | --- | --- | 
|  `iot.region.amazonaws.com`  | 443 | はい |   AWS IoT リソースを作成し、既存の AWS IoT リソースに関する情報を取得するために使用されます。  | 
|  `iam.amazonaws.com`  | 443 | はい |  IAM リソースを作成し、既存の IAM リソースに関する情報を取得するために使用します。  | 
|  `sts.region.amazonaws.com`  | 443 | はい |  の ID を取得するために使用します AWS アカウント。  | 
|  `greengrass.region.amazonaws.com`  | 443 | いいえ |  `--deploy-dev-tools` 引数を使用してGreengrass CLI コンポーネントをコアデバイスにデプロイする場合に必要です。  | 

## AWSが提供するコンポーネントのエンドポイント
<a name="public-component-endpoints"></a>

Greengrass コアデバイスは、実行するソフトウェアコンポーネントに応じて、追加のエンドポイントを使用します。このデベロッパーガイドの各コンポーネントのページの**「要件**」セクションで、各 AWS提供コンポーネントに必要なエンドポイントを確認できます。詳細については、「[AWS が提供したコンポーネント](public-components.md)」を参照してください。

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

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

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

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

# FIPS エンドポイント
<a name="FIPS"></a>

AWS IoT Greengrass は、FIPS ([Federal Information Processing Standard (FIPS) 140-2) ](https://aws.amazon.com/compliance/fips/)エンドポイントの使用をサポートしています。FIPS モードを有効にすると、HTTP プロトコルと MQTT プロトコルの両方を含む AWS クラウド サービスへの全データ転送が、対応する FIPS 準拠エンドポイント ([FIPS - Amazon Web Services (AWS)](https://aws.amazon.com/compliance/fips/)) との接続を呼び出して確立する必要があります。

IoT データプレーン FIPS エンドポイント ([FIPS AWS IoT エンドポイントへの接続 - AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-connect-fips.html#iot-connect-fips-data)) と、 AWS開発済みの FIPS 準拠の暗号化ライブラリ aws-lc AWS IoT を利用する MQTT 通信。

Greengrass での HTTP 通信の場合:
+ nucleus およびプラグインコンポーネントの場合、すべての SDK HTTP クライアントは、システムプロパティ AWS\$1USE\$1FIPS\$1ENDPOINT を true に設定して FIPS エンドポイントで設定されます。
+ 汎用コンポーネントの場合、すべてのコンポーネントはシステムプロパティ AWS\$1USE\$1FIPS\$1ENDPOINT を True に設定して開始します。このプロセスにより、これらの汎用コンポーネントで使用される SDK HTTP クライアントが FIPS 準拠のエンドポイントにリクエストを送信できるようになります。

**注記**  
Stream Manager の場合、Nucleus は環境変数 AWS\$1GG\$1FIPS\$1MODE を渡します。この環境変数により、Stream Manager 内で使用されている HTTP クライアントは、対応する FIPS 準拠エンドポイントを識別して接続できます。

AWS IoT Greengrass には、FIPS モードを有効にする 2 つの方法があります。プロビジョニングとデプロイです。FIPS モードを有効にするには、設定パラメータ `fipsMode` を True に設定する必要があります。その後、Nucleus はシステムプロパティ AWS\$1USE\$1FIPS\$1ENDPOINT を True に設定し、他のすべてのコンポーネントに環境変数として伝達します。さらに、 AWS IoT Greengrass はルート CA 証明書 (CA3) をダウンロードし、それを既存の rootCA.pem (または AmazonRootCA1.pem) ファイルに追加します。新しいデプロイで FIPS を有効にすると、Nucleus は再起動して、FIPS モードを有効にした後にシステムプロパティが有効になります。

 `fipsMode` パラメータの設定とは別に、`iotDataEndpoint`、`iotCredEndpoint`、および `greengrassDataEndpoint` パラメータも設定する必要があります。詳細については、以下で関連するリソースタイプのドキュメントを参照してください。

## デプロイで FIPS エンドポイントを有効にする
<a name="FIPS-deployment"></a>

の AWS IoT エンドポイントを取得し AWS アカウント、後で使用するために保存します。デバイスはこれらのエンドポイントを使用して AWS IoTに接続します。必要なエンドポイントは、`iotDataEndpoint` と `iotCredEndpoint` の 2 つです。以下の操作を実行します。

1. [AWS IoT Core FIPS データプレーンエンドポイント](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)で、リージョンの FIPS データエンドポイントを取得します。の FIPS データエンドポイント AWS アカウント は次のようになります。*data.iot-fips.us-west-2.amazonaws.com*

1. [AWS IoT Core FIPS データプレーンエンドポイント](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)で、リージョンの FIPS 認証情報エンドポイントを取得します。の FIPS 認証情報エンドポイント AWS アカウント は次のようになります。*data.credentials.iot-fips.us-west-2.amazonaws.com*

次に、デプロイで FIPS を有効にするには、次の設定を Nucleus に適用する必要があります。デプロイでマージする設定は次のとおりです。

------
#### [ Console ]

**マージする設定**  

```
{
  "fipsMode": "true",
  "iotDataEndpoint": "data.iot-fips.us-west-2.amazonaws.com",
  "greengrassDataPlaneEndpoint": "iotData",
  "iotCredEndpoint": "data.credentials.iot-fips.us-west-2.amazonaws.com"
}
```

------
#### [ AWS CLI ]

次のコマンドは、コアデバイスにデプロイを作成します。

```
aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment.json
```

`dashboard-deployment.json` ファイルには、次の JSON ドキュメントが含まれています。

```
{
  "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
  "deploymentName": "Deployment for MyGreengrassCore",
  "components": {
    "aws.greengrass.Nucleus": {
      "componentVersion": "2.13.0",
      "configurationUpdate": {
        "merge":{\"fipsMode\":\"true\",\"iotDataEndpoint\":\"data.iot-fips.us-west-2.amazonaws.com\",\"greengrassDataPlaneEndpoint\":\"iotData\",\"iotCredEndpoint\":\"data.credentials.iot-fips.us-west-2.amazonaws.com\"}"
      }
    }
  }
}
```

------
#### [ Greengrass CLI ]

次の [Greengrass CLI](greengrass-cli-component.md) コマンドは、コアデバイスにローカルデプロイを作成します。

```
sudo greengrass-cli deployment create \
  --recipeDir recipes \
  --artifactDir artifacts \
  --merge "aws.greengrass.Nucleus=2.13.0" \
  --update-config dashboard-configuration.json
```

`dashboard-configuration.json` ファイルには、次の JSON ドキュメントが含まれています。

```
{
  "aws.greengrass.Nucleus": {
    "MERGE": {
       "fipsMode": "true",
       "iotDataEndpoint": "data.iot-fips.us-west-2.amazonaws.com",
       "greengrassDataPlaneEndpoint": "iotData",
       "iotCredEndpoint": "data.credentials.iot-fips.us-west-2.amazonaws.com"

    }
  }
}
```

------

## 手動でのリソースプロビジョニングによる FIPS エンドポイントを使用した Nucleus のインストール
<a name="FIPS-manual-installation"></a>

FIPS エンドポイントを使用して AWS IoT Greengrass V2 コアデバイスに AWS リソースを手動でプロビジョニングする

**重要**  <a name="install-greengrass-core-requirements-note"></a>
 AWS IoT Greengrass Core ソフトウェアをダウンロードする前に、コアデバイスが AWS IoT Greengrass Core ソフトウェア v2.0 をインストールして実行する[要件を満た](greengrass-nucleus-component.md#greengrass-v2-requirements)していることを確認してください。

**Topics**
+ [AWS IoT エンドポイントを取得する](#w2ab1c58c44c23b9)
+ [AWS IoT モノを作成する](#create-iot-thing)
+ [モノの証明書を作成する](#create-thing-certificate-fips)
+ [トークン交換ロールを作成する](#create-token-exchange-role)
+ [デバイスに証明書をダウンロードする](#download-thing-certificates)
+ [デバイス環境をセットアップする](#set-up-device-environment)
+ [AWS IoT Greengrass Core ソフトウェアをダウンロードする](#download-greengrass-core-v2)
+ [AWS IoT Greengrass Core ソフトウェアのインストール](#run-greengrass-core-v2-installer-manual-fips)

### AWS IoT エンドポイントを取得する
<a name="w2ab1c58c44c23b9"></a>

の AWS IoT エンドポイントを取得し AWS アカウント、後で使用するために保存します。デバイスはこれらのエンドポイントを使用して AWS IoTに接続します。必要なエンドポイントは、`iotDataEndpoint` と `iotCredEndpoint` の 2 つです。以下の操作を実行します。

1. [AWS IoT Core FIPS データプレーンエンドポイント](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)で、リージョンの FIPS データエンドポイントを取得します。の FIPS データエンドポイント AWS アカウント は次のようになります。*data.iot-fips.us-west-2.amazonaws.com*

1. [AWS IoT Core FIPS データプレーンエンドポイント](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)で、リージョンの FIPS 認証情報エンドポイントを取得します。の FIPS 認証情報エンドポイント AWS アカウント は次のようになります。*data.credentials.iot-fips.us-west-2.amazonaws.com*

### AWS IoT モノを作成する
<a name="create-iot-thing"></a>

AWS IoT *things* は、 に接続するデバイスと論理エンティティを表します AWS IoT。Greengrass コアデバイスは AWS IoT モノです。デバイスを AWS IoT モノとして登録すると、そのデバイスはデジタル証明書を使用して認証できます AWS。

このセクションでは、デバイスを表す AWS IoT モノを作成します。

**AWS IoT モノを作成するには**

1. デバイスの AWS IoT モノを作成します。開発用コンピュータに次のコマンドを実行します。
   + *MyGreengrassCore* を使用するモノの名前に置き換えます。この名前は Greengrass コアデバイスの名前でもあります。
**注記**  <a name="install-argument-thing-name-constraint"></a>
モノの名前にコロン (`:`) 記号を含むことができません。

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. (オプション) AWS IoT モノを新規または既存のモノグループに追加します。モノグループを使用して Greengrass コアデバイスのフリートを管理します。ソフトウェアコンポーネントをデバイスにデプロイするとき、個々のデバイスまたはデバイスのグループを対象にできます。アクティブな Greengrass デプロイを持つモノグループにデバイスを追加して、そのモノグループのソフトウェアコンポーネントをデバイスにデプロイできます。以下の操作を実行します。

   1. (オプション) AWS IoT モノのグループを作成します。
      + *MyGreengrassCoreGroup* を作成するモノグループの名前に置き換えます。
**注記**  <a name="install-argument-thing-group-name-constraint"></a>
モノグループ名にコロン (`:`) 記号を含めることはできません。

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1.  AWS IoT モノをモノのグループに追加します。
      + *MyGreengrassCore* を AWS IoT モノの名前に置き換えます。
      + *MyGreengrassCoreGroup* をモノグループの名前に置き換えます。

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      要求が正常に処理された場合、コマンドは出力されません。

### モノの証明書を作成する
<a name="create-thing-certificate-fips"></a>

<a name="create-thing-certificate-intro-1"></a>デバイスを AWS IoT モノとして登録すると、そのデバイスはデジタル証明書を使用して認証できます AWS。この証明書により、デバイスは AWS IoT および と通信できます AWS IoT Greengrass。

<a name="create-thing-certificate-intro-2"></a>このセクションでは、デバイスが AWSに接続する際に使用できる証明書を作成してダウンロードします。

<a name="create-thing-certificate-intro-3"></a>ハードウェアセキュリティモジュール (HSM) を使用してプライベートキーと証明書を安全に保存するように AWS IoT Greengrass Core ソフトウェアを設定する場合は、手順に従って HSM のプライベートキーから証明書を作成します。それ以外の場合は、手順に従って AWS IoT サービスに証明書とプライベートキーを作成します。ハードウェアセキュリティ機能は Linux デバイスでのみ利用できます。ハードウェアセキュリティとその使用要件の詳細については、「[ハードウェアセキュリティ統合](hardware-security.md)」を参照してください。

#### AWS IoT サービスで証明書とプライベートキーを作成する
<a name="create-thing-certificate-cloud"></a><a name="create-thing-certificate-cloud-steps"></a>

**モノの証明書を作成するには**

1.  AWS IoT モノの証明書をダウンロードするフォルダを作成します。

   ```
   mkdir greengrass-v2-certs
   ```

1.  AWS IoT モノの証明書を作成してダウンロードします。

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   後で証明書を設定するために使用する証明書の Amazon リソースネーム (ARN) を保存します。

#### HSM のプライベートキーから証明書の作成
<a name="create-thing-certificate-hardware-security"></a>

**注記**  
この機能は、[Greengrass nucleus コンポーネントの](greengrass-nucleus-component.md) v2.5.3 以降で使用できます。現在、この機能は Windows AWS IoT Greengrass コアデバイスでサポートされていません。

**モノの証明書を作成するには**

1. コアデバイスで、HSM 内に PKCS\$111 トークンを初期化してプライベートキーを生成します。プライベートキーは、RSA-2048 キーサイズ (またはそれ以上) の RSA キーまたは ECC キーである必要があります。
**注記**  <a name="hardware-security-module-requirements-key-notes"></a>
ECC キーを備えたハードウェアセキュリティモジュールを使用するには、v2.5.6 以降の [Greengrass nucleus](greengrass-nucleus-component.md) を使用する必要があります。  
ハードウェアセキュリティモジュールと[シークレットマネージャー](secret-manager-component.md)を使用するには、RSA キーを備えたハードウェアセキュリティモジュールを使用する必要があります。

   トークンを初期化してプライベートキーを生成する方法については、HSM のマニュアルを参照してください。HSM がオブジェクト ID をサポートしている場合、プライベートキーの生成時にオブジェクト ID を指定してください。トークンの初期化とプライベートキーの生成時に指定するスロット ID、ユーザー PIN、オブジェクトラベル、オブジェクト ID (HSM が使用する場合) を保存します。これらの値は、後でモノの証明書を HSM にインポートし、 AWS IoT Greengrass Core ソフトウェアを設定するときに使用します。

1. プライベートキーで証明書署名リクエスト (CSR) を作成します。 AWS IoT はこの CSR を使用して、HSM で生成したプライベートキーのモノ証明書を作成します。プライベートキーで CSR を作成する方法については、HSM のマニュアルを参照してください。CSR は `iotdevicekey.csr` などのようなファイルです。

1. CSR をデバイスから開発用コンピュータにコピーします。開発用コンピュータとデバイスで SSH と SCP が有効になっている場合、開発用コンピュータで `scp` コマンドを使用して CSR を転送できます。*device-ip-address* をデバイスの IP アドレスに置き換えて、*\$1/iotdevicekey.csr* をデバイスの CSR ファイルへのパスに置き換えます。

   ```
   scp device-ip-address:~/iotdevicekey.csr iotdevicekey.csr
   ```

1. 開発用コンピュータで、 AWS IoT モノの証明書をダウンロードするフォルダを作成します。

   ```
   mkdir greengrass-v2-certs
   ```

1. CSR ファイルを使用して AWS IoT モノの証明書を作成して開発用コンピュータにダウンロードします。

   ```
   aws iot create-certificate-from-csr --set-as-active --certificate-signing-request=file://iotdevicekey.csr --certificate-pem-outfile greengrass-v2-certs/device.pem.crt
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----"
   }
   ```

   証明書の ARN を保存して後で証明書を設定するために使用します。

次に、モノの証明書を設定します。詳細については、「[モノの証明書を設定する](manual-installation.md#configure-thing-certificate)」を参照してください。

### トークン交換ロールを作成する
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Greengrass コアデバイスは、*トークン交換ロールと呼ばれる IAM サービスロール*を使用して、 AWS サービスへの呼び出しを承認します。デバイスは認証情報 AWS IoT プロバイダーを使用して、このロールの一時的な AWS 認証情報を取得します。これにより、デバイスは Amazon CloudWatch Logs とやり取り AWS IoTしたり、Amazon CloudWatch Logs にログを送信したり、Amazon S3 からカスタムコンポーネントアーティファクトをダウンロードしたりできます。 Amazon CloudWatch 詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

<a name="installation-create-token-exchange-role-alias-intro"></a> AWS IoT *ロールエイリアス*を使用して、Greengrass コアデバイスのトークン交換ロールを設定します。ロールエイリアスは、デバイスのトークン交換ロールを変更できるようにしますが、デバイス設定は同じ内容に保たれます。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[Authorizing direct calls to AWS services](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)」を参照してください。

このセクションでは、トークン交換 IAM ロールと AWS IoT 、ロールを指すロールエイリアスを作成します。Greengrass コアデバイスを既に設定している場合、新しく作成せず、トークン交換ロールとロールエイリアスを使用できます。次に、デバイスの AWS IoT モノを設定してそのロールとエイリアスを使用します。

**トークン交換 IAM ロールを作成するには**

1. <a name="create-token-exchange-role-create-iam-role"></a>デバイスがトークン交換ロールとして使用できる IAM ロールを作成します。以下の操作を実行します。

   1. トークン交換ロールが必要とする、信頼できるポリシードキュメントが含まれるファイルを作成します。

      <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      ```
      nano device-role-trust-policy.json
      ```

      次の JSON をファイルにコピーします。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 信頼ポリシードキュメントでトークン交換ロールを作成します。
      + *GreengrassV2TokenExchangeRole* を、作成する IAM ロールの名前に置き換えます。

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. トークン交換ロールが必要なアクセスポリシードキュメントを含むファイルを作成します。

      <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      ```
      nano device-role-access-policy.json
      ```

      次の JSON をファイルにコピーします。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**注記**  
このアクセスポリシーでは、S3 バケットのコンポーネントアーティファクトへのアクセスが許可されていません。Amazon S3 でアーティファクトを定義するカスタムコンポーネントをデプロイするには、コアデバイスがコンポーネントアーティファクトを取得できるようにする許可をロールに追加する必要があります。詳細については、「[コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する](device-service-role.md#device-service-role-access-s3-bucket)」を参照してください。  
コンポーネントアーティファクトに S3 バケットをまだ持っていない場合、バケットを作成した後でこれらのアクセス許可を追加できます。

   1. ポリシードキュメントから IAM ポリシーを作成します。
      + *GreengrassV2TokenExchangeRoleAccess* を作成する IAM ポリシーの名前に置き換えます。

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. IAM ポリシーをトークン交換ロールにアタッチします。
      + *GreengrassV2TokenExchangeRole* を、IAM ロールの名前に置き換えます。
      + ポリシー ARN を前のステップで作成した IAM ポリシーの ARN に置き換えます。

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      要求が正常に処理された場合、コマンドは出力されません。

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>トークン交換 AWS IoT ロールを指すロールエイリアスを作成します。
   + *GreengrassCoreTokenExchangeRoleAlias* を作成するロールエイリアスの名前に置き換えます。
   + ロール ARN を前のステップで作成した IAM ロールの ARN に置き換えます。

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   要求が正常に処理された場合、レスポンスは次の例のようになります。

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**注記**  
ロールエイリアスを作成するには、トークン交換 IAM ロールを AWS IoTに渡す許可が必要です。ロールエイリアスを作成しようとしたときにエラーメッセージが表示された場合は、 AWS ユーザーにこのアクセス許可があることを確認してください。詳細については、「 *AWS Identity and Access Management ユーザーガイド*[」の「 AWS サービスにロールを渡すアクセス許可をユーザーに付与](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)する」を参照してください。

1. Greengrass コアデバイスがロールエイリアスを使用してトークン交換ロールを引き受けることを許可する AWS IoT ポリシーを作成してアタッチします。Greengrass コアデバイスを以前にセットアップしたことがある場合は、新しいロールエイリアスポリシーを作成する代わりに、そのロールエイリアス AWS IoT ポリシーをアタッチできます。以下の操作を実行します。

   1. (オプション) ロールエイリアスに必要な AWS IoT ポリシードキュメントを含むファイルを作成します。

      <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      次の JSON をファイルにコピーします。
      + リソース ARN をロールエイリアスの ARN に置き換えます。

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1.  AWS IoT ポリシードキュメントから ポリシーを作成します。
      + *GreengrassCoreTokenExchangeRoleAliasPolicy* を、作成する AWS IoT ポリシーの名前に置き換えます。

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1.  AWS IoT モノの証明書に AWS IoT ポリシーをアタッチします。
      + *GreengrassCoreTokenExchangeRoleAliasPolicy* をロールエイリアス AWS IoT ポリシーの名前に置き換えます。
      + ターゲット ARN を AWS IoT モノの証明書の ARN に置き換えます。

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      要求が正常に処理された場合、コマンドは出力されません。

### デバイスに証明書をダウンロードする
<a name="download-thing-certificates"></a>

以前に、デバイスの証明書を開発用コンピュータにダウンロードしました。このセクションでは、コアデバイスに証明書をコピーして、 AWS IoTに接続するために使用する証明書でデバイスをセットアップします。Amazon ルート認証機関 (CA) の証明書もダウンロードします。HSM を使用する場合、このセクションの HSM に証明書ファイルもインポートします。
+ 以前に AWS IoT サービスでモノの証明書とプライベートキーを作成した場合は、手順に従ってプライベートキーと証明書ファイルを含む証明書をダウンロードします。
+ 以前にハードウェアセキュリティモジュール (HSM) のプライベートキーからモノ証明書を作成した場合、手順に従って HSM のプライベートキーと証明書で証明書をダウンロードします。

#### プライベートキーと証明書ファイルで証明書をダウンロード
<a name="download-thing-certificates-without-hardware-security"></a>

**証明書をデバイスにダウンロードするには**

1. <a name="installation-copy-thing-certificate-to-device"></a>モノの AWS IoT 証明書を開発用コンピュータからデバイスにコピーします。開発用コンピュータとデバイスで SSH と SCP が有効になっている場合、開発用コンピュータの `scp` コマンドを実行して、証明書を転送できます。*device-ip-address* をデバイスの IP アドレスに置き換えます。

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>デバイスに Greengrass ルートフォルダを作成します。後で AWS IoT Greengrass Core ソフトウェアをこのフォルダにインストールします。
**注記**  
Windows では、パスの長さは 260 文字に制限されています。Windows を使用している場合は、`C:\greengrass\v2` や `D:\greengrass\v2` などのルートフォルダを使用して、Greengrass コンポーネントのパスを 260 文字の制限内に留めます。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` を使用するフォルダに置き換えます。

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + *C:\$1greengrass\$1v2* を使用するフォルダに置き換えます。

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + *C:\$1greengrass\$1v2* を使用するフォルダに置き換えます。

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>(Linux のみ) Greengrass ルートフォルダの親の許可を設定します。
   + */greengrass* をルートフォルダへの親に置き換えます。

   ```
   sudo chmod 755 /greengrass
   ```

1.  AWS IoT モノの証明書を Greengrass ルートフォルダにコピーします。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` を Greengrass のルートフォルダに置き換えます。

   ```
   sudo cp -R ~/greengrass-v2-certs/* /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + *C:\$1greengrass\$1v2* を使用するフォルダに置き換えます。

   ```
   robocopy %USERPROFILE%\greengrass-v2-certs C:\greengrass\v2 /E
   ```

------
#### [ PowerShell ]
   + *C:\$1greengrass\$1v2* を使用するフォルダに置き換えます。

   ```
   cp -Path ~\greengrass-v2-certs\* -Destination C:\greengrass\v2
   ```

------

1. Amazon のルート認証局 (CA) 証明書をダウンロードします。デフォルトでは、 AWS IoT 証明書が Amazon のルート CA 証明書と関連付けられています。CA1 証明書と [CA3 証明書](https://www.amazontrust.com/repository/) をダウンロードします。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` または *C:\$1greengrass\$1v2* を Greengrass ルートフォルダに置き換えます。

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   sudo curl -o - https://www.amazontrust.com/repository/AmazonRootCA3.pem >> /greengrass/v2/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

#### HSM にプライベートキーと証明書を含む証明書をダウンロード
<a name="download-thing-certificates-with-hardware-security"></a>

**注記**  
この機能は、[Greengrass nucleus コンポーネントの](greengrass-nucleus-component.md) v2.5.3 以降で使用できます。現在、この機能は Windows AWS IoT Greengrass コアデバイスでサポートされていません。

**証明書をデバイスにダウンロードするには**

1. <a name="installation-copy-thing-certificate-to-device"></a>モノの AWS IoT 証明書を開発用コンピュータからデバイスにコピーします。開発用コンピュータとデバイスで SSH と SCP が有効になっている場合、開発用コンピュータの `scp` コマンドを実行して、証明書を転送できます。*device-ip-address* をデバイスの IP アドレスに置き換えます。

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>デバイスに Greengrass ルートフォルダを作成します。後で AWS IoT Greengrass Core ソフトウェアをこのフォルダにインストールします。
**注記**  
Windows では、パスの長さは 260 文字に制限されています。Windows を使用している場合は、`C:\greengrass\v2` や `D:\greengrass\v2` などのルートフォルダを使用して、Greengrass コンポーネントのパスを 260 文字の制限内に留めます。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` を使用するフォルダに置き換えます。

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + *C:\$1greengrass\$1v2* を使用するフォルダに置き換えます。

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + *C:\$1greengrass\$1v2* を使用するフォルダに置き換えます。

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>(Linux のみ) Greengrass ルートフォルダの親の許可を設定します。
   + */greengrass* をルートフォルダへの親に置き換えます。

   ```
   sudo chmod 755 /greengrass
   ```

1. モノの証明書ファイルである `~/greengrass-v2-certs/device.pem.crt` を HSM にインポートします。証明書をインポートする方法については、HSM のマニュアルを参照してください。以前に HSM でプライベートキーを生成したときと同じトークン、スロット ID、ユーザー PIN、オブジェクトラベル、オブジェクト ID (HSM が使用している場合) を使用して証明書をインポートします。
**注記**  
以前にオブジェクト ID なしでプライベートキーを生成し、かつ証明書にオブジェクト ID がある場合、プライベートキーのオブジェクト ID を証明書と同じ値に設定します。プライベートキーオブジェクトのオブジェクト ID を設定する方法については、HSM のマニュアルを参照してください。

1. (オプション) モノ証明書のファイルを削除して、HSM にのみ存在するようにします。

   ```
   rm ~/greengrass-v2-certs/device.pem.crt
   ```

1. Amazon のルート認証局 (CA) 証明書をダウンロードします。デフォルトでは、 AWS IoT 証明書が Amazon のルート CA 証明書と関連付けられています。CA1 証明書と [CA3 証明書](https://www.amazontrust.com/repository/)の両方をダウンロードします。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` または *C:\$1greengrass\$1v2* を Greengrass ルートフォルダに置き換えます。

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   sudo curl -o - https://www.amazontrust.com/repository/AmazonRootCA3.pem >> /greengrass/v2/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

### デバイス環境をセットアップする
<a name="set-up-device-environment"></a>

このセクションのステップに従って、 AWS IoT Greengrass コアデバイスとして使用する Linux または Windows デバイスをセットアップします。

#### Linux デバイスをセットアップする
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**の Linux デバイスを設定するには AWS IoT Greengrass V2**

1.  AWS IoT Greengrass Core ソフトウェアが実行する必要がある Java ランタイムをインストールします。[Amazon Corretto](https://aws.amazon.com/corretto/) または [OpenJDK](https://openjdk.java.net/) の長期サポートバージョンを使用することをお勧めします。バージョン 8 以降が必要です。次のコマンドは、デバイスに OpenJDK をインストールする方法を示しています。
   + Debian ベースまたは Ubuntu ベースのディストリビューションの場合:

     ```
     sudo apt install default-jdk
     ```
   + Red Hat ベースのディストリビューションの場合:

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 複数 Amazon Linux 2:

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + 複数 Amazon Linux 2023:

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   インストールが完了したら、次のコマンドを実行して Java が Linux デバイスで実行されていることを確認します。

   ```
   java -version
   ```

   このコマンドは、デバイス上で実行されている Java のバージョンを出力します。例えば、Debian ベースのディストリビューションでは、出力は次のサンプルのようになります。

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. (オプション) デバイスにコンポーネントを実行するデフォルトのシステムユーザーおよびグループを作成します。`--component-default-user` インストーラ引数を使用して、インストール中に AWS IoT Greengrass Core ソフトウェアインストーラにこのユーザーとグループを作成させることもできます。詳細については、「[インストーラ引数](configure-installer.md)」を参照してください。

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1.  AWS IoT Greengrass Core ソフトウェアを実行するユーザー (通常は `root`) に、任意のユーザーと任意のグループ`sudo`で を実行するアクセス許可があることを確認します。

   1. `/etc/sudoers` ファイルを開くには、次のコマンドを実行します。

      ```
      sudo visudo
      ```

   1. ユーザーの権限が次の例のようになっていることを確認します。

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. (オプション) [コンテナ化された Lambda 関数を実行](run-lambda-functions.md)するには、[cgroups](https://en.wikipedia.org/wiki/Cgroups) v1 を有効にし、*メモリ*と*デバイス*の cgroups を有効にしてマウントする必要があります。コンテナ化された Lambda 関数を実行する予定がない場合、この手順を省略できます。

   これらの cgroups オプションを有効にするには、次の Linux カーネルパラメータを使用してデバイスを起動します。

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   デバイスのカーネルパラメータを確認および設定するための情報については、オペレーティングシステムおよびブートローダーのドキュメントを参照してください。指示に従って、カーネルパラメータを永続的に設定します。

1. [デバイスの要件](greengrass-nucleus-component.md#greengrass-v2-requirements) にある要件リストで示されているように、その他の必要となる依存関係をすべてデバイスにインストールします。

#### Windows デバイスをセットアップする
<a name="set-up-windows-device-environment"></a>

**注記**  
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.5.0 以降に利用できます。<a name="set-up-windows-device-environment-procedure"></a>

**の Windows デバイスを設定するには AWS IoT Greengrass V2**

1.  AWS IoT Greengrass Core ソフトウェアが実行する必要がある Java ランタイムをインストールします。[Amazon Corretto](https://aws.amazon.com/corretto/) または [OpenJDK](https://openjdk.java.net/) の長期サポートバージョンを使用することをお勧めします。バージョン 8 以降が必要です。

1. [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) システム変数で Java が使用可能か確認し、そうでない場合は追加します。LocalSystem アカウントは AWS IoT Greengrass Core ソフトウェアを実行するため、ユーザーの PATH ユーザー変数ではなく PATH システム変数に Java を追加する必要があります。以下の操作を実行します。

   1. Windows キーを押してスタートメニューを開きます。

   1. **environment variables** を入力して、スタートメニューからシステムオプションを検索します。

   1. スタートメニューの検索結果から **[Edit the system environment variables]** (システム環境変数を編集) をクリックして、**[System properties]** (システムプロパティ) ウィンドウを開きます。

   1. **[Environment variables...]** (環境変数...) を選択して、**[Environment Variables]** (環境可変) ウィンドウを開きます。

   1. **[System variables]** (システム変数) で、**[Path]** (パス) 、**[Edit]** (編集) の順に選択します。**[Edit environment variable]** (環境変数の編集) ウィンドウでは、個別の行に各パスを表示できます。

   1. Java インストールの `bin` フォルダへのパスが存在しているかを確認します。このパスは、次の例のように表示されます。

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. **[Path]** (パス) で Java インストールの `bin` フォルダが で見つからない場合は、**[New]** (新規) を選択してこれを追加した上で、**[OK]** を選択します。

1. <a name="set-up-windows-device-environment-open-cmd"></a>管理者として Windows コマンドプロンプト `cmd.exe` を開きます。

1. <a name="set-up-windows-device-environment-create"></a>Windows デバイスの LocalSystem アカウントにデフォルトユーザーを作成します。*パスワード*を安全なパスワードに置き換えます。

   ```
   net user /add ggc_user password
   ```
**ヒント**  <a name="windows-password-expiration-tip"></a>
Windows の構成によっては、ユーザーのパスワードの期限切れが、将来の日付に設定されている場合があります。Greengrass アプリケーションの動作を継続させるためには、パスワードの有効期限を追跡し、その期限が切れる前に更新します。ユーザーのパスワードには、期限切れを起こさないような設定も可能です。  
ユーザーとパスワードの有効期限を確認するには、次のコマンドを実行します。  

     ```
     net user ggc_user | findstr /C:expires
     ```
ユーザーのパスワードが期限切れにならないように設定するには、次のコマンドを実行します。  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
[`wmic` コマンドが廃止されている](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 以降を使用している場合は、次の PowerShell コマンドを実行します。  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>[PsExec ユーティリティ](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)を Microsoft からダウンロードしてデバイスにインストールします。

1. <a name="set-up-windows-device-credentials"></a>PsExec ユーティリティを使用して、デフォルトユーザーのユーザー名とパスワードを LocalSystem アカウントの認証情報マネージャーインスタンスに格納します。*パスワード*を以前に設定したユーザーのパスワードに置き換えます。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   **PsExec License Agreement** が開いたら、**Accept** を選択し、ライセンスに同意してコマンドを実行します。
**注記**  
Windows デバイスでは、LocalSystem アカウントによって Greengrass nucleus が実行され、PsExec ユーティリティを使用して LocalSystem アカウントにデフォルトのユーザー情報を保存する必要があります。認証情報マネージャーアプリケーションを使用すると、この情報は LocalSystem アカウントではなく、現在ログオンしているユーザーの Windows アカウントに保存されます。

### AWS IoT Greengrass Core ソフトウェアをダウンロードする
<a name="download-greengrass-core-v2"></a>

 AWS IoT Greengrass Core ソフトウェアの最新バージョンは、次の場所からダウンロードできます。
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**注記**  
Core AWS IoT Greengrass ソフトウェアの特定のバージョンは、次の場所からダウンロードできます。*バージョン*をダウンロードするバージョンに置き換えます。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**AWS IoT Greengrass Core ソフトウェアをダウンロードするには**

1. <a name="installation-download-ggc-software-step"></a>コアデバイスで、 AWS IoT Greengrass Core ソフトウェアを という名前のファイルにダウンロードします`greengrass-nucleus-latest.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

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

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>このソフトウェアをダウンロードすると、[Greengrass Core ソフトウェアのライセンス契約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)に同意したものと見なされます。

1. <a name="verify-gg-nucleus-signature"></a>(オプション) Greengrass nucleus ソフトウェア署名を確認するには
**注記**  
この機能は、Greengrass nucleus バージョン 2.9.5 以降で使用できます。

   1. 以下のコマンドを使用して、Greengrass nucleus アーティファクトの署名を確認します。

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      インストールする JDK のバージョンによって、ファイル名が異なる場合があります。インストールした JDK のバージョンに *`jdk17.0.6_10`* を置き換えてください。

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

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

      インストールする JDK のバージョンによって、ファイル名が異なる場合があります。インストールした JDK のバージョンに *`jdk17.0.6_10`* を置き換えてください。

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` が起動すると、検証結果を示す出力が得られます。

      1. Greengrass nucleus の zip ファイルに署名されると、出力に以下のような文が表示されます：

         ```
         jar verified.
         ```

      1. Greengrass nucleus の zip ファイルに署名されないと、出力に以下のような文が表示されます：

         ```
         jar is unsigned.
         ```

   1. Jarsigner `-certs` を `-verify` と`-verbose` オプションと一緒に提供した場合、出力には署名者証明書の詳細情報も含まれます。

1. <a name="installation-unzip-ggc-software-step"></a> AWS IoT Greengrass Core ソフトウェアをデバイスのフォルダに解凍します。*GreengrassInstaller* を使用するフォルダに置き換えます。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

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

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. (オプション) 次のコマンドを実行して、 AWS IoT Greengrass Core ソフトウェアのバージョンを確認します。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**重要**  <a name="installer-folder-2.4.0-warning"></a>
v2.4.0 より前のバージョンの Greengrass nucleus をインストールした場合は、 AWS IoT Greengrass Core ソフトウェアをインストールした後にこのフォルダを削除しないでください。 AWS IoT Greengrass Core ソフトウェアは、このフォルダ内のファイルを使用して実行します。  
ソフトウェアの最新バージョンをダウンロードした場合は、v2.4.0 以降をインストールし、 AWS IoT Greengrass Core ソフトウェアをインストールした後にこのフォルダを削除できます。

### AWS IoT Greengrass Core ソフトウェアのインストール
<a name="run-greengrass-core-v2-installer-manual-fips"></a>

次のアクションを指定する引数を含むインストーラを実行します。
+ 以前に作成した AWS リソースと証明書を使用することを指定する部分設定ファイルからインストールします。 AWS IoT Greengrass Core ソフトウェアは、デバイス上のすべての Greengrass コンポーネントの設定を指定する設定ファイルを使用します。インストーラは、提供する部分設定ファイルで完全な設定ファイルを作成します。
+ <a name="install-argument-component-default-user"></a>コアデバイスでソフトウェアコンポーネントを実行するために `ggc_user` システムユーザーを使用するように指定します。Linux デバイスでは、このコマンドも `ggc_group` システムグループを使用するように指定し、さらにインストーラによってシステムユーザーとグループが、ユーザーに代わって作成されます。
+ <a name="install-argument-system-service"></a>Core AWS IoT Greengrass ソフトウェアを、起動時に実行されるシステムサービスとしてセットアップします。Linux デバイスでは、これは [Systemd](https://en.wikipedia.org/wiki/Systemd) init システムが必要です。
**重要**  <a name="windows-system-service-requirement-important-note"></a>
Windows コアデバイスでは、 AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定する必要があります。

指定できる引数の詳細については、「[インストーラ引数](configure-installer.md)」を参照してください。

**注記**  
<a name="jvm-tuning-note"></a>メモリが制限された AWS IoT Greengrass デバイスで実行している場合は、 AWS IoT Greengrass Core ソフトウェアが使用するメモリ量を制御できます。メモリ割り当てを制御するには、nucleus コンポーネントの `jvmOptions` 設定パラメータで JVM ヒープのサイズオプションを設定できます。詳細については、「[JVM オプションでメモリ割り当てを制御する](configure-greengrass-core-v2.md#jvm-tuning)」を参照してください。
+ 以前に AWS IoT サービスでモノの証明書とプライベートキーを作成した場合は、手順に従ってプライベートキーと証明書ファイルを含む AWS IoT Greengrass Core ソフトウェアをインストールします。
+ 以前にハードウェアセキュリティモジュール (HSM) のプライベートキーからモノの証明書を作成した場合は、手順に従って、HSM のプライベートキーと証明書を使用して AWS IoT Greengrass Core ソフトウェアをインストールします。

#### プライベートキーと証明書ファイルを使用して AWS IoT Greengrass Core ソフトウェアをインストールする
<a name="FIPS-manual-installation-without-hardware-security"></a>

**AWS IoT Greengrass Core ソフトウェアをインストールするには**

1. <a name="installer-check-greengrass-core-software-version"></a> AWS IoT Greengrass Core ソフトウェアのバージョンを確認します。
   + *GreengrassInstaller* を、ソフトウェアが含まれるフォルダへのパスに置き換えます。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. テキストエディタを使用し、`config.yaml` という名前の設定ファイルを作成してインストーラに提供します。

   <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   次の YAML コンテンツをファイルにコピーします。この部分設定ファイルは、システムパラメータと Greengrass nucleus パラメータを指定します。

   ```
   ---
   system:
     certificateFilePath: "/greengrass/v2/device.pem.crt"
     privateKeyPath: "/greengrass/v2/private.pem.key"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.16.1"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         fipsMode: "true"
         iotDataEndpoint: "data.iot-fips.us-west-2.amazonaws.com"
         greengrassDataPlaneEndpoint: "iotData"
         iotCredEndpoint: "data.credentials.iot-fips.us-west-2.amazonaws.com"
   ```

   次に、以下の操作を実行します。
   + `/greengrass/v2` の各インスタンスを Greengrass のルートフォルダに置き換えます。
   + *MyGreengrassCore* を AWS IoT モノの名前に置き換えます。
   + *2.16.1* を AWS IoT Greengrass Core ソフトウェアのバージョンに置き換えます。
   + *us-west-2* をリソースを作成した AWS リージョン に置き換えます。
   + *GreengrassCoreTokenExchangeRoleAlias* をトークン交換ロールエイリアスの名前に置き換えます。
   + *iotDataEndpoint* を AWS IoT データエンドポイントに置き換えます。
   + *iotCredEndpoint* を AWS IoT 認証情報エンドポイントに置き換えます。

1. インストーラを実行して、設定ファイルを提供するように、`--init-config` に対して指定します。
   + `/greengrass/v2` または *C:\$1greengrass\$1v2* を Greengrass ルートフォルダに置き換えます。
   + *GreengrassInstaller* の各インスタンスをインストーラを解凍したフォルダに置き換えます。

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

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

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

------
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
Windows コアデバイスでは、 を指定`--setup-system-service true`して AWS IoT Greengrass Core ソフトウェアをシステムサービスとしてセットアップする必要があります。

   <a name="installer-setup-system-service-output-message"></a>`--setup-system-service true` を指定する場合、ソフトウェアをシステムサービスとしてセットアップして実行したら、インストーラは `Successfully set up Nucleus as a system service` を出力します。それ以外の場合、正常にソフトウェアがインストールされていれば、インストーラはメッセージを出力しません。
**注記**  <a name="installer-deploy-dev-tools-without-provision"></a>
`--provision true` 引数なしでインストーラを実行するとき、ローカル開発ツールをデプロイするために `deploy-dev-tools` 引数を使用できません。Greengrass CLI をデバイスに直接デプロイする方法の情報については、「[Greengrass コマンドラインインターフェイス](gg-cli.md)」を参照してください。

1. <a name="installer-verify-installation"></a>ルートフォルダのファイルを確認して、インストールを確認します。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

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

   ```
   ls C:\greengrass\v2
   ```

------

   インストールが正常に処理された場合、ルートフォルダには `config`、`packages`、`logs` などの複数のフォルダが含まれます。

#### HSM にプライベートキーと証明書を使用して AWS IoT Greengrass Core ソフトウェアをインストールする
<a name="FIPS-manual-installation-with-hardware-security"></a>

**注記**  
この機能は、[Greengrass nucleus コンポーネントの](greengrass-nucleus-component.md) v2.5.3 以降で使用できます。現在、この機能は Windows AWS IoT Greengrass コアデバイスでサポートされていません。

**AWS IoT Greengrass Core ソフトウェアをインストールするには**

1. <a name="installer-check-greengrass-core-software-version"></a> AWS IoT Greengrass Core ソフトウェアのバージョンを確認します。
   + *GreengrassInstaller* を、ソフトウェアが含まれるフォルダへのパスに置き換えます。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1.  AWS IoT Greengrass Core ソフトウェアが HSM でプライベートキーと証明書を使用できるようにするには、 AWS IoT Greengrass Core ソフトウェアをインストールするときに [PKCS\$111 プロバイダーコンポーネント](pkcs11-provider-component.md)をインストールします。PKCS\$111 プロバイダコンポーネントは、インストール時に設定できるプラグインです。PKCS\$111 プロバイダコンポーネントの最新バージョンを次の場所からダウンロードできます。
   + [https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar](https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar)

   PKCS\$111 プロバイダプラグインを `aws.greengrass.crypto.Pkcs11Provider.jar` という名前のファイルにダウンロードします。*GreengrassInstaller* を使用するフォルダに置き換えます。

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar > GreengrassInstaller/aws.greengrass.crypto.Pkcs11Provider.jar
   ```

   <a name="core-software-license"></a>このソフトウェアをダウンロードすると、[Greengrass Core ソフトウェアのライセンス契約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)に同意したものと見なされます。

1. テキストエディタを使用し、`config.yaml` という名前の設定ファイルを作成してインストーラに提供します。

   <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   次の YAML コンテンツをファイルにコピーします。この部分設定ファイルは、システムパラメータ、Greengrass nucleus パラメータ、PKCS\$111 プロバイダパラメータを指定します。

   ```
   ---
   system:
     certificateFilePath: "/greengrass/v2/device.pem.crt"
     privateKeyPath: "/greengrass/v2/private.pem.key"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.16.1"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         fipsMode: "true"
         iotDataEndpoint: "data.iot-fips.us-west-2.amazonaws.com"
         greengrassDataPlaneEndpoint: "iotData"
         iotCredEndpoint: "data.credentials.iot-fips.us-west-2.amazonaws.com"
   ```

   次に、以下の操作を実行します。
   + PKCS\$111 URI の *iotdevicekey* の各インスタンスを、プライベートキーを作成して証明書をインポートしたオブジェクトラベルに置き換えます。
   + `/greengrass/v2` の各インスタンスを Greengrass のルートフォルダに置き換えます。
   + *MyGreengrassCore* を AWS IoT モノの名前に置き換えます。
   + *2.16.1* を AWS IoT Greengrass Core ソフトウェアのバージョンに置き換えます。
   + *us-west-2* をリソースを作成した AWS リージョン に置き換えます。
   + *GreengrassCoreTokenExchangeRoleAlias* をトークン交換ロールエイリアスの名前に置き換えます。
   + を AWS IoT データエンドポイント`iotDataEndpoint`に置き換えます。
   + `iotCredEndpoint` を AWS IoT 認証情報のエンドポイントに置き換えます。
   + `aws.greengrass.crypto.Pkcs11Provider` コンポーネントの設定パラメータを、コアデバイスの HSM 設定の値に置き換えます。

1. インストーラを実行して、設定ファイルを提供するように、`--init-config` に対して指定します。
   + `/greengrass/v2` を Greengrass のルートフォルダに置き換えます。
   + *GreengrassInstaller* の各インスタンスをインストーラを解凍したフォルダに置き換えます。

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.crypto.Pkcs11Provider.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
Windows コアデバイスでは、 を指定`--setup-system-service true`して AWS IoT Greengrass Core ソフトウェアをシステムサービスとしてセットアップする必要があります。

   <a name="installer-setup-system-service-output-message"></a>`--setup-system-service true` を指定する場合、ソフトウェアをシステムサービスとしてセットアップして実行したら、インストーラは `Successfully set up Nucleus as a system service` を出力します。それ以外の場合、正常にソフトウェアがインストールされていれば、インストーラはメッセージを出力しません。
**注記**  <a name="installer-deploy-dev-tools-without-provision"></a>
`--provision true` 引数なしでインストーラを実行するとき、ローカル開発ツールをデプロイするために `deploy-dev-tools` 引数を使用できません。Greengrass CLI をデバイスに直接デプロイする方法の情報については、「[Greengrass コマンドラインインターフェイス](gg-cli.md)」を参照してください。

1. <a name="installer-verify-installation"></a>ルートフォルダのファイルを確認して、インストールを確認します。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

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

   ```
   ls C:\greengrass\v2
   ```

------

   インストールが正常に処理された場合、ルートフォルダには `config`、`packages`、`logs` などの複数のフォルダが含まれます。

<a name="install-greengrass-core-run-software"></a> AWS IoT Greengrass Core ソフトウェアをシステムサービスとしてインストールした場合、インストーラはソフトウェアを実行します。それ以外の場合、ソフトウェアを手動で実行する必要があります。詳細については、「[AWS IoT Greengrass Core ソフトウェアを実行する](run-greengrass-core-v2.md)」を参照してください。

<a name="install-greengrass-core-next-steps-intro"></a>ソフトウェアと を設定して使用する方法の詳細については AWS IoT Greengrass、以下を参照してください。<a name="install-greengrass-core-next-steps-links"></a>
+ [AWS IoT Greengrass Core ソフトウェアを設定する](configure-greengrass-core-v2.md)
+ [AWS IoT Greengrass コンポーネントを開発する](develop-greengrass-components.md)
+ [AWS IoT Greengrass コンポーネントをデバイスにデプロイする](manage-deployments.md)
+ [Greengrass コマンドラインインターフェイス](gg-cli.md)

## フリートプロビジョニングを使って FIPS エンドポイントをインストールする
<a name="FIPS-fleet-provisioning"></a>

この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.4.0 以降に利用できます。

 AWS IoT Greengrass コアデバイスの AWS IoT フリートプロビジョニングを使用して Core ソフトウェアに FIPS エンドポイントをインストールします。

**注記**  
フリートプロビジョニングプラグインは、現在、ハードウェアセキュリティモジュール (HSM) へのプライベートキーと証明書ファイルの保存をサポートしていません。HSM を使用するには、[手動プロビジョニングで AWS IoT Greengrass Core ソフトウェアをインストールします](#FIPS-fleet-provisioning)。

 AWS IoT フリートプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールするには、 AWS アカウント が Greengrass コアデバイスのプロビジョニング AWS IoT に使用するリソースを にセットアップする必要があります。これらのリソースには、プロビジョニングテンプレート、クレーム証明書、および[トークン交換 IAM ロール](device-service-role.md)が含まれます。これらのリソースを作成した後、これらのリソースを再利用して、フリート内の複数のコアデバイスをプロビジョニングできます。詳細については、「[Greengrass コアデバイスの AWS IoT フリートプロビジョニングを設定する](fleet-provisioning-setup.md)」を参照してください。

**重要**  <a name="install-greengrass-core-requirements-note"></a>
 AWS IoT Greengrass Core ソフトウェアをダウンロードする前に、コアデバイスが AWS IoT Greengrass Core ソフトウェア v2.0 をインストールして実行する[要件を満た](greengrass-nucleus-component.md#greengrass-v2-requirements)していることを確認してください。

**Topics**
+ [前提条件](#fleet-provisioning-prerequisites)
+ [AWS IoT エンドポイントを取得する](#retrieve-iot-endpoints)
+ [デバイスに証明書をダウンロードする](#download-claim-certificates)
+ [デバイス環境をセットアップする](#set-up-device-environment-fleet-provisioning)
+ [AWS IoT Greengrass Core ソフトウェアをダウンロードする](#download-greengrass-core-v2-fleet)
+ [AWS IoT フリートプロビジョニングプラグインをダウンロードする](#download-fleet-provisioning-plugin)
+ [AWS IoT Greengrass Core ソフトウェアのインストール](#run-greengrass-core-v2-installer-fleet-provisioning)

### 前提条件
<a name="fleet-provisioning-prerequisites"></a>

 AWS IoT フリートプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールするには、まず [Greengrass コアデバイスの AWS IoT フリートプロビジョニングを設定](fleet-provisioning-setup.md)する必要があります。これらのステップを 1 回完了すると、フリートプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアを任意の数のデバイスにインストールできます。

### AWS IoT エンドポイントを取得する
<a name="retrieve-iot-endpoints"></a>

の FIPS エンドポイントを取得し AWS アカウント、後で使用するために保存します。デバイスはこれらのエンドポイントを使用して AWS IoTに接続します。以下の操作を実行します。

1. [AWS IoT Core FIPS データプレーンエンドポイント](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)で、リージョンの FIPS データエンドポイントを取得します。の FIPS データエンドポイント AWS アカウント は次のようになります。*data.iot-fips.us-west-2.amazonaws.com*

1. [AWS IoT Core FIPS データプレーンエンドポイント](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)で、リージョンの FIPS 認証情報エンドポイントを取得します。の FIPS 認証情報エンドポイント AWS アカウント は次のようになります。*data.credentials.iot-fips.us-west-2.amazonaws.com*

### デバイスに証明書をダウンロードする
<a name="download-claim-certificates"></a>

デバイスは、クレーム証明書とプライベートキーを使用して、 AWS リソースをプロビジョニングし、X.509 デバイス証明書を取得するリクエストを認証します。クレーム証明書とプライベートキーは製造時にデバイスに埋め込むか、 インストール時に証明書とキーをデバイスにコピーすることができます。このセクションでは、クレーム証明書とプライベートキーをデバイスにコピーします。また、デバイスに Amazon ルート認証局 (CA) 証明書もダウンロードします。

**重要**  <a name="installation-fleet-provisioning-secure-claim-private-keys"></a>
プロビジョニングクレームプライベートキーは、Greengrass コアデバイス上にある場合を含め、常に保護する必要があります。Amazon CloudWatch メトリクスとログを使用して、デバイスをプロビジョニングするクレーム証明書の不正使用などの悪用の兆候がないか監視することをお勧めします。悪用を検出した場合は、プロビジョニングクレーム証明書を無効にして、デバイスのプロビジョニングに使用できないようにします。詳細については、「AWS IoT Core デベロッパーガイド」の「[AWS IoTのモニタリング](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)」を参照してください。**  
に登録するデバイスの数とデバイスをより適切に管理できるように AWS アカウント、フリートプロビジョニングテンプレートを作成するときに事前プロビジョニングフックを指定できます。事前プロビジョニングフックは、デバイスが登録時に提供するテンプレートパラメータを検証する AWS Lambda 関数です。例えば、デバイス ID をデータベースと照合して、デバイスにプロビジョニングする権限があることを確認する事前プロビジョニングフックを作成することができます。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[Pre-provisioning hooks](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)」を参照してください。

**デバイスにクレーム証明書をダウンロードする**

1. クレーム証明書とプライベートキーをデバイスにコピーします。開発用コンピュータとデバイスで SSH と SCP が有効になっている場合、開発用コンピュータで `scp` コマンドを使用してクレーム証明書とプライベートキーを転送できます。次のコマンド例では、これらのファイルを開発用コンピュータ上の `claim-certs` という名のフォルダからデバイスに転送します。*device-ip-address* をデバイスの IP アドレスに置き換えます。

   ```
   scp -r claim-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>デバイスに Greengrass ルートフォルダを作成します。後で AWS IoT Greengrass Core ソフトウェアをこのフォルダにインストールします。
**注記**  
Windows では、パスの長さは 260 文字に制限されています。Windows を使用している場合は、`C:\greengrass\v2` や `D:\greengrass\v2` などのルートフォルダを使用して、Greengrass コンポーネントのパスを 260 文字の制限内に留めます。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` を使用するフォルダに置き換えます。

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + *C:\$1greengrass\$1v2* を使用するフォルダに置き換えます。

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + *C:\$1greengrass\$1v2* を使用するフォルダに置き換えます。

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>(Linux のみ) Greengrass ルートフォルダの親の許可を設定します。
   + */greengrass* をルートフォルダへの親に置き換えます。

   ```
   sudo chmod 755 /greengrass
   ```

1. クレーム証明書を Greengrass ルートフォルダに移動します。
   + `/greengrass/v2` または *C:\$1greengrass\$1v2* を Greengrass ルートフォルダに置き換えます。

------
#### [ Linux or Unix ]

   ```
   sudo mv ~/claim-certs /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   move %USERPROFILE%\claim-certs C:\greengrass\v2
   ```

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

   ```
   mv -Path ~\claim-certs -Destination C:\greengrass\v2
   ```

------

1. CA1 証明書と [CA3 証明書](https://www.amazontrust.com/repository/)の両方をダウンロードします。

------
#### [ Linux or Unix ]

   ```
   sudo curl -o - https://www.amazontrust.com/repository/AmazonRootCA3.pem >> /greengrass/v2/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

### デバイス環境をセットアップする
<a name="set-up-device-environment-fleet-provisioning"></a>

このセクションの手順に従って、 AWS IoT Greengrass コアデバイスとして使用する Linux または Windows デバイスを設定します。

#### Linux デバイスをセットアップする
<a name="set-up-linux-device-environment-fleet-provisioning"></a><a name="set-up-linux-device-environment-procedure"></a>

**の Linux デバイスを設定するには AWS IoT Greengrass V2**

1.  AWS IoT Greengrass Core ソフトウェアが実行する必要がある Java ランタイムをインストールします。[Amazon Corretto](https://aws.amazon.com/corretto/) または [OpenJDK](https://openjdk.java.net/) の長期サポートバージョンを使用することをお勧めします。バージョン 8 以降が必要です。次のコマンドは、デバイスに OpenJDK をインストールする方法を示しています。
   + Debian ベースまたは Ubuntu ベースのディストリビューションの場合:

     ```
     sudo apt install default-jdk
     ```
   + Red Hat ベースのディストリビューションの場合:

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 複数 Amazon Linux 2:

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + 複数 Amazon Linux 2023:

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   インストールが完了したら、次のコマンドを実行して Java が Linux デバイスで実行されていることを確認します。

   ```
   java -version
   ```

   このコマンドは、デバイス上で実行されている Java のバージョンを出力します。例えば、Debian ベースのディストリビューションでは、出力は次のサンプルのようになります。

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. (オプション) デバイスにコンポーネントを実行するデフォルトのシステムユーザーおよびグループを作成します。`--component-default-user` インストーラ引数を使用して、インストール中に AWS IoT Greengrass Core ソフトウェアインストーラにこのユーザーとグループを作成させることもできます。詳細については、「[インストーラ引数](configure-installer.md)」を参照してください。

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1.  AWS IoT Greengrass Core ソフトウェアを実行するユーザー (通常は `root`) に、任意のユーザーと任意のグループ`sudo`で を実行するアクセス許可があることを確認します。

   1. `/etc/sudoers` ファイルを開くには、次のコマンドを実行します。

      ```
      sudo visudo
      ```

   1. ユーザーの権限が次の例のようになっていることを確認します。

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. (オプション) [コンテナ化された Lambda 関数を実行](run-lambda-functions.md)するには、[cgroups](https://en.wikipedia.org/wiki/Cgroups) v1 を有効にし、*メモリ*と*デバイス*の cgroups を有効にしてマウントする必要があります。コンテナ化された Lambda 関数を実行する予定がない場合、この手順を省略できます。

   これらの cgroups オプションを有効にするには、次の Linux カーネルパラメータを使用してデバイスを起動します。

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   デバイスのカーネルパラメータを確認および設定するための情報については、オペレーティングシステムおよびブートローダーのドキュメントを参照してください。指示に従って、カーネルパラメータを永続的に設定します。

1. [デバイスの要件](greengrass-nucleus-component.md#greengrass-v2-requirements) にある要件リストで示されているように、その他の必要となる依存関係をすべてデバイスにインストールします。

#### Windows デバイスをセットアップする
<a name="set-up-windows-device-environment-fleet-provisioning"></a>

**注記**  
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.5.0 以降に利用できます。<a name="set-up-windows-device-environment-procedure"></a>

**の Windows デバイスを設定するには AWS IoT Greengrass V2**

1.  AWS IoT Greengrass Core ソフトウェアが実行する必要がある Java ランタイムをインストールします。[Amazon Corretto](https://aws.amazon.com/corretto/) または [OpenJDK](https://openjdk.java.net/) の長期サポートバージョンを使用することをお勧めします。バージョン 8 以降が必要です。

1. [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) システム変数で Java が使用可能か確認し、そうでない場合は追加します。LocalSystem アカウントは AWS IoT Greengrass Core ソフトウェアを実行するため、ユーザーの PATH ユーザー変数ではなく PATH システム変数に Java を追加する必要があります。以下の操作を実行します。

   1. Windows キーを押してスタートメニューを開きます。

   1. **environment variables** を入力して、スタートメニューからシステムオプションを検索します。

   1. スタートメニューの検索結果から **[Edit the system environment variables]** (システム環境変数を編集) をクリックして、**[System properties]** (システムプロパティ) ウィンドウを開きます。

   1. **[Environment variables...]** (環境変数...) を選択して、**[Environment Variables]** (環境可変) ウィンドウを開きます。

   1. **[System variables]** (システム変数) で、**[Path]** (パス) 、**[Edit]** (編集) の順に選択します。**[Edit environment variable]** (環境変数の編集) ウィンドウでは、個別の行に各パスを表示できます。

   1. Java インストールの `bin` フォルダへのパスが存在しているかを確認します。このパスは、次の例のように表示されます。

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. **[Path]** (パス) で Java インストールの `bin` フォルダが で見つからない場合は、**[New]** (新規) を選択してこれを追加した上で、**[OK]** を選択します。

1. <a name="set-up-windows-device-environment-open-cmd"></a>管理者として Windows コマンドプロンプト `cmd.exe` を開きます。

1. <a name="set-up-windows-device-environment-create"></a>Windows デバイスの LocalSystem アカウントにデフォルトユーザーを作成します。*パスワード*を安全なパスワードに置き換えます。

   ```
   net user /add ggc_user password
   ```
**ヒント**  <a name="windows-password-expiration-tip"></a>
Windows の構成によっては、ユーザーのパスワードの期限切れが、将来の日付に設定されている場合があります。Greengrass アプリケーションの動作を継続させるためには、パスワードの有効期限を追跡し、その期限が切れる前に更新します。ユーザーのパスワードには、期限切れを起こさないような設定も可能です。  
ユーザーとパスワードの有効期限を確認するには、次のコマンドを実行します。  

     ```
     net user ggc_user | findstr /C:expires
     ```
ユーザーのパスワードが期限切れにならないように設定するには、次のコマンドを実行します。  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
[`wmic` コマンドが廃止されている](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 以降を使用している場合は、次の PowerShell コマンドを実行します。  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>[PsExec ユーティリティ](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)を Microsoft からダウンロードしてデバイスにインストールします。

1. <a name="set-up-windows-device-credentials"></a>PsExec ユーティリティを使用して、デフォルトユーザーのユーザー名とパスワードを LocalSystem アカウントの認証情報マネージャーインスタンスに格納します。*パスワード*を以前に設定したユーザーのパスワードに置き換えます。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   **PsExec License Agreement** が開いたら、**Accept** を選択し、ライセンスに同意してコマンドを実行します。
**注記**  
Windows デバイスでは、LocalSystem アカウントによって Greengrass nucleus が実行され、PsExec ユーティリティを使用して LocalSystem アカウントにデフォルトのユーザー情報を保存する必要があります。認証情報マネージャーアプリケーションを使用すると、この情報は LocalSystem アカウントではなく、現在ログオンしているユーザーの Windows アカウントに保存されます。

### AWS IoT Greengrass Core ソフトウェアをダウンロードする
<a name="download-greengrass-core-v2-fleet"></a>

 AWS IoT Greengrass Core ソフトウェアの最新バージョンは、次の場所からダウンロードできます。
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**注記**  
Core AWS IoT Greengrass ソフトウェアの特定のバージョンは、次の場所からダウンロードできます。*バージョン*をダウンロードするバージョンに置き換えます。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**AWS IoT Greengrass Core ソフトウェアをダウンロードするには**

1. <a name="installation-download-ggc-software-step"></a>コアデバイスで、 AWS IoT Greengrass Core ソフトウェアを という名前のファイルにダウンロードします`greengrass-nucleus-latest.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

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

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>このソフトウェアをダウンロードすると、[Greengrass Core ソフトウェアのライセンス契約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)に同意したものと見なされます。

1. <a name="verify-gg-nucleus-signature"></a>(オプション) Greengrass nucleus ソフトウェア署名を確認するには
**注記**  
この機能は、Greengrass nucleus バージョン 2.9.5 以降で使用できます。

   1. 以下のコマンドを使用して、Greengrass nucleus アーティファクトの署名を確認します。

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      インストールする JDK のバージョンによって、ファイル名が異なる場合があります。インストールした JDK のバージョンに *`jdk17.0.6_10`* を置き換えてください。

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

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

      インストールする JDK のバージョンによって、ファイル名が異なる場合があります。インストールした JDK のバージョンに *`jdk17.0.6_10`* を置き換えてください。

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` が起動すると、検証結果を示す出力が得られます。

      1. Greengrass nucleus の zip ファイルに署名されると、出力に以下のような文が表示されます：

         ```
         jar verified.
         ```

      1. Greengrass nucleus の zip ファイルに署名されないと、出力に以下のような文が表示されます：

         ```
         jar is unsigned.
         ```

   1. Jarsigner `-certs` を `-verify` と`-verbose` オプションと一緒に提供した場合、出力には署名者証明書の詳細情報も含まれます。

1. <a name="installation-unzip-ggc-software-step"></a> AWS IoT Greengrass Core ソフトウェアをデバイスのフォルダに解凍します。*GreengrassInstaller* を使用するフォルダに置き換えます。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

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

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. (オプション) 次のコマンドを実行して、 AWS IoT Greengrass Core ソフトウェアのバージョンを確認します。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**重要**  <a name="installer-folder-2.4.0-warning"></a>
v2.4.0 より前のバージョンの Greengrass nucleus をインストールした場合は、 AWS IoT Greengrass Core ソフトウェアをインストールした後にこのフォルダを削除しないでください。 AWS IoT Greengrass Core ソフトウェアは、このフォルダ内のファイルを使用して実行します。  
ソフトウェアの最新バージョンをダウンロードした場合は、v2.4.0 以降をインストールし、 AWS IoT Greengrass Core ソフトウェアをインストールした後にこのフォルダを削除できます。

### AWS IoT フリートプロビジョニングプラグインをダウンロードする
<a name="download-fleet-provisioning-plugin"></a>

フリー AWS IoT トプロビジョニングプラグインの最新バージョンは、次の場所からダウンロードできます。
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar](https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar)

**注記**  
フリー AWS IoT トプロビジョニングプラグインの特定のバージョンは、次の場所からダウンロードできます。*バージョン*をダウンロードするバージョンに置き換えます。フリートプロビジョニングプラグインの各バージョンの詳細については、「[AWS IoT フリートプロビジョニングプラグインの変更ログ](fleet-provisioning-changelog.md)」を参照してください。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-version.jar
```

フリートプロビジョニングプラグインはオープンソースです。ソースコードを確認する場合は、GitHub 上の「[AWS IoT フリートプロビジョニングプラグイン](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim)」を参照してください。

**AWS IoT フリートプロビジョニングプラグインをダウンロードするには**
+ デバイスで、 AWS IoT フリートプロビジョニングプラグインを という名前のファイルにダウンロードします`aws.greengrass.FleetProvisioningByClaim.jar`。*GreengrassInstaller* を使用するフォルダに置き換えます。

------
#### [ Linux or Unix ]

  ```
  curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar > GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------
#### [ Windows Command Prompt (CMD) ]

  ```
  curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar > GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

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

  ```
  iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar -OutFile GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------

  <a name="core-software-license"></a>このソフトウェアをダウンロードすると、[Greengrass Core ソフトウェアのライセンス契約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)に同意したものと見なされます。

### AWS IoT Greengrass Core ソフトウェアのインストール
<a name="run-greengrass-core-v2-installer-fleet-provisioning"></a>

次のアクションを指定する引数を含むインストーラを実行します。
+ フリートプロビジョニングプラグインを使用して AWS リソースをプロビジョニングするように指定する部分的な設定ファイルから をインストールします。 AWS IoT Greengrass Core ソフトウェアは、デバイス上のすべての Greengrass コンポーネントの設定を指定する設定ファイルを使用します。インストーラは、指定した部分設定ファイルとフリートプロビジョニングプラグインが作成する AWS リソースから完全な設定ファイルを作成します。
+ <a name="install-argument-component-default-user"></a>コアデバイスでソフトウェアコンポーネントを実行するために `ggc_user` システムユーザーを使用するように指定します。Linux デバイスでは、このコマンドも `ggc_group` システムグループを使用するように指定し、さらにインストーラによってシステムユーザーとグループが、ユーザーに代わって作成されます。
+ <a name="install-argument-system-service"></a>Core AWS IoT Greengrass ソフトウェアを、起動時に実行されるシステムサービスとしてセットアップします。Linux デバイスでは、これは [Systemd](https://en.wikipedia.org/wiki/Systemd) init システムが必要です。
**重要**  <a name="windows-system-service-requirement-important-note"></a>
Windows コアデバイスでは、 AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定する必要があります。

指定できる引数の詳細については、「[インストーラ引数](configure-installer.md)」を参照してください。

**注記**  
<a name="jvm-tuning-note"></a>メモリが制限された AWS IoT Greengrass デバイスで実行している場合は、 AWS IoT Greengrass Core ソフトウェアが使用するメモリ量を制御できます。メモリ割り当てを制御するには、nucleus コンポーネントの `jvmOptions` 設定パラメータで JVM ヒープのサイズオプションを設定できます。詳細については、「[JVM オプションでメモリ割り当てを制御する](configure-greengrass-core-v2.md#jvm-tuning)」を参照してください。

**AWS IoT Greengrass Core ソフトウェアをインストールするには**

1. <a name="installer-check-greengrass-core-software-version"></a> AWS IoT Greengrass Core ソフトウェアのバージョンを確認します。
   + *GreengrassInstaller* を、ソフトウェアが含まれるフォルダへのパスに置き換えます。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. テキストエディタを使用し、`config.yaml` という名前の設定ファイルを作成してインストーラに提供します。

   <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   次の YAML コンテンツをファイルにコピーします。この部分設定ファイルは、フリートプロビジョニングプラグインのパラメータを指定します。指定できるオプションの詳細については、「[AWS IoT フリートプロビジョニングプラグインを設定する](fleet-provisioning-configuration.md)」を参照してください。

------
#### [ Linux or Unix ]

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
       configuration:
         fipsMode: "true"
         greengrassDataPlaneEndpoint: "iotData"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "/greengrass/v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "data.iot-fips.us-west-2.amazonaws.com"
         iotCredEndpoint: "data.credentials.iot-fips.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt"
         claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key"
         rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
   ```

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

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "C:\\greengrass\\v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "C:\\greengrass\\v2\\claim-certs\\claim.pem.crt"
         claimCertificatePrivateKeyPath: "C:\\greengrass\\v2\\claim-certs\\claim.private.pem.key"
         rootCaPath: "C:\\greengrass\\v2\\AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
   ```

------

   次に、以下の操作を実行します。
   + *2.16.1* を AWS IoT Greengrass Core ソフトウェアのバージョンに置き換えます。
   + `/greengrass/v2` または *C:\$1greengrass\$1v2* の各インスタンスを Greengrass ルートフォルダに置き換えます。
**注記**  
Windows デバイスでは、パスセパレータは二重バックスラッシュ (`\\`) で指定する必要があります (例: `C:\\greengrass\\v2`)。
   + *us-west-2* を、プロビジョニングテンプレートやその他のリソースを作成した AWS リージョンに置き換えます。
   + を AWS IoT データエンドポイント`iotDataEndpoint`に置き換えます。
   + `iotCredentialEndpoint` を AWS IoT 認証情報のエンドポイントに置き換えます。
   + *GreengrassCoreTokenExchangeRoleAlias* をトークン交換ロールエイリアスの名前に置き換えます。
   + *GreengrassFleetProvisioningTemplate* を、フリートプロビジョニングテンプレートの名前に置き換えます。
   + `claimCertificatePath` をデバイス上のクレーム証明書へのパスに置き換えます。
   + `claimCertificatePrivateKeyPath` をデバイス上のクレーム証明書のプライベートキーへのパスに置き換えます。
   + テンプレートパラメータ (`templateParameters`) を、デバイスのプロビジョニングに使用する値に置き換えます。この例は、`ThingName` および `ThingGroupName` パラメータを定義する[テンプレート例](fleet-provisioning-setup.md#example-fleet-provisioning-template)を参照しています。

1. インストーラーを実行します。`--trusted-plugin` を指定してフリートプロビジョニングプラグインを提供し、`--init-config` を指定して設定ファイルを提供します。
   + `/greengrass/v2` を Greengrass のルートフォルダに置き換えます。
   + *GreengrassInstaller* の各インスタンスをインストーラを解凍したフォルダに置き換えます。

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

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

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

------
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
Windows コアデバイスでは、 を指定`--setup-system-service true`して AWS IoT Greengrass Core ソフトウェアをシステムサービスとしてセットアップする必要があります。

   <a name="installer-setup-system-service-output-message"></a>`--setup-system-service true` を指定する場合、ソフトウェアをシステムサービスとしてセットアップして実行したら、インストーラは `Successfully set up Nucleus as a system service` を出力します。それ以外の場合、正常にソフトウェアがインストールされていれば、インストーラはメッセージを出力しません。
**注記**  <a name="installer-deploy-dev-tools-without-provision"></a>
`--provision true` 引数なしでインストーラを実行するとき、ローカル開発ツールをデプロイするために `deploy-dev-tools` 引数を使用できません。Greengrass CLI をデバイスに直接デプロイする方法の情報については、「[Greengrass コマンドラインインターフェイス](gg-cli.md)」を参照してください。

1. <a name="installer-verify-installation"></a>ルートフォルダのファイルを確認して、インストールを確認します。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

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

   ```
   ls C:\greengrass\v2
   ```

------

   インストールが正常に処理された場合、ルートフォルダには `config`、`packages`、`logs` などの複数のフォルダが含まれます。

<a name="install-greengrass-core-run-software"></a> AWS IoT Greengrass Core ソフトウェアをシステムサービスとしてインストールした場合、インストーラはソフトウェアを実行します。それ以外の場合、ソフトウェアを手動で実行する必要があります。詳細については、「[AWS IoT Greengrass Core ソフトウェアを実行する](run-greengrass-core-v2.md)」を参照してください。

<a name="install-greengrass-core-next-steps-intro"></a>ソフトウェアと を設定して使用する方法の詳細については AWS IoT Greengrass、以下を参照してください。<a name="install-greengrass-core-next-steps-links"></a>
+ [AWS IoT Greengrass Core ソフトウェアを設定する](configure-greengrass-core-v2.md)
+ [AWS IoT Greengrass コンポーネントを開発する](develop-greengrass-components.md)
+ [AWS IoT Greengrass コンポーネントをデバイスにデプロイする](manage-deployments.md)
+ [Greengrass コマンドラインインターフェイス](gg-cli.md)

## 自動リソースプロビジョニングを使用した FIPS エンドポイントのインストール
<a name="FIPS-auto-installation"></a>

 AWS IoT Greengrass Core ソフトウェアには、デバイスを Greengrass コアデバイスとしてセットアップするインストーラが含まれています。デバイスをすばやくセットアップするために、インストーラはコアデバイスが動作するために必要な AWS IoT モノ、 AWS IoT モノのグループ、IAM ロール、および AWS IoT ロールエイリアスをプロビジョニングできます。インストーラは、ローカル開発ツールをコアデバイスにデプロイすることもできるため、デバイスを使用してカスタムソフトウェアコンポーネントを開発とテストできます。インストーラは、これらのリソースをプロビジョニングしてデプロイを作成すには、 AWS 認証情報が必要です。

デバイスに AWS 認証情報を提供できない場合は、コアデバイスが動作するために必要なリソースをプロビジョニング AWS できます。開発ツールをコアデバイスにデプロイして、開発デバイスとして使用することもできます。これにより、インストーラの実行時にデバイスに与える許可を減らすことができます。詳細については、「[手動リソースプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールする](manual-installation.md)」を参照してください。

**重要**  <a name="install-greengrass-core-requirements-note"></a>
 AWS IoT Greengrass Core ソフトウェアをダウンロードする前に、コアデバイスが AWS IoT Greengrass Core ソフトウェア v2.0 をインストールして実行するための[要件を満た](greengrass-nucleus-component.md#greengrass-v2-requirements)していることを確認してください。

**Topics**
+ [デバイス環境をセットアップする](#set-up-device-environment)
+ [デバイスに AWS 認証情報を提供する](#provide-installer-aws-credentials-auto)
+ [AWS IoT Greengrass Core ソフトウェアをダウンロードする](#download-greengrass-core-v2-auto)
+ [AWS IoT Greengrass Core ソフトウェアのインストール](#run-greengrass-core-v2-installer-auto)

### デバイス環境をセットアップする
<a name="set-up-device-environment"></a>

このセクションのステップに従って、 AWS IoT Greengrass コアデバイスとして使用する Linux または Windows デバイスをセットアップします。

#### Linux デバイスをセットアップする
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**の Linux デバイスを設定するには AWS IoT Greengrass V2**

1.  AWS IoT Greengrass Core ソフトウェアが実行する必要がある Java ランタイムをインストールします。[Amazon Corretto](https://aws.amazon.com/corretto/) または [OpenJDK](https://openjdk.java.net/) の長期サポートバージョンを使用することをお勧めします。バージョン 8 以降が必要です。次のコマンドは、デバイスに OpenJDK をインストールする方法を示しています。
   + Debian ベースまたは Ubuntu ベースのディストリビューションの場合:

     ```
     sudo apt install default-jdk
     ```
   + Red Hat ベースのディストリビューションの場合:

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 複数 Amazon Linux 2:

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + 複数 Amazon Linux 2023:

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   インストールが完了したら、次のコマンドを実行して Java が Linux デバイスで実行されていることを確認します。

   ```
   java -version
   ```

   このコマンドは、デバイス上で実行されている Java のバージョンを出力します。例えば、Debian ベースのディストリビューションでは、出力は次のサンプルのようになります。

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. (オプション) デバイスにコンポーネントを実行するデフォルトのシステムユーザーおよびグループを作成します。`--component-default-user` インストーラ引数を使用して、インストール中に AWS IoT Greengrass Core ソフトウェアインストーラにこのユーザーとグループを作成させることもできます。詳細については、「[インストーラ引数](configure-installer.md)」を参照してください。

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1.  AWS IoT Greengrass Core ソフトウェアを実行するユーザー (通常は `root`) に、任意のユーザーと任意のグループ`sudo`で を実行するアクセス許可があることを確認します。

   1. `/etc/sudoers` ファイルを開くには、次のコマンドを実行します。

      ```
      sudo visudo
      ```

   1. ユーザーの権限が次の例のようになっていることを確認します。

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. (オプション) [コンテナ化された Lambda 関数を実行](run-lambda-functions.md)するには、[cgroups](https://en.wikipedia.org/wiki/Cgroups) v1 を有効にし、*メモリ*と*デバイス*の cgroups を有効にしてマウントする必要があります。コンテナ化された Lambda 関数を実行する予定がない場合、この手順を省略できます。

   これらの cgroups オプションを有効にするには、次の Linux カーネルパラメータを使用してデバイスを起動します。

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   デバイスのカーネルパラメータを確認および設定するための情報については、オペレーティングシステムおよびブートローダーのドキュメントを参照してください。指示に従って、カーネルパラメータを永続的に設定します。

1. [デバイスの要件](greengrass-nucleus-component.md#greengrass-v2-requirements) にある要件リストで示されているように、その他の必要となる依存関係をすべてデバイスにインストールします。

#### Windows デバイスをセットアップする
<a name="set-up-windows-device-environment"></a>

**注記**  
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.5.0 以降に利用できます。<a name="set-up-windows-device-environment-procedure"></a>

**の Windows デバイスを設定するには AWS IoT Greengrass V2**

1.  AWS IoT Greengrass Core ソフトウェアが実行する必要がある Java ランタイムをインストールします。[Amazon Corretto](https://aws.amazon.com/corretto/) または [OpenJDK](https://openjdk.java.net/) の長期サポートバージョンを使用することをお勧めします。バージョン 8 以降が必要です。

1. [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) システム変数で Java が使用可能か確認し、そうでない場合は追加します。LocalSystem アカウントは AWS IoT Greengrass Core ソフトウェアを実行するため、ユーザーの PATH ユーザー変数ではなく PATH システム変数に Java を追加する必要があります。以下の操作を実行します。

   1. Windows キーを押してスタートメニューを開きます。

   1. **environment variables** を入力して、スタートメニューからシステムオプションを検索します。

   1. スタートメニューの検索結果から **[Edit the system environment variables]** (システム環境変数を編集) をクリックして、**[System properties]** (システムプロパティ) ウィンドウを開きます。

   1. **[Environment variables...]** (環境変数...) を選択して、**[Environment Variables]** (環境可変) ウィンドウを開きます。

   1. **[System variables]** (システム変数) で、**[Path]** (パス) 、**[Edit]** (編集) の順に選択します。**[Edit environment variable]** (環境変数の編集) ウィンドウでは、個別の行に各パスを表示できます。

   1. Java インストールの `bin` フォルダへのパスが存在しているかを確認します。このパスは、次の例のように表示されます。

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. **[Path]** (パス) で Java インストールの `bin` フォルダが で見つからない場合は、**[New]** (新規) を選択してこれを追加した上で、**[OK]** を選択します。

1. <a name="set-up-windows-device-environment-open-cmd"></a>管理者として Windows コマンドプロンプト `cmd.exe` を開きます。

1. <a name="set-up-windows-device-environment-create"></a>Windows デバイスの LocalSystem アカウントにデフォルトユーザーを作成します。*パスワード*を安全なパスワードに置き換えます。

   ```
   net user /add ggc_user password
   ```
**ヒント**  <a name="windows-password-expiration-tip"></a>
Windows の構成によっては、ユーザーのパスワードの期限切れが、将来の日付に設定されている場合があります。Greengrass アプリケーションの動作を継続させるためには、パスワードの有効期限を追跡し、その期限が切れる前に更新します。ユーザーのパスワードには、期限切れを起こさないような設定も可能です。  
ユーザーとパスワードの有効期限を確認するには、次のコマンドを実行します。  

     ```
     net user ggc_user | findstr /C:expires
     ```
ユーザーのパスワードが期限切れにならないように設定するには、次のコマンドを実行します。  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
[`wmic` コマンドが廃止されている](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 以降を使用している場合は、次の PowerShell コマンドを実行します。  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>[PsExec ユーティリティ](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)を Microsoft からダウンロードしてデバイスにインストールします。

1. <a name="set-up-windows-device-credentials"></a>PsExec ユーティリティを使用して、デフォルトユーザーのユーザー名とパスワードを LocalSystem アカウントの認証情報マネージャーインスタンスに格納します。*パスワード*を以前に設定したユーザーのパスワードに置き換えます。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   **PsExec License Agreement** が開いたら、**Accept** を選択し、ライセンスに同意してコマンドを実行します。
**注記**  
Windows デバイスでは、LocalSystem アカウントによって Greengrass nucleus が実行され、PsExec ユーティリティを使用して LocalSystem アカウントにデフォルトのユーザー情報を保存する必要があります。認証情報マネージャーアプリケーションを使用すると、この情報は LocalSystem アカウントではなく、現在ログオンしているユーザーの Windows アカウントに保存されます。

### デバイスに AWS 認証情報を提供する
<a name="provide-installer-aws-credentials-auto"></a>

インストーラが必要な AWS リソースをプロビジョニングできるように、デバイスに AWS 認証情報を提供します。必要なアクセス許可の詳細については、「[インストーラがリソースをプロビジョニングするための最小限の IAM ポリシー](provision-minimal-iam-policy.md)」を参照してください。

**デバイスに AWS 認証情報を提供するには**
+ <a name="installer-export-aws-credentials"></a>インストーラがコアデバイスの AWS IoT および IAM リソースをプロビジョニングできるように、デバイスに AWS 認証情報を提供します。セキュリティを強化するには、プロビジョニングに必要な最小限の許可のみを与える IAM ロールの一時的な認証情報を取得することをお勧めします。詳細については、「[インストーラがリソースをプロビジョニングするための最小限の IAM ポリシー](provision-minimal-iam-policy.md)」を参照してください。
**注記**  
インストーラが認証情報を保存したり保管することはありません。

  デバイスで、次のいずれかを実行して認証情報を取得し、 AWS IoT Greengrass Core ソフトウェアインストーラーで使用できるようにします。
  + (推奨) から一時的な認証情報を使用する AWS IAM アイデンティティセンター

    1. 継承する IAM Identity Center から、アクセスキー ID、シークレットアクセスキー、セッショントークンを提供します。これらの方法の詳細については、IAM Identity Center ユーザーガイドの「[一時的な認証情報の取得と更新](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html#how-to-get-temp-credentials)」で「**認証情報の手動更新**」を参照してください。**

    1. 次のコマンドを実行して、認証情報を AWS IoT Greengrass Core ソフトウェアに提供します。

------
#### [ Linux or Unix ]

       ```
       export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

------
#### [ Windows Command Prompt (CMD) ]

       ```
       set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       set AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

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

       ```
       $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
       $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       $env:AWS_SESSION_TOKEN="AQoDYXdzEJr1K...o5OytwEXAMPLE="
       ```

------
  + IAM ロールから一時的なセキュリティ認証情報を使用します。

    1. 継承する IAM ロールから、アクセスキー ID、シークレットアクセスキー、セッショントークンを提供します。これらの認証情報を取得する方法の詳細については、「*IAM ユーザーガイド*」の「[一時的なセキュリティ認証情報をリクエストする](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)」を参照してください。

    1. 次のコマンドを実行して、認証情報を AWS IoT Greengrass Core ソフトウェアに提供します。

------
#### [ Linux or Unix ]

       ```
       export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

------
#### [ Windows Command Prompt (CMD) ]

       ```
       set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       set AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

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

       ```
       $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
       $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       $env:AWS_SESSION_TOKEN="AQoDYXdzEJr1K...o5OytwEXAMPLE="
       ```

------
  + IAM ユーザーからの長期的な認証情報を使用する:

    1. IAM ユーザーのアクセスキー ID とシークレットアクセスキーを提供します。後で削除するプロビジョニング用の IAM ユーザーを作成できます。ユーザーに付与する IAM ポリシーについては、「[インストーラがリソースをプロビジョニングするための最小限の IAM ポリシー](provision-minimal-iam-policy.md)」を参照してください。長期認証情報を取得する方法の詳細については、「*IAM ユーザーガイド*」の「[IAM ユーザーのアクセスキーを管理します。](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)」を参照してください。

    1. 次のコマンドを実行して、認証情報を AWS IoT Greengrass Core ソフトウェアに提供します。

------
#### [ Linux or Unix ]

       ```
       export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       ```

------
#### [ Windows Command Prompt (CMD) ]

       ```
       set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       ```

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

       ```
       $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
       $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       ```

------

    1. (オプション) Greengrass デバイスをプロビジョニングする IAM ユーザーを作成した場合は、ユーザーを削除します。

    1. (オプション) 既存の IAM ユーザーのアクセスキー ID とシークレットアクセスキーを使用した場合は、そのユーザーのキーを更新して、そのキーが無効になるようにします。詳細については、「AWS Identity and Access Management ユーザーガイド」の「[アクセスキーの更新](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey)」を参照してください。**

### AWS IoT Greengrass Core ソフトウェアをダウンロードする
<a name="download-greengrass-core-v2-auto"></a>

 AWS IoT Greengrass Core ソフトウェアの最新バージョンは、次の場所からダウンロードできます。
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**注記**  
Core AWS IoT Greengrass ソフトウェアの特定のバージョンは、次の場所からダウンロードできます。*バージョン*をダウンロードするバージョンに置き換えます。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**AWS IoT Greengrass Core ソフトウェアをダウンロードするには**

1. <a name="installation-download-ggc-software-step"></a>コアデバイスで、 AWS IoT Greengrass Core ソフトウェアを という名前のファイルにダウンロードします`greengrass-nucleus-latest.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

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

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>このソフトウェアをダウンロードすると、[Greengrass Core ソフトウェアのライセンス契約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)に同意したものと見なされます。

1. <a name="verify-gg-nucleus-signature"></a>(オプション) Greengrass nucleus ソフトウェア署名を確認するには
**注記**  
この機能は、Greengrass nucleus バージョン 2.9.5 以降で使用できます。

   1. 以下のコマンドを使用して、Greengrass nucleus アーティファクトの署名を確認します。

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      インストールする JDK のバージョンによって、ファイル名が異なる場合があります。インストールした JDK のバージョンに *`jdk17.0.6_10`* を置き換えてください。

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

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

      インストールする JDK のバージョンによって、ファイル名が異なる場合があります。インストールした JDK のバージョンに *`jdk17.0.6_10`* を置き換えてください。

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` が起動すると、検証結果を示す出力が得られます。

      1. Greengrass nucleus の zip ファイルに署名されると、出力に以下のような文が表示されます：

         ```
         jar verified.
         ```

      1. Greengrass nucleus の zip ファイルに署名されないと、出力に以下のような文が表示されます：

         ```
         jar is unsigned.
         ```

   1. Jarsigner `-certs` を `-verify` と`-verbose` オプションと一緒に提供した場合、出力には署名者証明書の詳細情報も含まれます。

1. <a name="installation-unzip-ggc-software-step"></a> AWS IoT Greengrass Core ソフトウェアをデバイスのフォルダに解凍します。*GreengrassInstaller* を使用するフォルダに置き換えます。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

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

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. (オプション) 次のコマンドを実行して、 AWS IoT Greengrass Core ソフトウェアのバージョンを確認します。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**重要**  <a name="installer-folder-2.4.0-warning"></a>
v2.4.0 より前のバージョンの Greengrass nucleus をインストールした場合は、 AWS IoT Greengrass Core ソフトウェアをインストールした後にこのフォルダを削除しないでください。 AWS IoT Greengrass Core ソフトウェアは、このフォルダ内のファイルを使用して実行します。  
ソフトウェアの最新バージョンをダウンロードした場合は、v2.4.0 以降をインストールし、 AWS IoT Greengrass Core ソフトウェアをインストールした後にこのフォルダを削除できます。

### AWS IoT Greengrass Core ソフトウェアのインストール
<a name="run-greengrass-core-v2-installer-auto"></a>

次のことを指定する引数を含んだインストーラを実行します。
+ <a name="install-argument-aws-resources"></a>コアデバイスが動作するために必要な AWS リソースを作成します。
+ <a name="install-argument-component-default-user"></a>コアデバイスでソフトウェアコンポーネントを実行するために `ggc_user` システムユーザーを使用するように指定します。Linux デバイスでは、このコマンドも `ggc_group` システムグループを使用するように指定し、さらにインストーラによってシステムユーザーとグループが、ユーザーに代わって作成されます。
+ <a name="install-argument-system-service"></a>Core AWS IoT Greengrass ソフトウェアを、起動時に実行されるシステムサービスとしてセットアップします。Linux デバイスでは、これは [Systemd](https://en.wikipedia.org/wiki/Systemd) init システムが必要です。
**重要**  <a name="windows-system-service-requirement-important-note"></a>
Windows コアデバイスでは、 AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定する必要があります。

ローカル開発ツールで開発デバイスをセットアップするには、`--deploy-dev-tools true` 引数を指定します。インストール完了後、ローカル開発ツールのデプロイには最大 1 分かかることがあります。

指定できる引数の詳細については、「[インストーラ引数](configure-installer.md)」を参照してください。

**注記**  
<a name="jvm-tuning-note"></a>メモリが制限された AWS IoT Greengrass デバイスで実行している場合は、 AWS IoT Greengrass Core ソフトウェアが使用するメモリ量を制御できます。メモリ割り当てを制御するには、nucleus コンポーネントの `jvmOptions` 設定パラメータで JVM ヒープのサイズオプションを設定できます。詳細については、「[JVM オプションでメモリ割り当てを制御する](configure-greengrass-core-v2.md#jvm-tuning)」を参照してください。

**AWS IoT Greengrass Core ソフトウェアをインストールするには**

1. テキストエディタを使用し、`config.yaml` という名前の設定ファイルを作成してインストーラに提供します。

   <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   次の YAML コンテンツをファイルにコピーします。この部分設定ファイルは、システムパラメータと Greengrass nucleus パラメータを指定します。

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       configuration:
         fipsMode: "true"
         iotDataEndpoint: "data.iot-fips.us-west-2.amazonaws.com"
         iotCredEndpoint: "data.credentials.iot-fips.us-west-2.amazonaws.com"
         greengrassDataPlaneEndpoint: "iotData"
   ```
   + *us-west-2* をリソースを作成した AWS リージョン に置き換えます。
   + *iotDataEndpoint* を AWS IoT データエンドポイントに置き換えます。
   + *iotCredEndpoint* を AWS IoT 認証情報のエンドポイントに置き換えます。

1.  AWS IoT Greengrass Core インストーラを実行します。コマンドの引数値を次のように置き換えます。
**注記**  
Windows では、パスの長さは 260 文字に制限されています。Windows を使用している場合は、`C:\greengrass\v2` や `D:\greengrass\v2` などのルートフォルダを使用して、Greengrass コンポーネントのパスを 260 文字の制限内に留めます。<a name="installer-replace-arguments"></a>

   1. `/greengrass/v2` または *C:\$1greengrass\$1v2*: AWS IoT Greengrass Core ソフトウェアのインストールに使用するルートフォルダへのパス。

   1. *GreengrassInstaller*。 AWS IoT Greengrass Core ソフトウェアインストーラを解凍したフォルダへのパス。

   1. *リージョン*。リソースを検索または作成する AWS リージョン 。

   1. *MyGreengrassCore*。Greengrass コアデバイスの AWS IoT モノの名前。モノが存在しない場合、インストーラによって作成されます。インストーラは証明書をダウンロードして AWS IoT モノとして認証します。詳細については、「[AWS IoT Greengrassのデバイス認証と認可](device-auth.md)」を参照してください。
**注記**  <a name="install-argument-thing-name-constraint"></a>
モノの名前にコロン (`:`) 記号を含むことができません。

   1. *MyGreengrassCoreGroup*。Greengrass コアデバイスの AWS IoT モノグループの名前。モノグループが存在しない場合、インストーラはそのグループを作成してモノを追加します。モノグループが存在してアクティブなデプロイがある場合、コアデバイスはデプロイで指定されたソフトウェアをダウンロードして実行します。
**注記**  <a name="install-argument-thing-group-name-constraint"></a>
モノグループ名にコロン (`:`) 記号を含めることはできません。

   1. *GreengrassV2IoTThingPolicy*。Greengrass コアデバイスが AWS IoT および と通信することを許可する AWS IoT ポリシーの名前 AWS IoT Greengrass。ポリシーが存在しない場合 AWS IoT 、インストーラはこの名前で許可 AWS IoT ポリシーを作成します。ユースケースに合わせて、このポリシーのアクセス許可を制限することができます。詳細については、「[AWS IoT Greengrass V2 コアデバイスの最小 AWS IoT ポリシー](device-auth.md#greengrass-core-minimal-iot-policy)」を参照してください。

   1. *GreengrassV2TokenExchangeRole*。Greengrass コアデバイスが一時的な AWS 認証情報を取得できるようにする IAM ロールの名前。ロールが存在しない場合、インストーラがロールを作成し、`GreengrassV2TokenExchangeRoleAccess` という名前のポリシーを作成してアタッチします。詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

   1. *GreengrassCoreTokenExchangeRoleAlias*。Greengrass コアデバイスが後で一時的な認証情報を取得できるようにする IAM ロールのエイリアス。ロールエイリアスが存在しない場合、インストーラがロールエイリアスを作成し、指定した IAM ロールを指します。詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user ggc_user:ggc_group \
     --provision true \
     --init-config ./GreengrassInstaller/config.yaml \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --aws-region region ^
     --thing-name MyGreengrassCore ^
     --thing-group-name MyGreengrassCoreGroup ^
     --thing-policy-name GreengrassV2IoTThingPolicy ^
     --tes-role-name GreengrassV2TokenExchangeRole ^
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias ^
     --component-default-user ggc_user ^
     --provision true ^
     --setup-system-service true
   ```

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

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --aws-region region `
     --thing-name MyGreengrassCore `
     --thing-group-name MyGreengrassCoreGroup `
     --thing-policy-name GreengrassV2IoTThingPolicy `
     --tes-role-name GreengrassV2TokenExchangeRole `
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias `
     --component-default-user ggc_user `
     --provision true `
     --setup-system-service true
   ```

------
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
Windows コアデバイスでは、 を指定`--setup-system-service true`して AWS IoT Greengrass Core ソフトウェアをシステムサービスとしてセットアップする必要があります。

   インストーラが正常に処理すると、次のメッセージを印刷します。
   + `--provision` を指定すると、インストーラがリソースに正しく設定した場合、`Successfully configured Nucleus with provisioned resource details` を印刷します。
   + `--deploy-dev-tools` を指定すると、インストーラがデプロイを正しく作成した場合、`Configured Nucleus to deploy aws.greengrass.Cli component` を印刷します。
   + `--setup-system-service true` を指定すると、インストーラがソフトウェアをサービスとして設定して実行した場合、`Successfully set up Nucleus as a system service` を印刷します。
   + `--setup-system-service true` を指定しないと、インストーラが正常に処理できてソフトウェアを実行した場合、`Launched Nucleus successfully` を印刷します。

1. [Greengrass nucleus](greengrass-nucleus-component.md) v2.0.4 以降をインストールした場合、この手順を省略できます。ソフトウェアの最新バージョンをダウンロード済みで、v2.0.4 以降をインストールしています。

   次のコマンドを実行して、 AWS IoT Greengrass Core ソフトウェアのルートフォルダに必要なファイル許可を設定します。`/greengrass/v2` をインストールコマンドで指定したルートフォルダに置き換えて、*/greengrass* をルートフォルダの親フォルダに置き換えます。

   ```
   sudo chmod 755 /greengrass/v2 && sudo chmod 755 /greengrass
   ```

<a name="install-greengrass-core-run-software"></a> AWS IoT Greengrass Core ソフトウェアをシステムサービスとしてインストールした場合、インストーラはソフトウェアを実行します。それ以外の場合、ソフトウェアを手動で実行する必要があります。詳細については、「[AWS IoT Greengrass Core ソフトウェアを実行する](run-greengrass-core-v2.md)」を参照してください。

**注記**  
デフォルトでは、インストーラが作成する IAM ロールは S3 バケットのコンポーネントアーティファクトへのアクセスを許可しません。Amazon S3 でアーティファクトを定義するカスタムコンポーネントをデプロイするには、コアデバイスがコンポーネントアーティファクトを取得できるようにする許可をロールに追加する必要があります。詳細については、「[コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する](device-service-role.md#device-service-role-access-s3-bucket)」を参照してください。  
コンポーネントアーティファクトに S3 バケットをまだ持っていない場合、バケットを作成した後でこれらのアクセス許可を追加できます。

<a name="install-greengrass-core-next-steps-intro"></a>ソフトウェアと を設定および使用する方法の詳細については AWS IoT Greengrass、以下を参照してください。<a name="install-greengrass-core-next-steps-links"></a>
+ [AWS IoT Greengrass Core ソフトウェアを設定する](configure-greengrass-core-v2.md)
+ [AWS IoT Greengrass コンポーネントを開発する](develop-greengrass-components.md)
+ [AWS IoT Greengrass コンポーネントをデバイスにデプロイする](manage-deployments.md)
+ [Greengrass コマンドラインインターフェイス](gg-cli.md)

## FIPS コンプライアンスのファーストパーティコンポーネント
<a name="FIPS-compliance"></a>


|  |  | 
| --- | --- | 
| aws.greengrass.Nucleus | data.iot-fips.us-east-1.amazonaws.com | 
|  | greengrass-fips.us-east-1.amazonaws.com | 
|  | data.credentials.iot-fips.us-east-1.amazonaws.com | 
| aws.greengrass.TokenExchangeService | data.credentials.iot-fips.us-east-1.amazonaws.com | 
| aws.greengrass.Cli |  | 
| aws.greengrass.StreamManager | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/FIPS.html) ストリームマネージャーは FIPS AWS IoT Analytics エンドポイントをサポートしていません  | 
| aws.greengrass.LogManager | logs-fips.us-east-1.amazonaws.com | 
| aws.greengrass.crypto.Pkcs11Provider |  | 
| aws.greengrass.ShadowManager |  | 
| aws.greengrass.DockerApplicationManager | ecr-fips.us-east-1.amazonaws.com | 
| aws.greengrass.SecretManager | secretsmanager-fips.us-east-1.amazonaws.com | 
| aws.greengrass.telemetry.NucleusEmitter |  | 
| aws.greengrass.clientdevices.IPDetector |  | 
| aws.greengrass.DiskSpooler |  | 

# AWS IoT Greengrass での耐障害性
<a name="disaster-recovery-resiliency"></a>

AWS のグローバルインフラストラクチャはアマゾン ウェブ サービスリージョンとアベイラビリティーゾーンを中心として構築されます。各 AWS リージョン には、低レイテンシー、高いスループット、そして高度の冗長ネットワークで接続されている複数の物理的に独立し隔離されたアベイラビリティーゾーンがあります。アベイラビリティーゾーンでは、ゾーン間で中断することなく自動的にフェールオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、フォールトトレランス、および拡張性が優れています。

詳細については[AWS グローバルインフラストラクチャ](https://aws.amazon.com/about-aws/global-infrastructure/)を参照してください。

AWS では、AWS IoT Greengrass グローバルインフラストラクチャに加えて、データの回復性とバックアップのニーズに対応できるように複数の機能を提供しています。
+ ログをローカルファイルシステムと CloudWatch Logs に書き込むように、Greengrass グループを設定できます。コアデバイスが切断された場合でも、ファイルシステム上でメッセージを記録し続けることができます。再接続されると、ログメッセージが CloudWatch Logs に書き込まれます。詳細については、「[AWS IoT Greengrass ログのモニタリング](monitor-logs.md)」を参照してください。
+ デプロイ中にコアデバイスの電源が失われると、AWS IoT Greengrass Core ソフトウェアが再び再起動した後にデプロイが再開されます。
+ コアデバイスがインターネットから切断された場合でも、Greengrass クライアントデバイスはローカルネットワークを介して通信を続けることができます。
+ [ストリームマネージャー](manage-data-streams.md)のストリームを読み込み、ローカルストレージの送信先にデータを送る Greengrass コンポーネントを作成できます。

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

マネージドサービスである AWS IoT Greengrass は、ホワイトペーパー[「Amazon Web Services: セキュリティプロセスの概要](https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf)」に記載されている AWS グローバルネットワークセキュリティ手順で保護されています。

 AWS が公開した API コールを使用して、ネットワーク AWS IoT Greengrass 経由で にアクセスします。クライアントは、Transport Layer Security (TLS) 1.2 以降をサポートする必要があります。TLS 1.3 以降が推奨されます。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman (ECDHE) などの Perfect Forward Secrecy (PFS) を使用した暗号スイートもクライアントでサポートされている必要があります。これらのモードは Java 7 以降など、ほとんどの最新システムでサポートされています。

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

 AWS IoT Greengrass 環境では、デバイスは X.509 証明書と暗号化キーを使用して に接続し、認証します AWS クラウド。詳細については、「[AWS IoT Greengrassのデバイス認証と認可](device-auth.md)」を参照してください。

# での設定と脆弱性の分析 AWS IoT Greengrass
<a name="vulnerability-analysis-and-management"></a>

IoT 環境は、多様な機能を持ち、存続期間が長く、地理的に分散される多数のデバイスで設定されることがあります。このような特性によってデバイスのセットアップが複雑になり、エラーを起こしやすくなります。また、デバイスの計算能力、メモリ、ストレージの機能には制約があるため、デバイス自体での暗号化や他の形式のセキュリティの使用が制限されます。さらに、デバイスは多く場合、既知の脆弱性を持つソフトウェアを使用しています。このような要素が原因で、IoT デバイスはハッカーの魅力的なターゲットとなり、継続的に保護することが困難になっています。

AWS IoT Device Defender は、セキュリティの問題やベストプラクティスからの逸脱を特定するためのツールを提供することで、これらの課題に対処します。 AWS IoT Device Defender を使用して、接続されたデバイスを分析、監査、モニタリングして異常な動作を検出し、セキュリティリスクを軽減できます。 AWS IoT Device Defender は、デバイスを監査して、セキュリティのベストプラクティスに準拠していることを確認して、デバイスの異常な動作を検出できます。これにより、デバイス間でセキュリティポリシーを維持し、デバイスが侵害された場合にはすばやく応答することができます。詳細については、次のトピックを参照してください。
+ [Device Defender コンポーネント](device-defender-component.md)
+ AWS IoT Core デベロッパーガイドの [AWS IoT Device Defender](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender.html)。**

 AWS IoT Greengrass 環境では、次の考慮事項に注意してください。
+ 物理デバイス、デバイスのファイルシステム、ローカルネットワークの保護はお客様の責任です。
+ AWS IoT Greengrass は、Greengrass コンテナで実行されているかどうかにかかわらず、ユーザー定義の Greengrass コンポーネントにネットワーク分離を適用しません。したがって、Greengrass コンポーネントはシステム内またはネットワークを介して、外部で実行されている他のプロセスと通信することができます。

# AWS IoT Greengrass V2 におけるコードの整合性
<a name="code-integrity"></a>

AWS IoT Greengrass は、AWS クラウド からのソフトウェアコンポーネントを AWS IoT Greengrass Core ソフトウェアを実行するデバイスにデプロイします。これらのソフトウェアコンポーネントには、[AWS から提供されるコンポーネント](public-components.md)と、ユーザーが AWS アカウント にアップロードする[カスタムコンポーネント](create-components.md)が含まれます。すべてのコンポーネントは、レシピで設定されます。レシピは、コンポーネントのメタデータと任意の数のアーティファクトを定義します。アーティファクトとは、コンパイルされたコードや静的リソースなどのコンポーネントバイナリです。コンポーネントアーティファクトは Amazon S3 に保存されます。

Greengrass コンポーネントを開発しデプロイする際には、AWS アカウント 内とデバイス上にあるコンポーネントアーティファクトを扱った、次の簡単な手順に従ってください。

1. アーティファクトを作成し、S3 バケットにアップロードします。

1. AWS IoT Greengrass サービスのレシピとアーティファクトからコンポーネントを作成します。これにより、各アーティファクトの[暗号ハッシュ](https://en.wikipedia.org/wiki/Cryptographic_hash_function)が計算されます。

1. Greengrass コアデバイスにコンポーネントをデプロイします。これにより Greengrass コアデバイスが各アーティファクトをダウンロードし、整合性を検証します。

AWS は、S3 バケットにアーティファクトをアップロードした後に、アーティファクトの整合性を維持する責任を担っており、これには Greengrass コアデバイスにコンポーネントをデプロイする場合も含まれます。S3 バケットにアーティファクトをアップロードする前は、ソフトウェアのアーティファクトを保護する責任はユーザーにあります。また、ユーザーには、AWS アカウント 内のリソースへのアクセスを保護する責任もあります。これには、コンポーネントアーティファクトをアップロードする S3 バケットを含まれます。

**注記**  
Amazon S3 では S3 オブジェクトロックと呼ばれる機能が提供されており、ユーザーはこれを利用して、AWS アカウント の S3 バケット内のコンポーネントアーティファクトに対する変更から保護することができます。S3 オブジェクトロックを使用することで、コンポーネントのアーティファクトが削除または上書きされるのを防止することができます。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[S3 オブジェクトロックを使用する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html)」を参照してください。

AWS がパブリックコンポーネントをパブリッシュするとき、およびカスタムコンポーネントをアップロードするときには、AWS IoT Greengrass が各コンポーネントアーティファクトに対する暗号ダイジェストを計算します。AWS IoT Greengrass は、各アーティファクトのダイジェストとそのダイジェストを計算するために使用されるハッシュアルゴリズムが含まれるように、コンポーネントレシピを更新します。このダイジェストにより、成果物の完全性が保証される。なぜなら、もしアーティファクトが AWS クラウド 内やダウンロード中に変更されると、そのファイルダイジェストは、AWS IoT Greengrass がコンポーネントレシピに保存するダイジェストと一致しなくなるからです。詳細については、「[コンポーネントレシピリファレンスのアーティファクト](component-recipe-reference.md#manifest-artifacts-definition)」を参照してください。

コアデバイスにコンポーネントをデプロイすると、AWS IoT Greengrass Core ソフトウェアが、コンポーネントレシピと、レシピが定義するコンポーネントアーティファクトをダウンロードします。AWS IoT Greengrass Core ソフトウェアは、ダウンロードされた各アーティファクトファイルのダイジェストを計算し、レシピ内のアーティファクトのダイジェストと比較します。ダイジェストが一致しない場合、デプロイは失敗となり、AWS IoT Greengrass Core ソフトウェアは、ダウンロードしたアーティファクトをデバイスのファイルシステムから削除します。コアデバイスと AWS IoT Greengrass 間の接続がどのように保護されているかの詳細については、「[転送中の暗号化](encryption-in-transit.md)」を参照してください。

コアデバイスのファイルシステム上にあるコンポーネントアーティファクトファイルを保護する責任は、ユーザーが担います。AWS IoT Greengrass Core ソフトウェアは、アーティファクトを Greengrass ルートフォルダにある `packages` フォルダに保存します。AWS IoT Device Defender を使用して、コアデバイスの分析、監査および監視を実行することができます。詳細については、「[での設定と脆弱性の分析 AWS IoT Greengrass](vulnerability-analysis-and-management.md)」を参照してください。

# AWS IoT Greengrass およびインターフェイス VPC エンドポイント (AWS PrivateLink)
<a name="vpc-interface-endpoints"></a>

*インターフェイス VPC エンドポイント*を作成することで、VPC と AWS IoT Greengrass コントロールプレーン間のプライベート接続を確立できます。このエンドポイントを使用して、 AWS IoT Greengrass サービス内のコンポーネント、デプロイ、コアデバイスを管理できます。インターフェイスエンドポイントは、インターネットゲートウェイ[AWS PrivateLink](https://aws.amazon.com/privatelink)、NAT デバイス、VPN 接続、または AWS Direct Connect 接続なしで AWS IoT Greengrass APIs にプライベートにアクセスできるテクノロジーである を利用しています。VPC 内のインスタンスは、 AWS IoT Greengrass APIs と通信するためにパブリック IP アドレスを必要としません。VPC と の間のトラフィック AWS IoT Greengrass は、Amazon ネットワークを離れません。

各インターフェイスエンドポイントは、サブネット内の 1 つ、または複数の [Elastic Network Interface](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) によって表されます。

詳細については、「Amazon VPC ユーザーガイド」の「[インターフェイス VPC エンドポイント (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)」を参照してください。

**Topics**
+ [AWS IoT Greengrass VPC エンドポイントに関する考慮事項](#vpc-endpoint-considerations)
+ [AWS IoT Greengrass コントロールプレーンオペレーション用のインターフェイス VPC エンドポイントを作成する](#create-vpc-endpoint-control-plane)
+ [の VPC エンドポイントポリシーの作成 AWS IoT Greengrass](#vpc-endpoint-policy)
+ [VPC で AWS IoT Greengrass コアデバイスを運用する](#vpc-operate-device-vpce)

## AWS IoT Greengrass VPC エンドポイントに関する考慮事項
<a name="vpc-endpoint-considerations"></a>

のインターフェイス VPC エンドポイントを設定する前に AWS IoT Greengrass、*「Amazon VPC ユーザーガイド*」の[「インターフェイスエンドポイントのプロパティと制限](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#vpce-interface-limitations)」を参照してください。さらに、次の点について注意してください:
+ AWS IoT Greengrass は、VPC からのすべてのコントロールプレーン API アクションの呼び出しをサポートしています。コントロールプレーンには、[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html) と [ListEffectiveDeployments](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListEffectiveDeployments.html) などの操作が含まれています。コントロールプレーンには、データプレーン操作である [ResolveComponentCandidates](device-auth.md#iot-policies) と[検出](greengrass-discover-api.md)などの操作が含まれていません。
+ の VPC エンドポイント AWS IoT Greengrass は現在、 AWS 中国リージョンではサポートされていません。

## AWS IoT Greengrass コントロールプレーンオペレーション用のインターフェイス VPC エンドポイントを作成する
<a name="create-vpc-endpoint-control-plane"></a>

Amazon VPC コンソールまたは AWS Command Line Interface () を使用して AWS IoT Greengrass 、コントロールプレーンの VPC エンドポイントを作成できますAWS CLI。詳細については、「Amazon VPC ユーザーガイド」の[インターフェイスエンドポイントの作成](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)を参照してください。

次のサービス名 AWS IoT Greengrass を使用して 用の VPC エンドポイントを作成します。
+ com.amazonaws.*region*.greengrass

エンドポイントのプライベート DNS を有効にすると、 などのリージョンのデフォルト DNS 名 AWS IoT Greengrass を使用して に API リクエストを行うことができます`greengrass.us-east-1.amazonaws.com`。プライベート DNS はデフォルトで有効になっています。

詳細については、「Amazon VPC ユーザーガイド**」の「[インターフェイスエンドポイントを介したサービスへのアクセス](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#access-service-though-endpoint)」を参照してください。

## の VPC エンドポイントポリシーの作成 AWS IoT Greengrass
<a name="vpc-endpoint-policy"></a>

VPC エンドポイントに、 AWS IoT Greengrass コントロールプレーン操作へのアクセスを制御するエンドポイントポリシーをアタッチできます。このポリシーでは、以下の情報を指定します。
+ アクションを実行できるプリンシパル。
+ プリンシパルが実行できるアクション。
+ プリンシパルがアクションを実行できるリソース。

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

**Example 例: AWS IoT Greengrass アクションの VPC エンドポイントポリシー**  
以下は、 のエンドポイントポリシーの例です AWS IoT Greengrass。エンドポイントにアタッチすると、このポリシーは、すべてのリソースのすべてのプリンシパルに対して、リストされた AWS IoT Greengrass アクションへのアクセスを許可します。  

```
{
    "Statement": [
        {
            "Principal": "*",
            "Effect": "Allow",
            "Action": [
                "greengrass:CreateDeployment",
                "greengrass:ListEffectiveDeployments"
            ],
            "Resource": "*"
        }
    ]
}
```

## VPC で AWS IoT Greengrass コアデバイスを運用する
<a name="vpc-operate-device-vpce"></a>

Greengrass コアデバイスを操作して、パブリックインターネットアクセスなしで VPC でデプロイを実行できます。少なくとも、対応する DNS エイリアスを使用して次の VPC エンドポイントを設定する必要があります。VPC エンドポイントの作成および使用方法の詳細については、*Amazon VPC User Guide* の「[インターフェイスエンドポイントの作成](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)」を参照してください。

**注記**  
DNS レコードを自動的に作成するための VPC 機能は、 AWS IoT data および AWS IoT 認証情報では無効になっています。これらのエンドポイントに接続するには、プライベート DNS レコードを手動で作成する必要があります。詳細については、「[インターフェイスエンドポイントのプライベート DNS](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#vpce-private-dns)」を参照してください。 AWS IoT Core VPC の制限の詳細については、[「VPC エンドポイントの制限](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html#VPC-limitations)」を参照してください。

### 前提条件
<a name="vpc-endpoint-prerequisites"></a>
+ 手動でプロビジョニングするステップを使用して AWS IoT Greengrass Core ソフトウェアをインストールする必要があります。詳細については、「[手動リソースプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールする](manual-installation.md)」を参照してください。

### 制限事項
<a name="vpc-endpoint-limitaions"></a>
+ VPC での Greengrass コアデバイスの操作は、中国リージョンおよび AWS GovCloud (US) Regionsではサポートされていません。
+  AWS IoT data および AWS IoT 認証情報プロバイダー VPC エンドポイントの制限の詳細については、[「制限](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html#VPC-limitations)」を参照してください。

### VPC で動作するように Greengrass コアデバイスをセットアップする
<a name="vpc-endpoint-operate-gg-core"></a>

****

1. の AWS IoT エンドポイントを取得し AWS アカウント、後で使用するために保存します。デバイスはこれらのエンドポイントを使用して AWS IoTに接続します。以下の操作を実行します。

   1.  AWS IoT のデータエンドポイントを取得します AWS アカウント。

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

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
      }
      ```

   1. の AWS IoT 認証情報エンドポイントを取得します AWS アカウント。

      ```
      aws iot describe-endpoint --endpoint-type iot:CredentialProvider
      ```

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      ```
      {
        "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
      }
      ```

1.  AWS IoT data および AWS IoT 認証情報エンドポイント用の Amazon 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 エンドポイントを選択します。エンドポイントは `com.amazonaws.region.iot.data` の形式です。

         AWS IoT Core 認証情報プロバイダーの VPC エンドポイントを作成する場合は、リージョンの AWS IoT Core 認証情報プロバイダーエンドポイントを選択します。エンドポイントは `com.amazonaws.region.iot.credentials` の形式です。
**注記**  
中国リージョン AWS IoT Core のデータプレーンのサービス名は、 の形式になります`cn.com.amazonaws.region.iot.data`。 AWS IoT Core 認証情報プロバイダーの VPC エンドポイントの作成は、中国リージョンではサポートされていません。
      + [**VPC**] と [**Subnets**] (サブネット) には、エンドポイントを作成する VPC と、エンドポイントネットワークを作成するアベイラビリティーゾーン (AZ) を選択します。
      + [**Enable DNS name**] (DNS 名を有効にする) で、[**Enable for this endpoint**] (このエンドポイントで有効にする) が選択されていないことを確認してください。 AWS IoT Core データプレーンも AWS IoT Core 認証情報プロバイダーも、プライベート DNS 名をまだサポートしていません。
      + [**Security group**] (セキュリティグループ) には、エンドポイントネットワークインターフェイスに関連付けるセキュリティグループを選択します。
      + オプションで、タグを追加または削除できます。タグとは名前と値のペアで、エンドポイントに関連付けるために使用します。

   1. **[Create Endpoint]** (エンドポイントの作成) をクリックして、VPC エンドポイントを作成します。

1.  AWS PrivateLink エンドポイントを作成すると、エンドポイント**の詳細**タブに DNS 名のリストが表示されます。このセクションで作成したこれらの DNS 名のいずれかを使用して、[プライベートホストゾーンを設定できます](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html#connect-iot-core-create-phz-lns)。

1. Amazon S3 エンドポイントを作成します。詳細については、「[Create a VPC endpoint for Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#s3-creating-vpc)」を参照してください。

1. [AWS提供の Greengrass コンポーネント](https://docs.aws.amazon.com/greengrass/v2/developerguide/public-components.html) を使用している場合は、追加のエンドポイントと設定が必要になる場合があります。エンドポイントの要件を表示するには、 AWSが提供するコンポーネントのリストからコンポーネントを選択し、「要件」セクションを参照してください。例えば、[ログマネージャーのコンポーネント要件](log-manager-component.md#log-manager-component-requirements)は、このコンポーネントがエンドポイント `logs.region.amazonaws.com` へのアウトバウンドリクエストを実行できる必要があることを示します。

   独自のコンポーネントを使用している場合は、依存関係を確認し、追加のテストを実行して、追加のエンドポイントが必要かどうかを判断する必要がある場合があります。

1. Greengrass nucleus 設定では、`greengrassDataPlaneEndpoint` を **iotdata** に設定する必要があります。詳細については、[Greengrass nucleus 設定](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)を参照してください。

1. `us-east-1` リージョンにいる場合は、Greengrass nucleus の設定で設定パラメータ `s3EndpointType` を **REGIONAL** に設定します。この機能は、Greengrass nucleus バージョン 2.11.3 以降で使用できます。

**Example 例: コンポーネントの設定**  

```
{
"aws.greengrass.Nucleus": {
   "configuration": {
      "awsRegion": "us-east-1",
      "iotCredEndpoint": "xxxxxx.credentials.iot.region.amazonaws.com",
      "iotDataEndpoint": "xxxxxx-ats.iot.region.amazonaws.com",
      "greengrassDataPlaneEndpoint": "iotdata",
      "s3EndpointType": "REGIONAL"
      ...
     }
   }
}
```

次の表は、対応するカスタムプライベート DNS エイリアスに関する情報を示しています。


| サービス | VPC エンドポイントサービス名 | VPC エンドポイントタイプ | カスタムプライベート DNS エイリアス | 注意事項 | 
| --- | --- | --- | --- | --- | 
|  AWS IoT data  | `com.amazonaws.region.iot.data` | インターフェイス |  `prefix-ats.iot.region.amazonaws.com`  |  プライベート DNS レコードは、アカウントの AWS IoT data エンドポイント と一致する必要があります`aws iot describe–endpoint ––endpoint–type iot:Data-ATS`。  | 
| AWS IoT 認証情報 | `com.amazonaws.region.iot.credentials` | インターフェイス | `prefix.credentials.iot.region.amazonaws.com` | プライベート DNS AWS IoT レコードは、アカウントの認証情報エンドポイント と一致する必要があります`aws iot describe–endpoint ––endpoint–type iot:CredentialProvider`。 | 
| Amazon S3 | `com.amazonaws.region.s3` | インターフェイス |  | DNS レコードが自動的に作成されます。 | 

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

このトピックには、 のセキュリティのベストプラクティスが含まれています AWS IoT Greengrass。

## 最小限のアクセス許可を付与する
<a name="least-privilege"></a>

コンポーネントに対する最小特権の原則に従うため、コンポーネントを非特権ユーザーとして実行します。どうしても必要な場合を除いて、コンポーネントはルートとして実行しないでください。

IAM ロールの最小アクセス許可セットを使用します。IAM ポリシーの `Action` プロパティおよび `Resource` プロパティに対する `*` ワイルドカードの使用を制限します。代わりに、可能な場合はアクションとリソースの有限セットを宣言します。最小特権およびその他のポリシーのベストプラクティスの詳細については、「[ポリシーに関するベストプラクティス](security_iam_id-based-policy-examples.md#security_iam_service-with-iam-policy-best-practices)」を参照してください。

最小特権のベストプラクティスは、Greengrass コアにアタッチする AWS IoT ポリシーにも適用されます。

## Greengrass コンポーネントで認証情報をハードコードしない
<a name="no-hardcoded-credentials"></a>

ユーザー定義の Greengrass コンポーネントで認証情報をハードコードしないでください。認証情報をより適切に保護するには:
+  AWS サービスとやり取りするには、[Greengrass コアデバイスサービスロール](device-service-role.md)で特定のアクションとリソースのアクセス許可を定義します。
+ [[secret manager component]](secret-manager-component.md) (シークレットマネージャーコンポーネント)を使用して認証情報を保存します。または、関数が AWS SDK を使用している場合は、デフォルトの認証情報プロバイダーチェーンの認証情報を使用します。

## 機密情報を記録しない
<a name="protect-pii"></a>

認証情報やその他の個人を特定できる情報 (PII) のログを記録しないようにしてください。コアデバイスのローカルログへのアクセスにはルートアクセス許可が必要であり、CloudWatch Logs へのアクセスには IAM のアクセス許可が必要ですが、次の防止策を実施することをお勧めします。
+ MQTT トピックパスに機密情報を使用しないでください。
+  AWS IoT Core レジストリのデバイス (モノ) 名、種類、属性に機密情報を使用しないでください。
+ ユーザー定義の Greengrass コンポーネントまたは Lambda 関数に機密情報を記録しないでください。
+ Greengrass リソースの名前と ID に機密情報を使用しないでください。
  + コアデバイス
  + コンポーネント
  + デプロイ
  + Loggers

## デバイスのクロックを同期させる
<a name="device-clock"></a>

デバイスの時刻を正確に保つことが重要です。X.509 証明書には有効期限の日時があります。デバイスのクロックは、サーバー証明書が現在も有効であることを確認するために使用されます。時間の経過とともにデバイスのクロックがドリフトしたり、バッテリが放電したりする可能性があります。

詳細については、「AWS IoT Core デベロッパーガイド」の「[[Keep your device's clock in sync]](https://docs.aws.amazon.com/iot/latest/developerguide/security-best-practices.html#device-clock) (デバイスのクロックを同期させる)」ベストプラクティスを参照してください。

## 暗号スイートの推奨事項
<a name="cipher-suites"></a>

Greengrass はデフォルトで、デバイスで使用可能な最新の TLS Cipher Suites を選択します。デバイス上のレガシー暗号スイートの使用を無効にすることを検討してください。たとえば、CBC 暗号スイートなどです。

詳細については、「[Java 暗号化設定](https://www.java.com/configure_crypto.html)」を参照してください。

## 関連情報
<a name="security-best-practices-see-also"></a>
+ 「*AWS IoT デベロッパーガイド*」の「[Security best practices in AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/security-best-practices.html)」
+ * AWS 公式ブログのモノのインターネット*に関する[産業用 IoT ソリューションの 10 のセキュリティゴールデンルール](https://aws.amazon.com/blogs/iot/ten-security-golden-rules-for-industrial-iot-solutions/) 