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

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

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

AWS IoT フリートプロビジョニングを使用すると、 AWS IoT は、 に AWS IoT 初めて接続するときに、デバイス証明書とプライベートキーを生成してデバイスに安全に配信できます。 は、Amazon ルート認証局 (CA) によって署名されたクライアント証明書 AWS IoT を提供します。

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

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

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

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

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

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

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

  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 Device SDKsMobile SDKs、および AWS IoT Device Client、デバイスにインストールされているプロビジョニングクレーム証明書 AWS IoT を使用して に接続し、 で認証します。

    注記

    セキュリティ上の理由から、CreateCertificateFromCsr および CreateKeysAndCertificate によって返される certificateOwnershipToken は 1 時間後に有効期限切れになります。certificateOwnershipToken が有効期限切れになる前に、RegisterThing を呼び出す必要があります。CreateCertificateFromCsr または CreateKeysAndCertificate によって作成された証明書がトークンの有効期限が切れるまでにアクティベートされず、ポリシーまたはモノにアタッチされない場合、証明書は削除されます。トークンの有効期限が切れた場合、デバイスは CreateCertificateFromCsr または CreateKeysAndCertificate を呼び出して新しい証明書を生成します。

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

    1. を呼び出しCreateKeysAndCertificateて、 AWS 認証局を使用して新しい証明書とプライベートキーを作成します。

      または

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

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

    フリートプロビジョニングサービスでは、プロビジョニングテンプレートを使用して、IoT のモノなどのクラウドリソースを定義および作成します。このテンプレートでは、モノが属する属性とグループを指定できます。新しいモノを追加するには、モノのグループが存在している必要があります。

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

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

信頼されたユーザーによるプロビジョニング

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

重要

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

デバイスを配送する前に
  1. CreateProvisioningTemplate を呼び出してプロビジョニングテンプレートを作成し、その templateArn および templateName を返します。

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

    { "Effect": "Allow", "Action": [ "iot:CreateProvisioningClaim" ], "Resource": [ "arn:aws:iot: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 を使用して AWS IoT Device SDKsMobile SDKs、および AWS IoT Device Client に接続します。

  5. デバイスは、一時的なプロビジョニングクレーム証明書 AWS IoT を使用して に接続してから 5 分以内に、これらのオプションのいずれかを使用して永続的な証明書とプライベートキーを取得します。デバイスは証明書とキーを使用します。これらのオプションは、 での今後のすべての認証に返されます AWS IoT。

    1. を呼び出しCreateKeysAndCertificateて、 AWS 認証局を使用して新しい証明書とプライベートキーを作成します。

      または

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

    注記

    CreateKeysAndCertificate または は、一時的なプロビジョニングクレーム証明書 AWS IoT を使用して に接続してから 5 分以内に有効な証明書を返すCreateCertificateFromCsr必要があります。

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

    フリートプロビジョニングサービスでは、プロビジョニングテンプレートを使用して、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 を呼び出すため、Lambda 関数を呼び出すアクセス許可を に付与 AWS IoT する必要があります。

    重要

    Lambda アクションにアタッチされたポリシーのグローバル条件コンテキストキーに source-arn または source-account を必ず含め、アクセス許可の操作を防止します。詳細については、「サービス間での不分別な代理処理の防止」を参照してください。

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

    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" }