Greengrass コアデバイスの AWS IoT フリートプロビジョニングをセットアップする - AWS IoT Greengrass

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

Greengrass コアデバイスの AWS IoT フリートプロビジョニングをセットアップする

AWS IoT Greengrass Core ソフトウェアをフリートプロビジョニングでインストールするには、まず、次のリソースを AWS アカウント でセットアップする必要があります。これらのリソースにより、デバイスは自身を AWS IoT に登録することができるようになり、Greengrass コアデバイスとして動作します。このセクションの手順を一度実行して、これらのリソースを AWS アカウント で設定してください。

  • トークン交換 IAM ロールは、コアデバイスが AWS サービスへの呼び出しを認証するために使用します。

  • AWS IoT ロールエイリアスは、トークン交換ロールを指します。

  • (オプション) AWS IoT ポリシーは、コアデバイスが AWS IoT および AWS IoT Greengrass サービスへの呼び出しを認証するために使用します。この AWS IoT ポリシーは、トークン交換ロールを指している AWS IoT ロールエイリアスの iot:AssumeRoleWithCertificate 許可を許可する必要があります。

    単一の AWS IoT ポリシーをフリート内のすべてのコアデバイスに使用するか、フリートプロビジョニングテンプレートを設定して、各コアデバイスに対して AWS IoT ポリシーを作成することができます。

  • AWS IoT フリートプロビジョニングテンプレート。このテンプレートでは、以下を指定する必要があります。

    • AWS IoT モノのリソース。既存のモノのグループのリストを指定して、オンラインになったときに各デバイスにコンポーネントをデプロイできます。

    • AWS IoT ポリシーリソース。このリソースは、次のいずれかのプロパティを定義できます。

      • 既存の AWS IoT ポリシーの名前。このオプションを選択した場合、このテンプレートから作成されたコアデバイスは同じ AWS IoT ポリシーを使用するようになり、そのアクセス許可はフリートとして管理することができます。

      • AWS IoT ポリシードキュメント。 このオプションを選択した場合、このテンプレートから作成する各コアデバイスは、一意の AWS IoT ポリシーを使用するようになり、各コアデバイスのアクセス許可を管理することができます。

    • AWS IoT 証明書リソース。この証明書リソースでは、AWS::IoT::Certificate::Id パラメータを使用して、証明書をコアデバイスにアタッチする必要があります。詳細については、「 AWS IoTデベロッパーガイド」の「J ust-in-time プロビジョニング」を参照してください。

  • フリートプロビジョニングテンプレートの AWS IoT プロビジョニングクレーム証明書とプライベートキーです。製造中にこの証明書とプライベートキーをデバイスに埋め込むことができます。埋め込むと、デバイスはオンライン状態になったときにデバイスを登録してプロビジョニングすることができます。

    重要

    プロビジョニングクレームプライベートキーは、Greengrass コアデバイス上にある場合を含め、常に保護する必要があります。Amazon CloudWatch メトリクスとログを使用して、デバイスをプロビジョニングするためのクレーム証明書の不正使用などの誤用の兆候をモニタリングすることをお勧めします。悪用を検出した場合は、プロビジョニングクレーム証明書を無効にして、デバイスのプロビジョニングに使用できないようにします。詳細については、「AWS IoT Core デベロッパーガイド」の「AWS IoT のモニタリング」を参照してください。

    デバイス数と AWS アカウント に自身を登録するデバイスについてより適切に管理できるように、フリートプロビジョニングテンプレートを作成するときに、事前プロビジョニングフックを指定することができます。事前プロビジョニングフックは、登録時にデバイスが提供するテンプレートパラメータを検証する AWS Lambda 関数です。例えば、デバイス ID をデータベースと照合して、デバイスにプロビジョニングする権限があることを確認する事前プロビジョニングフックを作成することができます。詳細については、「AWS IoT Core デベロッパーガイド」の「事前プロビジョニングフック」を参照してください。

  • プロビジョニングクレーム証明書にアタッチして、デバイスがフリートプロビジョニングテンプレートを登録および使用できるようにする AWS IoT ポリシー。

トークン交換ロールを作成する

Greengrass コアデバイスは、トークン交換ロールという IAM サービスロールを使用して、AWS サービスへの通話を承認します。デバイスはAWS IoT認証情報プロバイダーを使用して、このロールの一時的なAWS認証情報を取得します。これにより、デバイスは とやり取りしAWS IoT、Amazon CloudWatch Logs にログを送信し、Amazon S3 からカスタムコンポーネントアーティファクトをダウンロードできるようになります。詳細については、「コアデバイスが AWS サービスとやり取りできるように認証する」を参照してください。

