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

인증된 Cognito 역할이 지나치게 허용됨

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

  • 사물 관리 또는 수정

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

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

  • 사물 관리 데이터 읽기

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

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

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

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

심각도: 심각

Details

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

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

  • 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

이것이 중요한 이유

인증된 자격 증명이 손상된 경우 관리 작업을 사용하여 계정 설정을 수정하거나, 리소스를 삭제하거나, 중요한 데이터에 액세스할 수 있습니다.

수정 방법

인증된 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

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

비사물 관리

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

사물 관리 데이터 읽기

다음 AWS IoT API 작업은 사물 데이터를 읽는 데 사용되므로 인증된 Amazon Cognito 자격 증명 풀을 통해 연결되는 디바이스에는 제한된 사물 집합에서만 이러한 작업을 수행하는 권한을 부여해야 합니다.

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

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

  • 규정 준수:

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

    이는 리소스가 와일드카드(*)로 지정된 경우에도 특정 문자열이 리소스 앞에 나오며, 이름에 지정된 접두사가 있는 사물에 액세스된 사물 집합으로 제한하므로 규정 준수입니다.

  • 규정 미준수:

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

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

  • 규정 준수:

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

    이는 리소스가 와일드카드(*)로 지정된 경우에도 특정 문자열이 리소스 앞에 나오며, 이름에 지정된 접두사가 있는 사물에 액세스된 사물 집합으로 제한하므로 규정 준수입니다.

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

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