Amazon Web Services ブログ
プライベートネットワークを使用して IoT デバイスを AWS に安全に接続するための共通アーキテクチャパターン
はじめに
収益の拡大、業務の効率化、コストの削減を目的に、モノのインターネット (IoT) ソリューションを採用する企業経営者が増えています。産業用機械であれ自律走行車であれ、自社の機器をクラウドに接続しながらセキュリティと安全性を配慮するのは難しいことです。AWS はインダストリアルIoTソリューションにおける10のセキュリティゴールデンルールの中で、製造環境からクラウドへのセキュアな接続と、オンプレミスのリソースへのセキュアなリモートアクセスを確立することを推奨しています。同様に、コネクテッド・モビリティ・ソリューションでは、一般的にプライベート・セルラー・ネットワークを使用して車両をクラウド・サービスに接続しています。
このブログでは、プライベートネットワークを使用して IoT デバイスを安全かつセキュアに AWS に接続するための一般的なアーキテクチャパターンとベストプラクティスについて説明します。AWS IoT Core 認証プロバイダ の Virtual Private Cloud (VPC) エンドポイント機能を利用することで、AWS IoT Greengrass を搭載したデバイスを、パブリックなインターネットアクセスなしに VPC 内で動作させることが可能になりました。さらに、これらのデバイスは AWS PrivateLink を使用して Amazon Elastic Container Registry (Amazon ECR)、AWS Secrets Manager、Amazon CloudWatch logs などの他の AWS サービスにアクセスできます。このアプローチは、プライベート接続を確立しインターネットからネットワークトラフィックを分離することで、接続ソリューションの安全性をより柔軟に確保し、また組織のセキュリティベストプラクティスに準拠するのに役立ちます。
ソリューション概要
このソリューションでは、Amazon VPC 内のプライベートエンドポイントを使用して IoT デバイスを AWS IoT Core と AWS IoT Greengrass に接続できます。プライベートエンドポイントは、仮想ネットワークアドレス空間からのプライベート IP アドレスを使用して、デバイスを VPC 内の AWS IoT Core データエンドポイントと AWS IoT Greengrass にプライベート接続します。 インターフェイス VPC エンドポイントは、インターネットにデータを晒すことなく VPC と AWS サービス間の接続を確立するために使用できる AWS サービスである AWS PrivateLink によって提供されるサービスに接続するために使用されます。接続されたデバイスと AWS IoT Core および AWS IoT Greengrass 間のネットワークトラフィックは、AWS site-to-site VPN または AWS Direct Connect を使用し、パブリックインターネットへの接続を回避します。ソリューションアーキテクチャとソリューションコンポーネントについて説明します。
シナリオ1:IoT デバイスをプライベートネットワークを使って AWS IoT Core に接続する
ソリューションの説明
この手順には以下のステップが含まれています:
- 工場にあるアセットは「AWS IoT データエンドポイント」のドメイン名を解決する必要があります。AWS IoT デバイスデータエンドポイントは、IoT デバイスの通信ニーズに合わせて設計されたパブリッシュ/サブスクライブプロトコルをサポートしています。事前に構成されたドメインネームシステム (DNS) リゾルバにクエリを送信します。
- 企業データセンターの DNS リゾルバ には「AWS IoTデータエンドポイント」DNSドメインのすべての DNS クエリをAmazon Route 53 Resolver インバウンド エンドポイントに向ける条件付きフォワーダルールが設定されています。
- 転送されたクエリは、AWS Direct Connect または AWS Site-to-Site VPN を介して Amazon Route 53 Resolver インバウンドエンドポイントに到着します。すべてのインバウンド DNS クエリは、リゾルバに向かう途中でこの VPC を通過します。信頼性を高めるため、リゾルバでは DNS クエリに 2 つの IP アドレスを指定する必要があります。高可用性を実現するために、2つの異なるアベイラビリティゾーンに IP アドレスを指定することを推奨します。
- Amazon Route 53 Resolver インバウンドエンドポイントは、VPC 内の VPC + 2リゾルバにクエリを送信します。
- Amazon Route 53 Resolver は、AWS IoT Core データドメイン名の DNS クエリを解決します。
- VPC に関連付けられたプライベートホストゾーンは、AWS IoT Core データエンドポイントの DNS レコードを保持するため、Amazon Route 53 Resolver はクエリを解決できます。
- AWS IoT Core データエンドポイント宛てのトラフィックは、DNS を使用してエンドポイントのネットワークインターフェイスのプライベート IP アドレスに解決され、VPC エンドポイントと AWS IoT Core 間の接続を使用して AWS サービスにプライベートで送信されます。
セキュリティーを考慮するため、
- VPC インターフェイスのエンドポイントにセキュリティグループとネットワーク ACL を設定します
- VPC 条件コンテキストキーを使用して、VPC エンドポイントを介した AWS IoT Core データへのアクセスを制御します
以下の表は、AWS IoT データ VPC エンドポイントに必要な詳細を示しています。詳細はドキュメントをご覧ください。
注: インタフェース VPC エンドポイントの作成に関する詳細は、AWS IoT Core とインターフェース VPC エンドポイントの作成と共に参照してください。Amazon Route 53 でプライベートホストゾーンを作成する詳細については、ドキュメントを参照してください。
シナリオ 2: AWS IoT Greengrass を搭載したデバイスが AWS IoT 認証情報 VPC エンドポイントを使用して AWS IoT Core に接続する場合
ソリューションの説明
この手順には以下のステップが含まれています:
- AWS IoT Greengrass クライアントデバイスであるセンサーは、MQTT を介して AWS IoT Greengrass コアデバイスと接続し、通信します。エッジの AWS IoT Greengrass コアソフトウェアは「AWS IoT データエンドポイント」、「AWS IoT 認証情報プロバイダ」および「Amazon Simple Storage Service (Amazon S3)」ドメイン名を解決する必要があります。事前に設定された DNS リゾルバにクエリを送信します。ユースケースに基づき、追加のエンドポイントが必要になる場合があります。
- 企業データセンターの DNS リゾルバには「AWS IoT データエンドポイント」、「AWS IoT 認証情報プロバイダ」および「Amazon S3」 の DNS ドメインに対するすべての DNS クエリを Amazon Route 53 Resolver インバウンドエンドポイントに向ける条件付きフォワーダールールがあります。
- 転送されたクエリは、AWS Direct Connect または AWS Site-to-Site VPN を介して Amazon Route 53 Resolver インバウンド エンドポイントに到達します。すべてのインバウンド DNS クエリは、リゾルバに向かうに途中でこの VPC を通過します。信頼性を高めるため、リゾルバでは DNS クエリに 2 つの IP アドレスを指定する必要があります。高可用性を実現するために、2つの異なるアベイラビリティゾーンに IP アドレスを指定することを推奨します。
- Amazon Route 53 Resolver インバウンドエンドポイントは、VPC 内の VPC + 2リゾルバにクエリを送信します。
- Amazon Route 53 Resolver は、「AWS IoT データエンドポイント」、「AWS IoT 認証情報プロバイダ」および「Amazon S3」の DNS クエリを解決します。
- VPC に関連付けられた プライベートホストゾーンは、Amazon Route 53 Resolver がクエリを解決できるように、「AWS IoT データ」、「AWS IoT 認証情報プロバイダ」および「Amazon S3」 の DNS レコードを保持します。
- 「AWS IoT データ」、「AWS IoT 認証情報プロバイダ」および「Amazon S3」エンドポイント宛てのトラフィックは、DNS を使用してエンドポイントのネットワークインターフェースのプライベート IP アドレスに解決され、VPC エンドポイントと AWS IoT Core 間の接続を使用して AWS サービスにプライベートに送信されます。
注:
- AWS IoT Greengrass Core ソフトウェアがコンポーネントをデプロイする際、AWS からコンポーネントのアーティファクトをダウンロードします。Amazon S3 の VPC エンドポイントを設定することにより、Greengrass Core デバイスがこれらのアーティファクトに安全かつ効率的にアクセスできるようになります。
- AWS IoT Greengrass nucleus の設定では、greengrassDataPlaneEndpoint を iotdata に設定する必要があります。詳細は Greengrass nucleus configuration を参照してください。この設定は、Greengrass nucleus が AWS IoT Greengrass サービスと通信するために使用するエンドポイントを指定します。iotdata に設定することで、Greengrass Core は AWS IoT Greengrass と通信するために AWS IoT データプレーンエンドポイントを使用します。この設定は、コアデバイスが AWS IoT Core と効率的に通信し、運用やデプロイに必要なデータを送受信できるようにするために重要です。
次の表は、対応するカスタム・プライベート DNS エイリアスに関する情報です。詳細については、ドキュメントを参照してください。
AWS IoT データエンドポイント (com.amazonaws.region.iot.data) は、AWS IoT Greengrass サービスのコンポーネント、デプロイメント、コアデバイスを管理するために使用されます。
このエンドポイントでの認証と認可は、「AWS IoT Greengrass のデバイス認証と認可」で説明されているように、X.509 証明書を使用して行われます。
IoT のユースケースと使用する機能によっては、追加のエンドポイントが必要になる場合があります。たとえば、AWS が提供する AWS IoT Greengrass コンポーネントの場合、コンポーネントが機能するために必要なサービスを理解するためにドキュメントを参照してください。よくある例をいくつか挙げます:
AWS IoT 認証情報プロバイダ VPC エンドポイント (com.amazonaws.<region>.iot.credentials) は、Amazon Simple Storage Service (Amazon S3) や Amazon Elastic Container Registry (Amazon ECR) のような、X.509 認証と認可をサポートしていない他の AWS クラウド サービスと通信するために使用されます。これらの場合、AWS IoT Core または AWS IoT Greengrass コンポーネントは、X.509 証明書を使用して AWS IoT 認証情報プロバイダのエンドポイントを呼び出し、認証と承認を取得します。エンドポイントは、クライアントが X.509 をサポートしていないサービスの呼び出しに使用する一時的なセキュリティ トークンを発行します。 Amazon S3 と Amazon ECR サービスへの呼び出しは、AWS IoT Greengrass コンポーネントのデプロイ時に必要です。また、AWS IoT Greengrass コンポーネントは、AWS SDK を使用して X.509 証明書の認証および認可メカニズムをサポートしていない他のクラウド サービスと通信する場合にもセキュリティトークンを必要とします。独自のコンポーネントを使用している場合は、依存関係を確認し、追加のエンドポイントが必要かどうかを判断するために追加のテストを実行する必要があるかもしれません。
VPC エンドポイント経由での AWS IoT Core へのアクセス制御
VPC 条件コンテキストキーを使用することで、AWS IoT Core へのデバイスアクセスを VPC エンドポイント経由のみに許可するように制限できます。SourceVpc キーを使用して、ポリシーで指定した VPC からのリクエストかどうかを確認できます。SourceVpce キーを使用して、リクエストの VPC エンドポイント識別子とポリシーで指定したエンドポイント ID を比較し、特定の VPC エンドポイントへのアクセスを制限します。VPCSourceIp を使用すると、リクエストの送信元 IP アドレスをポリシーで指定した IP アドレスと比較できます。
注: このポリシーはパブリック IoT データ・エンドポイントへの接続試行を拒否します
AWS IoT Greengrass 用の VPC エンドポイントポリシーの作成
CreateDeployment や ListEffectiveDeployments など、AWS IoT Greengrass のコントロールプレーン操作用のインターフェイス VPC エンドポイントを作成する場合、VPC エンドポイントポリシーを使用して、AWS IoT Greengrass のコントロールプレーン操作へのアクセスを制御することができ、セキュリティ体制の改善に役立ちます。ポリシーは以下の情報を指定します:
- アクションを実行できるプリンシパル
- プリンシパルが実行できるアクション
- プリンシパルがアクションを実行できるリソース
以下は、AWS IoT Greengrass のエンドポイントポリシーの例です。エンドポイントにアタッチすると、このポリシーは、すべてのリソースのすべてのプリンシパルに、リストされた AWS IoT Greengrass アクションへのアクセスを許可します。
{
"Statement": [
{
"Principal": "*",
"Effect": "Allow",
"Action": [
"greengrass:CreateDeployment",
"greengrass:ListEffectiveDeployments"
],
"Resource": "*"
}
]
}
AWS IoT data VPC エンドポイントと AWS IoT Core 認証情報プロバイダエンドポイントの制限事項
このブログを書いている時点では、IoT データ VPC エンドポイントと 認証情報プロバイダエンドポイントにはいくつかの制限があります。例えば、
- IoT データ VPC エンドポイントの MQTT ベースのキープアライブ期間は230秒に制限され、各 VPC エンドポイントは最大 10 万台の同時接続デバイスをサポート
- 両方のエンドポイントで許可されるのは IPv4 トラフィックのみ
- どちらのエンドポイントも Amazon Trust Service (ATS) 証明書のみを提供し、VPC エンドポイントポリシーはサポートされない
ただし、これら制限はありますが AWS IoT Core データエンドポイントと AWS IoT Core 認証情報プロバイダ機能は、プライベートネットワークを使用して多数のデバイスを AWS に接続するための安全な方法を提供します。機能と制約に関する最新情報については、AWS のドキュメントを確認してください。
まとめ
デバイスは様々な環境、場所、シナリオでデプロイされるため、IoT ソリューションを実装する際には柔軟性とセキュリティが必要です。このブログでは、プライベートネットワークを使用して IoT 実装されたデバイスと AWS IoT Greengrass を搭載したデバイスを AWS IoT Core と他の AWS サービスに安全に接続するためのアーキテクチャとベストプラクティスについて説明しました。このソリューションは、接続されたデバイスとネットワークをインターネットから分離し、プライベートネットワークを使用して AWS にデータを送信する機能を提供します。このアプローチは、プライベートネットワーク上で安全な通信を確立し、パブリックネットワークにおけるセキュリティ事象から AWS リソースを保護するのに役立ち、組織のセキュリティベストプラクティスと要件に沿った運用を可能にします。詳細については、AWS IoT でのセキュリティをご覧ください。
リソース:
- インターフェイスVPCエンドポイントでAWS IoT Coreを使用する
https://docs.thinkwithwp.com/iot/latest/developerguide/IoTCore-VPC.html - AWS Direct Connect
https://docs.thinkwithwp.com/directconnect/latest/UserGuide/Welcome.html - VPC エンドポイントを経由しての AWS IoT Core へのアクセス制御
https://docs.thinkwithwp.com/iot/latest/developerguide/IoTCore-VPC.html#Control-VPC-access - VPCとネットワーク間のDNSクエリの解決
https://docs.thinkwithwp.com/Route53/latest/DeveloperGuide/resolver.html - Back to Basics: Understanding IOT Core VPC Endpoint Patterns
https://www.youtube.com/watch?v=r0NzJjMjhyw - AWS IoT Greengrass とインターフェイス VPC エンドポイント (AWS PrivateLink)
https://docs.thinkwithwp.com/greengrass/v2/developerguide/vpc-interface-endpoints.html
この記事は Ryan Dsouza によって書かれた Common architecture patterns to securely connect IoT devices to AWS using private networks の日本語訳です。この記事は SA の渡邉が翻訳しました。