AWS IoT
開発者ガイド

監査

AWS IoT Device Defender の監査では、アカウントやデバイスに関連する設定とポリシーを調べて、セキュリティ対策が実装されていることを確認します。監査は、セキュリティのベストプラクティスまたはアクセスポリシーからの逸脱が検出に役立ちます (例: 複数のデバイスによる同じ ID の使用、1 つのデバイスによる他の多くのデバイス用のデータの読み取りと更新を許可する、権限が過剰なポリシー)。監査は必要に応じて実行するか (オンデマンド監査) 、定期的に実行するようスケジュールできます (スケジュールによる監査)。

AWS IoT Device Defender の監査では、一般的な IoT セキュリティのベストプラクティスとデバイスの脆弱性について、事前に定義された一連のチェックが実行されます。事前に定義されたチェックの例として、複数のデバイスのデータを読み取りまたは更新するアクセス許可を付与するポリシー、ID を共有するデバイス (X.509 証明書)、失効または取り消されたがまだアクティブである証明書があります。

問題の重要度

問題の重要度は、特定された非準拠の各インスタンスに関連する懸念のレベルと、修正までの推奨時間を示します。

非常事態

この重要度の非準拠の監査チェックでは、緊急の注意が必要な問題が特定されます。重要な問題により、多くの場合、高度な知識がほとんどなく、インサイダーの知識や特別な認証情報を持たない悪意のある人物がアセットに簡単にアクセスしたり制御することができます。

この重要度の非準拠の監査チェックでは、重要な問題に対処した後、緊急の調査と修復計画が必要になります。重要な問題と同様に、深刻度が高い問題では、悪意のある人物がアセットにアクセスしたり、アセットを管理することがよくあります。しかし、深刻度の高い問題は、多くの場合、悪用が困難です。特別なツール、インサイダーの知識、または特定のセットアップが必要な場合があります。

ミディアム

この重要度の非準拠の監査チェックでは、継続的なセキュリティおよびメンテナンス体制の一環として注意が必要な問題を提示します。深刻度が中程度の問題により、セキュリティ制御の誤動作による予期しない停止など、運用に悪影響を及ぼす可能性があります。これらの問題は、悪いアクターがアセットへのアクセスや制御を制限したり、悪意のあるアクションの一部を容易にする可能性もあります。

この重要度の非準拠の監査チェックでは、セキュリティのベストプラクティスが見落とされたか、またはバイパスされたことを示します。これら自体は即時に対応の必要なセキュリティ上の影響を引き起こすことはありませんが、これらの失効は悪意のある人物によって悪用される可能性があります。深刻度が中程度の問題と同様に、深刻度が低い問題では、継続的なセキュリティおよびメンテナンス体制の一環として注意が必要です。

監査チェック項目

注記

チェック項目が有効になると、データ収集がすぐに開始されます。アカウントに収集するデータが大量にある場合、有効にしてからしばらくの間チェックの結果が生成されないことがあります。

以下の監査チェック項目がサポートされています。

REVOKED_CA_CERT_CHECKDetailsWhy it mattersHow to fix it
REVOKED_CA_CERT_CHECK

CA 証明書が取り消されましたが、AWS IoT では有効のままです。

重要度: 非常事態

Details

CA 証明書は、発行機関によって維持されている証明書失効リストで失効済みとマークされていますが、AWS IoT ではまだ「ACTIVE」または「PENDING_TRANSFER」とマークされたままです。

このチェックにより非準拠の CA 証明書が見つかった場合、次の理由コードが返されます。

  • CERTIFICATE_REVOKED_BY_ISSUER

Why it matters

取り消し済み CA 証明書は、デバイス証明書への署名に使用できなくなります。侵害されたため、取り消された可能性があります。この CA 証明書で署名された証明書を使用して新しく追加されたデバイスはセキュリティ上の脅威になる場合があります。

How to fix it
  1. AWS IoT で CA 証明書を INACTIVE としてマークするには、UpdateCACertificate を使用します。緩和アクションを使用して、以下を行うこともできます。

    • 監査結果に UPDATE_CA_CERTIFICATE 緩和アクションを適用して、この変更を行います。

    • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

    詳細については、「緩和アクション」を参照してください。

  2. CA 証明書を取り消した後のデバイス証明書の登録アクティビティを確認し、その期間に発行された可能性のあるデバイス証明書の取り消しを検討します。(この CA 証明書により証明されたデバイス証明書をリストするには ListCertificatesByCA を使用し、デバイス証明書を取り消すには UpdateCertificate を使用します)。

 

DEVICE_CERTIFICATE_SHARED_CHECKDetailsWhy it mattersHow to fix it
DEVICE_CERTIFICATE_SHARED_CHECK

複数の同時接続が、同じ X.509 証明書を使用して AWS IoT サービスに対して認証されます。

重要度: 非常事態

Details

このチェック項目を有効にすると、データ収集がすぐに開始されますが、チェック項目の結果は 2 時間以上生成されません。

オンデマンド監査の一部として実行された場合、このチェック項目は、監査の開始前 31 日間に接続するためにデバイスにより使用された証明書と clientID を調べます。スケジュールされた監査では、このチェック項目は、前回監査が実行された時間からこの監査インスタンスが開始された時間までのデータを調べます。チェック時にこの条件を緩和するステップを実行した場合、問題が残っているかどうかを判断するために同時接続がいつ行われたかに注目してください。

このチェックにより非準拠の証明書が見つかった場合、次の理由コードが返されます。

  • CERTIFICATE_SHARED_BY_MULTIPLE_DEVICES

さらに、このチェック項目によって返される結果には、共有証明書の ID、接続するためにこの証明書を使用したクライアントの ID、接続/切断時間が含まれます。最新の結果が最初に一覧表示されます。

Why it matters

AWS IoT で認証するには、各デバイスに一意の証明書が必要です。複数のデバイスで同じ証明書を使用している場合は、デバイスが危険にさらされていることを示している可能性があります。そのデバイスの ID が複製され、システムが危険にさらされている可能性があります。

How to fix it

デバイス証明書が侵害されていないことを確認します。侵害されている場合は、セキュリティのベストプラクティスに従って状況を軽減します。

複数のデバイスで同じ証明書を使用している場合は、次の操作を行います。

  1. 新しい一意の証明書をプロビジョニングし、各デバイスにアタッチします。

  2. 新しい証明書が有効で、デバイスでそれらの証明書を使用して接続できることを確認します。

  3. AWS IoT で古い証明書に REVOKED とマークするには、UpdateCertificate を使用します。緩和アクションを使用して、以下を行うこともできます。

    • 監査結果に UPDATE_DEVICE_CERTIFICATE 緩和アクションを適用して、この変更を行います。

    • ADD_THINGS_TO_THING_GROUP 緩和アクションを適用して、アクションを実行できるグループにデバイスを追加します。

    • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

    詳細については、「緩和アクション」を参照してください。

  4. 古い証明書を各デバイスからデタッチします。

 

DEVICE_CERTIFICATE_KEY_QUALITY_CHECKDetailsWhy it mattersHow to fix it
DEVICE_CERTIFICATE_KEY_QUALITY_CHECK

