カスタマーマネージドドメインの作成と設定 - AWS IoT Core

カスタマーマネージドドメインの作成と設定

ドメイン設定では、AWS IoT Core に接続するカスタムの完全修飾ドメイン名 (FQDN) を指定できます。カスタマーマネージドドメイン (カスタムドメインとも呼ばれます) を使用すると、ブランディング目的で独自のドメインまたは会社の独自のドメインをカスタマーに公開できる、新しいブローカーを指すように独自のドメインを簡単に変更できる、マルチテナンシーをサポートして、同じ AWS アカウント 内の異なるドメインを持つカスタマーにサービスを提供できる、証明書の署名に使用されるルート認証局 (CA)、署名アルゴリズム、証明書チェーンの深さ、および証明書のライフサイクルなど、独自のサーバー証明書の詳細を管理できるなど、多くの利点があります。

カスタムドメインを使用してドメイン設定をセットアップするワークフローは、次の 3 つの段階で構成されます。

AWS Certificate Manager でのサーバー証明書の登録

カスタムドメインを使用してドメイン設定を作成する前に、サーバー証明書チェーンを AWS Certificate Manager (ACM) に 登録する必要があります。次の 3 種類のサーバー証明書を使用できます。

注記

AWS IoT Core は、証明書が Mozilla の信頼できる CA バンドルに含まれている場合、公開 CA によって署名されていると見なします。

証明書の要件

証明書を ACM にインポートするための要件については、証明書をインポートするための前提条件を参照してください。これらの要件に加えて、AWS IoT Core では次の要件が追加されます。

  • リーフ証明書には、serverAuth (TLS Web Server Authentication) の値を持つ Extended Key Usage x509 v3 拡張が含まれている必要があります。ACM から証明書をリクエストすると、この拡張が自動的に追加されます。

  • 証明書チェーンの最大深度は 5 個の証明書です。

  • 証明書チェーンの最大サイズは 16 KB です。

  • サポートされる暗号化アルゴリズムとキーサイズには、RSA 2048 ビット (RSA_2048) と ECDSA 256 ビット (EC_prime256v1) が含まれます。

複数のドメインに対する 1 つの証明書の使用

1 つの証明書を使用して複数のサブドメインをカバーする場合は、共通名 (CN) フィールドまたは主体者別名 (SAN) フィールドにワイルドカードドメインを使用します。たとえば、*.iot.example.com を使用して、dev.iot.example.com、qa.iot.example.com、および prod.iot.example.com をカバーします。各 FQDN には独自のドメイン設定が必要ですが、複数のドメイン設定では、同じワイルドカード値が使用できます。CN または SAN は、カスタムドメインとして使用する FQDN をカバーする必要があります。SAN が存在する場合、CN は無視されます。SAN は、カスタムドメインとして使用する FQDN をカバーする必要があります。このカバレッジは、完全一致またはワイルドカード一致です。ワイルドカード証明書が検証され、アカウントに登録されると、そのリージョンの他のアカウントは、証明書と重複するカスタムドメインを作成できなくなります。

次のセクションでは、各種類の証明書を取得する方法について説明します。すべての証明書リソースには、ドメイン設定の作成時に使用する ACM に登録された Amazon リソースネーム (ARN) が必要です。

ACM によって生成されたパブリック証明書

RequestCertificate API を使用して、カスタムドメインのパブリック証明書を生成できます。この方法で証明書を生成すると、ACM はカスタムドメインの所有権を検証します。詳細については、AWS Certificate Manager ユーザーガイドの「パブリック証明書のリクエスト」を参照してください。

公開 CA によって署名された外部証明書

パブリック CA (Mozilla の信頼できる ca-bundle に含まれる CA) によって署名されたサーバー証明書が既にある場合は、ImportCertificate API を使用して証明書チェーンを ACM に直接インポートできます。このタスク、前提条件および証明書形式の要件の詳細については、「証明書のインポート」を参照してください。

プライベート CA によって署名された外部証明書

プライベート CA によって署名されたサーバー証明書または自己署名されたサーバー証明書が既にある場合は、その証明書を使用してドメイン構成を作成できますが、ドメインの所有権を検証するために ACM に追加のパブリック証明書を作成する必要もあります。これを行うには、ImportCertificate API を使用してサーバー証明書チェーンを ACM に登録します。このタスク、前提条件および証明書形式の要件の詳細については、「証明書のインポート」を参照してください。

検証証明書の作成

証明書を ACM にインポートした後で、RequestCertificate API を使用してカスタムドメインのパブリック証明書を生成します。この方法で証明書を生成すると、ACM はカスタムドメインの所有権を検証します。詳細については、「パブリック証明書のリクエスト」を参照してください。ドメイン設定を作成するときは、このパブリック証明書を検証証明書として使用します。

