AWS IoT Greengrass のデバイス認証と認可 - AWS IoT Greengrass

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

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

AWS IoT Greengrass のデバイス認証と認可

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設定情報、Lambda 関数、コネクタ、マネージド型サブスクリプションをコアデバイスにデプロイします。

  • Greengrass コアに接続されたデバイス これらの接続されたデバイス (Greengrass デバイスとも呼ばれます) は、証明書とポリシーを使用して、 AWS IoT Core および AWS IoT Greengrass サービスに接続します。これにより、デバイスは AWS IoT Greengrass Discovery Service を使用して、コアデバイスを見つけ接続できます。Greengrass デバイスは、同じ証明書を使用して AWS IoT Core デバイスゲートウェイとコアデバイスに接続します。また、デバイスは、コアデバイスとの相互認証に検出情報を使用します。詳細については、「デバイス接続のワークフロー」および「Greengrass コアを使用したデバイス認証の管理」を参照してください。

X.509 証明書

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

AWS IoT Greengrass 環境では、デバイスは、次の Transport Layer Security (TLS) 接続に対して、パブリックキーとプライベートキーを持つ証明書を使用します。

  • インターネット上で AWS IoT Core および AWS IoT Greengrass に接続する Greengrass コアの AWS IoT クライアントコンポーネント。

  • Greengrass は、インターネット上でコア検出情報を取得するために、AWS IoT Greengrass に接続する Greengrass 接続デバイス。

  • ローカルネットワークを介してグループ内の Greengrass デバイスに接続する Greengrass コアにある MQTT サーバーコンポーネント。

-AWS IoT Greengrassコアデバイスは、証明書を 2 つの場所に保存します。

  • /greengrass-root/certs のコアデバイス証明書。通常、コアデバイス証明書の名前は hash.cert.pem です (たとえば、86c84488a5.cert.pem)。この証明書は、コアが AWS IoT Core および AWS IoT Greengrass サービスに接続するとき、相互認証のために AWS IoT クライアントによって使用されます。

  • /greengrass-root/ggc/var/state/server の MQTT サーバー証明書。MQTT サーバー証明書の名前は server.crt です。この証明書は、ローカル MQTT サーバー (Greengrass コア上) と Greengrass デバイスとの間で相互認証に使用されます。

    注記

    greengrass-root は、デバイスで AWS IoT Greengrass Core ソフトウェアがインストールされているパスを表します。通常、これは /greengrass ディレクトリです。

詳細については、「AWS IoT Greengrass Core セキュリティプリンシパル」を参照してください。

認証機関 (CA) 証明書

コアデバイスおよび Greengrass 接続デバイスは、 AWS IoT Core および AWS IoT Greengrass サービスとの認証に使用されるルート CA 証明書をダウンロードします。Amazon ルート CA 1 など、Amazon Trust Services (ATS) のルート CA 証明書を使用することをお勧めします。詳細については、「」を参照してください。サーバー認証用の CA 証明書() AWS IoT Core 開発者ガイド

注記

ルート CA 証明書タイプは、エンドポイントと一致する必要があります。ATS ルート CA 証明書を ATS エンドポイントで使用するか (推奨)、VeriSign ルート CA 証明書をレガシーエンドポイントで使用します。一部のAmazon Web Services リージョンのみが、レガシーエンドポイントをサポートします。詳細については、「サービスエンドポイントはルート CA 証明書タイプと一致する必要がある」を参照してください。

また、Greengrass 接続デバイスでは、Greengrass グループ CA 証明書もダウンロードされます。これは、相互認証中に Greengrass コアにある MQTT サーバー証明書を検証するために使用されます。詳細については、「デバイス接続のワークフロー」を参照してください。MQTT サーバー証明書のデフォルトの有効期限は 7 日間です。

ローカル MQTT サーバーの証明書ローテーション

Greengrass 接続デバイスは、ローカルの MQTT サーバー証明書を使用して、Greengrass コアデバイスとの相互認証を行います。デフォルトでは、この証明書の有効期間は 7 日です。この制限期間は、セキュリティのベストプラクティスに基づいています。MQTT サーバー証明書は、クラウド内に保存されているグループ CA 証明書によって署名されます。

証明書のローテーションを実行するには、Greengrass 接続デバイスがオンラインになっていて、AWS IoT Greengrass サービスに定期的に直接アクセスできる必要があります。証明書の有効期限が切れると、Greengrass コアデバイスは AWS IoT Greengrass サービスに接続し、新しい証明書の取得を試みます。接続に成功すると、コアデバイスは新しい MQTT サーバー証明書をダウンロードし、ローカル MQTT サービスを再起動します。この時点で、コアに接続されたすべての Greengrass デバイスは切断されます。有効期限が切れた時点でデバイスがオフラインになっていると、代替証明書は送信されません。コアデバイスに接続しようとする新しい試みはすべて拒否されます。既存の接続は影響を受けません。AWS IoT Greengrass サービスへの接続が復元され、新しい MQTT サーバー証明書がダウンロードされるまで、デバイスはコアに接続できません。

