証明書プロバイダーを使用した AWS IoT Core セルフマネージド証明書署名 - AWS IoT Core

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

証明書プロバイダーを使用した AWS IoT Core セルフマネージド証明書署名

AWS IoT Core 証明書プロバイダーを作成して、 AWS IoT フリートプロビジョニングで証明書署名リクエスト (CSRsに署名できます。証明書プロバイダーは、フリーCreateCertificateFromCsrトプロビジョニング の Lambda 関数と MQTT API を参照します。Lambda 関数は CSR を受け入れ、署名付きクライアント証明書を返します。

に証明書プロバイダーがない場合 AWS アカウント、フリートプロビジョニングで CreateCertificateFromCsr MQTT API が呼び出され、CSR から証明書が生成されます。証明書プロバイダーを作成すると、CreateCertificateFromCsr MQTT API の動作が変更され、この MQTT API へのすべての呼び出しが証明書プロバイダーを呼び出して証明書を発行します。

AWS IoT Core 証明書プロバイダーを使用すると、 などのプライベート認証機関 (CAs)AWS Private CA、他のパブリックに信頼された CAs 、または独自のパブリックキーインフラストラクチャ (PKI) を利用して CSR に署名するソリューションを実装できます。さらに、証明書プロバイダーを使用して、有効期間、署名アルゴリズム、発行者、拡張機能などのクライアント証明書のフィールドをカスタマイズできます。

重要

ごとに作成できる証明書プロバイダーは 1 つだけです AWS アカウント。署名動作の変更は、 から証明書プロバイダーを削除するまでCreateCertificateFromCsr 、MQTT API を呼び出すフリート全体に適用されます AWS アカウント。

フリートプロビジョニングでのセルフマネージド証明書署名の仕組み

主要なコンセプト

以下の概念は、フリー AWS IoT トプロビジョニングでのセルフマネージド証明書署名の仕組みを理解するのに役立つ詳細を提供します。詳細については、「フリートプロビジョニング を使用してデバイス証明書を持たないデバイスのプロビジョニング」を参照してください。

AWS IoT フリートプロビジョニング

AWS IoT フリートプロビジョニング (フリートプロビジョニングの略) では、 は、 に AWS IoT Core 初めて接続するときにデバイス証明書 AWS IoT Core を生成し、デバイスに安全に配信します。フリートプロビジョニングを使用して、デバイス証明書を持たないデバイスを に接続できます AWS IoT Core。

証明書署名リクエスト (CSR)

フリートプロビジョニングのプロセスでは、デバイスはフリートプロビジョニング MQTT API AWS IoT Core を介して にリクエストを行います。 APIs このリクエストには、クライアント証明書を作成するために署名される証明書署名リクエスト (CSR) が含まれています。

AWS フリートプロビジョニングでの マネージド証明書署名

AWS managed は、フリートプロビジョニングでの証明書署名のデフォルト設定です。 AWS マネージド証明書署名では、 AWS IoT Core は独自の CA を使用して CSRs に署名します。 CAs

フリートプロビジョニングでのセルフマネージド証明書署名

セルフマネージド型は、フリートプロビジョニングでの証明書署名のもう 1 つのオプションです。セルフマネージド証明書署名では、CSRs に署名する AWS IoT Core 証明書プロバイダーを作成します。セルフマネージド証明書署名を使用して、 AWS プライベート CA、他のパブリックに信頼された CA、または独自のパブリックキーインフラストラクチャ (PKI) によって生成された CA で CSRs に署名できます。

AWS IoT Core 証明書プロバイダー

AWS IoT Core 証明書プロバイダー (証明書プロバイダーの略) は、フリートプロビジョニングでの自己管理型証明書署名に使用されるカスタマー管理型リソースです。

次の図は、 AWS IoT フリートプロビジョニングでの自己証明書署名の仕組みを簡略化したものです。

AWS IoT Core フリートプロビジョニング用の 証明書プロバイダー
  • 新しい IoT デバイスが製造されるか、フリートに導入されると、 で自身を認証するためにクライアント証明書が必要です AWS IoT Core。

  • フリートプロビジョニングプロセスの一環として、デバイスは、フリートプロビジョニング MQTT API を通じてクライアント証明書 AWS IoT Core のリクエストを に送ります。 APIs このリクエストには、証明書署名リクエスト (CSR) が含まれます。

  • AWS IoT Core は証明書プロバイダーを呼び出し、CSR を入力としてプロバイダーに渡します。

  • 証明書プロバイダーは CSR を入力として受け取り、クライアント証明書を発行します。

    AWS マネージド証明書署名の場合、 は独自の CA を使用して CSR AWS IoT Core に署名し、クライアント証明書を発行します。

  • 発行されたクライアント証明書により、デバイスはフリートのプロビジョニングを続行し、 との安全な接続を確立します AWS IoT Core。

証明書プロバイダーの Lambda 関数入力

AWS IoT Core は、デバイスが Lambda 関数に登録するときに、次のオブジェクトを Lambda 関数に送信します。の値は、CreateCertificateFromCsrリクエストで提供されるプライバシー強化メール (PEM) 形式の CSR certificateSigningRequestです。principalId は、CreateCertificateFromCsrリクエストの実行 AWS IoT Core 時に に接続するために使用されるプリンシパルの ID です。 clientIdは、MQTT 接続に設定されたクライアント ID です。

{ "certificateSigningRequest": "string", "principalId": "string", "clientId": "string" }

証明書プロバイダーの Lambda 関数の戻り値

Lambda 関数は、 certificatePem値を含むレスポンスを返す必要があります。以下は、成功したレスポンスの例です。 AWS IoT Core は戻り値 (certificatePem) を使用して証明書を作成します。

{ "certificatePem": "string" }

登録が成功すると、 CreateCertificateFromCsrCreateCertificateFromCsrレスポンスcertificatePemで同じ を返します。詳細については、「」のレスポンスペイロードの例を参照してくださいCreateCertificateFromCsr

Lambda 関数の例

証明書プロバイダーを作成する前に、CSR に署名する Lambda 関数を作成する必要があります。Python の Lambda 関数の例を次に示します。この関数は を呼び出し AWS Private CA て、プライベート CA と署名アルゴリズムを使用して入力 CSR SHA256WITHRSA に署名します。返されるクライアント証明書は 1 年間有効です。の詳細 AWS Private CA とプライベート CA の作成方法については、AWS 「プライベート CA とは」および「プライベート CA の作成」を参照してください。

import os import time import uuid import boto3 def lambda_handler(event, context): ca_arn = os.environ['CA_ARN'] csr = (event['certificateSigningRequest']).encode('utf-8') acmpca = boto3.client('acm-pca') cert_arn = acmpca.issue_certificate( CertificateAuthorityArn=ca_arn, Csr=csr, Validity={"Type": "DAYS", "Value": 365}, SigningAlgorithm='SHA256WITHRSA', IdempotencyToken=str(uuid.uuid4()) )['CertificateArn'] # Wait for certificate to be issued time.sleep(1) cert_pem = acmpca.get_certificate( CertificateAuthorityArn=ca_arn, CertificateArn=cert_arn )['Certificate'] return { 'certificatePem': cert_pem }
重要
  • Lambda 関数によって返される証明書は、証明書署名リクエスト (CSR) と同じサブジェクト名とパブリックキーを持つ必要があります。

  • Lambda 関数の実行は 5 秒で完了する必要があります。

  • Lambda 関数は、証明書プロバイダーリソースと同じ AWS アカウント およびリージョンに存在する必要があります。

  • AWS IoT サービスプリンシパルには、Lambda 関数への呼び出しアクセス許可を付与する必要があります。混乱した代理問題を避けるため、呼び出しアクセス許可sourceAccountsourceArnと を設定することをお勧めします。詳細については、クロスサービスでの混乱した代理処理を防止するを参照してください。

次の Lambda のリソースベースのポリシー例では AWS IoT 、Lambda 関数を呼び出すアクセス許可を付与します。

{ "Version": "2012-10-17", "Id": "InvokePermission", "Statement": [ { "Sid": "LambdaAllowIotProvider", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "StringEquals": { "AWS:SourceAccount": "123456789012" }, "ArnLike": { "AWS:SourceArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" } } } ] }

