フリートプロビジョニングを使用したデバイス証明書がないデバイスのプロビジョニング - AWS(AWS) IoT コア

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

フリートプロビジョニングを使用したデバイス証明書がないデバイスのプロビジョニング

AWS IoT フリートプロビジョニングを使用することで、AWS IoT は、初めて AWS IoT に接続するときにデバイス証明書とプライベートキーを生成し、デバイスに安全に配信できます。

フリートプロビジョニングを使用するには、次の 2 つの方法があります。

  • クレームによるもの

  • 信頼されたユーザーによるもの

クレームによるプロビジョニング

デバイスは、プロビジョニングクレーム証明書とプライベートキー(特別な目的の認証情報)が埋め込まれた状態で製造できます。これらの証明書が AWS IoT に登録されている場合、サービスはそれらを、デバイスが通常のオペレーションで使用できる一意のデバイス証明書と交換できます。このプロセスには、以下のステップが含まれます。

デバイスを配送する前に

  1. CreateProvisioningTemplate を呼び出して、プロビジョニングテンプレートを作成します。この API はテンプレート ARN を返します。詳細については、デバイスプロビジョニング MQTT API を参照してください。

    また、AWS IoT コンソールからフリートプロビジョニングテンプレートを作成することもできます。

    1. ナビゲーションペインで、[Onboard (オンボード)]、[Fleet provisioning templates (フリートプロビジョニングテンプレート)] の順に選択します。

    2. [Create (作成)] を選択し、プロンプトに従います。

  2. プロビジョニングクレーム証明書として使用する証明書および関連付けられたプライベートキーを作成します。

  3. これらの証明書を AWS IoT に登録し、証明書の使用を制限する IoT ポリシーを関連付けます。次の IoT ポリシーの例では、このポリシーに関連付けられた証明書の使用をプロビジョニングデバイスに制限しています。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iot:Connect"], "Resource": "*" }, { "Effect": "Allow", "Action": ["iot:Publish","iot:Receive"], "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topic/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topic/$aws/provisioning-templates/templateName/provision/*" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/provisioning-templates/templateName/provision/*" ] } ] }
  4. デバイスのプロビジョニング時に、アカウント内のモノや証明書などの IoT リソースを作成または更新するアクセス許可を AWS IoT サービスに付与します。これを行うには、AWS IoT サービスプリンシパルを信頼する IAM ロール (プロビジョニングロールと呼ばれる) に AWSIoTThingsRegistration 管理ポリシーをアタッチします。

  5. プロビジョニングクレーム証明書が安全に埋め込まれたデバイスを製造します。

これで、デバイスを設置して使用する場所に配送する準備ができました。

重要

プロビジョニングクレームプライベートキーは、デバイス上を含め、常に保護する必要があります。AWS IoT CloudWatch メトリクスとログを使用して、誤用の兆候を監視することをお勧めします。誤用を検出した場合は、プロビジョニングクレーム証明書を無効にして、デバイスのプロビジョニングに使用できないようにします。

デバイスを使用できるように初期化するには

  1. デバイスは AWS IoT に対して、AWS IoT デバイスとモバイル SDKs を使用して接続し、デバイスにインストールされているプロビジョニングクレーム証明書を使用して認証されます。

  2. デバイスは、以下のオプションのいずれかを使用して、永続的な証明書とプライベートキーを取得します。デバイスは、AWS IoT での今後のすべての認証にその証明書とキーを使用します。

    1. CreateKeysAndCertificate を呼び出して、AWS 認定権限により新しい証明書とプライベートキーを作成します。

      または

    2. CreateCertificateFromCsr を呼び出して、プライベートキーを安全に保つ証明書署名リクエストから証明書を生成します。

  3. デバイスから RegisterThing を呼び出してデバイスを AWS IoT に登録し、クラウドリソースを作成します。

    Fleet Provisioningサービスは、プロビジョニングテンプレートで定義されているように、モノ、モノグループ、属性などのクラウドリソースを作成します。

  4. デバイスに永続的な証明書を保存した後、デバイスはプロビジョニングクレーム証明書を使用して開始したセッションから切断し、永続的な証明書を使用して再接続する必要があります。

これで、デバイスは AWS IoT と正常に通信する準備ができました。

信頼できるユーザーによるプロビジョニング

多くの場合、エンドユーザーやインストール技術者などの信頼されたユーザーがモバイルアプリを使用してデプロイされた場所にデバイスを設定するときに、デバイスは AWS IoT に初めて接続します。

重要

この手順を実行するには、信頼されたユーザーのアクセスとアクセス許可を管理する必要があります。そのための 1 つの方法は、信頼されたユーザーにアカウントを用意し、そのアカウントでそれらのユーザーを認証し、この手順の実行に必要な AWS IoT 機能および API へのアクセスを許可することです。

デバイスを配送する前に

  1. 通話 CreateProvisioningTemplate プロビジョニング・テンプレートを作成し、templateArn および templateName.

  2. 信頼されたユーザーがプロビジョニングプロセスを開始するために使用する IAM ロールを作成します。プロビジョニングテンプレートでは、そのユーザーだけがデバイスをプロビジョニングできます。たとえば、 と指定します。

    { "Effect": "Allow", "Action": [ "iot:CreateProvisioningClaim", ], "Resource": [ "arn:aws:aws-region:aws-account-id:provisioningtemplate/templateName" ] }
  3. デバイスのプロビジョニング時に、アカウント内のモノや証明書などの IoT リソースを作成または更新するアクセス許可を AWS IoT サービスに付与します。これを行うには、AWS IoT サービスプリンシパルを信頼する IAM ロール (プロビジョニングロールと呼ばれる) に AWSIoTThingsRegistration 管理ポリシーをアタッチします。

  4. 信頼できるユーザーを識別する手段を提供します。たとえば、ユーザーを認証し、ユーザーとの対話を承認できるアカウントをユーザーに提供します。 AWS デバイスを登録するために必要な API。

デバイスを使用できるように初期化するには

  1. 信頼されたユーザーは、プロビジョニングモバイルアプリまたはウェブサービスにサインインします。

  2. モバイルアプリまたはウェブアプリケーションは、IAM ロールを使用し、CreateProvisioningClaim を呼び出して、AWS IoT から一時的なプロビジョニングクレームを取得します。

    注記

    セキュリティ上の理由から、CreateProvisioningClaim から返される一時的なプロビジョニングクレーム証明書は 5 分間のみ有効です。以下の手順では、一時的なプロビジョニングクレーム証明書の有効期限が切れる前に、有効な証明書を正常に返す必要があります。一時的なプロビジョニングクレーム証明書はアカウントの証明書のリストには表示されません。

  3. モバイルアプリまたはウェブアプリケーションは、Wi-Fi 認証情報などの必要な設定情報と共に、一時的なプロビジョニングクレーム証明書をデバイスに提供します。

  4. デバイスは、一時的なプロビジョニングクレーム証明書と AWS IoT デバイスとモバイル SDKs を使用して AWS IoT に接続します。

    注記

    デバイスは以下の手順を実行して、一時的なプロビジョニングクレーム証明書を使用して AWS IoT に接続してから 5 分以内に RegisterThing を呼び出す必要があります。

  5. デバイスは、以下のオプションのいずれかを使用して、永続的な証明書とプライベートキーを取得します。デバイスは、AWS IoT での今後のすべての認証にその証明書とキーを使用します。

    1. CreateKeysAndCertificate を呼び出して、AWS 認定権限により新しい証明書とプライベートキーを作成します。

      または

    2. CreateCertificateFromCsr を呼び出して、プライベートキーを安全に保つ証明書署名リクエストから証明書を生成します。

  6. デバイスは RegisterThing を呼び出してデバイスを AWS IoT に登録し、クラウドリソースを作成します。この手順は、一時的なプロビジョニングクレーム証明書を使用して AWS IoT に接続してから 5 分以内に実行される必要があります。

    フリートプロビジョニングサービスは、プロビジョニングテンプレートで定義されているように、IoT、モノグループ、属性などのクラウドリソースを作成します。

  7. 永続的な証明書をデバイスに保存した後、デバイスは一時的なプロビジョニングクレーム証明書を使用して開始したセッションから切断し、永続的な証明書を使用して再接続する必要があります。

これで、デバイスは AWS IoT と正常に通信する準備ができました。

AWS CLI での事前プロビジョニングフックの使用

次の手順では、事前プロビジョニングフックを使用してプロビジョニングテンプレートを作成します。ここで使用されている Lambda 関数の例は変更可能です。

事前プロビジョニングフックを作成してプロビジョニングテンプレートに適用するには

  1. 入力と出力を定義した Lambda 関数を作成します。Lambda 関数は高度なカスタマイズが可能な allowProvisioning であり、事前プロビジョニングフックを作成するには parameterOverrides が必要です。Lambda 関数の作成の詳細については、「AWS コマンドラインインターフェイスで AWS Lambda を使用する」を参照してください。

    Lambda 関数出力の例を次に示します。

    { "allowProvisioning": True, "parameterOverrides": { "incomingKey0": "incomingValue0", "incomingKey1": "incomingValue1" } }
  2. AWS IoT リソース・ベースのポリシーを使用して、 Lambdaですので、 AWS IoT に電話する許可 Lambda 機能。

    以下に示しているのは、Lambda に IoT アクセス許可を付与する add-permission の使用例です。

    aws lambda add-permission \ --function-name myLambdaFunction \ --statement-id iot-permission \ --action lambda:InvokeFunction \ --principal iot.amazonaws.com
  3. create-provisioning-template または update-provisioning-template コマンドを使用して、テンプレートに事前プロビジョニングフックを追加します。

    次の CLI 例では、create-provisioning-template を使用して、事前プロビジョニングフックを持つプロビジョニングテンプレートを作成します。

    aws iot create-provisioning template \ --template-name myTemplate \ --provisioning-role-arn arn:aws:iam:us-east-1:1234564789012:role/myRole \ --template-body file://template.json \ --pre-provisioning-hook file://hooks.json

    このコマンドの出力は以下のようになります。

    { "templateArn": "arn:aws:iot:us-east-1:1234564789012:provisioningtemplate/myTemplate", "defaultVersionId": 1, "templateName": myTemplate }

    また、パラメータをすべてコマンドラインパラメータ値として入力する代わりに、ファイルからロードして、時間を節約することもできます。詳細については、「ファイルから AWS CLI パラメータをロードする」を参照してください。次に、拡張された JSON 形式の template パラメータを示します。

    { "Parameters" : { "DeviceLocation": { "Type": "String" } }, "Mappings": { "LocationTable": { "Seattle": { "LocationUrl": "https://example.aws" } } }, "Resources" : { "thing" : { "Type" : "AWS::IoT::Thing", "Properties" : { "AttributePayload" : { "version" : "v1", "serialNumber" : "serialNumber" }, "ThingName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]}, "ThingTypeName" : {"Fn::Join":["",["ThingTypePrefix_",{"Ref":"SerialNumber"}]]}, "ThingGroups" : ["widgets", "WA"], "BillingGroup": "BillingGroup" }, "OverrideSettings" : { "AttributePayload" : "MERGE", "ThingTypeName" : "REPLACE", "ThingGroups" : "DO_NOTHING" } }, "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"}, "Status" : "Active" } }, "policy" : { "Type" : "AWS::IoT::Policy", "Properties" : { "PolicyDocument" : { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action":["iot:Publish"], "Resource": ["arn:aws:iot:us-east-1:504350838278:topic/foo/bar"] }] } } } }, "DeviceConfiguration": { "FallbackUrl": "https://www.example.com/test-site", "LocationUrl": { "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]} } }

    次に、拡張された JSON 形式の pre-provisioning-hook パラメータを示します。

    { "targetArn" : "arn:aws:lambda:us-east-1:765219403047:function:pre_provisioning_test", "payloadVersion" : "2020-04-01" }