AWS IoT 顧客は、AWS IoT メッセージブローカーへの認証に X.509 証明書を使用した TLS 相互認証を利用することがよくあります。これらの証明書と認証局の証明書は、使用する前に AWS IoT アカウントに登録する必要があります。AWS IoT は、登録時にこれらの証明書に対して基本的な健全性チェックを実行します。これらのチェックには、次のものがあります。

  • これらは有効な形式である必要があります

  • これらは、登録された認証局によって署名されている必要があります

  • これらは有効期間内である必要があります(つまり、有効期限が切れていないことが必要です)

  • 暗号化キーのサイズは、必要な最小サイズを満たしている必要があります(RSA キーの場合は、2048 ビット以上である必要があります)。

この監査チェックでは、暗号化キーの品質に関する次の追加テストが提供されます。

  • CVE-2017-15361 - Debian ベースのオペレーティングシステム上で、0.9.8g-9 より前のバージョンまでの OpenSSL 0.9.8c-1 を使用してキーが生成されたかどうかをチェックします。これらのバージョンの OpenSSL では、予測可能な数値を生成する乱数ジェネレータが使用されているため、リモートの攻撃者が暗号化キーに対するブルートフォース推測攻撃を簡単に行うことができます。

  • CVE-2008-0166 - キーが、インフィニオン社のトラステッドプラットフォームモジュール (TPM) ファームウェアでインフィニオン社の RSA ライブラリ 1.02.013 によって生成されたかどうかをチェックします。たとえば、0000000000000422 - 4.34 より前のバージョン、000000000000062b - 6.43、および 0000000000008521 - 133.33 よりも前のバージョンなどです。このライブラリは RSA キーの生成を不正に処理し、攻撃者がターゲットを絞った攻撃によって暗号保護のメカミズムを打ち負かすことを容易にします。影響を受けるテクノロジーの例としては、TPM 1.2 を使用した BitLocker、YubiKey 4 (4.3.5 以前)の PGP キー生成、および Chrome OS のキャッシュユーザーデータの暗号化機能などがあります。

AWS IoT Device Defender は、これらのテストに失敗した場合、証明書を非準拠として報告します。

重要度: 非常事態

Details

このチェック項目は、「ACTIVE」または「PENDING_TRANSFER」になっているデバイス証明書に適用されます。

このチェックにより非準拠の証明書が見つかった場合、次の理由コードが返されます。

  • CERTIFICATE_KEY_VULNERABILITY_CVE-2017-15361

    CERTIFICATE_KEY_VULNERABILITY_CVE-2008-0166

Why it matters

デバイスが脆弱な証明書を使用する場合、攻撃者はそのデバイスをより簡単に侵害する可能性があります。

How to fix it

デバイス証明書を更新して、既知の脆弱性の証明書を置き換えます。

複数のデバイスで同じ証明書を使用している場合は、次の操作を行います。

  1. 新しい一意の証明書をプロビジョニングし、各デバイスにアタッチします。

  2. 新しい証明書が有効で、デバイスでそれらの証明書を使用して接続できることを確認します。

  3. AWS IoT で古い証明書に REVOKED とマークするには、UpdateCertificate を使用します。緩和アクションを使用して、以下を行うこともできます。

    • 監査結果に UPDATE_DEVICE_CERTIFICATE 緩和アクションを適用して、この変更を行います。

    • ADD_THINGS_TO_THING_GROUP 緩和アクションを適用して、アクションを実行できるグループにデバイスを追加します。

    • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

    詳細については、「緩和アクション」を参照してください。

  4. 古い証明書を各デバイスからデタッチします。

 

CA_CERTIFICATE_KEY_QUALITY_CHECKDetailsWhy it mattersHow to fix it
CA_CERTIFICATE_KEY_QUALITY_CHECK

AWS IoT 顧客は、AWS IoT メッセージブローカーへの認証に X.509 証明書を使用した TLS 相互認証を利用することがよくあります。これらの証明書と認証局の証明書は、使用する前に AWS IoT アカウントに登録する必要があります。AWS IoT は、これらの証明書の登録時に、次のような基本的な健全性チェックを実行します。

  • この証明書は有効な形式です。

  • この証明書の有効期間内です(つまり、有効期限が切れていません)。

  • 暗号化キーのサイズは、必要な最小サイズを満たしています(RSA キーの場合は、2048 ビット以上である必要があります)。

この監査チェックでは、暗号化キーの品質に関する次の追加テストが提供されます。

  • CVE-2017-15361 - Debian ベースのオペレーティングシステム上で、0.9.8g-9 より前のバージョンまでの OpenSSL 0.9.8c-1 を使用してキーが生成されたかどうかをチェックします。これらのバージョンの OpenSSL では、予測可能な数値を生成する乱数ジェネレータが使用されているため、リモートの攻撃者が暗号化キーに対するブルートフォース推測攻撃を簡単に行うことができます。

  • CVE-2008-0166 - キーが、インフィニオン社のトラステッドプラットフォームモジュール (TPM) ファームウェアでインフィニオン社の RSA ライブラリ 1.02.013 によって生成されたかどうかをチェックします。たとえば、0000000000000422 - 4.34 より前のバージョン、000000000000062b - 6.43、および 0000000000008521 - 133.33 よりも前のバージョンなどです。このライブラリは RSA キーの生成を不正に処理し、攻撃者がターゲットを絞った攻撃によって暗号保護のメカミズムを打ち負かすことを容易にします。影響を受けるテクノロジーの例としては、TPM 1.2 を使用した BitLocker、YubiKey 4 (4.3.5 以前)の PGP キー生成、および Chrome OS のキャッシュユーザーデータの暗号化機能などがあります。

AWS IoT Device Defender は、これらのテストに失敗した場合、証明書を非準拠として報告します。

重要度: 非常事態

Details

このチェック項目は、「ACTIVE」または「PENDING_TRANSFER」になっている CA 証明書に適用されます。

このチェックにより非準拠の証明書が見つかった場合、次の理由コードが返されます。

  • CERTIFICATE_KEY_VULNERABILITY_CVE-2017-15361

    CERTIFICATE_KEY_VULNERABILITY_CVE-2008-0166

Why it matters

この CA 証明書を使用して署名され、新しく追加されたデバイスはセキュリティ上の脅威になる場合があります。

How to fix it
  1. AWS IoT で CA 証明書を INACTIVE としてマークするには、UpdateCACertificate を使用します。緩和アクションを使用して、以下を行うこともできます。

    • 監査結果に UPDATE_CA_CERTIFICATE 緩和アクションを適用して、この変更を行います。

    • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

    詳細については、「緩和アクション」を参照してください。

  2. CA 証明書を取り消した後のデバイス証明書の登録アクティビティを確認し、その期間に発行された可能性のあるデバイス証明書の取り消しを検討します。(この CA 証明書により証明されたデバイス証明書をリストするには ListCertificatesByCA を使用し、デバイス証明書を取り消すには UpdateCertificate を使用します)。

 

UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECKManage or modify thingsRead thing administrative dataManage non-thingsSubscribe/publish to MQTT topicsRead/modify shadow or job dataDetailsWhy it mattersHow to fix it
UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK

認証されていない Amazon Cognito ID プールロールにアタッチされたポリシーは、以下のどの AWS IoT アクションでも実行できるアクセス許可が付与されるため、過剰なアクセス許可とみなされます。

  • モノを管理または変更する。

  • モノの管理データを読み取る。

  • モノ以外に関連するデータやリソースを管理する。

または、さまざまなデバイスで以下の AWS IoT アクションを実行するアクセス許可が付与されるためです。

  • MQTT を使用して予約済みトピック(シャドウまたはジョブ実行データを含む)に接続/発行/サブスクライブします。

  • API コマンドを使用してシャドウまたはジョブ実行データを読み取るか変更する。