必要に応じて、有効期限は、7 ~ 30 日間の任意の値に設定できます。より頻繁にローテーションを行うには、より頻繁なクラウド接続が必要になります。頻繁にローテーションを行わないと、セキュリティ上の問題が発生する可能性があります。証明書の有効期限を 30 日を超える値に設定する場合は、AWS Support。

左AWS IoTコンソールから、証明書を管理するには、グループの設定ページで. AWS IoT Greengrass API では、UpdateGroupCertificateConfiguration アクションを使用できます。

MQTT サーバー証明書の有効期限が切れた場合、証明書の検証はすべて失敗します。デバイスは失敗を検出し、接続を終了できる必要があります。

データプレーンオペレーションの AWS IoT ポリシー

AWS IoT ポリシーを使用して、 AWS IoT Core および AWS IoT Greengrass データプレーンへのアクセスを許可します。 AWS IoT Core データプレーンは、デバイス、ユーザー、およびアプリケーションのオペレーション ( AWS IoT Core への接続やトピックへのサブスクライブなど) で構成されます。AWS IoT Greengrass データプレーンは、デプロイの取得や接続情報の更新など、Greengrass デバイスのオペレーションで構成されます。

アンAWS IoTポリシーは、JSON ドキュメントです。これはIAM ポリシー。これには、次のプロパティを指定する 1 つ以上のポリシーステートメントが含まれます。

  • Effect。 アクセスモード。AllowまたはDeny

  • Action。 ポリシーによって許可または拒否されるアクションのリスト

  • Resource。 アクションが許可または拒否されるリソースのリスト。

