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 のセキュリティのベストプラクティスについて説明します。

最小限のアクセス許可の付与

IAM ロールの最小限のアクセス許可セットを使用して、最小権限の原則に従います。IAM ポリシーの Action プロパティおよび Resource プロパティに対する * ワイルドカードの使用を制限します。代わりに、可能な場合はアクションとリソースの有限セットを宣言します。最小権限およびその他のポリシーのベストプラクティスの詳細については、「ポリシーのベストプラクティス」を参照してください。

最小権限のベストプラクティスは、Greengrass コアおよび接続されたデバイスにアタッチする AWS IoT ポリシーにも適用されます。

Lambda 関数で認証情報をハードコードしない

ユーザー定義の Lambda 関数で認証情報をハードコードしないでください。認証情報をより適切に保護するには:

  • AWS のサービスを操作するには、Greengrass グループロールで特定のアクションとリソースに対するアクセス許可を定義します。

  • ローカルシークレット を使用して認証情報を保存します。または、関数が AWS SDK を使用する場合は、デフォルトの認証情報プロバイダチェーンの認証情報を使用します。

機密情報を記録しない

認証情報やその他の個人を特定できる情報 (PII) のログを記録しないようにしてください。コアデバイス上のローカルログへのアクセスにはルート権限が必要で、CloudWatch Logs へのアクセスには IAM アクセス許可が必要ですが、次の安全対策を実装することをお勧めします。

  • MQTT トピックパスに機密情報を使用しないでください。

  • AWS IoT Core レジストリのデバイス (モノ) 名、種類、属性に機密情報を使用しないでください。

  • ユーザー定義 Lambda 関数に機密情報を記録しないでください。

  • Greengrass リソースの名前と ID に機密情報を使用しないでください。

    • コネクタ

    • コア

    • デバイス

    • 関数

    • グループ

    • Loggers

    • リソース (ローカル、Machine Learning、シークレット)

    • サブスクリプション

ターゲットを絞ったサブスクリプションの作成

サブスクリプションは、サービス、デバイス、および Lambda 関数間でメッセージを交換する方法を定義することによって、Greengrass グループの情報フローを制御します。アプリケーションが意図したことだけを実行できるようにするには、サブスクリプションでパブリッシャーが特定のトピックにのみメッセージを送信できるようにし、サブスクライバーがその機能に必要なトピックからのみメッセージを受信するように制限する必要があります。

デバイスのクロックを同期させる

デバイスの時刻を正確に保つことが重要です。X.509 証明書には有効期限の日時があります。デバイスのクロックは、サーバー証明書が現在も有効であることを確認するために使用されます。デバイスのクロックは、時間の経過とともにドリフトしたり、バッテリが放電したりする可能性があります。

詳細については、AWS IoT Core 開発者ガイドの「デバイスのクロックを同期させる」のベストプラクティスを参照してください。

Greengrass コアを使用したデバイス認証の管理

Greengrass デバイスは、FreeRTOS を実行するか、AWS IoT Device SDK または AWS IoT Greengrass 検出 API を使用して、同じ Greengrass グループ内のコアとの接続と認証に使用される検出情報を取得します。 検出情報には、以下が含まれます。

  • デバイスと同じ Greengrass グループに属する Greengrass コアの接続情報。この情報には、コアデバイスの各エンドポイントのホストアドレスとポート番号が含まれます。

  • ローカル MQTT サーバー証明書の署名に使用されるグループ CA 証明書。デバイスは、グループ CA 証明書を使用して、コアによって提示される MQTT サーバー証明書を検証します。

次に、Greengrass コアとの相互認証を管理するための接続されたデバイスのベストプラクティスを示します。これらのプラクティスは、コアデバイスが侵害された場合のリスクを軽減するのに役立ちます。

各接続のローカル MQTT サーバー証明書を検証します。

デバイスは、コアとの接続を確立するたびに、コアによって提示される MQTT サーバー証明書を検証する必要があります。この検証は、コアデバイスと接続デバイス間の相互認証の接続デバイス側です。デバイスは失敗を検出し、接続を終了できる必要があります。

検出情報をハードコードしないでください。

コアが静的 IP アドレスを使用している場合でも、デバイスは検出オペレーションに依存してコア接続情報とグループ CA 証明書を取得する必要があります。デバイスがこの検出情報をハードコードすることはできません。

検出情報を定期的に更新します。

デバイスは定期的に検出を実行して、コア接続情報とグループ CA 証明書を更新する必要があります。コアとの接続を確立する前に、デバイスでこの情報を更新することをお勧めします。検出オペレーションの時間を短くすると、潜在的なエクスポージャー時間が最小限に抑えられるため、デバイスを定期的に切断して再接続して、更新をトリガーすることをお勧めします。

Greengrass コアデバイスの制御が失われた場合に、接続されたデバイスがコアにデータを送信しないようにするには、以下を実行します。

  1. Greengrass グループから Greengrass コアを削除します。

  2. グループ CA 証明書をローテーションします。では、グループの [AWS IoT コンソール設定] ページで CA 証明書を更新できます。API では、AWS IoT GreengrassCreateGroupCertificateAuthority アクションを使用できます。

    また、コアデバイスのハードドライブが盗難にあう危険がある場合は、フルディスク暗号化の使用をお勧めします。

詳細については、「AWS IoT Greengrass のデバイス認証と認可」を参照してください。

以下の資料も参照してください。