ドメイン設定の作成

CreateDomainConfiguration API を使用して、カスタムドメインで設定可能なエンドポイントを作成します。カスタムドメインのドメイン設定は、次のもので構成されます。

  • domainConfigurationName

    ドメイン設定を識別するユーザー定義名 IoT: で始まるドメイン設定名は、デフォルトのエンドポイント用に予約されており、使用できません。また、この値は AWS リージョン に固有である必要があります。

  • domainName

    デバイスが AWS IoT Core に接続するために使用する FQDN です。AWS IoT Core は、サーバー名表示 (SNI) TLS 拡張を使用してドメイン設定を適用します。デバイスは、接続時にこの拡張機能を使用し、ドメイン設定で指定されているドメイン名と同じサーバー名を渡す必要があります。

  • serverCertificateArns

    ACM に登録したサーバー証明書チェーンの ARN。AWS IoT Core では、現在サーバー証明書を 1 つだけサポートしています。

  • validationCertificateArn

    カスタムドメインの所有権を検証するために ACM で生成したパブリック証明書の ARN。パブリックに署名されたサーバー証明書または ACM によって生成されたサーバー証明書を使用する場合、この引数は不要です。

  • defaultAuthorizerName (optional)

    エンドポイントで使用するカスタムオーソライザーの名前。

  • allowAuthorizerOverride

    リクエストの HTTP ヘッダーで別のオーソライザーを指定することによって、デバイスがデフォルトのオーソライザーを上書きできるかどうかを指定するブール値。defaultAuthorizerName の値が指定されている場合、この値は必須です。

  • serviceType

    AWS IoT Core は現在、DATA サービスタイプのみをサポートしています。DATA を指定すると、AWS IoT はエンドポイントタイプが iot:Data-ATS のエンドポイントを返します。

  • TlsConfig (オプション)

    ドメインの TLS 構成を指定するオブジェクト。詳細については、「ドメイン設定での TLS 設定の設定」を参照してください。

  • serverCertificateConfig (オプション)

    ドメインのサーバー証明書設定を指定するオブジェクト。詳細については、「OCSP ステープリングのサーバー証明書設定」を参照してください。

次の AWS CLI コマンドは、iot.example.com のドメイン設定を作成します。

aws iot create-domain-configuration --domain-configuration-name "myDomainConfigurationName" --service-type "DATA" --domain-name "iot.example.com" --server-certificate-arns serverCertARN --validation-certificate-arn validationCertArn
注記

ドメイン設定の作成後、AWS IoT Core がカスタムサーバー証明書を提供するまで最大 60 分かかる場合があります。

詳細については、「ドメイン設定の管理」を参照してください。

DNS レコードの作成

サーバー証明書チェーンを登録してドメイン設定を作成したら、カスタムドメインが AWS IoT ドメインを指すように DNS レコードを作成します。このレコードは、AWS IoT タイプの iot:Data-ATS エンドポイントを指している必要があります。エンドポイントを取得するには、DescribeEndpoint API を使用します。

次の AWS CLI コマンドは、エンドポイントを取得する方法を示しています。

aws iot describe-endpoint --endpoint-type iot:Data-ATS

iot:Data-ATS エンドポイントを取得したら、カスタムドメインからこの CNAME エンドポイントへの AWS IoT レコードを作成します。同じ AWS アカウント に複数のカスタムドメインを作成する場合は、この同じ iot:Data-ATS エンドポイントにエイリアスを作成します。

トラブルシューティング

デバイスをカスタムドメインに接続できない場合は、AWS IoT Core がサーバー証明書を承諾および適用していることを確認してください。AWS IoT Core コンソールまたは AWS CLI を使用して、AWS IoT Core が証明書を承諾していることを確認できます。

AWS IoT Core コンソールを使用するには、[Settings] (設定) ページに移動し、ドメイン設定名を選択します。[Server certificate details] (サーバー証明書の詳細) セクションで、ステータスとステータスの詳細を確認します。証明書が無効な場合は、ACM で、前のセクションでリストされている証明書要件を満たす証明書に置き換えます。証明書に同じ ARN がある場合、AWS IoT Core はそれを取得して自動的に適用します。

AWS CLI を使用して証明書のステータスを確認するには、DescribeDomainConfiguration API を呼び出して、ドメイン設定名を指定します。

注記

証明書が無効な場合、AWS IoT Core は引き続き最後の有効な証明書を提供します。

次の openssl コマンドを使用して、エンドポイントで提供されている証明書を確認できます。

openssl s_client -connect custom-domain-name:8883 -showcerts -servername custom-domain-name