AWS IoTポリシーのサポート*をワイルドカード文字として処理し、MQTT ワイルドカード文字 (+および#)をリテラル文字列として返します。の詳細については、「」を参照してください。*ワイルドカードについては、を参照してください。リソース ARN でのワイルドカードの使用()AWS Identity and Access Managementユーザーガイド

詳細については、「」を参照してください。AWS IoTポリシーおよびAWS IoTポリシーアクション() AWS IoT Core 開発者ガイド

注記

AWS IoT Core を使用すると、AWS IoTポリシーを Thing グループに追加して、デバイスグループの権限を定義します。Thing グループポリシーでは、AWS IoT Greengrassデータプレーンオペレーション。Thing にAWS IoT Greengrassデータプレーン操作では、権限をAWS IoTポリシーを Thing の証明書に添付します。

AWS IoT Greengrass ポリシーアクション

Greengrass コアアクション

AWS IoT Greengrass は、Greengrass コアデバイスが AWS IoT ポリシーで使用できる以下のポリシーアクションを定義します。

greengrass:AssumeRoleForGroup

Greengrass コアデバイスがトークン交換サービス (TES) システム Lambda 関数を使用して認証情報を取得するためのアクセス許可 (TES) システム Lambda 関数。取得した認証情報に関連付けられているアクセス許可は、設定されたグループロールにアタッチされたポリシーに基づきます。

このアクセス許可は、Greengrass コアデバイスが認証情報を取得しようとしたときにチェックされます (認証情報がローカルにキャッシュされていないと仮定します)。

greengrass:CreateCertificate

Greengrass コアデバイスが独自のサーバー証明書を作成するためのアクセス許可。

このアクセス許可は、Greengrass コアデバイスが証明書を作成するときにチェックされます。Greengrass コアデバイスは、初回実行時、コアの接続情報が変更されたとき、および指定されたローテーション期間にサーバー証明書を作成しようとします。

greengrass:GetConnectivityInfo

Greengrass コアデバイスが、独自の接続情報を取得するためのアクセス許可。

このアクセス許可は、Greengrass コアデバイスが AWS IoT Core から接続情報を取得しようとしたときにチェックされます。

greengrass:GetDeployment

Greengrass コアデバイスがデプロイを取得するためのアクセス許可。

このアクセス許可は、Greengrass コアデバイスがクラウドからデプロイとデプロイステータスを取得しようとしたときにチェックされます。

greengrass:GetDeploymentArtifacts

グループ情報や Lambda 関数などのデプロイアーティファクトを取得するための Greengrass コアデバイスのアクセス許可。

このアクセス許可は、Greengrass コアデバイスがデプロイを受け取り、デプロイアーティファクトを取得しようとしたときにチェックされます。

greengrass:UpdateConnectivityInfo

Greengrass コアデバイスが IP またはホスト名情報を使用して自身の接続情報を更新するためのアクセス許可。

このアクセス許可は、Greengrass コアデバイスがクラウド内の接続情報を更新しようとしたときにチェックされます。

greengrass:UpdateCoreDeploymentStatus

Greengrass コアデバイスがデプロイの状態を更新するためのアクセス許可。

このアクセス許可は、Greengrass コアデバイスがデプロイを受け取り、デプロイメントステータスを更新しようとしたときにチェックされます。

 

Greengrass デバイスのアクション

AWS IoT Greengrass は、Greengrass デバイスが AWS IoT ポリシーで使用できる次のポリシーアクションを定義します。

greengrass:Discover

Greengrass デバイスが Discovery API を使用してグループのコア接続情報とグループ認証機関を取得するためのアクセス許可。

このアクセス許可は、Greengrass デバイスが TLS 相互認証を使用して Discovery API を呼び出すときにチェックされます。

AWS IoT Greengrass コアデバイスの最小限の AWS IoT ポリシー

次のポリシーの例には、コアデバイスの基本的な Greengrass 機能をサポートするのに必要な最小限のアクションが含まれています。

  • ポリシーには、シャドウステータスに使用されるトピックを含む、コアデバイスがメッセージを発行、サブスクライブし、メッセージを受信できる、MQTT トピックとトピックのフィルターが一覧表示されます。間のメッセージ交換をサポートするには AWS IoT Core 、Lambda 関数、コネクタ、デバイスが Greengrass グループで、許可するトピックとトピックのフィルターーを指定します。詳細については、「」を参照してください。パブリッシュ/サブスクライブポリシーの例() AWS IoT Core 開発者ガイド

  • このポリシーには、 AWS IoT Core でコアデバイスのシャドウを取得、更新、削除することを可能にするセクションが含まれます。Greengrass グループ内で接続されているデバイスのシャドウ同期を可能にするには、Resource リスト内のターゲット Amazon リソースネーム (ARN) を指定します (例: arn:aws:iot:region:account-id:thing/device-name)。

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

  • greengrass:UpdateCoreDeploymentStatus アクセス許可の場合、Resource ARN の最終セグメントは、コアデバイスの URL エンコード ARN です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:region:account-id:client/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-name-*" ] }, { "Effect": "Allow", "Action": [ "greengrass:AssumeRoleForGroup", "greengrass:CreateCertificate" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetDeployment" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/groups/group-id/deployments/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetDeploymentArtifacts" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/groups/group-id/deployments/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:UpdateCoreDeploymentStatus" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/groups/group-id/deployments/*/cores/arn%3Aaws%3Aiot%3Aregion%3Aaccount-id%3Athing%2Fcore-name" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetConnectivityInfo", "greengrass:UpdateConnectivityInfo" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/things/core-name-*/connectivityInfo" ] } ] }
注記

接続された Greengrass デバイスの AWS IoT ポリシーでは通常、iot:Connectiot:Publishiot:Receive、および iot:Subscribe アクションに対して同様のアクセス許可が必要になります。

デバイスが属する Greengrass グループで、コアの接続情報を自動的に検出できるようにするには、接続されたデバイスの AWS IoT ポリシーに greengrass:Discover アクションを含める必要があります。Resource セクションには、Greengrass コアデバイスの ARN ではなく、接続されているデバイスの ARN を指定します。次に例を示します。

{ "Effect": "Allow", "Action": [ "greengrass:Discover" ], "Resource": [ "arn:aws:iot:region:account-id:thing/device-name" ] }

接続されたデバイスの AWS IoT ポリシーでは通常、iot:GetThingShadowiot:UpdateThingShadow、または iot:DeleteThingShadow アクションに対するアクセス許可は必要ありません。これは、接続されたデバイスのシャドウ同期操作が Greengrass コアで処理されるためです。この場合、必ず [] を選択します。ResourceセクションにあるシャドウアクションのAWS IoTポリシーには、接続されたデバイスの ARN が含まれます。

 

左AWS IoTコンソールでは、コアの証明書にアタッチされたポリシーを表示および編集できます。

  1. ナビゲーションペインで、[管理]、[モノ]、コアの順に選択します。

  2. コアの設定ページで、[セキュリティ] を選択します。

  3. [証明書] ページで、証明書を選択します。

  4. 証明書の設定ページで、[ポリシー] を選択し、ポリシーを選択します。

    ポリシーを編集するには、[ポリシードキュメントの編集] を選択します。