一般に、未認証の Amazon Cognito ID プールロールを使用して接続するデバイスには、モノ固有の MQTT トピックを発行/サブスクライブするか、API コマンドを使用してシャドウまたはジョブ実行データに関連するモノ固有のデータを読み取る/変更する限定されたアクセス許可のみ付与してください。

重要度: 非常事態

Manage or modify things

次の AWS IoT API アクションは、モノを管理または変更するために使用されます。認証されていない Amazon Cognito ID プールを介して接続するデバイスには、これらのアクションを実行するアクセス許可を付与しないでください。

  • AddThingToThingGroup

  • AttachThingPrincipal

  • CreateThing

  • DeleteThing

  • DetachThingPrincipal

  • ListThings

  • ListThingsInThingGroup

  • RegisterThing

  • RemoveThingFromThingGroup

  • UpdateThing

  • UpdateThingGroupsForThing

これらのアクションを実行するアクセス許可を付与するロールは、単一のリソースだけが持っていても、非準拠とみなされます。

Read thing administrative data

モノデータの読み取りや変更には、以下の AWS IoT API アクションが使用されます。認証されていない Amazon Cognito ID プールを介して接続するデバイスには、これらのアクションを実行するアクセス許可を与えないでください。

  • DescribeThing

  • ListJobExecutionsForThing

  • ListThingGroupsForThing

  • ListThingPrincipals

例:

  • 非準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:/thing/MyThing" ] } ] }

    これにより、デバイスは 1 つのモノのみに対するアクセス許可が付与されていても、指定されたアクションを実行できるようになります。

Manage non-things

未認証の Amazon Cognito ID プールを介して接続するデバイスには、これらのセクションで説明した AWS IoT API アクション以外のアクションを実行するアクセス許可を付与しないでください。未認証の Amazon Cognito ID プールを介して接続するアプリケーションを使用してアカウントを管理するには、デバイスにより使用されていない別個の ID プールを作成します。

Subscribe/publish to MQTT topics

MQTT メッセージは、AWS IoT メッセージブローカー経由で送信され、シャドウステータスやジョブ実行ステータスへのアクセスや変更などのアクションを実行するためにデバイスにより使用されます。MQTT メッセージに接続、発行、またはサブスクライブするアクセス許可をデバイスに付与するポリシーは、以下のようにこれらのアクションを特定のリソースに制限します。