フリートプロビジョニング用のセルフマネージド証明書署名

AWS CLI または を使用して、フリートプロビジョニング用のセルフマネージド証明書署名を選択できます AWS Management Console。

セルフマネージド証明書署名を選択するには、フリートプロビジョニングで CSRs に署名する証明書プロバイダーを作成 AWS IoT Core する必要があります。 は証明書プロバイダーを AWS IoT Core 呼び出し、CSR を入力として受け取り、クライアント証明書を返します。証明書プロバイダーを作成するには、 CreateCertificateProvider API オペレーションまたは create-certificate-provider CLI コマンドを使用します。

注記

証明書プロバイダーを作成すると、CreateCertificateFromCsrフリートプロビジョニング用の API の動作が変更され、 へのすべての呼び出しCreateCertificateFromCsrが証明書プロバイダーを呼び出して証明書を作成します。この動作は、証明書プロバイダーの作成後に変更されるまでに数分かかることがあります。

aws iot create-certificate-provider \ --certificateProviderName my-certificate-provider \ --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \ --accountDefaultForOperations CreateCertificateFromCsr

このコマンドの出力例を次に示します。

{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }

詳細については、 API リファレンスCreateCertificateProviderAWS IoT「」を参照してください。

を使用してセルフマネージド証明書署名を選択するには AWS Management Console、次の手順に従います。

  1. AWS IoT コンソールに移動します。

  2. 左側のナビゲーションのセキュリティ で、証明書署名 を選択します。

  3. 証明書署名ページの証明書署名の詳細 で、証明書署名方法の編集 を選択します。

  4. 証明書署名方法の編集 ページの証明書署名方法 で、セルフマネージド を選択します。

  5. 「セルフマネージド設定」セクションで、証明書プロバイダーの名前を入力し、Lambda 関数を作成または選択します。

  6. 証明書署名の更新 を選択します。

