Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

X.509 クライアント証明書を使用したカスタム認証

フォーカスモード
X.509 クライアント証明書を使用したカスタム認証 - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

デバイスを に接続する場合 AWS IoT Core、複数の認証タイプを使用できます。X.509 クライアント証明書を使用すると、クライアントとデバイス接続を認証したり、カスタムオーソライザーを定義して独自のクライアント認証と承認ロジックを管理したりできます。このトピックでは、X.509 クライアント証明書でカスタム認証を使用する方法について説明します。

X.509 証明書でカスタム認証を使用すると、X.509 証明書を使用してデバイスを既に認証していて、追加の検証とカスタム認証を実行したい場合に役立ちます。例えば、X.509 クライアント証明書にシリアル番号などのデバイスのデータを保存した場合、 AWS IoT Core が X.509 クライアント証明書を認証した後、カスタムオーソライザーを使用して、証明書の CommonName フィールドに保存されている情報に基づいて特定のデバイスを識別できます。X.509 証明書でカスタム認証を使用すると、デバイスを に接続する際のデバイスセキュリティ管理を強化 AWS IoT Core し、認証と認可ロジックをより柔軟に管理できます。 は、MQTT プロトコルと HTTPS プロトコルの両方で機能する X.509 証明書とカスタムオーソライザー認証タイプを使用した X.509 証明書でのカスタム認証 AWS IoT Core をサポートします。 AWS IoT Core デバイスエンドポイントがサポートする認証タイプとアプリケーションプロトコルの詳細については、「デバイス通信プロトコル」を参照してください。

注記

X.509 クライアント証明書によるカスタム認証は、 AWS GovCloud (US) リージョンではサポートされていません。

重要

[ドメイン設定] を使用して作成されたエンドポイントを使用する必要があります。さらに、クライアントは接続時に Server Name Indication (SNI) 拡張機能を提供する必要があります AWS IoT Core。

ステップ 1: X.509 クライアント証明書を に登録する AWS IoT Core

これをまだ実行していない場合は、X.509 クライアント証明書を登録してアクティブ化します AWS IoT Core。それ以外の場合は、次のステップに進みます。

クライアント証明書を に登録してアクティブ化するには AWS IoT Core、次の手順に従います。

  1. でクライアント証明書を直接作成 AWS IoTする場合。これらのクライアント証明書は自動的に に登録されます AWS IoT Core。

  2. 独自のクライアント証明書を作成する場合は、以下の手順に従って登録します AWS IoT Core

  3. クライアント証明書をアクティブ化するには、以下の手順に従います。

ステップ 2: Lambda 関数を作成する

AWS IoT Core はカスタムオーソライザーを使用して、カスタム認証および認可スキームを実装します。カスタムオーソライザーは、デバイスが認証されているかどうか、およびデバイスが実行できるオペレーションを決定する Lambda 関数に関連付けられます。デバイスが に接続すると AWS IoT Core、 はオーソライザー名と関連する Lambda 関数を含むオーソライザーの詳細 AWS IoT Core を取得し、Lambda 関数を呼び出します。Lambda 関数は、デバイスの X.509 クライアント証明書データを含む JSON オブジェクトを含むイベントを受信します。Lambda 関数は、このイベント JSON オブジェクトを使用して認証リクエストを評価し、実行するアクションを決定してレスポンスを送り返します。

Lambda 関数のイベントの例

次の JSON オブジェクトの例には、含めることができるすべてのフィールドが含まれています。実際の JSON オブジェクトには、特定の接続リクエストに関連するフィールドのみが含まれます。

{ "token": "aToken", "signatureVerified": true, "protocols": [ "tls", "mqtt" ], "protocolData": { "tls": { "serverName": "serverName", "x509CertificatePem": "x509CertificatePem", "principalId": "principalId" }, "mqtt": { "clientId": "myClientId", "username": "myUserName", "password": "myPassword" } }, "connectionMetadata": { "id": "UUID" } }
signatureVerified

オーソライザーの Lambda 関数を呼び出す前に、オーソライザーで設定されたトークン署名を検証するかどうかを示すブール値。オーソライザーがトークン署名を無効にするように設定されている場合、このフィールドは false になります。

protocols

リクエストに期待されるプロトコルを含む配列。

protocolData

接続で使用されるプロトコルの情報を含むオブジェクト。認証、承認などに役立つプロトコル固有の詳細を提供します。

