인증되지 않은 Cognito 역할이 지나치게 허용됨 - AWS IoT Device Defender

인증되지 않은 Cognito 역할이 지나치게 허용됨

인증되지 않은 Amazon Cognito 자격 증명 풀 역할에 연결된 정책은 너무 허용적인 것으로 간주됩니다. 이는 다음 AWS IoT 작업 중 하나를 수행할 수 있는 권한을 부여하기 때문입니다.

  • 사물 관리 또는 수정

  • 사물 관리 데이터 읽기

  • 비사물 관련 데이터 또는 리소스 관리

또는 광범위한 디바이스에서 다음 AWS IoT 작업을 수행할 수 있는 권한을 부여하기 때문입니다.

  • MQTT를 사용하여 예약된 주제(섀도우 또는 작업 실행 데이터 포함) 연결, 게시 또는 구독

  • API 명령을 사용하여 섀도우 또는 작업 실행 데이터 읽기 또는 수정

일반적으로 인증되지 않은 Amazon Cognito 자격 증명 풀 역할을 사용하여 연결된 디바이스는 사물별 MQTT 주제를 게시하고 구독하거나, API 명령을 사용하여 섀도우 또는 작업 실행 데이터와 관련된 사물별 데이터를 읽고 수정하는 제한된 권한만 보유해야 합니다.

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

심각도: 심각

Details

이 점검의 경우 AWS IoT Device Defender이(가) 감사 실행 전 31일 동안 AWS IoT 메시지 브로커에 연결하는 데 사용된 모든 Amazon Cognito 자격 증명 풀을 감사합니다. 인증된 또는 인증되지 않은 Amazon Cognito 자격 증명이 연결된 모든 Amazon Cognito 자격 증명 풀이 감사에 포함됩니다.

이 점검에서 규정 미준수 인증되지 않은 Amazon Cognito 자격 증명 풀 역할이 발견된 경우 다음 사유 코드가 반환됩니다.

  • ALLOWS_ACCESS_TO_IOT_ADMIN_ACTIONS

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

이것이 중요한 이유

인증되지 않은 자격 증명은 사용자가 인증하지 않으므로 인증된 Amazon Cognito 자격 증명보다 더 큰 위험을 발생합니다. 인증되지 않은 자격 증명이 손상된 경우 관리 작업을 사용하여 계정 설정을 수정하거나, 리소스를 삭제하거나, 중요한 데이터에 접근할 수 있습니다. 또는 디바이스 설정에 광범위하게 액세스하여 계정의 모든 디바이스에 대한 섀도우 및 작업을 액세스하거나 수정할 수 있습니다. 게스트 사용자는 권한을 사용하여 전체 플릿을 손상시키거나 메시지로 DDOS 공격을 시작할 수 있습니다.

수정 방법

인증되지 않은 Amazon Cognito 자격 증명 풀 역할에 연결된 정책은 디바이스에서 작업을 수행하는 데 필요한 권한만 부여해야 합니다. 다음 단계를 수행하는 것이 좋습니다.

  1. 새 규정 준수 역할을 생성합니다.

  2. Amazon Cognito 자격 증명 풀을 생성하고 이 풀에 규정 준수 역할을 연결합니다.

  3. 자격 증명이 새 풀을 통해 AWS IoT에 액세스할 수 있는지 확인합니다.

  4. 확인이 완료되면 규정 준수 역할을 규정 미준수로 플래그가 지정된 Amazon Cognito 자격 증명 풀에 연결합니다.

완화 작업을 사용하면 다음을 수행할 수 있습니다.

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

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

사물 관리 또는 수정

다음 AWS IoT API 작업은 사물을 관리하거나 수정하는 데 사용됩니다. 인증되지 않은 Amazon Cognito 자격 증명 풀을 통해 연결하는 디바이스에는 이 작업을 수행할 권한을 부여해서는 안 됩니다.

  • AddThingToThingGroup

  • AttachThingPrincipal

  • CreateThing

  • DeleteThing

  • DetachThingPrincipal

  • ListThings

  • ListThingsInThingGroup

  • RegisterThing

  • RemoveThingFromThingGroup

  • UpdateThing

  • UpdateThingGroupsForThing

단일 리소스에 대해서도 이러한 작업을 수행하는 권한을 부여하는 모든 역할은 규정 미준수로 간주됩니다.

사물 관리 데이터 읽기

다음 AWS IoT API 작업은 사물 데이터를 읽거나 수정하는 데 사용됩니다. 인증되지 않은 Amazon Cognito 자격 증명 풀을 통해 연결되는 디바이스에는 이 작업을 수행할 권한을 부여해서는 안 됩니다.

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

    이렇게 하면 디바이스가 사물 하나에 대한 권한만 부여받은 경우에도 지정된 작업을 수행할 수 있습니다.

비사물 관리

인증되지 않은 Amazon Cognito 자격 증명 풀을 통해 연결되는 디바이스에는 이 섹션에서 설명된 작업 이외의 다른 AWS IoT API 작업을 수행하는 권한을 부여해서는 안 됩니다. 디바이스에서 사용되지 않는 별도의 자격 증명 풀을 생성하여 인증되지 않은 Amazon Cognito 자격 증명 풀을 통해 연결되는 애플리케이션이 있는 계정을 관리할 수 있습니다.

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:topicfilter/$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" ] } ] }

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