지나치게 허용적인 AWS IoT 정책 - AWS IoT Device Defender

지나치게 허용적인 AWS IoT 정책

AWS IoT 정책이 너무 광범위하거나 제한되지 않은 권한을 제공합니다. 광범위한 디바이스에 대한 MQTT 메시지를 전송 또는 수신하는 권한을 부여하거나 광범위한 디바이스에 대한 섀도우 및 작업 실행 데이터를 액세스 또는 수정하는 권한을 부여합니다.

일반적으로 디바이스에 대한 정책은 해당 디바이스에만 관련되며 다른 디바이스에는 관련되지 않거나 몇몇 디바이스에만 관련된 리소스에 대한 액세스 권한을 부여해야 합니다. 일부 예외를 제외하고 이러한 정책에서 와일드카드(예: "*")를 사용하여 리소스를 지정하는 것은 너무 광범위하거나 제한되지 않다고 간주됩니다.

이 점검은 CLI 및 API에서 IOT_POLICY_OVERLY_PERMISSIVE_CHECK와(과) 같이 나타납니다.

심각도: 심각

Details

이 점검에서 규정 미준수 AWS IoT 정책이 발견된 경우 다음 사유 코드가 반환됩니다.

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

이것이 중요한 이유

과도하게 허용적인 정책이 있는 인증서, Amazon Cognito 자격 증명 또는 사물 그룹이 손상된 경우 전체 계정의 보안에 영향을 줄 수 있습니다. 해커는 모든 디바이스에 대한 섀도우, 작업 또는 작업 실행을 읽거나 수정할 수 있는 광범위한 액세스 권한을 사용할 수 있습니다. 또는 손상된 인증서를 사용하여 악성 디바이스를 연결하거나 네트워크에 DDOS 공격을 시작할 수도 있습니다.

수정 방법

다음 단계에 따라 사물, 사물 그룹 또는 기타 개체에 연결된 규정 미준수 정책을 수정하세요.

  1. CreatePolicyVersion을 사용하여 새 규정 준수 정책 버전을 생성합니다. setAsDefault 플래그를 true로 설정합니다. (이로 인해 정책을 사용하는 모든 개체에 이 새 버전이 적용됩니다.)

  2. ListTargetsForPolicy를 사용하여 정책이 연결된 대상(인증서, 사물 그룹)의 목록을 가져오고 그룹에 포함되는 디바이스 또는 인증서를 사용하여 연결할 디바이스를 결정합니다.

  3. 연결된 모든 디바이스가 AWS IoT에 연결될 수 있는지 확인합니다. 디바이스를 연결할 수 없는 경우 SetPolicyVersion을 사용하여 기본 정책을 이전 버전으로 롤백하고 정책을 수정한 다음 다시 시도하세요.

완화 조치를 사용하면 다음을 수행할 수 있습니다.

  • 이 변경사항을 실행하려면 감사 결과에서 REPLACE_DEFAULT_POLICY_VERSION 완화 작업을 적용합니다.

  • Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 PUBLISH_FINDINGS_TO_SNS 완화 작업을 적용합니다.

자세한 내용은 완화 작업 단원을 참조하세요.

AWS IoT Core 정책 변수를 사용하여 정책에서 AWS IoT 리소스를 동적으로 참조합니다.

MQTT 권한

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/*" ], } ] }

    리소스 사양에 와일드카드가 포함되지만, 연결하는 데 사물 이름이 사용된 디바이스의 섀도우 관련 주제와만 일치합니다.

Subscribe
  • 규정 미준수:

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

    이렇게 하면 디바이스가 모든 디바이스에 대한 예약된 섀도우 또는 작업 주제를 구독할 수 있습니다.

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

    이전 예제와 동일하지만, # 와일드카드를 사용합니다.

    arn:aws:iot:region:account-id:topicfilter/$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:topic/$aws/things/*

    디바이스에서 구독할 권한이 있는 주제의 메시지만 받을 수 있으므로 규정 준수입니다.

섀도우 및 작업 권한

디바이스에 디바이스 섀도우 또는 작업 실행 데이터에 액세스하거나 이를 수정하는 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" ] } ] }

    이렇게 하면 디바이스가 두 개의 사물에 대해서만 지정된 작업을 수행할 수 있습니다.