tls - このオブジェクトには、TLS (Transport Layer Security) プロトコルに関連する情報が含まれます。

  • serverName - [サーバー名表示 (SNI)] ホスト名文字列。 AWS IoT Core では、デバイスが SNI 拡張を Transport Layer Security (TLS) に送信し、host_name フィールドに完全なエンドポイントアドレスを指定する必要があります。

  • x509CertificatePem - PEM 形式の X.509 証明書。TLS 接続でのクライアント認証に使用されます。

  • principalId - TLS 接続内のクライアントに関連付けられたプリンシパル識別子。

mqtt - このオブジェクトは、MQTT プロトコルに関連する情報を保持します。

  • clientId - 文字列は、デバイスがこの値を送信するイベントにのみ含める必要があります。

  • username - MQTT Connect パケットで指定されたユーザー名。

  • password - MQTT Connect パケットで提供されたパスワード。

connectionMetadata

接続のメタデータ。

id - ログ記録とトラブルシューティングに使用できる接続 ID。

注記

このイベントでは、JSON オブジェクト、x509CertificatePem および principalId はリクエスト内の 2 つの新しいフィールドです。principalId の値は、certificateId の値と同じです。詳細については、「証明書」を参照してください。

Lambda 関数のレスポンスの例

Lambda 関数は、イベント JSON オブジェクトからの情報を使用して受信接続を認証し、接続で許可されるアクションを決定する必要があります。

次の JSON オブジェクトには、Lambda 関数が送信できるレスポンスの例が含まれています。

