目次
はじめに
こんにちは、omkです。
AWS IoTに接続する際は、AWS IoTの接続用のエンドポイントとしてAWSからドメインが発行されていますので通常はそれを利用して接続すると思います。
今回はAWS IoTのカスタムドメイン設定を利用して独自のドメインでAWS IoTに接続できるようにします。
これをすることによって、既存のMQTTサーバからAWS IoTに移行することが簡単になります。
サーバ証明書はACMで取得したパブリック証明書を利用します。
必要な対応一覧
以下の対応が必要です。
- ACMで証明書登録
- AWS IoT カスタムドメインの設定
- CNAMEの設定
- クライアント側で使用するポートを443に設定
ACMで証明書登録
カスタムドメインを利用する際には利用する証明書をACMに登録する必要があり、以下の3種類の証明書が利用可能です。
- ACM によって生成されたパブリック証明書
- 公開 CA によって署名された外部証明書
- プライベート CA によって署名された外部証明書
今回はパブリック証明書を利用したので通常通り発行リクエストとDNS検証で証明書を取得しました。
対象ドメインをワイルドカードやSANで登録しても問題ありません。
AWS IoT カスタムドメインの設定
AWS IoTのコンソールで「設定」の「ドメイン設定」から設定していきます。
必要なければオーソライザーは設定しなくて良いので基本的には使用するドメインと証明書、セキュリティポリシーの設定で済みます。
CNAMEの設定
接続したいドメインのDNSレコードでCNAMMEを設定します。
向き先はAWSから提供されるエンドポイントで設定します。
以下のコマンドで取得できます。
aws iot describe-endpoint --endpoint-type iot:Data-ATS
クライアント側で使用するポートを443に設定
以上の対応でサーバ側の設定はOKです。
が、クライアントで8443ポートを指定して接続する場合証明書エラーが出ます。
私の環境では以下のエラーが見られました。
ssl.SSLCertVerificationError: ("hostname 'iot.hogefugapiyopiy012345.com' doesn't match either of 'iot.ap-northeast-1.amazonaws.com', '*.iot.ap-northeast-1.amazonaws.com'",)
こちらのエラーについてはどうも443ポートを指定することで回避できるようです。
(参考)https://qiita.com/tatsuhiroiida/items/2d8968f97c4afadc593e
以上の内容でクライアント側のその他の設定ができていれば問題なく接続できると思います。
おわりに
結構デバイス側でポートを変えるのが大変そうな気がしますがとりあえず繋がりました(443ポートを使用するのが一般的なのでしょうか?)。
自分のドメインを使いたいケースは多いと思いますのでカスタムドメインが設定できるのは便利ですね。
以上、最後までお付き合いありがとうございました。
アーキテクト課のomkです。
AWSについて雑多に取り組んだ内容を発信しています!!