接続
  • 非準拠:

    arn:aws:iot:<region>:<account-id>:client/*

    ワイルドカード * を使用すると、どのデバイスでも AWS IoT に接続できます。

    arn:aws:iot:<region>:<account-id>:client/${iot:ClientId}

    条件キーで iot:Connection.Thing.IsAttached が true に設定されていない限り、これは前の例のワイルドカード * と同等の設定です。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:client/${iot:Connection.Thing.ThingName}" ], "Condition": { "Bool": { "iot:Connection.Thing.IsAttached": "true" } } } ] }

    リソースの指定に、接続に使用されるデバイス名と一致する変数が含まれます。条件ステートメントは、MQTT クライアントにより使用される証明書が、使用される名前を持つモノにアタッチされた証明書と一致することを確認することにより、アクセス許可をさらに制限します。

発行
  • 非準拠:

    arn:aws:iot:<region>:<account-id>:topic/$aws/things/*/shadow/update

    これにより、デバイスはあらゆるデバイスのシャドウを更新できるようになります (* = すべてのデバイス)。

    arn:aws:iot:<region>:<account-id>:topic/$aws/things/*

    これにより、デバイスはあらゆるデバイスのシャドウを読み取り/更新/削除できるようになります。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" ], } ] }

    リソース仕様にはワイルドカードが含まれていますが、接続するためにモノの名前が使用されているデバイスのシャドウ関連のトピックにのみ一致します。

サブスクリプション
  • 非準拠:

    arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/*

    これにより、デバイスはすべてのデバイスの予約済みシャドウまたはジョブトピックにサブスクライブできます。

    arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/*

    前の例と同じですが、# ワイルドカードを使用します。

    arn:aws:iot:<region>:<account-id>:topic/$aws/things/+/shadow/update

    これにより、デバイスはあらゆるデバイスのシャドウ更新を参照できるようになります (+ = すべてのデバイス)。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" "arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ], } ] }

    リソース仕様にはワイルドカードが含まれていますが、接続するためにモノの名前が使用されているデバイスのシャドウ関連のトピックとジョブ関連のトピックにのみ一致します。

受信
  • 準拠:

    arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/*

    これは、サブスクライブするアクセス許可を持っているトピックからのみデバイスがメッセージを受信するため、許可されます。

Read/modify shadow or job data

デバイスが API アクションを実行してデバイスシャドウやジョブ実行データにアクセスまたは変更するアクセス許可を付与するポリシーは、これらのアクションを特定のリソースに制限します。API アクションは次のとおりです。

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

例:

  • 非準拠:

    arn:aws:iot:<region>:<account-id>:thing/*

    これにより、デバイスがあらゆるモノで指定されたアクションを実行できるようになります。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DeleteThingShadow", "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DescribeJobExecution", "iot:GetPendingJobExecutions", "iot:StartNextPendingJobExecution", "iot:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:/thing/MyThing1", "arn:aws:iot:<region>:<account-id>:/thing/MyThing2" ] } ] }

    これにより、デバイスが 2 つのモノでのみ指定されたアクションを実行できるようになります。

Details

このチェック項目の場合、AWS IoT Device Defender は、監査の実行前 31 日間に AWS IoT メッセージブローカーに接続するために使用されたすべての Amazon Cognito ID プールを監査します。接続先の認証済みまたは未認証 Amazon Cognito ID のすべての Amazon Cognito ID プールが監査に含められます。

このチェックにより非準拠の未認証 Amazon Cognito ID プールロールが見つかった場合、次の理由コードが返されます。

  • ALLOWS_ACCESS_TO_IOT_ADMIN_ACTIONS

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

Why it matters

認証されていない ID がユーザーにより認証されることはないため、認証された Amazon Cognito ID よりもはるかに大きいリスクを引き起こします。認証されていない ID が侵害された場合、管理アクションを使用して、アカウント設定の変更、リソースの削除、機密データへのアクセスを行う可能性があります。または、デバイス設定に広範にアクセスできるため、アカウント内のすべてのデバイスのシャドウとジョブにアクセスまたは変更する可能性があります。ゲストユーザーは、そのアクセス許可を使用して、フリート全体を侵害したり、メッセージで DDoS 攻撃を開始したりする可能性があります。

How to fix it

認証されていない Amazon Cognito ID プールロールにアタッチされたポリシーには、デバイスがそのジョブを実行するのに必要なアクセス許可のみ付与してください。次のステップを推奨します。

  1. 新しい準拠ロールを作成します。

  2. 新しい Amazon Cognito ID プールを作成し、準拠ロールをアタッチします。

  3. ID が新しいプールを使用して AWS IoT にアクセスできることを確認します。

  4. 検証が完了したら、非準拠としてフラグが設定された Amazon Cognito ID プールに準拠ロールをアタッチします。

緩和アクションを使用して、以下を行うこともできます。

  • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

詳細については、「緩和アクション」を参照してください。

 

AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECKManage or modify thingsManage non-thingsRead thing administrative dataSubscribe/publish to MQTT topicsRead or modify shadow or job dataDetailsWhy it mattersHow to fix it
AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK

認証済み Amazon Cognito ID プールロールにアタッチされたポリシーは、以下の AWS IoT アクションを実行できるアクセス許可が付与されるため、アクセス許可が過剰とみなされます。

  • モノを管理または変更する。

  • モノ以外に関連するデータやリソースを管理する。

または、さまざまなデバイスで以下の AWS IoT アクションを実行するアクセス許可が付与されるためです。

  • モノの管理データを読み取る。

  • MQTT を使用して予約済みトピック (シャドウまたはジョブ実行データを含む) に接続/発行/サブスクライブする。

  • API コマンドを使用してシャドウまたはジョブ実行データを読み取るか変更する。

一般に、認証済み Amazon Cognito ID プールロールを使用して接続するデバイスには、モノ固有の管理データを読み取る、モノ固有の MQTT トピックを発行/サブスクライブする、または API コマンドを使用してシャドウまたはジョブ実行データに関連するモノ固有のデータを読み取る/変更する限定されたアクセス許可のみ付与してください。

重要度: 非常事態

Manage or modify things

次の AWS IoT API アクションは、モノを管理または変更するために使用されるため、これらのアクションを実行するアクセス許可は、認証済みの Amazon Cognito ID プールを介して接続するデバイスには付与しないでください。

  • AddThingToThingGroup

  • AttachThingPrincipal

  • CreateThing

  • DeleteThing

  • DetachThingPrincipal

  • ListThings

  • ListThingsInThingGroup

  • RegisterThing

  • RemoveThingFromThingGroup

  • UpdateThing

  • UpdateThingGroupsForThing

これらのアクションを実行するアクセス許可を付与するロールは、単一のリソースだけが持っていても、非準拠とみなされます。

Manage non-things

認証済みの Amazon Cognito ID プールを介して接続するデバイスには、これらのセクションで説明した AWS IoT API アクション以外のアクションを実行するアクセス許可を付与しないでください。認証済みの Amazon Cognito ID プールを介して接続するアプリケーションを使用してアカウントを管理するには、デバイスにより使用されていない別個の ID プールを作成します。

Read thing administrative data

次の AWS IoT API アクションは、モノのデータを読み取るために使用されるため、認証済みの Amazon Cognito ID プールを介して接続するデバイスには限定されたモノのセットでのみこれらのアクションを実行するアクセス許可を付与してください。

  • DescribeThing

  • ListJobExecutionsForThing

  • ListThingGroupsForThing

  • ListThingPrincipals

例:

  • 非準拠:

    arn:aws:iot:<region>:<account-id>:thing/*

    これにより、デバイスがあらゆるモノで指定されたアクションを実行できるようになります。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:/thing/MyThing" ] } ] }

    これにより、デバイスが 1 つのモノでのみ指定されたアクションを実行できるようになります。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:/thing/MyThing*" ] } ] }

    リソースがワイルドカード (*) を使用して指定されていますが、前に特定の文字列が付いており、指定されたプレフィックスを持つ名前が付いたモノのセットへのアクセスに制限されるため、これは準拠しています。

Subscribe/publish to MQTT topics

MQTT メッセージは、AWS IoT メッセージブローカー経由で送信され、シャドウステータスやジョブ実行ステータスへのアクセスや変更などのさまざまなアクションを実行するためにデバイスにより使用されます。MQTT メッセージに接続、発行、またはサブスクライブするアクセス許可をデバイスに付与するポリシーは、以下のようにこれらのアクションを特定のリソースに制限します。

接続
  • 非準拠:

    arn:aws:iot:<region>:<account-id>:client/*

    ワイルドカード * を使用すると、どのデバイスでも AWS IoT に接続できます。

    arn:aws:iot:<region>:<account-id>:client/${iot:ClientId}

    条件キーで iot:Connection.Thing.IsAttached が true に設定されていない限り、これは前の例のワイルドカード * と同等の設定です。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:client/${iot:Connection.Thing.ThingName}" ], "Condition": { "Bool": { "iot:Connection.Thing.IsAttached": "true" } } } ] }

    リソース仕様には、接続に使用されるデバイス名に一致する変数が含まれており、条件ステートメントは、MQTT クライアントにより使用される証明書が、使用される名前を持つモノにアタッチされた証明書と一致することを確認することにより、アクセス許可をさらに制限します。

発行
  • 非準拠:

    arn:aws:iot:<region>:<account-id>:topic/$aws/things/*/shadow/update

    これにより、デバイスはあらゆるデバイスのシャドウを更新できるようになります (* = すべてのデバイス)。

    arn:aws:iot:<region>:<account-id>:topic/$aws/things/*

    これにより、デバイスはあらゆるデバイスのシャドウを読み取り/更新/削除できるようになります。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" ], } ] }

    リソース仕様にはワイルドカードが含まれていますが、接続するためにモノの名前が使用されているデバイスのシャドウ関連のトピックにのみ一致します。

サブスクリプション
  • 非準拠:

    arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/*

    これにより、デバイスはすべてのデバイスの予約済みシャドウまたはジョブトピックにサブスクライブできます。

    arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/#

    前の例と同じですが、# ワイルドカードを使用します。

    arn:aws:iot:<region>:<account-id>:topic/$aws/things/+/shadow/update

    これにより、デバイスはあらゆるデバイスのシャドウ更新を参照できるようになります (+ = すべてのデバイス)。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" "arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ], } ] }

    リソース仕様にはワイルドカードが含まれていますが、接続するためにモノの名前が使用されているデバイスのシャドウ関連のトピックとジョブ関連のトピックにのみ一致します。

受信
  • 準拠:

    arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/*

    これは、サブスクライブするアクセス許可を持っているトピックからのみデバイスがメッセージを受信するため、問題ありません。

Read or modify shadow or job data

デバイスが API アクションを実行してデバイスシャドウやジョブ実行データにアクセスまたは変更するアクセス許可を付与するポリシーは、これらのアクションを特定のリソースに制限します。API アクションは次のとおりです。

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

例:

  • 非準拠:

    arn:aws:iot:<region>:<account-id>:thing/*

    これにより、デバイスがあらゆるモノで指定されたアクションを実行できるようになります。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DeleteThingShadow", "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DescribeJobExecution", "iot:GetPendingJobExecutions", "iot:StartNextPendingJobExecution", "iot:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:/thing/MyThing1", "arn:aws:iot:<region>:<account-id>:/thing/MyThing2" ] } ] }

    これにより、デバイスが 2 つのモノでのみ指定されたアクションを実行できるようになります。

Details

このチェック項目の場合、AWS IoT Device Defender は、監査の実行前 31 日間に AWS IoT メッセージブローカーに接続するために使用されたすべての Amazon Cognito ID プールを監査します。接続先の認証済みまたは未認証 Amazon Cognito ID のすべての Amazon Cognito ID プールが監査に含められます。

このチェックにより非準拠の認証済み Amazon Cognito ID プールロールが見つかった場合、次の理由コードが返されます。

  • ALLOWS_BROAD_ACCESS_TO_IOT_THING_ADMIN_READ_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_NON_THING_ADMIN_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_THING_ADMIN_WRITE_ACTIONS

Why it matters

認証されている ID が侵害された場合、管理アクションを使用して、アカウント設定の変更、リソースの削除、機密データへのアクセスを行う可能性があります。

How to fix it

認証済みの Amazon Cognito ID プールロールにアタッチされたポリシーには、デバイスがそのジョブを実行するのに必要なアクセス許可のみ付与してください。次のステップを推奨します。

  1. 新しい準拠ロールを作成します。

  2. 新しい Amazon Cognito ID プールを作成し、準拠ロールをアタッチします。

  3. ID が新しいプールを使用して AWS IoT にアクセスできることを確認します。

  4. 検証が完了したら、非準拠としてフラグが設定された Amazon Cognito ID プールにロールをアタッチします。

緩和アクションを使用して、以下を行うこともできます。

  • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

詳細については、「緩和アクション」を参照してください。

 

IOT_POLICY_OVERLY_PERMISSIVE_CHECKMQTT permissionsShadow and job permissionsDetailsWhy it mattersHow to fix it
IOT_POLICY_OVERLY_PERMISSIVE_CHECK

AWS IoT ポリシーで付与されるアクセス許可は、広すぎるか、制限がありません。さまざまなデバイスとの間で MQTT メッセージを送受信するアクセス許可を付与するか、さまざまなデバイスのシャドウおよびジョブ実行データにアクセスまたは変更するアクセス許可を付与します。

一般に、デバイスのポリシーは、そのデバイスにのみ関連付けられており、他のデバイスにはまったく、あるいはわずかしか関連付けられていないリソースへのアクセスを付与する必要があります。一部例外はありますが、そのようなポリシーでリソースを指定するためにワイルドカード (「*」など) を使用すると、広すぎるか、制限がないとみなされます。

重要度: 非常事態

MQTT permissions

MQTT メッセージは、AWS IoT メッセージブローカー経由で送信され、シャドウステータスやジョブ実行ステータスへのアクセスや変更などのアクションを実行するためにデバイスにより使用されます。MQTT メッセージに接続、発行、またはサブスクライブするアクセス許可をデバイスに付与するポリシーは、以下のようにこれらのアクションを特定のリソースに制限します。

接続
  • 非準拠:

    arn:aws:iot:<region>:<account-id>:client/*

    ワイルドカード * を使用すると、どのデバイスでも AWS IoT に接続できます。

    arn:aws:iot:<region>:<account-id>:client/${iot:ClientId}

    条件キーで iot:Connection.Thing.IsAttached が true に設定されていない限り、これは前の例のワイルドカード * と同等の設定です。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:client/${iot:Connection.Thing.ThingName}" ], "Condition": { "Bool": { "iot:Connection.Thing.IsAttached": "true" } } } ] }

    リソースの指定に、接続に使用されるデバイス名と一致する変数が含まれます。条件ステートメントは、MQTT クライアントにより使用される証明書が、使用される名前を持つモノにアタッチされた証明書と一致することを確認することにより、アクセス許可をさらに制限します。

発行
  • 非準拠:

    arn:aws:iot:<region>:<account-id>:topic/$aws/things/*/shadow/update

    これにより、デバイスはあらゆるデバイスのシャドウを更新できるようになります (* = すべてのデバイス)。

    arn:aws:iot:<region>:<account-id>:topic/$aws/things/*

    これにより、デバイスはあらゆるデバイスのシャドウを読み取り/更新/削除できるようになります。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" ], } ] }

    リソース仕様にはワイルドカードが含まれていますが、接続するためにモノの名前が使用されているデバイスのシャドウ関連のトピックにのみ一致します。

サブスクリプション
  • 非準拠:

    arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/*

    これにより、デバイスはすべてのデバイスの予約済みシャドウまたはジョブトピックにサブスクライブできます。

    arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/*

    前の例と同じですが、# ワイルドカードを使用します。

    arn:aws:iot:<region>:<account-id>:topic/$aws/things/+/shadow/update

    これにより、デバイスはあらゆるデバイスのシャドウ更新を参照できるようになります (+ = すべてのデバイス)。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" "arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ], } ] }

    リソース仕様にはワイルドカードが含まれていますが、接続するためにモノの名前が使用されているデバイスのシャドウ関連のトピックとジョブ関連のトピックにのみ一致します。

受信
  • 準拠:

    arn:aws:iot:<region>:<account-id>:topicfilter/$aws/things/*

    これは、サブスクライブするアクセス許可を持っているトピックからのみデバイスがメッセージを受信するため、問題ありません。

Shadow and job permissions

デバイスが API アクションを実行してデバイスシャドウやジョブ実行データにアクセスまたは変更するアクセス許可を付与するポリシーは、これらのアクションを特定のリソースに制限します。API アクションは次のとおりです。

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

例:

  • 非準拠:

    arn:aws:iot:<region>:<account-id>:thing/*

    これにより、デバイスがあらゆるモノで指定されたアクションを実行できるようになります。

  • 準拠:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DeleteThingShadow", "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DescribeJobExecution", "iot:GetPendingJobExecutions", "iot:StartNextPendingJobExecution", "iot:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:<region>:<account-id>:/thing/MyThing1", "arn:aws:iot:<region>:<account-id>:/thing/MyThing2" ] } ] }

    これにより、デバイスが 2 つのモノでのみ指定されたアクションを実行できるようになります。

Details

このチェックにより非準拠の IoT ポリシーが見つかった場合、次の理由コードが返されます。

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

Why it matters

アクセス許可が過剰なポリシーを持つ証明書、Amazon Cognito ID、またはモノのグループは、侵害された場合、アカウント全体のセキュリティに影響を与える可能性があります。攻撃者がそのような広範なアクセス権を使用してすべてのデバイスのシャドウ、ジョブ、またはジョブ実行を読み取りまたは変更する可能性があります。または、攻撃者が侵害された証明書を使用し、悪意のあるデバイスに接続したり、ネットワーク上で DDoS 攻撃を開始したりする可能性があります。

How to fix it

モノ、モノのグループ、その他のエンティティにアタッチされた非準拠のポリシーを修正するには、以下のステップを実行してください。

  1. ポリシーの新しい準拠バージョンを作成するには、CreatePolicyVersion を使用します。setAsDefault フラグを true に設定します。(これにより、この新しいバージョンは、ポリシーを使用するすべてのエンティティで動作します。)

  2. そのポリシーがアタッチされたターゲット (証明書、モノのグループ) のリストを取得し、グループに含まれているデバイスや、接続に証明書を使用するデバイスを確認するには、ListTargetsForPolicy を使用します。

  3. 関連付けられているすべてのデバイスが AWS IoT に接続できることを確認します。デバイスが接続できない場合は、 SetPolicyVersion を使用してデフォルトのポリシーを以前のバージョンにロールバックして、もう一度試してください。

緩和アクションを使用して、以下を実行できます。

  • 監査結果に REPLACE_DEFAULT_POLICY_VERSION 緩和アクションを適用して、この変更を行います。

  • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

詳細については、「緩和アクション」を参照してください。

ポリシーの AWS IoT リソースを動的に参照するには、AWS IoT ポリシーの変数を使用します。

 

IOT_ROLE_ALIAS_OVERLY_PERMISSIVE_CHECKDetailsWhy it mattersHow to fix it
IOT_ROLE_ALIAS_OVERLY_PERMISSIVE_CHECK

AWS IoT ロールエイリアスは、接続されたデバイスが X.509 証明書を使用して AWS IoT を認証し、AWS IoT ロールエイリアスに関連付けられた IAM ロールから短期間の AWS 認証情報を取得するためのメカニズムを提供します。これらの認証情報のアクセス許可は、認証コンテキスト変数を持つアクセスポリシーを使用して範囲を限定する必要があります。ポリシーを誤って設定すると、特権攻撃のエスカレーションにさらされる可能性があります。この監査チェックにより、AWS IoT ロールエイリアスによって提供される一時的な認証情報が過度に許容されないことが保証されます。

このチェックは、次のいずれかの条件が見つかった場合にトリガーされます。

  • このポリシーは、このロールエイリアスによって過去 1 年に使用されたすべてのサービスに対する管理アクセス許可を提供します(たとえば、「iot:*」、「dynamodb:*」、「iam:*」など)。

  • このポリシーは、モノメタデータアクションへの幅広いアクセス、制限された AWS IoT アクションへのアクセス、または AWS IoT データプレーンアクションへの幅広いアクセスを提供します。

  • このポリシーは、「iam」、「cloudtrail」、「guardduty」、「inspector」、「trustedadvisor」などのセキュリティ監査サービスへのアクセスを提供します。

重要度: 非常事態

Details

このチェックにより非準拠の IoT ポリシーが見つかった場合、次の理由コードが返されます。

  • ALLOWS_BROAD_ACCESS_TO_USED_SERVICES

  • ALLOWS_ACCESS_TO_SECURITY_AUDITING_SERVICES

  • ALLOWS_BROAD_ACCESS_TO_IOT_THING_ADMIN_READ_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_NON_THING_ADMIN_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_THING_ADMIN_WRITE_ACTIONS

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

Why it matters

デバイスが通常のオペレーションを実行するために必要なアクセス許可を制限することで、デバイスが侵害された場合のアカウントのリスクを軽減できます。

How to fix it

モノ、モノのグループ、その他のエンティティにアタッチされた非準拠のポリシーを修正するには、以下のステップを実行してください。

  1. AWS サービスの直接呼び出しの承認」のステップに従って、より制限の厳しいポリシーをロールエイリアスに適用します。

緩和アクションを使用して、以下を実行できます。

  • Amazon SNS メッセージに対するレスポンスとしてカスタムアクションを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

詳細については、「緩和アクション」を参照してください。

 

IOT_ROLE_ALIAS_ALLOWS_ACCESS_TO_UNUSED_SERVICES_CHECKDetailsWhy it mattersHow to fix it
IOT_ROLE_ALIAS_ALLOWS_ACCESS_TO_UNUSED_SERVICES_CHECK

AWS IoT ロールエイリアスは、接続されたデバイスが X.509 証明書を使用して AWS IoT を認証し、AWS IoT ロールエイリアスに関連付けられた IAM ロールから短期間の AWS 認証情報を取得するためのメカニズムを提供します。これらの認証情報のアクセス許可は、認証コンテキスト変数を持つアクセスポリシーを使用して範囲を限定する必要があります。ポリシーを誤って設定すると、特権攻撃のエスカレーションにさらされる可能性があります。この監査チェックにより、AWS IoT ロールエイリアスによって提供される一時的な認証情報が過度に許容されないことが保証されます。

このチェックは、昨年 AWS IoT デバイスで使用されていないサービスに、ロールエイリアスがアクセスできる場合にトリガーされます。たとえば、過去 1 年間に AWS IoT のみを使用したロールエイリアスにリンクされた IAM ロールがある場合、監査はレポートしますが、ロールにアタッチされたポリシーは "iam:getRole" および "dynamodb:PutItem" にもアクセス許可を付与します。

重大度: [Medium]

Details

このチェックにより非準拠の AWS IoT ポリシーが見つかった場合、次の理由コードが返されます。

  • ALLOWS_ACCESS_TO_UNUSED_SERVICES

Why it matters

デバイスが通常のオペレーションを実行するために必要なサービスにアクセス許可を制限することで、デバイスが侵害された場合のアカウントのリスクを軽減できます。

How to fix it

モノ、モノのグループ、その他のエンティティにアタッチされた非準拠のポリシーを修正するには、以下のステップを実行してください。

  1. AWS サービスの直接呼び出しの承認」のステップに従って、より制限の厳しいポリシーをロールエイリアスに適用します。

緩和アクションを使用して、以下を実行できます。

  • Amazon SNS メッセージに対するレスポンスとしてカスタムアクションを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

詳細については、「緩和アクション」を参照してください。

 

CA_CERT_APPROACHING_EXPIRATION_CHECKDetailsWhy it mattersHow to fix it
CA_CERT_APPROACHING_EXPIRATION_CHECK

CA 証明書が 30 日以内に有効期限が切れるか、既に切れています。

重大度: [Medium]

Details

このチェック項目は、「ACTIVE」または「PENDING_TRANSFER」になっている CA 証明書に適用されます。

このチェックにより非準拠の CA 証明書が見つかった場合、次の理由コードが返されます。

  • CERTIFICATE_APPROACHING_EXPIRATION

  • CERTIFICATE_PAST_EXPIRATION

Why it matters

期限切れ CA 証明書は、新しいデバイス証明書への署名に使用しないでください。

How to fix it

処理方法については、セキュリティのベストプラクティスを参照してください。以下を行うことができます。

  1. AWS IoT に新しい CA 証明書を登録します。

  2. 新しい CA 証明書を使用して、デバイス証明書に署名できることを確認します。

  3. AWS IoT で古い CA 証明書を INACTIVE としてマークするには、UpdateCACertificate を使用します。緩和アクションを使用して、以下を行うこともできます。

    • 監査結果に UPDATE_CA_CERTIFICATE 緩和アクションを適用して、この変更を行います。

    • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

    詳細については、「緩和アクション」を参照してください。

 

CONFLICTING_CLIENT_IDS_CHECKDetailsWhy it mattersHow to fix it
CONFLICTING_CLIENT_IDS_CHECK

複数のデバイスが同じクライアント ID を使用して接続します。

重大度: [High]

Details

同じクライアント ID を使用して複数の接続が行われ、既に接続されたデバイスが切断されます。MQTT 仕様では、クライアント ID あたり 1 つのアクティブな接続のみが許可されるため、同じクライアント ID を使用して別のデバイスが接続した場合、前の接続が中断されます。

オンデマンド監査の一部として実行された場合、このチェック項目は、監査の開始前 31 日間に接続するために clientID がどのように使用されたかを調べます。スケジュールされた監査では、このチェック項目は、前回監査が実行された時間からこの監査インスタンスが開始された時間までのデータを調べます。チェック時にこの条件を緩和するステップを実行した場合、問題が残っているかどうかを判断するために接続/切断がいつ行われたかに注目してください。

このチェックにより非準拠が見つかった場合、次の理由コードが返されます。

  • DUPLICATE_CLIENT_ID_ACROSS_CONNECTIONS

このチェック項目によって返される結果には、接続に使用された clientID、プリンシパル ID、切断時間も含まれます。最新の結果が最初に一覧表示されます。

Why it matters

ID が競合するデバイスは、継続して強制的に再接続されるため、メッセージが失われたり、デバイスが接続できなくなる可能性があります。

これは、デバイスまたはデバイスの認証情報が侵害されたか、DDoS 攻撃の一部であることを示している可能性があります。アカウントでデバイスが正しく設定されていない可能性や、デバイスが接続不良のために 1 分あたり数回再接続を強制された可能性もあります。

How to fix it

AWS IoT で各デバイスを一意のモノとして登録し、モノの名前をクライアント ID として使用して接続します。または、MQTT を介してデバイスを接続するときに、クライアント ID として UUID を使用します。緩和アクションを使用して、以下を行うこともできます。

  • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

詳細については、「緩和アクション」を参照してください。

 

DEVICE_CERT_APPROACHING_EXPIRATION_CHECKDetailsWhy it mattersHow to fix it
DEVICE_CERT_APPROACHING_EXPIRATION_CHECK

デバイス証明書が 30 日以内に有効期限が切れるか、既に切れています。

重大度: [Medium]

Details

このチェック項目は、「ACTIVE」または「PENDING_TRANSFER」になっているデバイス証明書に適用されます。

このチェックにより非準拠のデバイス証明書が見つかった場合、次の理由コードが返されます。

  • CERTIFICATE_APPROACHING_EXPIRATION

  • CERTIFICATE_PAST_EXPIRATION

Why it matters

デバイス証明書は、有効期限が切れたら使用しないでください。

How to fix it

処理方法については、セキュリティのベストプラクティスを参照してください。以下を行うことができます。

  1. 新しい証明書をプロビジョニングし、デバイスにアタッチします。

  2. 新しい証明書が有効で、デバイスが接続するためにその証明書を使用できることを確認します。

  3. AWS IoT で古い証明書に INACTIVE とマークするには、UpdateCertificate を使用します。緩和アクションを使用して、以下を行うこともできます。

    • 監査結果に UPDATE_DEVICE_CERTIFICATE 緩和アクションを適用して、この変更を行います。

    • ADD_THINGS_TO_THING_GROUP 緩和アクションを適用して、アクションを実行できるグループにデバイスを追加します。

    • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

    詳細については、「緩和アクション」を参照してください。

  4. 古い証明書をデバイスからデタッチします。(「 DetachThingPrincipal」を参照)。

 

REVOKED_DEVICE_CERT_CHECKDetailsWhy it mattersHow to fix it
REVOKED_DEVICE_CERT_CHECK

取り消されたデバイス証明書がアクティブのままです。

重大度: [Medium]

Details

デバイス証明書は、CA の 証明書失効リストに含まれていますが、AWS IoT ではまだアクティブなままです。

このチェック項目は、「ACTIVE」または「PENDING_TRANSFER」になっているデバイス証明書に適用されます。

このチェックにより非準拠が見つかった場合、次の理由コードが返されます。

  • CERTIFICATE_REVOKED_BY_ISSUER

Why it matters

デバイス証明書が取り消されるのは、通常侵害されたためです。エラーや見落としのため、AWS IoT でまだ取り消されていない可能性があります。

How to fix it

デバイス証明書が侵害されていないことを確認します。侵害されている場合は、セキュリティのベストプラクティスに従って状況を軽減します。以下を行うことができます。

  1. デバイスの新しい証明書をプロビジョニングします。

  2. 新しい証明書が有効で、デバイスが接続するためにその証明書を使用できることを確認します。

  3. AWS IoT で古い証明書に REVOKED とマークするには、UpdateCertificate を使用します。緩和アクションを使用して、以下を行うこともできます。

    • 監査結果に UPDATE_DEVICE_CERTIFICATE 緩和アクションを適用して、この変更を行います。

    • ADD_THINGS_TO_THING_GROUP 緩和アクションを適用して、アクションを実行できるグループにデバイスを追加します。

    • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

    詳細については、「緩和アクション」を参照してください。

  4. 古い証明書をデバイスからデタッチします。(「 DetachThingPrincipal」を参照)。

 

LOGGING_DISABLED_CHECKDetailsWhy it mattersHow to fix it
LOGGING_DISABLED_CHECK

AWS IoT ログは CloudWatch では有効になりません。

重大度: [Low]

Details

このチェックにより非準拠が見つかった場合、次の理由コードが返されます。

  • LOGGING_DISABLED

Why it matters

CloudWatch の AWS IoT ログでは、認証の失敗、予期しない接続や切断など (デバイスが侵害されていることを示している可能性があります)、AWS IoT 内での動作がわかります。

How to fix it

CloudWatch の AWS IoT ログを有効にします。「モニタリングツール」を参照してください。緩和アクションを使用して、以下を行うこともできます。

  • 監査結果に ENABLE_IOT_LOGGING 緩和アクションを適用して、この変更を行います。

  • Amazon SNS メッセージに対する応答としてカスタムレスポンスを実装する場合は、PUBLISH_FINDINGS_TO_SNS 緩和アクションを適用します。

詳細については、「緩和アクション」を参照してください。

監査を実行する方法

  1. アカウントの監査設定を設定します。監査で使用するこれらのチェック項目を有効にする、オプションの通知を設定する、アクセス許可を設定するには、 UpdateAccountAuditConfiguration を使用します。

    一部のチェック項目では、AWS IoT はチェック項目が有効になるとすぐにデータの収集を開始します。

  2. 1 つ以上の監査スケジュールを作成します。監査中に実行するチェック項目とそれらの監査の実行頻度を指定するには、 CreateScheduledAudit を使用します。

    または、必要に応じてオンデマンド監査を実行できます。実行するチェック項目を指定し、監査の実行をすぐに開始するには、 StartOnDemandAuditTask を使用します。(オンデマンド監査に含まれているチェック項目を最近有効にした場合、しばらく結果の準備ができないことがあります)。

  3. AWS IoT コンソールを使用して、監査の結果を表示できます。

    または、 ListAuditFindings を使用して監査の結果を表示できます。このコマンドを使用すると、チェック項目の種類、特定のリソース、または監査の時間によって結果をフィルタリングすることができます。この情報を使用して、検知された問題を軽減することができます。

  4. AWS アカウントで定義した緩和アクションを、準拠していない結果に適用できます。詳細については、「緩和アクションの適用」を参照してください。

通知

監査が完了したら、見つかった非準拠リソースの数の詳細など、実行された各監査チェック項目の結果の概要が記載された SNS 通知を送信できます。 UpdateAccountAuditConfiguration コマンドへの入力で、auditNotificationTargetConfigurations フィールドを使用します。SNS 通知には次のペイロードがあります。

ペイロードの例
{ "accountId": "123456789012", "taskId": "4e2bcd1ccbc2a5dd15292a82ab80c380", "taskStatus": "FAILED|CANCELED|COMPLETED", "taskType": "ON_DEMAND_AUDIT_TASK|SCHEDULED_AUDIT_TASK", "scheduledAuditName": "myWeeklyAudit", "failedChecksCount": 0, "canceledChecksCount": 0, "nonCompliantChecksCount": 1, "compliantChecksCount": 0, "totalChecksCount": 1, "taskStartTime": 1524740766191, "auditDetails": [ { "checkName": "DEVICE_CERT_APPROACHING_EXPIRATION_CHECK | REVOKED_DEVICE_CERT_CHECK | CA_CERT_APPROACHING_EXPIRATION_CHECK | REVOKED_CA_CERT_CHECK | DEVICE_CERTIFICATE_SHARED_CHECK | IOT_POLICY_UNRESTRICTED_CHECK | UNAUTHENTICATED_COGNITO_IDENTITY_UNRESTRICTED_ACCESS_CHECK | AUTHENTICATED_COGNITO_IDENTITY_UNRESTRICTED_ACCESS_CHECK | CONFLICTING_CLIENT_IDS_CHECK | LOGGING_DISABLED_CHECK", "checkRunStatus": "FAILED | CANCELED | COMPLETED_COMPLIANT | COMPLETED_NON_COMPLIANT", "nonCompliantResourcesCount": 1, "totalResourcesCount": 1, "message": "optional message if an error occurred", "errorCode": "INSUFFICIENT_PERMISSIONS|AUDIT_CHECK_DISABLED" } ] }
ペイロード JSON スキーマ
{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "arn:aws:iot:::schema:auditnotification/1.0", "type": "object", "properties": { "accountId": { "type": "string" }, "taskId": { "type": "string" }, "taskStatus": { "type": "string", "enum": [ "FAILED", "CANCELED", "COMPLETED" ] }, "taskType": { "type": "string", "enum": [ "SCHEDULED_AUDIT_TASK", "ON_DEMAND_AUDIT_TASK" ] }, "scheduledAuditName": { "type": "string" }, "failedChecksCount": { "type": "integer" }, "canceledChecksCount": { "type": "integer" }, "nonCompliantChecksCount": { "type": "integer" }, "compliantChecksCount": { "type": "integer" }, "totalChecksCount": { "type": "integer" }, "taskStartTime": { "type": "integer" }, "auditDetails": { "type": "array", "items": [ { "type": "object", "properties": { "checkName": { "type": "string", "enum": [ "DEVICE_CERT_APPROACHING_EXPIRATION_CHECK", "REVOKED_DEVICE_CERT_CHECK", "CA_CERT_APPROACHING_EXPIRATION_CHECK", "REVOKED_CA_CERT_CHECK", "LOGGING_DISABLED_CHECK" ] }, "checkRunStatus": { "type": "string", "enum": [ "FAILED", "CANCELED", "COMPLETED_COMPLIANT", "COMPLETED_NON_COMPLIANT" ] }, "nonCompliantResourcesCount": { "type": "integer" }, "totalResourcesCount": { "type": "integer" }, "message": { "type": "string", }, "errorCode": { "type": "string", "enum": [ "INSUFFICIENT_PERMISSIONS", "AUDIT_CHECK_DISABLED" ] } }, "required": [ "checkName", "checkRunStatus", "nonCompliantResourcesCount", "totalResourcesCount" ] } ] } }, "required": [ "accountId", "taskId", "taskStatus", "taskType", "failedChecksCount", "canceledChecksCount", "nonCompliantChecksCount", "compliantChecksCount", "totalChecksCount", "taskStartTime", "auditDetails" ] }

通知は、デバイスに関する情報、デバイス統計情報 (たとえば、前回の接続時間、アクティブな接続の数、データ転送レート)、デバイスの履歴アラートとあわせて、AWS IoT コンソールで確認することもできます。

アクセス許可

このセクションでは、AWS IoT Device Defender の監査を作成、実行、管理するために必要な IAM ロールとポリシーをセットアップする方法について説明します。詳細については、「AWS Identity and Access Management ユーザーガイド」を参照してください。

監査を実行するためのデータ収集のアクセス許可を AWS IoT Device Defender に付与する

UpdateAccountAuditConfiguration を呼び出すときは、2 つのポリシー (アクセス許可ポリシーと信頼ポリシー) を持つ IAM ロールを指定する必要があります。アクセス許可ポリシーは、監査を実行するときに AWS IoT API を使用してアカウントデータにアクセスするアクセス許可を AWS IoT Device Defender に付与します。信頼ポリシーは、必要なロールを引き受けるアクセス許可を AWS IoT Device Defender に付与します。

アクセス許可ポリシー
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:GetLoggingOptions", "iot:GetV2LoggingOptions", "iot:ListCACertificates", "iot:ListCertificates", "iot:DescribeCACertificate", "iot:DescribeCertificate", "iot:ListPolicies", "iot:GetPolicy", "iot:GetEffectivePolicies", "iot:ListRoleAliases", "iot:DescribeRoleAlias", "cognito-identity:GetIdentityPoolRoles", "iam:ListRolePolicies", "iam:ListAttachedRolePolicies", "iam:GetRole", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetRolePolicy", "iam:GenerateServiceLastAccessedDetails", "iam:GetServiceLastAccessedDetails" ], "Resource":[ "*" ] } ] }
信頼ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

SNS トピックに通知を発行するアクセス許可を AWS IoT Device Defender に付与する

UpdateAccountAuditConfigurationauditNotificationTargetConfigurations パラメータを使用する場合、2 つのポリシー (アクセス許可ポリシーと信頼ポリシー) を持つ IAM ロールを指定する必要があります。アクセス許可ポリシーは、SNS トピックに通知を発行するアクセス許可を AWS IoT Device Defender に付与します。信頼ポリシーは、必要なロールを引き受けるアクセス許可を AWS IoT Device Defender に付与します。

アクセス許可ポリシー
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "sns:Publish" ], "Resource":[ "arn:aws:sns:region:account-id:your-topic-name" ] } ] }
信頼ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

AWS IoT Device Defender の監査コマンドを実行するアクセス許可を IAM ユーザーまたはグループに付与します。

IAM ユーザーまたはグループが AWS IoT Device Defender の監査を管理、実行、表示できるようにするには、適切なコマンドを実行するアクセス許可を付与するポリシーがアタッチされたロールを作成して割り当てる必要があります。各ポリシーの内容は、ユーザーまたはグループが実行するコマンドによって異なります。

  • UpdateAccountAuditConfiguration

ポリシー

この IAM ロールは、このコマンドが実行されるのと同じアカウントで、アタッチされたポリシーを使用して作成する必要があります。クロスアカウントアクセスは許可されていません。このポリシーには、「iam:PassRole」アクセス許可 (このロールを渡すアクセス許可) が含まれている必要があります。

以下のポリシーテンプレートでは、audit-permissions-role-arn は、roleArn パラメータを使用して UpdateAccountAuditConfiguration で AWS IoT Device Defender に渡すロール ARN です。audit-notifications-permissions-role-arn は、auditNotificationTargetConfigurations パラメータを使用して UpdateAccountAuditConfiguration リクエストで AWS IoT Device Defender に渡すロール ARN です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:UpdateAccountAuditConfiguration" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::account-id:role/audit-permissions-role-arn", "arn:aws:iam::account-id:role/audit-notifications-permissions-role-arn" ] } ] }
  • DescribeAccountAuditConfiguration

  • DeleteAccountAuditConfiguration

  • StartOnDemandAuditTask

  • CancelAuditTask

  • DescribeAuditTask

  • ListAuditTasks

  • ListScheduledAudits

  • ListAuditFindings

ポリシー

これらのコマンドでは必ず、ポリシーの Resource フィールドに * が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeAccountAuditConfiguration", "iot:DeleteAccountAuditConfiguration", "iot:StartOnDemandAuditTask", "iot:CancelAuditTask", "iot:DescribeAuditTask", "iot:ListAuditTasks", "iot:ListScheduledAudits", "iot:ListAuditFindings" ], "Resource": [ "*" ] } ] }
  • CreateScheduledAudit

  • UpdateScheduledAudit

  • DeleteScheduledAudit

  • DescribeScheduledAudit

ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:CreateScheduledAudit", "iot:UpdateScheduledAudit", "iot:DeleteScheduledAudit", "iot:DescribeScheduledAudit" ], "Resource": [ "arn:aws:iot:region:account-id:scheduledaudit/scheduled-audit-name" ] } ] }

AWS IoT Device Defender のスケジュールによる監査のロール ARN の形式は以下のとおりです。

arn:aws:iot:region:account-id:scheduledaudit/scheduled-audit-name

サービス制限

リソース 制限 説明
スケジュールによる監査 最大 5 LimitExceeded 例外が発生する前に、スケジュールによる監査を最大 5 個作成できます。
進行中の同時オンデマンド監査 最大 10 LimitExceeded 例外が発生する前に、オンデマンド監査を最大 10 個作成できます。