翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
証明書プロバイダーを使用した 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 フリートプロビジョニング用の 証明書プロバイダー](images/provisioning-cert-provider.png)
-
新しい 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" }
登録が成功すると、 CreateCertificateFromCsr
はCreateCertificateFromCsr
レスポンス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 関数への呼び出しアクセス許可を付与する必要があります。混乱した代理問題を避けるため、呼び出しアクセス許可
sourceAccount
にsourceArn
と を設定することをお勧めします。詳細については、クロスサービスでの混乱した代理処理を防止するを参照してください。
次の 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
\ --lambdaFunctionArnarn: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 リファレンスCreateCertificateProvider
のAWS IoT「」を参照してください。
を使用してセルフマネージド証明書署名を選択するには AWS Management Console、次の手順に従います。
AWS IoT コンソール
に移動します。 左側のナビゲーションのセキュリティ で、証明書署名 を選択します。
証明書署名ページの証明書署名の詳細 で、証明書署名方法の編集 を選択します。
証明書署名方法の編集 ページの証明書署名方法 で、セルフマネージド を選択します。
「セルフマネージド設定」セクションで、証明書プロバイダーの名前を入力し、Lambda 関数を作成または選択します。
証明書署名の更新 を選択します。
AWS CLI 証明書プロバイダーの コマンド
証明書プロバイダーを作成する
証明書プロバイダーを作成するには、 CreateCertificateProvider
API オペレーションまたは create-certificate-provider
CLI コマンドを使用します。
注記
証明書プロバイダーを作成すると、CreateCertificateFromCsr
フリートプロビジョニング用の API の動作が変更され、 へのすべての呼び出しCreateCertificateFromCsr
が証明書プロバイダーを呼び出して証明書を作成します。この動作は、証明書プロバイダーの作成後に変更されるまでに数分かかることがあります。
aws iot create-certificate-provider \ --certificateProviderName
my-certificate-provider
\ --lambdaFunctionArnarn: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
\ --lambdaFunctionArnarn: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 リファレンスListCertificateProvider
のAWS IoT「」を参照してください。