AWS IoT Greengrass セキュリティの概要 - AWS IoT Greengrass

AWS IoT Greengrass バージョン 1 のドキュメントを表示しています。AWS IoT Greengrass バージョン 2 は AWS IoT Greengrass の最新メジャーバージョンです。AWS IoT Greengrass バージョン 2 の使用の詳細についてはAWS IoT Greengrass V2 開発者ガイドを参照してください

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

AWS IoT Greengrass セキュリティの概要

AWS IoT Greengrass は、X.509 証明書、AWS IoT のポリシー、IAM のポリシーとロールを使用して、ローカル Greengrass 環境のデバイスで実行されるアプリケーションを保護します。

次の図は、AWS IoT Greengrass セキュリティモデルのコンポーネントを示しています。

A - Greengrass サービスロール

AWS IoT Core、AWS Lambda、および AWS のその他のサービスの AWS リソースへのアクセス時に AWS IoT Greengrass が引き受ける、お客様が作成した IAM ロール。詳細については、Greengrass サービスロール を参照してください。

B - コアデバイス証明書

AWS IoT Core および AWS IoT Greengrass を使用して Greengrass コアを認証するために使用される X.509 証明書。詳細については、AWS IoT Greengrass のデバイス認証と認可 を参照してください。

C - デバイス証明書

AWS IoT Core および AWS IoT Greengrass を使用して Greengrass (接続済み) デバイスを認証するために使用される X.509 証明書。詳細については、AWS IoT Greengrass のデバイス認証と認可 を参照してください。

D - グループロール

Greengrass コアから AWS のサービスを呼び出すときに AWS IoT Greengrass が引き受ける、お客様が作成した IAM ロール。

このロールを使用して、AWS のサービス (DynamoDB など) にアクセスするためにユーザー定義の Lambda 関数とコネクタが必要とするアクセス許可を指定します。また、AWS IoT Greengrass が、ストリームマネージャーのストリームを AWS のサービスにエクスポートし、CloudWatch Logs に書き込めるようにします。詳細については、Greengrass グループのロール を参照してください。

注記

AWS IoT Greengrass は、AWS Lambda で指定された Lambda 実行ロールを、Lambda 関数のクラウドバージョンには使用しません。

E - MQTT サーバー証明書

Greengrass コアデバイスと Greengrass グループ内の接続されたデバイスとの間の Transport Layer Security (TLS) 相互認証に使用される証明書。証明書は、AWS クラウドに保存されているグループ CA 証明書によって署名されます。

デバイス接続のワークフロー

このセクションでは、Greengrass 接続デバイスが AWS IoT Greengrass サービスおよび Greengrass コアデバイスに接続される方法について説明します。Greengrass 接続デバイスは、コアデバイスと同じ Greengrass グループに属する登録済み AWS IoT Core デバイスです。

  • Greengrass コアデバイスは、デバイス証明書、プライベートキー、および AWS IoT Core ルート CA 証明書を使用して AWS IoT Greengrass サービスに接続します。コアデバイスでは、設定ファイル 内の crypto オブジェクトによって、これらの項目のファイルパスが指定されます。

  • Greengrass コアデバイスは、AWS IoT Greengrass サービスからグループメンバーシップ情報をダウンロードします。

  • Greengrass コアデバイスに対してデプロイが行われた場合に、Device Certificate Manager (DCM) は Greengrass コアデバイスに対してローカルサーバー証明書管理を行います。

  • 接続されているデバイスは、 AWS IoT Greengrass デバイス証明書、秘密キー、 AWS IoT Core root CA証明書。AWS IoT Core デバイスは、接続後に Greengrass Discovery Service を使用して Greengrass コアデバイスの IP アドレスを見つけます。また、デバイスはグループ CA 証明書をダウンロードします。この証明書は、Greengrass コアデバイスとの TLS 相互認証に使用されます。

  • 接続デバイスは Greengrass コアデバイスへの接続を試み、そのデバイス証明書とクライアント ID を渡します。クライアント ID がデバイスのモノ名と一致し、証明書が有効である (その Greengrass グループに所属する) 場合、接続が実行されます。それ以外の場合は、接続は終了します。

