ATECC608A-TNGTLS検証(AWS IoT Multi-Account Registration接続テスト)(ATECC608A-TNGTLS AWS IoT connection test by using Multi-Account Registration)


はじめに

以前、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への接続を試してみた。

AWS IoTの「テスト」画面から"test_topic/esp32"をサブスクライブすると接続ができた。