AWS CLI 証明書プロバイダーの コマンド

証明書プロバイダーを作成する

証明書プロバイダーを作成するには、 CreateCertificateProvider API オペレーションまたは create-certificate-provider CLI コマンドを使用します。

注記

証明書プロバイダーを作成すると、CreateCertificateFromCsrフリートプロビジョニング用の API の動作が変更され、 へのすべての呼び出しCreateCertificateFromCsrが証明書プロバイダーを呼び出して証明書を作成します。この動作は、証明書プロバイダーの作成後に変更されるまでに数分かかることがあります。

aws iot create-certificate-provider \ --certificateProviderName my-certificate-provider \ --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \ --accountDefaultForOperations CreateCertificateFromCsr

このコマンドの出力例を次に示します。

{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }

詳細については、AWS IoT「 API リファレンスCreateCertificateProvider」の「」を参照してください。

証明書プロバイダーを更新する

証明書プロバイダーを更新するには、 UpdateCertificateProvider API オペレーションまたは update-certificate-provider CLI コマンドを使用します。

aws iot update-certificate-provider \ --certificateProviderName my-certificate-provider \ --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-2 \ --accountDefaultForOperations CreateCertificateFromCsr

このコマンドの出力例を次に示します。

{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }

詳細については、AWS IoT「 API リファレンスUpdateCertificateProvider」の「」を参照してください。

証明書プロバイダーを記述する

証明書プロバイダーを記述するには、 DescribeCertificateProvider API オペレーションまたは describe-certificate-provider CLI コマンドを使用します。

aws iot describe-certificate-provider --certificateProviderName my-certificate-provider

このコマンドの出力例を次に示します。

{ "certificateProviderName": "my-certificate-provider", "lambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "accountDefaultForOperations": [ "CreateCertificateFromCsr" ], "creationDate": "2022-11-03T00:15", "lastModifiedDate": "2022-11-18T00:15" }

詳細については、AWS IoT「 API リファレンスDescribeCertificateProvider」の「」を参照してください。

証明書プロバイダーを削除する

証明書プロバイダーを削除するには、 DeleteCertificateProvider API オペレーションまたは delete-certificate-provider CLI コマンドを使用します。証明書プロバイダーリソースを削除すると、 の動作CreateCertificateFromCsrが再開され、CSR AWS IoT から によって署名された証明書 AWS IoT が作成されます。

aws iot delete-certificate-provider --certificateProviderName my-certificate-provider

このコマンドでは、出力が生成されません。

詳細については、AWS IoT「 API リファレンスDeleteCertificateProvider」の「」を参照してください。

証明書プロバイダーを一覧表示する

内の証明書プロバイダーを一覧表示するには AWS アカウント、 ListCertificateProviders API オペレーションまたは list-certificate-providers CLI コマンドを使用します。

aws iot list-certificate-providers

このコマンドの出力例を次に示します。

{ "certificateProviders": [ { "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" } ] }

詳細については、 API リファレンスListCertificateProviderAWS IoT「」を参照してください。