{ "isAuthenticated": true, "principalId": "xxxxxxxx", "disconnectAfterInSeconds": 86400, "refreshAfterInSeconds": 300, "policyDocuments": [ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/customauthtesting" } ] } ] }

この例では、この関数は、次の値を含むレスポンスを送信する必要があります。

isAuthenticated

リクエストが認証されるかどうかを示すブール値。

principalId

カスタム認可リクエストによって送信されるトークンの識別子として機能する英数字の文字列。値は、1~128 文字以内の英数字の文字列である必要があります。ログ内の接続を識別します。principalId の値は、イベント JSON オブジェクト (X.509 証明書の certificateId) の principalId の値と同じである必要があります。

policyDocuments

JSON 形式の AWS IoT Core ポリシードキュメントのリスト。値はオプションで、モノのポリシー変数証明書のポリシー変数をサポートしています。ポリシードキュメントの最大数は 10 です。各ポリシードキュメントでは最大 2,048 文字を使用できます。クライアント証明書と Lambda 関数に複数のポリシーがアタッチされている場合、アクセス許可はすべてのポリシーのコレクションです。 AWS IoT Core ポリシーの作成の詳細については、「 ポリシー」を参照してください。

disconnectAfterInSeconds

AWS IoT Core ゲートウェイへの接続の最大時間 (秒単位) を指定する整数。最小値は 300 秒、最大値は 86,400 秒です。disconnectAfterInSeconds は接続の存続期間中であり、連続するポリシー更新では更新されません。

refreshAfterInSeconds

ポリシーの更新の間隔を指定する整数。この間隔が経過すると、 は Lambda 関数を AWS IoT Core 呼び出してポリシーの更新を許可します。最小値は 300 秒で、最大値は 86,400 秒です。

Lambda 関数の例

次に示すのは、Node.js Lambda 関数の例です。この関数は、クライアントの X.509 証明書を調べてシリアル番号、フィンガープリント、件名などの関連情報を抽出します。抽出された情報が期待値と一致する場合、クライアントに接続するためのアクセス許可が付与されます。このメカニズムにより、有効な証明書を持つ承認されたクライアントのみが接続を確立できます。

const crypto = require('crypto'); exports.handler = async (event) => { // Extract the certificate PEM from the event const certPem = event.protocolData.tls.x509CertificatePem; // Parse the certificate using Node's crypto module const cert = new crypto.X509Certificate(certPem); var effect = "Deny"; // Allow permissions only for a particular certificate serial, fingerprint, and subject if (cert.serialNumber === "7F8D2E4B9C1A5036DE8F7C4B2A91E5D80463BC9A1257" // This is a random serial && cert.fingerprint === "F2:9A:C4:1D:B5:E7:08:3F:6B:D0:4E:92:A7:C1:5B:8D:16:0F:E3:7A" // This is a random fingerprint && cert.subject === "allow.example.com") { effect = "Allow"; } return generateAuthResponse(event.protocolData.tls.principalId, effect); }; // Helper function to generate the authorization response. function generateAuthResponse(principalId, effect) { const authResponse = { isAuthenticated: true, principalId, disconnectAfterInSeconds: 3600, refreshAfterInSeconds: 300, policyDocuments: [ { Version: "2012-10-17", Statement: [ { Action: ["iot:Connect"], Effect: effect, Resource: [ "arn:aws:iot:us-east-1:123456789012:client/myClientName" ] }, { Action: ["iot:Publish"], Effect: effect, Resource: [ "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName" ] }, { Action: ["iot:Subscribe"], Effect: effect, Resource: [ "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName" ] }, { Action: ["iot:Receive"], Effect: effect, Resource: [ "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName" ] } ] } ] }; return authResponse; }

前述の Lambda 関数は、予想されるシリアル、フィンガープリント、およびサブジェクトを含む証明書を受信すると、次の JSON を返します。x509CertificatePem の値は、TLS ハンドシェイクで提供されるクライアント証明書になります。詳細については、「 Lambda 関数の定義」を参照してください。

{ "isAuthenticated": true, "principalId": "principalId in the event JSON object", "policyDocuments": [ { "Version": "2012-10-17", "Statement": [ { "Action": "iot:Connect", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:client/myClientName" }, { "Action": "iot:Publish", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName" }, { "Action": "iot:Subscribe", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/telemetry/myClientName" }, { "Action": "iot:Receive", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName" } ] } ], "disconnectAfterInSeconds": 3600, "refreshAfterInSeconds": 300 }

ステップ 3: カスタムオーソライザーを作成する

Lambda 関数 を定義した後、カスタムオーソライザーを作成して、独自のクライアント認証および承認ロジックを管理します。ステップ 3: カスタマーオーソライザーリソースとその承認を作成するの詳細な指示に従ってください。詳細については、「オーソライザーの作成」を参照してください。

カスタムオーソライザーを作成するプロセスでは、作成後に Lambda 関数を呼び出すアクセス許可を AWS IoT に付与する必要があります。詳細な手順については、「Lambda 関数を呼び出す AWS IoT ことを に許可する」を参照してください。

ステップ 4: ドメイン設定で認証タイプとアプリケーションプロトコルを設定する

X.509 クライアント証明書によるカスタム認証を使用してデバイスを認証するには、ドメイン設定で認証タイプとアプリケーションプロトコルを設定し、SNI 拡張機能を送信する必要があります。authenticationType の値は CUSTOM_AUTH_X509 にする必要があり、applicationProtocol の値は SECURE_MQTT または HTTPS にすることができます。

ドメイン設定 (CLI) で認証タイプとアプリケーションプロトコルを設定する

ドメイン設定がない場合は、create-domain-configuration コマンドを使用してドメイン設定を作成します。authenticationType の値は CUSTOM_AUTH_X509 にする必要があり、applicationProtocol の値は SECURE_MQTT または HTTPS にすることができます。

aws iot create-domain-configuration \ --domain-configuration-name domainConfigurationName \ --authentication-type CUSTOM_AUTH_X509 \ --application-protocol SECURE_MQTT \ --authorizer-config '{ "defaultAuthorizerName": my-custom-authorizer }'

ドメイン設定が既にある場合は、update-domain-configuration コマンドの更新 authenticationType と必要に応じて applicationProtocol を使用します。デフォルトのエンドポイント (iot:Data-ATS) では、認証タイプやプロトコルを変更できないことに注意してください。

aws iot update-domain-configuration \ --domain-configuration-name domainConfigurationName \ --authentication-type CUSTOM_AUTH_X509 \ --application-protocol SECURE_MQTT \ --authorizer-config '{ "defaultAuthorizerName": my-custom-authorizer }'
domain-configuration-name

ドメイン構成の名前。

authentication-type

ドメイン設定の認証タイプ。詳細については、「認証タイプの選択」を参照してください。

application-protocol

デバイスが AWS IoT Coreとの通信に使用するアプリケーションプロトコル。詳細については、「アプリケーションプロトコルの選択」を参照してください。

--authorizer-config

ドメイン設定でオーソライザー設定を指定するオブジェクト。

defaultAuthorizerName

ドメイン構成のオーソライザー名。

詳細については、「AWS IoT API リファレンス」の「CreateDomainConfiguration」と「UpdateDomainConfiguration」を参照してください。ドメイン設定の詳細については、「ドメイン設定」を参照してください。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.