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

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

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

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 クライアントによって使用されます。

  • の MQTT サーバー証明書。/greengrass-root/ggc/var/state/server 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 証明書を使用することをお勧めします。詳細については、https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html#server-authentication-certs 開発者ガイドの「AWS IoT Coreサーバー認証用の CA 証明書」を参照してください。

注記

ルート CA 証明書タイプは、エンドポイントと一致する必要があります。ATS ルート CA 証明書を ATS エンドポイントで使用するか (推奨)、VeriSign ルート CA 証明書をレガシーエンドポイントで使用します。レガシーエンドポイントは、一部の AWS リージョンでのみサポートされています。詳細については、「サービスエンドポイントはルート 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 サポートにお問い合わせください。

AWS IoT コンソール では、グループの [Settings (設定)] ページで証明書を管理できます。API では、AWS IoT GreengrassUpdateGroupCertificateConfiguration アクションを使用できます。

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

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

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

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

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

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

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

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

 

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

Greengrass コアアクション

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

greengrass:AssumeRoleForGroup

Greengrass コアデバイスが、Token Exchange Service (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 トピックとトピックのフィルターが一覧表示されます。Greengrass グループの AWS IoT Core、Lambda 関数、コネクタ、デバイス間のメッセージ交換をサポートするには、許可するトピックとトピックのフィルターを指定します。詳細については、https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html 開発者ガイドの「AWS IoT Coreパブリッシュ/サブスクライブポリシーの例」を参照してください。

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

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

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:aws:iot:リージョン:account-id:topic/$aws/things/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:リージョン:account-id:topicfilter/$aws/things/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:リージョン:account-id:thing/core-name-*" ] }, { "Effect": "Allow", "Action": [ "greengrass:AssumeRoleForGroup", "greengrass:CreateCertificate" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetDeployment" ], "Resource": [ "arn:aws:greengrass:リージョン:account-id:/greengrass/groups/group-id/deployments/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetDeploymentArtifacts" ], "Resource": [ "arn:aws:greengrass:リージョン:account-id:/greengrass/groups/group-id/deployments/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:UpdateCoreDeploymentStatus" ], "Resource": [ "arn:aws:greengrass:リージョン: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:iot:リージョン:account-id:thing/core-name" ] } ] }
注記

接続された 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:リージョン:account-id:thing/device-name" ] }

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

 

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

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

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

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

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

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