Armadilloフォーラム

セキュアエレメントSE050から取得した証明書を用いてIoT Core、IoTGreenGrassを利用したい

io-k-g

2024年10月18日 21時48分

AWSから自動的に取得される証明書の代わりに、セキュアエレメントSE050から取得した証明書をIoTCoreのモノの証明書として登録したうえで、
デバイスからIoTCoreへの接続およびIoTGreengrassのコアデバイスとしての疎通を実施したいのですが、実現できていないためご質問させていただきます。

これまで実施した作業内容は以下の通りです。
①以下のHow-toを参考に、SE050より証明書、リファレンスキーを取得。(Armadilo OS内で実施)
https://armadillo.atmark-techno.com/howto/install_plug_and_trust_mw_for…
※取得した証明書、リファレンスキーは本URLに例として記載のあるものです。

②あらかじめAWS環境に登録済みの「モノ」にアタッチされているAWSより発行された証明書を、①手順にて取得した証明書に変更・アクティブ化
(AWSには事前にアップロード済み)

③IoT GreenGrassのコアデバイスとして参照する証明書、鍵の変更のため、IoT GreenGrassにて参照している設定ファイルを変更
(①にて取得したリファレンスキー、証明書を示すように変更)

④IoT GreenGrassはコンテナ上で動いているため、コンテナ上に①にて利用した環境変数・パッケージ(plug-and-trust, plug-and-trust-tools,se05x-tools)を配置したうえで、サンプルアプリケーションである「se05x_GetInfo」を実行したところ、コンテナ上からもSE050に接続できることを確認。

上記のような手順を実施したのですが、AWSのモニタリング機能、GreenGrassのログ等で確認すると該当機器からAWS側に接続できておらず、データが上がってきていない状態となっております。
考えられる原因や対応策等あれば、ご教示いただけますと幸いです。
個人的に気になっているのは以下の箇所です。
1.初歩的な質問で恐縮ですが、コンテナ内からSE050へのアクセスにあたり、
  手順①のリンクにてあげられている「GPIO89の有効化」は、コンテナ内でも必要でしょうか。
  se05x_GetInfoを実行した際に、特に上記設定を行わずとも実施できました。
2.リファレンスキーからセキュアエレメントSE050へのアクセスはAWS IoT Core、GreenGrassとの接続時にも実施されるという認識で間違いないでしょうか。

なおリファレンスキー・証明書はコンテナから届く箇所に保管しております。
また元の証明書に戻すと正常に疎通できたため、証明書周りの問題であることも特定しておりますが、
容量の関係で、ssscliやawscli、gitを入れることができないため、下記リンク内の手順にあるようなデモテスト等は実施できておりません。
https://armadillo.atmark-techno.com/howto/aiot_a6-se050-demo_connect_aw…

以上、お手数おかけしますが、ご確認をよろしくお願いいたします。

コメント

koga

2024年10月20日 10時31分

アットマークテクノの古賀(休日モード)です。

io-k-gさん:
>AWSから自動的に取得される証明書の代わりに、セキュアエレメントSE050から取得した証明書をIoTCoreのモノの証明書として登録したうえで、
>デバイスからIoTCoreへの接続およびIoTGreengrassのコアデバイスとしての疎通を実施したいのですが、実現できていないためご質問させていただきます。

IoT Core への接続を、AWS IoT SDK を使って実装した Python クライアントや C/C++ のクライアントで行う実績はあるのですが、Greengrass コアでの接続は、実績がありません。
Greengrass コアの場合、v2 ですと、現状提供している SE050 用パッケージでは対応不可能ということが分かっています。これは、Greengrass v2 コア内部で使用している、Java の PKCS#11 provider の実装が v2 で変わったことによるものです:
 https://docs.aws.amazon.com/greengrass/v2/developerguide/pkcs11-provide…

Greengrass v2 での SE050 使用については、以前にも質問を頂いたことがあるのですが、解決できていません。ごめんなさい:
 https://armadillo.atmark-techno.com/forum/armadillo/19977

Greengrass v2 対応については、SE050 用パッケージの PKCS11 実装(libsss_pkcs11.so のソース)を更新することで対応可能になるとの情報を得ていますが、検証できておらず、対応できていないのです。

>これまで実施した作業内容は以下の通りです。
>①以下のHow-toを参考に、SE050より証明書、リファレンスキーを取得。(Armadilo OS内で実施)
>https://armadillo.atmark-techno.com/howto/install_plug_and_trust_mw_for…
>※取得した証明書、リファレンスキーは本URLに例として記載のあるものです。
>
>②あらかじめAWS環境に登録済みの「モノ」にアタッチされているAWSより発行された証明書を、①手順にて取得した証明書に変更・アクティブ化
>(AWSには事前にアップロード済み)
>
>③IoT GreenGrassのコアデバイスとして参照する証明書、鍵の変更のため、IoT GreenGrassにて参照している設定ファイルを変更
>(①にて取得したリファレンスキー、証明書を示すように変更)

