AWS-IoT-Core

AWS IoTに1つの証明書で複数のAWSアカウントへの接続に対応してみた

はじめに

こんにちは、omkです。
今回は1つの証明書を使って複数のAWSアカウントのAWS IoTに接続してみました。
これによって接続先を切り替えるだけでテスト環境から本番環境へのスムーズな切り替えが可能になります。
AWS IoT Core マルチアカウント登録で、IoT デバイス登録が簡素化し、AWS アカウント間のデバイス移動が簡単に

作業自体は簡単ですが割りとややこしいところがあったのでまとめていきます。

やってみた

必要な対応は以下です。

  • (認証局の作成とアカウントA用の検証証明書・クライアント証明書の発行)
  • アカウントAでシングルアカウントモードでCA証明書の登録
  • アカウントAでクライアント証明書の登録
  • アカウントBでマルチアカウントモードでCA証明書の登録
  • アカウントBでクライアント証明書の登録

イメージとしてはアカウントAは単体でも動作する環境で、アカウントBはそれに付随する感じですかね。
考慮すべきキーポイントをAWS公式のブログより引用します。

  • 1 つのリージョンで DEFAULT モードで CA を登録できるのは、1 つのアカウントのみです。
  • SNI_ONLY モードでは、複数のアカウントで同じ CA を同じリージョンで登録することができます。そのような CA が登録されたリージョンでのアカウント数の制限はありません。
  • 複数のアカウントを異なるリージョンで利用する場合、同じ CA を DEFAULT モードもしくは SNI_ONLY モードで登録することが可能です(これは以前から可能でした)。
  • CAは、アカウント間で異なるモードにすることができます。例えば、あるアカウントは DEFAULT モードで登録し、別のアカウントは SNI_ONLY モードで登録する、ということが可能です。
  • あるアカウントでは、CA は1つのモードでしか存在できません。登録されている CA のモードを変更するには、その CA を削除し、再度登録する必要があります。

AWS IoT Core 使用時のマルチアカウントデバイスプロビジョニングと認証局登録の簡略化

DEFAULTモードがシングルアカウントモードで、SNI_ONLYモードがマルチアカウントモードです。
今回気にしておく必要がある点は、1つのリージョンに対してシングルアカウントモードで登録できるのは1アカウントまでで、それ以外のアカウントではマルチアカウントモードで登録する点です。
試しにどちらもシングルで登録しようとしてみたら「Cannot accept this CACertificate.」のエラーになりました。
また、シングルアカウントモードで登録済みのアカウントがない状態でマルチアカウントモードで登録した場合はAWS IoTの接続が出来ませんでした。
1つのアカウントはシングルアカウントモードで登録しておく必要があり、それ以外ではマルチアカウントモードでの登録が必要となります。


まずはアカウントAでシングルアカウントモードでの設定をしていきます。
ここでの作業内容は単体アカウントで独自のCAを利用する場合の作業と同じなので、AWS IoTにEasy-RSAで作った自己証明書で接続してみたに記載してますので良かったら見てみてください。

で、次にアカウントBでも利用できるように設定していきます。
アカウントBではアカウントAで設定したリージョンと同じリージョンで、アカウントAで登録したCA証明書と同じCA証明書で、マルチアカウントモードで登録します。

こちらは検証証明書を発行しなくて良いのでCA証明書を入れるだけです。
簡単ですね。
これでCA証明書の登録が完了したのでクライアント証明書を登録します。
対象CAで発行された証明書を利用して接続リクエストがあった場合に自動でクライアント証明書を登録する方法をAWS IoTで独自CAで発行した証明書を自動登録するようにしてみたにまとめてますのでこちらも是非。

クライアント証明書の登録とポリシーの設定が完了したらあとは接続するだけです。
アカウントAに接続できることを確認した上で接続先のホスト情報だけアカウントBに変えてみて接続できることを確認します。

問題なく接続できれば成功です。
接続出来ない場合は、アカウントAには接続できるか、証明書の登録方法はどうか(自動登録であればクライアント証明書に発行元CAのCA証明書を含める必要がある)、ポリシーの設定が適切かなどを確認していくと良いと思います。

おわりに

ということで証明書の差し替えが困難なケースでもアカウントを分けることで複数の環境に接続できました。
冒頭に述べたようにテスト環境や本番環境で分かれるケースで特に活用できると思います。

最後までお付き合いありがとうございました。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA