AWS IoTを始めよう -MQTTの設定(AWS IoT編)-

Pocket

大柳です。

前回のAWS IoT記事ではどんなデバイスが使えるかを調べてみました。
AWS IoTを始めよう -使えるIoT機材を探す-
早速デバイスとAWS IoTを連携させたいところですが、前回記事で調べたようにデバイス側で未対応のケースもあるため、まずはAWS IoTとWindows PCでMQTT通信を行い、AWS IoTの設定方法を理解するところから始めていきます。

ゴール

AWS IoTとWindows PC上のMQTTクライアントで、MQTT接続してメッセージのPublish/Subscribe(送信/受信)を行います。
通信は、MQTTのクライアント認証(X509証明書+TLS1.2)で行い、設定はCLIを使わずにマネジメントコンソールで作業を行います。PC側のクライアントはMQTT.fxを利用します。
今回の記事ではAWS IoT側の設定を行います。

AWS IoT側での設定項目

今回、設定を行う項目を説明します。
なお、AWS IoTの機能概要は以下の記事が詳しいです。
AWS IoTについて簡単にまとめてみた

Thing(モノ)

管理したいデバイスやセンサーをThing(モノ)として登録します。
MQTTでPub/Subするだけなら設定は不要なので今回は登録しません。
モノには属性(Attributes)を任意に登録することができ、シリアル番号やファームウェアバージョンの管理に利用できます。またShadowというデバイスの状態を管理するための機能もThingに設定可能です。
MQTT クライアントIDをThingの名前とすることがAWSドキュメントでは推奨されています。
https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-thing-management.html

Certificate(証明書)

モノを認証するための証明書です。デフォルトではX.509証明書が作成できます。ThingやPolicyはこの証明書に紐づけて管理されます。証明書を起点にしてPolicyとThingが紐づくのは違和感があって、作業中にどこで設定するのかに迷いました。

Policy(ポリシー)

モノに対してどの操作を許可するかを管理します。
以下のアクションとリソースに対して許可/不許可を設定できます。

アクション リソース
iot:DeleteThingShadow モノのARN
iot:Connect クライアントIDのARN
iot:Publish トピックのARN
iot:Subscribe トピックフィルターのARN
iot:Receive トピックのARN
iot:UpdateThingShadow モノのARN
iot:GetThingShadow モノのARN

http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/authorization.html から引用
今回はテストなので、アクション(iot:*)、リソース(*)ともワイルドカード指定にして、制限はかけないでおきます。

エンドポイント

MQTTもしくはHTTPでAWS IoTにアクセスするためのエンドポイントは、AWSアカウントごとに1つ存在します。振り分けなどはMQTTのトピックを利用します。

AWS IoT側設定

全体的な設定の流れは、Certificateの作成→Policyの作成→CertificateへのPolicyの紐づけになります。
Thingを利用する場合は、Thingの作成、CertificateへThingを紐づける作業が追加になります。
では、マネジメントコンソールからAWS IoTの設定を行います。

AWS IoTへのアクセス

AWS IoTを選択します。

Certificateの作成

左のサイドバーから[Security] → [Certificates] を選択して、[Create a certificate]ボタンを選択します。

今回はAWS IoTで生成できる証明書を利用します。[Create certificate]ボタンを選択すると証明書が作成されます。

作成した証明書が表示されます。
A certificate for this thing(サーバ証明書)、A public key(公開鍵)、A private key(秘密鍵)をローカルにダウンロードします。ダウンロードは作成時にしかできないので、ダウンロードを忘れた場合は、Certificateを削除してから、再作成しましょう。rootCAもダウンロードしておきます。
すべてダウンロードしたら、[Activate]ボタンをクリックして証明書を有効化します。
次にポリシーを作成します。[Attach policy]をクリックします。

ポリシーの作成

ポリシーが未作成ですので既存のポリシーはありません。
[Create new policy]を選択して、新たにポリシーを作成します。

ポリシー名(Name)、Action、Resource ARNを画面のように入力し、EffectはAllow(許可)を選択します。
今回はテスト用に作成するので全許容の設定にしています。[Create]ボタンを選択します。

ポリシーが作成されました。json形式で設定内容が確認できます。

証明書にポリシーを紐づけ(アタッチ)

次に証明書に作成したポリシーを紐づけます。
左のサイドバーから[Security] → [Certificates] を選択して、紐づけたい証明書を選択します。

右上のActionsメニューから[Attach policy]を選択します。

紐づけるポリシーにチェックをして[Attach]を選択すると、証明書とポリシーの紐づけは完了です。

証明書を選択して[Policies]を表示させるとポリシーが紐づけされていることが確認できます。

エンドポイントの確認

最後にエンドポイントを確認します。
左のサイドバーから[Settings]を選択すると、エンドポイントが確認できます。
エンドポイントは以下のような形式で、ユーザ固有のIDとリージョンから構成されます。
abcdefg123hijk.iot.ap-northeast-1.amazonaws.com

まとめ

AWS IoT側の設定はこれで終わりです。マネジメントコンソール上から簡単に設定することができました。特に証明書の発行、取得もマネジメントコンソールで完結し、CLIを使う必要がなく本当に簡単でした。
次回はMQTTクライアントを設定してAWS IoTに接続してみます。

次回記事
AWS IoTを始めよう -MQTTの設定(MQTT.fx編)-
次回もお楽しみに。