Grenngrass Core の設定ファイルでの指定ですが、証明書・鍵で、鍵がリファレンスキーの場合は、その旨を指定して、さらに PKCS#11 provider が使用する PKCS11 ライブラリとして SE050 対応のものを指定しなければいけません。
Greengarss v1.x の場合は、AWS のこのブログでも説明されているのと同様な指定で動作するようですが、v2 の場合は、前述したように PKCS#11 provider の実装変更により対応できなくなっているのです:
 https://aws.amazon.com/jp/blogs/apn/securing-aws-iot-greengrass-deploym…

>上記のような手順を実施したのですが、AWSのモニタリング機能、GreenGrassのログ等で確認すると該当機器からAWS側に接続できておらず、データが上がってきていない状態となっております。
>考えられる原因や対応策等あれば、ご教示いただけますと幸いです。

冒頭で述べましたように、Greeengrass v2 には対応できていないため、それが原因です。
対応策は、弊社から現状提供できていません。申し訳ありません。

>個人的に気になっているのは以下の箇所です。
>1.初歩的な質問で恐縮ですが、コンテナ内からSE050へのアクセスにあたり、
>  手順①のリンクにてあげられている「GPIO89の有効化」は、コンテナ内でも必要でしょうか。
>  se05x_GetInfoを実行した際に、特に上記設定を行わずとも実施できました。

この手順は、現状不要になっています。ABOS の起動時に、SE050 を有効化するようになっています(スリープ前後での、無効化・再有効化も行います)。

>2.リファレンスキーからセキュアエレメントSE050へのアクセスはAWS IoT Core、GreenGrassとの接続時にも実施されるという認識で間違いないでしょうか。

はい。SE050 用のパッケージ所属の共有ライブラリが、認証処理時にプラグインとして呼び出され、SE050 と I2C 通信して、リファレンスキーを SE050 内部の秘密鍵に紐づけた処理が実行される仕組みです。
IoT Core との接続の場合は、AWS IoT SDK の API を呼び出す際の設定で動作することを確認できており、実績があるのですが、Greengrass については、v2 の PKCS#11 provider に対応できていない状況です。

以上、ご期待に沿えない回答で恐縮ですが、どうぞ宜しくお願いします。

io-k-g

2024年10月21日 12時07分

古賀様

本件、ご回答ありがとうございます。
GreenGrassv2には現状提供している SE050 用パッケージでは対応不可能ということ、承知いたしました。

つまり、現時点では、セキュアエレメントより取得した証明書を用いてのGreenGrassv2の利用は不可という
認識で間違いないでしょうか。
またSE050には、複数の証明書が格納されていると認識しておりますが、取得する証明書とリファレンスキーを変えたとしても、
疎通はできないと考えていますが、こちらについても相違ないでしょうか。
現在は以下のリファレンスキー、証明書を取得するように設定しております。
リファレンスキー:Cloud connection key 0(ID:0xF0000110 (refkey))
証明書:RSA2048, Die Individual(ID:0xF0000111 (cert))
(そもそもリファレンスキー⇒SE050へアクセスし秘密鍵の情報を取得するためのパッケージライブラリがv2の変更内容に対応していないため)

またもし今後、パッケージのGreenGrassv2のPKCS#11 provider利用に向けた改修の予定等ございましたら、時期についてもご連携いただけますと幸いです。

以上、お手数おかけしますが、ご回答いただけますと幸いです。

at_shinya.koga

2024年10月21日 13時52分

アットマークテクノの古賀です。

io-k-gさん:
>つまり、現時点では、セキュアエレメントより取得した証明書を用いてのGreenGrassv2の利用は不可という
>認識で間違いないでしょうか。

はい。

>またSE050には、複数の証明書が格納されていると認識しておりますが、取得する証明書とリファレンスキーを変えたとしても、
>疎通はできないと考えていますが、こちらについても相違ないでしょうか。
>現在は以下のリファレンスキー、証明書を取得するように設定しております。
>リファレンスキー:Cloud connection key 0(ID:0xF0000110 (refkey))
>証明書:RSA2048, Die Individual(ID:0xF0000111 (cert))
>(そもそもリファレンスキー⇒SE050へアクセスし秘密鍵の情報を取得するためのパッケージライブラリがv2の変更内容に対応していないため)

はい、そうです。

>またもし今後、パッケージのGreenGrassv2のPKCS#11 provider利用に向けた改修の予定等ございましたら、時期についてもご連携いただけますと幸いです。

現時点で具体的な予定は立っていませんが、対応の目途がつきましたら、お知らせしたいと思います。
恐縮ですが、どうぞ宜しくお願いします。

io-k-g

2024年10月21日 16時19分

本件、ご回答ありがとうございます。

承知いたしました。
また改修の目途が付き次第、ご連絡いただけますと幸いです。

以上、よろしくお願いいたします。