AWS IoT のロールエイリアスを使用して、Greengrass コアデバイスのトークン交換ロールを設定します。ロールエイリアスは、デバイスのトークン交換ロールを変更できるようにしますが、デバイス設定は同じ内容に保たれます。詳細については、「AWS IoT Core デベロッパーガイド」の「AWS サービスへの直接呼び出しを認証する」を参照してください。

このセクションでは、トークン交換 IAM ロールとロールを指す AWS IoT ロールエイリアスを作成します。Greengrass コアデバイスを既に設定している場合、新しく作成せず、トークン交換ロールとロールエイリアスを使用できます。

トークン交換 IAM ロールを作成するには
  1. デバイスがトークン交換ロールとして使用できる IAM ロールを作成します。以下の操作を実行します。

    1. トークン交換ロールが必要とする、信頼できるポリシードキュメントが含まれるファイルを作成します。

      例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      nano device-role-trust-policy.json

      次の JSON をファイルにコピーします。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 信頼ポリシードキュメントでトークン交換ロールを作成します。

      • GreengrassV2TokenExchangeRole を作成する IAM ロールの名前に置き換えます。

      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      { "Role": { "Path": "/", "RoleName": "GreengrassV2TokenExchangeRole", "RoleId": "AROAZ2YMUHYHK5OKM77FB", "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole", "CreateDate": "2021-02-06T00:13:29+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } }
    3. トークン交換ロールが必要なアクセスポリシードキュメントを含むファイルを作成します。

      例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      nano device-role-access-policy.json

      次の JSON をファイルにコピーします。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "s3:GetBucketLocation" ], "Resource": "*" } ] }
      注記

      このアクセスポリシーでは、S3 バケットのコンポーネントアーティファクトへのアクセスが許可されていません。Amazon S3 でアーティファクトを定義するカスタムコンポーネントをデプロイするには、コアデバイスがコンポーネントアーティファクトを取得できるようにする許可をロールに追加する必要があります。詳細については、「コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する」を参照してください。

      コンポーネントアーティファクトに S3 バケットをまだ持っていない場合、バケットを作成した後でこれらのアクセス許可を追加できます。

    4. ポリシードキュメントから IAM ポリシーを作成します。

      • GreengrassV2TokenExchangeRoleAccess を作成する IAM ポリシーの名前に置き換えます。

      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      { "Policy": { "PolicyName": "GreengrassV2TokenExchangeRoleAccess", "PolicyId": "ANPAZ2YMUHYHACI7C5Z66", "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2021-02-06T00:37:17+00:00", "UpdateDate": "2021-02-06T00:37:17+00:00" } }
    5. IAM ポリシーをトークン交換ロールにアタッチします。

      • GreengrassV2TokenExchangeRole を IAM ロールの名前に置き換えます。

      • ポリシー ARN を前のステップで作成した IAM ポリシーの ARN に置き換えます。

      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess

      要求が正常に処理された場合、コマンドは出力されません。

  2. トークン交換ロールを指す AWS IoT ロールエイリアスを作成します。

    • を、作成するロールエイリアスの名前GreengrassCoreTokenExchangeRoleAliasに置き換えます。

    • ロール ARN を前のステップで作成した IAM ロールの ARN に置き換えます。

    aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole

    要求が正常に処理された場合、レスポンスは次の例のようになります。

    { "roleAlias": "GreengrassCoreTokenExchangeRoleAlias", "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias" }
    注記

    ロールエイリアスを作成するには、トークン交換 IAM ロールを AWS IoT に渡す許可が必要です。ロールエイリアスの作成時にエラーメッセージが表示された場合、AWS ユーザーがこの許可を得ていることを確認てください。詳細については、「AWS Identity and Access Management ユーザーガイド」の「AWS サービスにロールをわたす許可をユーザーに付与する」を参照してください。

AWS IoT ポリシーを作成する

デバイスを AWS IoT モノとして登録した後、そのデバイスはデジタル証明書を使用して AWS に認証できます。この証明書には、デバイスが証明書で使用できるアクセス許可を定義する 1 つ以上の AWS IoT ポリシーが含まれています。これらのポリシーにより、デバイスはと AWS IoT およびAWS IoT Greengrass と通信できるようになります。