[ AWS IoT 接続されたデバイスのポリシーは、 greengrass:Discover デバイスがコアの接続性情報を検出できるようにする許可。このポリシーステートメントの詳細については、「ディスカバリ承認」を参照してください。

AWS IoT Greengrass セキュリティの設定

Greengrass アプリケーションのセキュリティを設定するには

  1. Greengrass コアデバイスの AWS IoT Core モノを作成します。

  2. Greengrass コアデバイスのキーペアとデバイス証明書を生成します。

  3. AWS IoT ポリシーを作成してデバイス証明書にアタッチします。証明書とポリシーにより、Greengrass コアデバイスは AWS IoT Core および AWS IoT Greengrass サービスにアクセスできます。詳細については、コアデバイスの最小限の AWS IoT ポリシー を参照してください。

    注記

    コアデバイスのポリシーでのモノのポリシー変数iot:Connection.Thing.* (AWS IoT) の使用はサポートされていません。コアは同じデバイス証明書を使用して に複数の接続を行いますAWS IoT Coreが、接続のクライアント ID はコアのモノ名と完全に一致するとは限りません。

  4. Greengrass サービスロールを作成します。この IAM ロールでは、ユーザーに代わって AWS の他のサービスのリソースにアクセスすることを AWS IoT Greengrass に許可します。これにより、AWS IoT Greengrass は AWS Lambda 関数を取得したり、デバイスシャドウを管理するなど、重要なタスクを実行できます。

    AWS リージョン間で同じサービスロールを使用できますが、AWS IoT Greengrass を使用するすべての AWS リージョンでお客様の AWS アカウントに関連付けられている必要があります。

  5. (オプション) Greengrass グループロールを作成します。この IAM ロールは、Greengrass コアで実行されている Lambda 関数とコネクタに対して、AWS のサービスを呼び出すためのアクセス許可を付与します。たとえば、Kinesis Firehose コネクタ には、Amazon Kinesis Data Firehose 配信システムにレコードを書き込むアクセス許可が必要です。

    Greengrass グループにアタッチできるロールは 1 つだけです。

  6. Greengrass コアに接続するデバイスごとに、AWS IoT Core モノを作成します。

    注記

    既存の AWS IoT Core モノと証明書を使用することもできます。

  7. Greengrass コアに接続するデバイスごとに、デバイス証明書、キーペア、および AWS IoT ポリシーを作成します。

AWS IoT Greengrass Core セキュリティプリンシパル

Greengrass コアは次のセキュリティプリンシパルを使用します: AWS IoT クライアント、ローカル MQTT サーバー、ローカルシークレットマネージャー。上述のプリンシパルの設定は、config.json 設定ファイルの crypto オブジェクトに格納されます。詳細については、AWS IoT Greengrass Core 設定ファイル を参照してください。

この設定には、認証および暗号化の主要なコンポーネントが使用するプライベートキーへのパスが含まれています。AWS IoT Greengrass では、ハードウェアベースあるいはファイルシステムベース (デフォルト) の 2 種類のプライベートキーストレージがサポートされています。ハードウェアセキュリティモジュールでキーを保存する詳細については、「ハードウェアセキュリティ統合」を参照してください。

AWS IoT クライアント

AWS IoT クライアント (IoT クライアント) は、Greengrass コアと AWS IoT Core 間のインターネットを介した通信を管理します。AWS IoT Greengrass は、この通信に TLS 接続を確立するときの相互認証にパブリックおよびプライベートキーで X.509 証明書を使用します。詳細については、以下を参照してください。 X.509証明書および AWS IoT CoreAWS IoT Core 開発者ガイド.

[ IoT クライアントは、RSAおよびECの証明書とキーをサポートします。証明書とプライベートキーのパスは、config.jsonIoTCertificate プリンシパルで指定されています。

MQTT サーバー

ローカルの MQTT サーバーは、Greengrass コアとグループ内の他の Greengrass デバイス間のローカルネットワークを介した通信を管理します。AWS IoT Greengrass は、この通信に TSL 接続を確立するときにパブリックおよびプライベートキーで X.509 証明書を使用します。

デフォルトでは、AWS IoT Greengrass は RSA プライベートキーを自動的に生成します。別の秘密キーを使用するようにコアを構成するには、 MQTTServerCertificate 元本 config.json. あなたは、顧客が提供するキーを回転させる責任があります。

プライベートキーサポート
RSA キー EC キー
キーのタイプ サポート対象 サポート対象
キーのパラメータ 最小 2048 ビット長 NIST P-256 または NIST P-384 curve
ディスク形式 PKCS#1、PKCS#8 SECG1、PKCS#8
最小 GGC バージョン
  • デフォルトのRSAキーを使用: 1.0

  • RSAキーを指定します。1.7

  • EC キーを指定します。1.9

プライベートキーの設定は、関連するプロセスを決定します。Greengrass コアでサーバーとしてサポートされる暗号化スイートの一覧については、「TLS 暗号スイートのサポート」を参照してください。

プライベートキーが指定されていない場合 (デフォルト)
  • AWS IoT Greengrass はローテーション設定に基づいてキーをローテーションします。

  • コアは、証明書を生成する RSA キーを生成します。

  • MQTT サーバー証明書には、RSA パブリックキーおよび SHA-256 RSA 署名があります。

RSA プライベートキーが指定されている場合 (GGC v1.7 or later が必要)
  • キーのローテーションはお客様が行います。

  • コアは指定されたキーを使用して証明書を生成します。

  • RSA キーには最小の長さで 2048 ビットの必要があります。

  • MQTT サーバー証明書には、RSA パブリックキーおよび SHA-256 RSA 署名があります。

EC プライベートキーが指定されている場合 (GGC v1.9 or later が必要)
  • キーのローテーションはお客様が行います。

  • コアは指定されたキーを使用して証明書を生成します。

  • EC プライベートキーは、NIST P-256 または NIST P-384 curve を使用する必要があります。

  • MQTT サーバー証明書には、EC パブリックキーと SHA-256 RSA 署名があります。

    コアが提供する MQTT サーバー証明書には、キーのタイプに関係なく、SHA-256 RSA 署名があります。このため、クライアントはコアと安全な接続を確立するために、SHA-256 RSA 証明書の検証をサポートしている必要があります。

シークレットマネージャー

ローカルのシークレットマネージャーは、AWS Secrets Manager で作成したシークレットのローカルコピーを安全に管理します。ここでは、プライベートキーを使用して、シークレットを暗号化するために使用されるデータキーを保護します。詳細については、AWS IoT Greengrass Core にシークレットをデプロイする を参照してください。

デフォルトでは、 IoT クライアント秘密キーが使用されますが、 SecretsManager 元本 config.json. RSAキー タイプのみがサポートされています。詳細については、シークレット暗号化用のプライベートキーを指定する を参照してください。

注記

現在、AWS IoT Greengrass がサポートしているのは PKCS#1 v1.5 パディングメカニズムのみです。このメカニズムでは、ハードウェアベースのプライベートキーを使用するときにローカルシークレットの暗号化と復号化を行います。ベンダーが提供する手順に従って手動でハードウェアベースのプライベートキーを生成する場合は、必ず PKCS#1 v1.5 を選択してください。AWS IoT Greengrass は OAEP (Optimal Asymmetric Encryption Padding) をサポートしていません。

プライベートキーサポート
RSA キー EC キー
キーのタイプ サポート対象 サポート外
キーのパラメータ 最小 2048 ビット長 該当しません
ディスク形式 PKCS#1、PKCS#8 該当しません
最小 GGC バージョン 1.7 該当しません

MQTT メッセージングワークフローにおけるマネージドサブスクリプション

AWS IoT Greengrass はサブスクリプションテーブルを使用して、Greengrass グループ内のデバイス、関数、およびコネクタ間、または AWS IoT Core あるいはローカルシャドウサービスと MQTT メッセージを交換する方法を定義します。各サブスクリプションは、どのメッセージが送信あるいは受信されるかについて、送信元、送信先、MQTT トピック (またはサブジェクト) を指定します。AWS IoT Greengrass では、対応するサブスクリプションが定義されている場合のみ、送信元から送信先にメッセージを送信することが許可されます。

サブスクリプションは 1 方向のメッセージフローのみを定義します。2 方向のメッセージ交換をサポートするには、方向ごとに 1 つづつ、2 つのサブスクリプションを作成する必要があります。

TLS 暗号スイートのサポート

AWS IoT Greengrass は、AWS IoT Core トランスポートセキュリティモデルを使用し、TLS 暗号スイートによりクラウドとの通信を暗号化します。さらに、AWS IoT Greengrass データは保管時には (クラウド上で) 暗号化されます。詳細情報については、 AWS IoT Core トランスポート セキュリティおよびサポートされている暗号スイートについては、以下を参照してください。 輸送のセキュリティAWS IoT Core 開発者ガイド.

ローカルネットワーク通信向けにサポートされる暗号化スイート

AWS IoT Core とは異なり、AWS IoT Greengrass コア では証明書署名アルゴリズムに以下のローカルネットワーク TLS 暗号スイートがサポートされています。プライベートキーがファイルシステムに保存されている場合、これらの暗号化スイートはすべてサポートされます。サブセットは、コアがハードウェアセキュリティモジュール (HSM) を使用するように設定されている場合にサポートされます。詳細については、「AWS IoT Greengrass Core セキュリティプリンシパル」および「ハードウェアセキュリティ統合」を参照してください。また、このテーブルにはサポートに必要な AWS IoT Greengrass Core ソフトウェアの最小バージョンが含まれています。

暗号 HSM のサポート 最小 GGC バージョン
TLSv12. TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA サポート対象 1.0
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA サポート対象 1.0
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 サポート対象 1.0
TLS_RSA_WITH_AES_128_CBC_SHA サポート外 1.0
TLS_RSA_WITH_AES_128_GCM_SHA256 サポート外 1.0
TLS_RSA_WITH_AES_256_CBC_SHA サポート外 1.0
TLS_RSA_WITH_AES_256_GCM_SHA384 サポート外 1.0
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 サポート対象 1.9
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 サポート対象 1.9
TLSv11. TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA サポート対象 1.0
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA サポート対象 1.0
TLS_RSA_WITH_AES_128_CBC_SHA サポート外 1.0
TLS_RSA_WITH_AES_256_CBC_SHA サポート外 1.0
TLSv10. TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA サポート対象 1.0
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA サポート対象 1.0
TLS_RSA_WITH_AES_128_CBC_SHA サポート外 1.0
TLS_RSA_WITH_AES_256_CBC_SHA サポート外 1.0