Cloud IoT Core では、JSON Web Token(JWT)を使用してデバイスごとに公開鍵/秘密鍵の認証を行うことができます。セキュリティをさらに強化するため、Cloud IoT Core はデバイスの公開鍵証明書をレジストリレベルの CA 証明書と照合できます。
レジストリレベルの CA 証明書は、セキュリティを強化するオプション機能です。必ずしも必須ではありません。
確認済みの証明書は、公開鍵/秘密鍵のペアが正規のデバイスに属していることを証明します。これは特に、デバイス メーカーが公開鍵と秘密鍵を作成し、秘密鍵をデバイスに保存して公開鍵が CA によって署名されている場合に有用です。
CA 証明書を生成する
Cloud IoT Core では、デバイスの公開鍵証明書を、自己署名 CA 証明書および信頼できる第三者が生成した CA 証明書と照合できます。どちらの CA 証明書も同じように使用されますが、それぞれ生成方法が異なります。
自己署名 CA 証明書 | 第三者の CA 証明書 |
---|---|
デバイスの秘密鍵の所有者は証明書を生成できます | 信頼できる第三者が証明書を生成する必要があります |
デバイスの秘密鍵の所有者は、証明書に署名する CA 秘密鍵を作成して所有します | 第三者が、証明書に署名する CA 秘密鍵を作成し、所有します |
生成は無料です | 第三者は証明書を生成するための料金を請求し、CA と信頼のチェーンを確立します |
自己署名 CA 証明書
自己署名 CA 証明書(および対応する CA 秘密鍵)を生成するには、次の手順を行います。
- CA 秘密鍵を作成します。CA 秘密鍵は CA 証明書と一意に関連付けられます。次のコマンドを使用して、2,048 ビットの RSA 秘密鍵を生成できます。
openssl genpkey -algorithm RSA -out ca_private.pem -pkeyopt rsa_keygen_bits:2048
- 自己署名 CA 証明書を生成します。次のコマンドは、CA 証明書の要件を満たす RS256 証明書を生成します。
openssl req -x509 -new -nodes -key ca_private.pem -sha256 -out ca_cert.pem -subj "/CN=unused"
その他の例については、自己署名 X.509 証明書と RSA 鍵の生成または自己署名 X.509 証明書と ES256 鍵の生成をご覧ください。
第三者の CA 証明書
信頼できるサードパーティの CA 証明書を取得するには、CSR を CA に送信します。CA から、CA 秘密鍵で署名された対応するデバイスの公開鍵証明書とともに CA 証明書が送信されます。サードパーティの CA 証明書を取得するには:
- デバイスの秘密鍵を作成します。次のコマンドを使用して、2,048 ビットの RSA 秘密鍵を生成できます。
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
- デバイスの秘密鍵から CSR を作成します。CSR は秘密鍵のシークレットを保持します。次のコマンドは、SHA-256 署名を持つ CSR を生成します。
openssl req -new -sha256 -key rsa_private.pem -out rsa_cert.csr -subj "/CN=unused"
- CSR を CA に送信し、証明書を申請します。CA は適用プロセスが異なります。たとえば、CA にアカウントを登録し、CSR をオンライン ポータルにアップロードする必要があります。
CA 証明書の要件
レジストリレベルの CA 証明書はすべて、次の要件を満たす必要があります。
- CA 証明書は X.509v3(RFC 5280)形式で、base64 でエンコードされており、
-----BEGIN CERTIFICATE-----
と-----END CERTIFICATE-----
でラップされている必要があります。 - CA 証明書は、次のサポート対象のアルゴリズムで暗号化された
.pem
ファイルにする必要があります。- 2,048 ビット以上の RSA
- NIST P-256
- CA 証明書が有効である必要があります。デバイスをレジストリに追加しようとすると、レジストリの証明書が期限切れになると、Cloud IoT Core はエラーを返します。
- 必要に応じて、Google Cloud CLI を使用して証明書の有効期限を追跡できます。
CA 証明書をレジストリに追加する
CA 証明書を取得したら、レジストリに追加します。Cloud IoT Core は、CA 証明書をレジストリレベルで検証するため、すべての CA 証明書がレジストリに関連付けられている必要があります。証明書は複数のレジストリに追加できます。CA 証明書は、Google Cloud コンソール、API、gcloud を使用して追加できます。
Console
- Google Cloud コンソールで、[レジストリ] ページに移動します。
ページの上部にある [レジストリの作成] をクリックします。
[CA 証明書を追加] をクリックして証明書を入力、貼り付け、または証明書
.pem
ファイルをアップロードします。最初にレジストリを作成するときに追加できる証明書は 1 つだけですが、後でさらに証明書を追加できます(最大 10 個)。
[デバイス レジストリ] の詳細ページには、[証明書] タブがあり、ここでは既存の証明書が表示され、さらに証明書を追加できます。
gcloud
CA 証明書を追加または管理するには、gcloud iot registries credentials
コマンドのいずれかを実行します。
新しい証明書をレジストリに追加するには、gcloud iot registries credentials create
コマンドを実行します。
gcloud iot registries credentials create \ --path=PATH_TO_CERTIFICATE \ --project=PROJECT_ID \ --registry=REGISTRY_ID \ --region=REGION
API
DeviceRegistry
リソースには、以下のようにレジストリレベルで CA 証明書を定義するためのフィールドが含まれています。
- デバイス認証情報の検証用に最大 10 個の認証情報(
RegistryCredential
オブジェクト)を定義できます。 - 各
RegistryCredential
オブジェクトには、証明書データの指定に使用できるPublicKeyCertificate
オブジェクトが含まれます。出力専用フィールドには、X.509 証明書の詳細が表示されます。
既存のデバイスへの影響
証明書を追加または削除しても、レジストリ内の既存のデバイスは(接続されているかどうかにかかわらず)影響を受けません。デバイスに関連付けられているレジストリ レベルの証明書が取り消されたり、削除または変更された場合、そのデバイスでは、レジストリ レベルの証明書が有効であったときに使用した公開鍵証明書を使用できませんが、秘密鍵を使用して Cloud IoT Core に接続することは引き続き可能です。
公開鍵証明書を生成する
Cloud IoT Core は、CA 秘密鍵によって署名されたデバイス公開鍵証明書を検証します。
署名付き公開鍵証明書を生成するには:
- レジストリが自己署名 CA 証明書で構成されている場合は、CA 秘密鍵を使用して公開鍵に署名します。
- デバイスの秘密鍵を作成します。この鍵は、CA 証明書と CA 秘密鍵とは異なります。次のコマンドを使用して、2,048 ビットの RSA 秘密鍵を生成できます。
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
- デバイスの秘密鍵から CSR を作成します。次のコマンドは、SHA-256 署名を持つ CSR を生成します。
openssl req -new -sha256 -key rsa_private.pem -out rsa_cert.csr -subj "/CN=unused-device"
- 公開鍵を作成し、CA 秘密鍵を使用して署名します。次のコマンドにより、公開鍵証明書の要件を満たす署名付き RS256 証明書が生成されます。
openssl x509 -req -in rsa_cert.csr -CA ca_cert.pem -CAkey ca_private.pem \ -CAcreateserial -sha256 -out rsa_cert.pem
- デバイスの秘密鍵を作成します。この鍵は、CA 証明書と CA 秘密鍵とは異なります。次のコマンドを使用して、2,048 ビットの RSA 秘密鍵を生成できます。
- レジストリに第三者の CA 証明書が構成されている場合、CA 証明書には CA 秘密鍵で署名されたデバイス公開鍵証明書が含まれています。次のコマンドを使用すると、RSA デバイスの公開鍵証明書を RSA CA 証明書から抽出できます。
openssl rsa -in ca_cert.pem -pubout -out rsa_cert.pem
公開鍵証明書の要件
レジストリレベルの CA 証明書と照合するために、デバイスの公開鍵証明書は(デバイス認証情報の Cloud IoT Core の標準要件に加えて)次の要件を満たしている必要があります。
- CA 証明書は X.509v3(RFC 5280)形式で、base64 でエンコードされており、
-----BEGIN CERTIFICATE-----
と-----END CERTIFICATE-----
でラップされている必要があります。 - デバイスの公開鍵証明書は、レジストリレベルで特定の CA 証明書によって署名されている必要があります。中間 CA はサポートされていません。
- デバイスの公開鍵証明書は、レジストリレベルの証明書と同一のものであってはなりません。
- 未加工の公開鍵はありません。
- サポート対象の JWT アルゴリズム:
- デバイスの公開鍵証明書が有効である必要があります。証明書が期限切れのデバイスを作成または更新しようとすると、Cloud IoT Core からエラーが返されます。
- 必要に応じて、Google Cloud CLI を使用して証明書の有効期限を追跡できます。
これらの要件は、デバイスの作成時または更新時に適用されます。レジストリに CA 証明書が定義されていない場合、すべてのデバイスの公開鍵が無条件に受け入れられます。
公開鍵証明書の検証
Cloud IoT Core は、デバイスの作成時に、または公開鍵を変更する際に、デバイスの公開鍵証明書を、レジストリレベルの CA 証明書と照合します。デバイスは、Google Cloud コンソール、API、gcloud を使用して作成できます。Google Cloud コンソールまたは API を使用して、公開鍵を追加、削除、編集できます。
Console
- Google Cloud コンソールで、[レジストリ] ページに移動します。
ゲートウェイの [レジストリ ID] をクリックします。
左側のレジストリ メニューで、[デバイス] をクリックします。
[デバイスの作成] をクリックします。
デバイスの公開鍵を変更するには、[デバイス] ページでデバイスの ID をクリックして、ページの上部にある [デバイスの編集] をクリックします。
デバイスを簡潔に説明した、あるいはデバイスを識別しやすい [デバイス ID] を入力します(このフィールドを後で編集することはできません)。デバイスの命名と長さの要件については、使用可能な文字と長さの要件をご覧ください。
[デバイスの通信] で [許可] または [ブロック] を選択します。このオプションを使用すると、デバイスが正常に機能しなくなったときなど、必要に応じて通信をブロックできます。ほとんどの場合、デバイスを初めて作成するときは通信を許可することをおすすめします。
[公開鍵の形式] で、[RS256_X509] または [ES256_X509] を選択します。デバイスの公開鍵証明書を [公開鍵の値] に貼り付けます。鍵の有効期限を設定することもできます。
既存のデバイスに鍵を追加するには、[デバイスの詳細] ページで [公開鍵を追加] をクリックします。
既存のデバイスから鍵を削除するには:
- [デバイスの詳細] ページで、鍵の横にあるチェックボックスをオンにします。
- [削除] をクリックして、鍵を削除します。
鍵を編集するには、[デバイスの詳細] ページで鍵の横にある [編集] アイコンをクリックします。
デバイスの公開鍵証明書を入力するために使用する入力方法を選択します。
- 手動: デバイスの公開鍵証明書をコピーして [公開鍵の値] フィールドに貼り付ける
- アップロード: [公開鍵の値] フィールドで [参照] をクリックして、パソコン上のファイルを選択する
[鍵] フィールドと [値] フィールドを使用して、シリアル番号などのデバイスのメタデータ(省略可)を追加します。メタデータの鍵と値の命名と長さの要件については、使用可能な文字と長さの要件をご覧ください。
Cloud Logging レベルを選択して、Cloud Logging に送信するデバイス イベントを決定します。
[作成] をクリックしてデバイスを作成します。
gcloud
デバイスを作成するには、gcloud iot devices create
コマンドを実行します。
デバイス証明書の要件を満たす RS256 認証情報を使用してデバイスを作成するには、次のコマンドを実行します。
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=rsa_cert.pem,type=rsa-x509-pem
デバイス証明書の要件を満たす ES256 認証情報を使用してデバイスを作成するには、次のコマンドを実行します。
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=ec_cert.pem,type=es256-x509-pem
API
デバイスの作成や公開鍵の変更には、次の方法を使用します。
- Device
create
メソッド: レジストリにデバイスを追加する - Device
patch
メソッド: 公開鍵の追加、削除、編集を行う
公開鍵は Cloud IoT Core API の Device
リソースの credentials
フィールドで指定されます。詳細については、デバイス リソースの DeviceCredential
をご覧ください。
レジストリレベルの証明書が 1 つ以上存在するため、Device
リソースはデバイス証明書の要件を満たしている必要があります。
Device.credentials[i].public_key.key
フィールドは、デバイスの公開鍵証明書の内容(ヘッダーとフッターを含む)に設定する必要があります。Device.credentials[i].public_key.format
フィールドはRSA_X509_PEM
またはES256_X509_PEM
に設定する必要があります。