AWS IoT フリートプロビジョニングにより、デバイスは AWS IoT に接続し、デバイス証明書を作成してダウンロードします。次のセクションで作成するフリートプロビジョニングテンプレートでは、AWS IoT がすべてのデバイスの証明書に同じ AWS IoT ポリシーを添付するか、各デバイス向けに新しいポリシーを作成するかを指定できます。

このセクションでは、AWS IoT がすべてのデバイスの証明書にアタッチする AWS IoT ポリシーを作成します。この方法では、すべてのデバイスの権限をフリートとして管理できます。代わりに、各デバイスに対して新しい AWS IoT ポリシーを作成するのであれば、このセクションをスキップして、フリートテンプレートを定義するときにそのポリシーを参照することができます。

AWS IoT ポリシーを作成するには
  • Greengrass コアデバイスのフリートへの AWS IoT 権限を定義する AWS IoT ポリシーを作成します。次のポリシーは、すべての MQTT トピックと Greengrass 操作へのアクセスを許可するため、デバイスがカスタムアプリケーションや新しい Greengrass 操作を必要とする今後の変更でも動作するようになります。このポリシーは iot:AssumeRoleWithCertificate アクセス許可を付与するため、デバイスで前のセクションで作成したトークン交換ロールを使用できるようになります。ユースケースに基づいてこのポリシーを制限できます。詳細については、「AWS IoT Greengrass V2 コアデバイス向けの最低限の AWS IoT ポリシー」を参照してください。

    以下の操作を実行します。

    1. Greengrass コアデバイスが必要な AWS IoT ポリシードキュメントを含むファイルを作成します。

      例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      nano greengrass-v2-iot-policy.json

      次の JSON をファイルにコピーします。

      • iot:AssumeRoleWithCertificate リソースを、前のセクションで作成した AWS IoT ロールエイリアスの ARN に置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:Connect", "greengrass:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias" } ] }
    2. ポリシードキュメントから AWS IoT ポリシーを作成します。

      • GreengrassV2IoTThingPolicy を、作成するポリシーの名前に置き換えます。

      aws iot create-policy --policy-name GreengrassV2IoTThingPolicy --policy-document file://greengrass-v2-iot-policy.json

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"iot:Publish\", \"iot:Subscribe\", \"iot:Receive\", \"iot:Connect\", \"greengrass:*\" ], \"Resource\": [ \"*\" ] }, { \"Effect\": \"Allow\", \"Action\": \"iot:AssumeRoleWithCertificate\", \"Resource\": \"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\" } ] }", "policyVersionId": "1" }

フリートプロビジョニングテンプレートを作成する

AWS IoT フリートプロビジョニングテンプレートは、AWS IoT モノ、ポリシーおよび証明書をプロビジョニングする方法を定義します。フリートプロビジョニングプラグインを使用して Greengrass コアデバイスをプロビジョニングするには、次の事項を指定するテンプレートを作成する必要があります。

  • AWS IoT モノのリソース。既存のモノのグループのリストを指定して、オンラインになったときに各デバイスにコンポーネントをデプロイできます。

  • AWS IoT ポリシーリソース。このリソースは、次のいずれかのプロパティを定義できます。

    • 既存の AWS IoT ポリシーの名前。このオプションを選択した場合、このテンプレートから作成されたコアデバイスは同じ AWS IoT ポリシーを使用するようになり、そのアクセス許可はフリートとして管理することができます。

    • AWS IoT ポリシードキュメント。 このオプションを選択した場合、このテンプレートから作成する各コアデバイスは、一意の AWS IoT ポリシーを使用するようになり、各コアデバイスのアクセス許可を管理することができます。

  • AWS IoT 証明書リソース。この証明書リソースでは、AWS::IoT::Certificate::Id パラメータを使用して、証明書をコアデバイスにアタッチする必要があります。詳細については、「 AWS IoTデベロッパーガイド」の「J ust-in-time プロビジョニング」を参照してください。

テンプレートでは、既存のモノグループのリストに AWS IoT モノを追加するように指定できます。コアデバイスが初めて AWS IoT Greengrass に接続するときに、メンバーになっているモノグループごとに Greengrass のデプロイを受信します。モノグループを使用して、最新のソフトウェアがオンラインになり次第、各デバイスにデプロイすることができます。詳細については、「デバイスに AWS IoT Greengrass コンポーネントのデプロイ」を参照してください。

