AWS IoT のモノを MQTT クライアント接続に関連付ける - AWS IoT Core

AWS IoT のモノを MQTT クライアント接続に関連付ける

排他的なモノの関連付けとは、X.509 証明書を単一の AWS IoT のモノにアタッチすることです。この場合、証明書を他のモノに使用することはできません。証明書が 1 つの IoT のモノでのみ使用されるようにすることで、セキュリティの脆弱性を防ぐことができます。

AWS IoT では、クライアント ID は、AWS IoT Core MQTT ブローカーに接続するときのモノまたはデバイスの一意の識別子です。非排他的な関連付けを使用する場合は、複数のモノを同じ証明書にアタッチできます。非排他的なモノの関連付けが適用されている場合、明確な関連付けを維持し、潜在的な競合を回避するためには、クライアント ID をモノの名前と一致させる必要があります。

ユースケース

モノを接続に関連付けると、次の機能が提供されます。

注記

IoT のモノとクライアント接続に非排他的な関連付けがある場合は、以下の機能のうち、ライフサイクルイベント機能を除くすべての機能が利用可能な点に留意してください。モノの名前をライフサイクルイベントメッセージに含めるには、IoT のモノとクライアント接続に排他的な関連付けが必要です。

モノのポリシー変数 - モノのポリシー変数を使用して、AWS IoT API オペレーションへのデバイスアクセスを許可できます。これらの変数では、名前、タイプ、属性値など、モノのプロパティに基づいてアクセス許可を付与または拒否する、AWS IoT Core ポリシーを書き込むことができます。モノのポリシー変数を使用することで、同じポリシーを適用して複数の AWS IoT Core デバイスを制御することが可能となります。これによって、ポリシー管理を簡素化し、リソースの重複を減らすことができます。詳細については、「モノのポリシー変数」を参照してください。

ライフサイクルイベント - ライフサイクルイベント (接続、切断、サブスクライブ、サブスクライブ解除など) でモノの名前を受け取ることができます。これにより、ルールなど、メッセージに含まれるモノの名前を処理できます。詳細については、「ライフサイクルイベント」を参照してください。

リソース固有のログ記録 - モノのグループのリソース固有のログ記録を設定し、定義されたモノのグループ内のすべてのモノに対してログ記録の設定を簡単に適用することができます。詳細については、「AWS IoT でリソース固有のログ記録を設定する (CLI)」を参照してください。

コスト配分 - コスト配分用にカスタムタグを使用して請求グループを作成し、それらのグループにモノを追加できます。詳細については、「請求グループ」を参照してください。

モノを接続に関連付ける方法

クライアント ID がレジストリ内のモノの名前と一致する場合、その IoT のモノに X.509 証明書をアタッチすると、AWS IoT Core はそのモノにクライアント接続を関連付けます。クライアント ID がレジストリ内のモノの名前と一致しない場合は、モノに X.509 証明書を排他的にアタッチすることで、この関連付けを確立することができます。この排他的なアタッチメントを持つモノは、排他的なモノと呼ばれます。それ以外のモノは、非排他的なモノと呼ばれます。証明書が排他的なモノに関連付けられている場合、この証明書は排他的なモノからデタッチされた場合にのみ、他のモノに関連付けることができます。このセクションでは、AWS マネジメントコンソール または AWS CLI のいずれかを選択して、モノを接続に関連付けます。

AWS マネジメントコンソール を使用して証明書を排他的にモノにアタッチする方法
  1. AWS IoT コンソールの AWS IoT ホームページを開きます。左のナビゲーションペインの [セキュリティ] で、[証明書] を選択します。

  2. [証明書] ページで、モノをアタッチする証明書を選択します。次に、ページの右上隅にある [アクション] から [モノにアタッチする] を選択します。

    または、証明書を選択して、証明書の詳細ページに移動します。[モノ] タブを選択し、[モノにアタッチする] を選択します。

  3. [モノに証明書をアタッチする] ページで、[モノを接続に関連付ける] チェックボックスをオンにします。次に、[モノ] ドロップダウンリストから、この証明書をアタッチするモノを選択します。

  4. [モノをアタッチ] を選択します。アクションが成功すると、「証明書にモノが正常にアタッチされました」というバナーが表示され、[モノ] タブにモノが追加されます。

AWS マネジメントコンソール を使用して排他的なモノから証明書をデタッチする方法
  1. AWS IoT コンソールの AWS IoT ホームページを開きます。左のナビゲーションペインの [セキュリティ] で、[証明書] を選択します。

  2. [証明書] ページで証明書を選択し、証明書の詳細ページに移動します。

  3. 証明書の詳細ページで、[モノ] タブを選択します。次に、証明書をデタッチするモノを選択します。[モノをデタッチする] するを選択します。

  4. [モノをデタッチする] ウィンドウで、アクションを確認します。[デタッチ] を選択します。アクションが成功すると、「証明書からモノを正常にデタッチしました」というバナーが表示され、モノは [モノ] タブに表示されなくなります。

  1. AWS CLI を使用してモノに証明書をアタッチするには、attach-thing-principal コマンドを実行します。排他的な証明書からモノへのアタッチメントを指定するには、--thing-principal-type フィールドで EXCLUSIVE_THING を指定する必要があります。以下は、コマンドの一例です。

    aws iot attach-thing-principal \ --thing-name "thing_1" \ --principal "arn:aws:iot:us-east-1:123456789012:cert/2e1eb273792174ec2b9bf4e9b37e6c6c692345499506002a35159767055278e8" \ --thing-principal-type "EXCLUSIVE_THING"

    このコマンドでは、出力が生成されません。詳細については、「モノにプリンシパルをアタッチする」を参照してください。

  2. 指定の証明書に関連付けられているモノをアタッチメントタイプとともに一覧表示するには、list-principal-things-v2 コマンドを実行します。アタッチメントタイプは、証明書がモノにアタッチされる方式を指します。以下は、コマンドの一例です。

    $ aws iot list-principal-things-v2 \ --principal "arn:aws:iot:us-east-1:123456789012:cert/2e1eb273792174ec2b9bf4e9b37e6c6c692345499506002a35159767055278e8"

    出力は次のようになります。

    { "PrincipalThingObjects": [ { "thingPrincipalType": "EXCLUSIVE_THING", "thing": "arn:aws:iot:us-east-1:123456789012:thing/thing_1" } ] }

    詳細については、「プリンシパルに関連付けられているモノを一覧表示する (V2)」を参照してください。

  3. 指定のモノに関連付けられているプリンシパルをアタッチメントタイプとともに一覧表示するには、list-thing-principals-v2 コマンドを実行します。アタッチメントタイプは、証明書がモノにアタッチされる方式を指します。以下は、コマンドの一例です。

    $ aws iot list-thing-principals-v2 \ --thing-name "thing_1"

    出力は次のようになります。

    { "ThingPrincipalObjects": [ { "thingPrincipalType": "EXCLUSIVE_THING", "principal": "arn:aws:iot:us-east-1:123456789012:cert/2e1eb273792174ec2b9bf4e9b37e6c6c692345499506002a35159767055278e8" } ] }

    詳細については、「モノに関連付けられているプリンシパルを一覧表示する (V2)」を参照してください。

  4. モノから証明書をデタッチするには、detach-thing-principal コマンドを実行します。

    aws iot detach-thing-principal \ --principal "arn:aws:iot:us-east-1:123456789012:cert/2e1eb273792174ec2b9bf4e9b37e6c6c692345499506002a35159767055278e8" \ --thing-name "thing_1"

    このコマンドでは、出力が生成されません。詳細については、「モノからプリンシパルをデタッチする」を参照してください。