#はじめに#
以前、NXP SE050検証(AWS IoT Multi-Account Registration接続テスト)で実施した内容をMicrochip社のATECC608AのTrust and Goという製品で追試する。
前回整理したように、自分のCAを構築して、それを登録、共通のCAで認証されたデバイスを接続させるJust In Time Registrationよりも簡素化した、Multi-Account-Registrationを利用し、チップメーカーのCAを利用してデバイスを認証させる流れとなる。
#ATECC608AのTrust and Go#
ATECC608Aは16個のスロットの役割、権限を個別に設定できるConfigを設定し使用できるようになる。
また証明書は定義ファイルを生成し、デバイスとセットで使用する。
しかしこの設定と生成が難解なので、事前に設定されたデバイスとして販売されている。
特にTrust and Goはチップを購入した段階で書き込まれている証明書の台帳が入手できるらしい。
Microchip DirectでTrust and Goを購入してみた。
3/3に発注して3/20に到着した。小ロットでプログラムしてもらう手間を考えるとこんなものだろう。
このOrder History画面から、"Download Manifest"をクリックすると、jsonのファイルがダウンロードできる。
このJSON のファイルの中にオーダー分の証明書が収まっている形。
#AWS側の準備#
AWS CLIから設定を行っていく。
環境
aws --version
aws-cli/2.0.56 Python/3.7.7 Windows/10 exe/AMD64
今回の検証を行ったGitレポジトリをクローンする。
git clone --recursive https://github.com/kmwebnet/ECC608-TNG-AWS-Connect.git
cd ECC608-TNG-AWS-Connect
まず、manifest fileから証明書を抜き出すスクリプトを実行し、certs/フォルダ内にPEMファイルとして保存する。
pip install python-jose[cryptography]
manifestdecoder.py --manifest <マニフェストファイル>
AWS IoTにデバイス証明書を登録した後に割り当てるポリシーを作成する。
aws iot create-policy --policy-name wildcardpolicy --policy-document file://wildcardpolicy
{
"policyName": "wildcardpolicy",
"policyArn": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:policy/wildcardpolicy",
"policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Connect\",\n \"iot:Publish\",\n \"iot:Receive\",\n \"iot:Subscribe\"\n ],\n \"Resource\": [\n \"*\"\n ]\n }\n ]\n}\n",
"policyVersionId": "1"
}
後はデバイスの数だけ証明書を登録し、ポリシーを割り当てる。
aws iot register-certificate-without-ca --certificate-pem file://certs/0123XXXXXXXXXXXX01 --status ACTIVE
{
"certificateArn": "arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:cert/56366869fd...96b05161",
"certificateId": "56366869fd8....096b05161"
}
aws iot attach-policy --target "arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:cert/56366869....96b05161" --policy-name wildcardpolicy
最後にデバイスからアクセスするエンドポイントURLを取得する
aws iot describe-endpoint --endpoint-type iot:Data-ATS
{
"endpointAddress": "XXXXXXXXXX-ats.iot.ap-northeast-1.amazonaws.com"
}
#ESP32でのテスト#
手元のESP32 Devkitを使い、AWSへの接続を試してみた。