AWS IoT サービスでは、デバイスのプロビジョニング時に、AWS アカウント に AWS IoT リソースを作成し、更新する権限が必要です。AWS IoT サービスアクセスを許可するには、IAM ロールを作成し、テンプレートの作成時に提供します。 AWS IoTにはAWSIoTThingsRegistration、デバイスのプロビジョニング時に がAWS IoT使用するすべてのアクセス許可へのアクセスを許可する マネージドポリシー が用意されています。このマネージドポリシーを使用するか、ユースケースのマネージドポリシーのアクセス許可に範囲を絞り込んだカスタムポリシーを作成することができます。

このセクションでは、AWS IoT がデバイスのリソースをプロビジョニングできるようにする IAM ロールを作成し、その IAM ロールを使用するフリートプロビジョニングテンプレートを作成します。

フリートプロビジョニングテンプレートを作成するには
  1. AWS アカウント にリソースをプロビジョニングするために、AWS IoT が継承することができる IAM ロールを作成します。以下の操作を実行します。

    1. AWS IoT がロールを継承できるようにするための、信頼できるポリシードキュメントが含まれるファイルを作成します。

      例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      nano aws-iot-trust-policy.json

      次の JSON をファイルにコピーします。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 信頼できるポリシードキュメントを使用して IAM ロールを作成します。

      • を、作成する IAM ロールの名前GreengrassFleetProvisioningRoleに置き換えます。

      aws iam create-role --role-name GreengrassFleetProvisioningRole --assume-role-policy-document file://aws-iot-trust-policy.json

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      { "Role": { "Path": "/", "RoleName": "GreengrassFleetProvisioningRole", "RoleId": "AROAZ2YMUHYHK5OKM77FB", "Arn": "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole", "CreateDate": "2021-07-26T00:15:12+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
    3. AWSIoTThingsRegistration ポリシーを確認します。これにより、デバイスのプロビジョニング時に が使用するAWS IoT可能性のあるすべてのアクセス許可へのアクセスが許可されます。このマネージドポリシーを使用するか、ユースケースのアクセス許可に範囲を絞り込んだカスタムポリシーを作成することができます。カスタムポリシーを作成する場合は、ここで作成します。

    4. IAM ポリシーをフリートプロビジョニングロールにアタッチします。

      • GreengrassFleetProvisioningRole を IAM ロールの名前に置き換えます。

      • 前のステップでカスタムポリシーを作成した場合は、ポリシー ARN を使用する IAM ポリシーの ARN に置き換えます。

      aws iam attach-role-policy --role-name GreengrassFleetProvisioningRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration

      要求が正常に処理された場合、コマンドは出力されません。

  2. (オプション) 事前プロビジョニングフックを作成します。これは、デバイスが登録時に提供するテンプレートパラメータを検証する AWS Lambda 関数です。事前プロビジョニングフックを使用することで、AWS アカウント アカウントに搭載するデバイスの種類と台数をより細かく制御することができます。詳細については、「AWS IoT Core デベロッパーガイド」の「事前プロビジョニングフック」を参照してください。

  3. フリートプロビジョニングテンプレートを作成します。以下の操作を実行します。

    1. プロビジョニングテンプレートドキュメントを含めるファイルを作成します。

      例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      nano greengrass-fleet-provisioning-template.json

      プロビジョニングテンプレートドキュメントを記述します。下記のプロビジョニングテンプレート例から始めることができます。この例では、以下のプロパティを持つ AWS IoT モノを作成するように指定しています。

      • モノの名前は、ThingName テンプレートパラメータで指定した値です。

      • モノは、ThingGroupName テンプレートパラメータで指定したモノグループのメンバーです。モノグループは、AWS アカウント に存在する必要があります。

      • モノの証明書には、GreengrassV2IoTThingPolicy と名前が付けられた AWS IoT ポリシーがアタッチされています。

      詳細については、「AWS IoT Core デベロッパーガイド」の「プロビジョニングテンプレート」を参照してください。

      { "Parameters": { "ThingName": { "Type": "String" }, "ThingGroupName": { "Type": "String" }, "AWS::IoT::Certificate::Id": { "Type": "String" } }, "Resources": { "MyThing": { "OverrideSettings": { "AttributePayload": "REPLACE", "ThingGroups": "REPLACE", "ThingTypeName": "REPLACE" }, "Properties": { "AttributePayload": {}, "ThingGroups": [ { "Ref": "ThingGroupName" } ], "ThingName": { "Ref": "ThingName" } }, "Type": "AWS::IoT::Thing" }, "MyPolicy": { "Properties": { "PolicyName": "GreengrassV2IoTThingPolicy" }, "Type": "AWS::IoT::Policy" }, "MyCertificate": { "Properties": { "CertificateId": { "Ref": "AWS::IoT::Certificate::Id" }, "Status": "Active" }, "Type": "AWS::IoT::Certificate" } } }
      注記

      MyThingMyPolicyMyCertificateは、フリートプロビジョニングテンプレート内の各リソース仕様を識別する任意の名前です。 AWS IoTは、テンプレートから作成するリソースでこれらの名前を使用しません。これらの名前を使用するか、テンプレート内の各リソースを識別するのに役立つ値に置き換えることができます。

    2. プロビジョニングテンプレートドキュメントからフリートプロビジョニングテンプレートを作成します。

      • を、作成するテンプレートの名前GreengrassFleetProvisioningTemplateに置き換えます。

      • テンプレートの説明を作成するテンプレートの説明に置き換えます。

      • プロビジョニングロールの ARN を、先程作成したロールの ARN に置き換えます。

      Linux or Unix
      aws iot create-provisioning-template \ --template-name GreengrassFleetProvisioningTemplate \ --description "A provisioning template for Greengrass core devices." \ --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" \ --template-body file://greengrass-fleet-provisioning-template.json \ --enabled
      Windows Command Prompt (CMD)
      aws iot create-provisioning-template ^ --template-name GreengrassFleetProvisioningTemplate ^ --description "A provisioning template for Greengrass core devices." ^ --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" ^ --template-body file://greengrass-fleet-provisioning-template.json ^ --enabled
      PowerShell
      aws iot create-provisioning-template ` --template-name GreengrassFleetProvisioningTemplate ` --description "A provisioning template for Greengrass core devices." ` --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" ` --template-body file://greengrass-fleet-provisioning-template.json ` --enabled
      注記

      事前プロビジョニングフックを作成した場合は、事前プロビジョニングフックの Lambda 関数の ARN を --pre-provisioning-hook 引数で指定します。

      --pre-provisioning-hook targetArn=arn:aws:lambda:us-west-2:123456789012:function:GreengrassPreProvisioningHook

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      { "templateArn": "arn:aws:iot:us-west-2:123456789012:provisioningtemplate/GreengrassFleetProvisioningTemplate", "templateName": "GreengrassFleetProvisioningTemplate", "defaultVersionId": 1 }

プロビジョニングクレーム証明書とプライベートキーを作成する

クレーム証明書は、デバイスを AWS IoT モノとして登録し、通常の操作に使用するための固有の X.509 デバイス証明書を取得するための X.509証明書 です。クレーム証明書を作成した後、デバイスが使用できる AWS IoT ポリシーをアタッチして、固有のデバイス証明書を作成し、フリートプロビジョニングテンプレートを使用してプロビジョニングします。クレーム証明書を持つデバイスは、AWS IoT ポリシーで許可したプロビジョニングテンプレートを使用してのみプロビジョニングできます。

このセクションでは、クレーム証明書を作成し、前のセクションで作成したフリートプロビジョニングテンプレートで使用するデバイス用に設定します。

重要

プロビジョニングクレームプライベートキーは、Greengrass コアデバイス上にある場合を含め、常に保護する必要があります。Amazon CloudWatch メトリクスとログを使用して、デバイスをプロビジョニングするためのクレーム証明書の不正使用などの誤用の兆候をモニタリングすることをお勧めします。悪用を検出した場合は、プロビジョニングクレーム証明書を無効にして、デバイスのプロビジョニングに使用できないようにします。詳細については、「AWS IoT Core デベロッパーガイド」の「AWS IoT のモニタリング」を参照してください。

デバイス数と AWS アカウント に自身を登録するデバイスについてより適切に管理できるように、フリートプロビジョニングテンプレートを作成するときに、事前プロビジョニングフックを指定することができます。事前プロビジョニングフックは、登録時にデバイスが提供するテンプレートパラメータを検証する AWS Lambda 関数です。例えば、デバイス ID をデータベースと照合して、デバイスにプロビジョニングする権限があることを確認する事前プロビジョニングフックを作成することができます。詳細については、「AWS IoT Core デベロッパーガイド」の「事前プロビジョニングフック」を参照してください。

プロビジョニングクレーム証明書とプライベートキーを作成するには
  1. クレーム証明書とプライベートキーをダウンロードするフォルダを作成します。

    mkdir claim-certs
  2. プロビジョニングに使用する証明書とプライベートキーを作成します。AWS IoT は、Amazon ルート認証局 (CA) によって署名されたクライアント証明書を提供します。

    Linux or Unix
    aws iot create-keys-and-certificate \ --certificate-pem-outfile "claim-certs/claim.pem.crt" \ --public-key-outfile "claim-certs/claim.public.pem.key" \ --private-key-outfile "claim-certs/claim.private.pem.key" \ --set-as-active
    Windows Command Prompt (CMD)
    aws iot create-keys-and-certificate ^ --certificate-pem-outfile "claim-certs/claim.pem.crt" ^ --public-key-outfile "claim-certs/claim.public.pem.key" ^ --private-key-outfile "claim-certs/claim.private.pem.key" ^ --set-as-active
    PowerShell
    aws iot create-keys-and-certificate ` --certificate-pem-outfile "claim-certs/claim.pem.crt" ` --public-key-outfile "claim-certs/claim.public.pem.key" ` --private-key-outfile "claim-certs/claim.private.pem.key" ` --set-as-active

    リクエストが成功した場合、レスポンスには証明書に関する情報が含まれます。証明書の ARN は、後で使用できるように書き留めておきます。

  3. デバイスが証明書を使用できるようにする AWS IoT ポリシーを作成してアタッチし、固有のデバイス証明書を作成し、フリートプロビジョニングテンプレートを使用してプロビジョニングします。次のポリシーは、デバイスプロビジョニング MQTT API へのアクセスを許可します。詳細については、「AWS IoT Core デベロッパーガイド」の「デバイスプロビジョニング MQTT API」を参照してください。

    以下の操作を実行します。

    1. Greengrass コアデバイスが必要な AWS IoT ポリシードキュメントを含むファイルを作成します。

      例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

      nano greengrass-provisioning-claim-iot-policy.json

      次の JSON をファイルにコピーします。

      • region の各インスタンスを、フリートプロビジョニングを設定した AWS リージョン に置き換えます。

      • account-id の各インスタンスを、AWS アカウント ID に置き換えます。

      • の各インスタンスを、前のセクションで作成したフリートプロビジョニングテンプレートの名前GreengrassFleetProvisioningTemplateに置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/certificates/create/*", "arn:aws:iot:region:account-id:topic/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/certificates/create/*", "arn:aws:iot:region:account-id:topicfilter/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*" ] } ] }
    2. ポリシードキュメントから AWS IoT ポリシーを作成します。

      • を、作成するポリシーの名前GreengrassProvisioningClaimPolicyに置き換えます。

      aws iot create-policy --policy-name GreengrassProvisioningClaimPolicy --policy-document file://greengrass-provisioning-claim-iot-policy.json

      要求が正常に処理された場合、レスポンスは次の例のようになります。

      { "policyName": "GreengrassProvisioningClaimPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassProvisioningClaimPolicy", "policyDocument": "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": \"iot:Connect\", \"Resource\": \"*\" }, { \"Effect\": \"Allow\", \"Action\": [ \"iot:Publish\", \"iot:Receive\" ], \"Resource\": [ \"arn:aws:iot:region:account-id:topic/$aws/certificates/create/*\", \"arn:aws:iot:region:account-id:topic/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*\" ] }, { \"Effect\": \"Allow\", \"Action\": \"iot:Subscribe\", \"Resource\": [ \"arn:aws:iot:region:account-id:topicfilter/$aws/certificates/create/*\", \"arn:aws:iot:region:account-id:topicfilter/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*\" ] } ] }", "policyVersionId": "1" }
  4. プロビジョニングクレーム証明書に AWS IoT ポリシーをアタッチします。

    • をアタッチするポリシーの名前GreengrassProvisioningClaimPolicyに置き換えます。

    • ターゲット ARN をプロビジョニングクレーム証明書の ARN に置き換えます。

    aws iot attach-policy --policy-name GreengrassProvisioningClaimPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4

    要求が正常に処理された場合、コマンドは出力されません。

これで、デバイスが AWS IoT に登録し、自身を Greengrass のコアデバイスとしてプロビジョニングするために使用できるプロビジョニングクレーム証明書とプライベートキーができました。クレーム証明書とプライベートキーは製造時にデバイスに埋め込むか、AWS IoT Greengrass Core ソフトウェアをインストールする前に証明書とキーをデバイスにコピーすることができます。詳細については、「AWS IoT フリートプロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールする」を参照してください。