IoTデバイスをクラウドに接続した瞬間、そのデバイスはインターネット上の攻撃にさらされます。
適切なセキュリティ実装なしにAWS IoT Coreへ接続した場合、通信の盗聴・デバイスのなりすまし・不正なデータ操作といったリスクが現実のものになります。
本記事では、これらのリスクに対応する3つのセキュリティ実装(TLS通信・X.509証明書認証・AWS IoT Policy)を具体的なコードと設定例とともに解説します。さらに、これらの実装がIoTセキュリティのラベリング制度「JC-STAR★1」のどの要件を満たすかも合わせて示します。
セキュリティ実装
TLS通信・デバイス認証・アクセス制御は独立した対策だけではなく、3つを組み合わせて初めて多層防御が成立します。いずれか1つの実装だけでは十分なセキュリティを確保できません。
TLS通信による暗号化
AWS IoT Coreはすべての通信においてTLS(Transport Layer Security)1.2以上を強制しています。つまり、デバイスとAWSクラウド間の通信は常に暗号化された状態になります。
ポイント
- AWS IoT CoreのエンドポイントはデフォルトでTLSのみ受け付ける
- ポート8883(MQTT over TLS)を使用する
- AWSのルートCA証明書をデバイス側に配置する必要がある
AWSルートCA証明書のダウンロード
curl -o AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
Pythonでの接続設定例(TLS設定部分)
以下はIoTデバイス側に実装するコードです。
import paho.mqtt.client as mqtt
import ssl
client = mqtt.Client()
client.tls_set(
ca_certs="AmazonRootCA1.pem",
certfile="device-certificate.pem.crt",
keyfile="device-private.pem.key",
tls_version=ssl.PROTOCOL_TLSv1_2
)
client.connect("your-endpoint.iot.ap-northeast-1.amazonaws.com", 8883)
X.509証明書を使ったデバイス認証
AWS IoT Coreではデバイスの認証にX.509証明書を使用します。パスワード認証ではなく証明書ベースの認証を採用することで、なりすましや不正アクセスを防ぎます。
ポイント
- デバイスごとに個別の証明書を発行する
- 秘密鍵はデバイス外に出さない
- 証明書はAWSコンソールまたはCLIで発行できる
AWS CLIで証明書を発行する
aws iot create-keys-and-certificate \
--set-as-active \
--certificate-pem-outfile "device-certificate.pem.crt" \
--public-key-outfile "device-public.pem.key" \
--private-key-outfile "device-private.pem.key"
発行後、出力されるcertificateArnはポリシーのアタッチ時に使用するため控えておきます。
証明書をThingにアタッチする
# Thingの作成
aws iot create-thing --thing-name "MyIoTDevice"
# 証明書をThingにアタッチ
aws iot attach-thing-principal \
--thing-name "MyIoTDevice" \
--principal "arn:aws:iot:ap-northeast-1:123456789012:cert/xxxxxx"
AWS IoT Policyによるアクセス制御
証明書だけでは「誰であるか」しか確認できません。「何ができるか」を制御するのがAWS IoT Policyです。MQTTのトピックレベルで接続・送信・受信の権限を細かく制御できます。
ポイント
- 最小権限の原則に従い、必要なトピックのみ許可する
- connect・publish・subscribe・receiveの4アクションを個別に制御できる
- ポリシーは証明書にアタッチする
ポリシーの作成例(policy.json)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:ap-northeast-1:123456789012:client/MyIoTDevice"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:ap-northeast-1:123456789012:topic/mydevice/data"
},
{
"Effect": "Allow",
"Action": ["iot:Subscribe", "iot:Receive"],
"Resource": "arn:aws:iot:ap-northeast-1:123456789012:topicfilter/mydevice/cmd"
}
]
}
AWS CLIでポリシーを作成・アタッチする
# ポリシーの作成
aws iot create-policy \
--policy-name "MyIoTDevicePolicy" \
--policy-document file://policy.json
# ポリシーを証明書にアタッチ
aws iot attach-policy \
--policy-name "MyIoTDevicePolicy" \
--target "arn:aws:iot:ap-northeast-1:123456789012:cert/xxxxxx"
JC-STAR対応マッピング
AWS IoT Coreへのセキュリティ実装は、IoTセキュリティのラベリング制度「JC-STAR★1」の適合基準とも深く関連しています。以下の対応表に、セキュリティ実装で述べた3つのセキュリティ対策がどのJC-STAR要件を満たすかを示します。
| 実装内容 | JC-STAR適合基準番号 | 要件の概要 |
|---|---|---|
| TLS通信による暗号化 | S1.1-12 | ネットワーク経由で伝送される情報資産について、盗聴に対する保護対策をIoT機器自らが行うこと |
| X.509証明書を使ったデバイス認証 | S1.1-01 | IP通信を介した情報資産へのアクセスに対して、デジタル証明書を使用した適切な認証に基づくアクセス制御が行われていること |
| AWS IoT Policyによるアクセス制御 | S1.1-01 | 認証された機器またはユーザに対してのみ、情報資産へのアクセスを許可する仕組みを持つこと |
| X.509証明書の秘密鍵管理 | S1.1-11 | デバイスのストレージに保存される秘密鍵等の機密セキュリティパラメータをセキュアに保存すること |
ポイント
JC-STAR★1のS1.1-01は、認証・アクセス制御に関する要件であり、「デジタル証明書を使用した認証機能の実装」が適合方法として明示されています。AWS IoT CoreのX.509証明書認証はこれに直接対応します。
またS1.1-12は、CRYPTREC暗号リストに記載された暗号技術を使用した通信プロトコルによる伝送を要件としており、TLS 1.2以上を強制するAWS IoT Coreの通信はこの要件をみたします。
なお、JC-STAR★1への適合はこの3実装だけで完結するわけではなく、ソフトウェアアップデート管理(S1.1-06~09)や脆弱性開示ポリシー(S1.1-05)など、製品・製造業者レベルでの対応が別途必要です。本記事で扱う実装は、★1取得における通信セキュリティ要件の中核を担う部分です。
まとめ
本記事では、IoTデバイスをAWS IoT Coreに安全に接続するために必要な3つのセキュリティ実装を紹介しました。
- TLS通信による暗号化:通信経路上のデータ盗聴を防ぐ
- X.509証明書を使ったデバイス認証:なりすましや不正接続を防ぐ
- AWS IoT Policyによるアクセス制御:必要最小限の権限のみを許可する
これら3つは独立した対策ではなく、組み合わせて初めて多層防御が成立します。1つでも欠けると、残りの対策だけでは穴が生まれます。
そして注目すべきは、これらの実装がJC-STAR★1の通信セキュリティ要件(S1.1-01・S1.1-12)に直接対応しているという点です。つまり、AWS IoT Coreのベストプラクティスに沿って実装を進めるだけで、JC-STAR準拠に向けた技術的な根拠を同時に積み上げることができます。
IoTデバイスの安全な接続を実現しながら、セキュリティ認証の取得も視野に入れたい方にとって、AWS IoT Coreは有力な選択肢の一つです。ぜひ本記事の実装を参考に、セキュリティと認証準拠を一度に前進させてみてください。

コメント