

# 감사 검사
<a name="device-defender-audit-checks"></a>

**참고**  
검사를 활성화하면 데이터 수집이 즉시 시작됩니다. 계정에서 수집할 데이터의 양이 많은 경우 검사를 활성화한 후 얼마 동안 검사 결과를 사용할 수 없을 수 있습니다.

지원되는 감사 검사는 다음과 같습니다.
+ [활성 디바이스 인증서에 대해 취소된 중간 CA 점검](audit-chk-active-intermediary-device-revoked-CA.md)
+ [취소된 CA 인증서가 계속 활성 상태](audit-chk-revoked-ca-cert.md)
+ [공유된 디바이스 인증서](audit-chk-device-cert-shared.md)
+ [디바이스 인증서 키 품질](audit-chk-device-cert-key-quality.md)
+ [CA 인증서 키 품질](audit-chk-ca-cert-key-quality.md)
+ [인증되지 않은 Cognito 역할이 지나치게 허용됨](audit-chk-unauth-cognito-role-permissive.md)
+ [인증된 Cognito 역할이 지나치게 허용됨](audit-chk-auth-cognito-role-permissive.md)
+ [AWS IoT지나치게 허용적인 정책](audit-chk-iot-policy-permissive.md)
+ [잘못 구성되었을 가능성이 있는 AWS IoT 정책](audit-chk-iot-misconfigured-policies.md)
+ [역할 별칭이 지나치게 허용됨](audit-chk-iot-role-alias-permissive.md)
+ [역할 별칭으로 사용되지 않는 서비스에 대한 액세스 허용](audit-chk-role-alias-unused-svcs.md)
+ [CA 인증서 만료](audit-chk-ca-cert-approaching-expiration.md)
+ [충돌하는 MQTT 클라이언트](audit-chk-conflicting-client-ids.md)
+ [디바이스 인증서 만료](audit-chk-device-cert-approaching-expiration.md)
+ [디바이스 인증서 수명 확인](device-certificate-age-check.md)
+ [취소된 디바이스 인증서가 계속 활성 상태](audit-chk-revoked-device-cert.md)
+ [로깅 비활성화](audit-chk-logging-disabled.md)

# 활성 디바이스 인증서에 대해 취소된 중간 CA 점검
<a name="audit-chk-active-intermediary-device-revoked-CA"></a>

중간 CA를 취소했음에도 불구하고 여전히 활성 상태인 모든 관련 디바이스 인증서를 식별하기 위해 이 점검을 사용합니다.

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

**심각도:** 심각

## 세부 사항
<a name="audit-chk-active-device-intermediary-revoked-CA-details"></a>

이 점검에서 규정 미준수가 발견된 경우 다음 사유 코드가 반환됩니다.
+ INTERMEDIATE\$1CA\$1REVOKED\$1BY\$1ISSUER

## 이것이 중요한 이유
<a name="audit-chk-active-device-intermediary-revoked-CA-why-it-matters"></a>

활성 디바이스 인증서에 대해 취소된 중간 CA 점검은 CA 체인에서 중간 발급 CA가 취소된 활성 디바이스 인증서가 AWS IoT Core에 있는지 확인하여 디바이스 아이덴티티 및 신뢰도를 평가합니다.

취소된 중간 CA는 더 이상 CA 체인의 다른 CA 또는 디바이스 인증서에 서명하는 데 사용되어서는 안 됩니다. 중간 CA가 취소된 후 이 CA 인증서를 사용하여 서명된 인증서가 새로 추가된 디바이스에 있는 경우에는 보안 위협이 됩니다.

## 수정 방법
<a name="audit-chk-active-device-intermediary-revoked-CA-how-to-fix"></a>

CA 인증서가 취소된 후 디바이스 인증서 등록 활동을 검토합니다. 그리고 보안 모범 사례를 따라 상황을 완화시킵니다. 수행 가능한 작업은 다음과 같습니다.

1. 영향을 받는 디바이스에 다른 CA에서 서명한 새 인증서를 제공합니다.

1. 새 인증서가 유효하고 디바이스가 해당 인증서를 사용하여 연결할 수 있는지 확인합니다.

1. [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html)을 사용하여 이전 인증서를 AWS IoT에서 취소됨(REVOKED)으로 표시합니다. 완화 작업을 사용하면 다음을 수행할 수 있습니다.
   + 이 변경사항을 실행하려면 감사 결과에서 `UPDATE_DEVICE_CERTIFICATE` 완화 작업을 적용합니다.
   + 조치를 취할 수 있는 그룹에 디바이스를 추가하려면 `ADD_THINGS_TO_THING_GROUP` 완화 조치를 적용합니다.
   + Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.
   + 중간 CA 인증서가 취소된 후 일정 기간에 대해 디바이스 인증서 등록 활동을 검토하여 해당 기간 동안 이 인증서를 사용하여 발급되었을 수 있는 디바이스 인증서를 취소할 것을 고려합니다. [ListRelatedResourcesForAuditFinding](https://docs.aws.amazon.com/iot/latest/apireference/API_ListRelatedResourcesForAuditFinding.html)을 사용하여 CA 인증서로 서명된 디바이스 인증서를 나열하고 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html)를 사용하여 디바이스 인증서를 취소합니다.
   + 기존 인증서를 디바이스에서 분리합니다. ([DetachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_DetachThingPrincipal.html) 참조)

   자세한 내용은 [완화 작업](dd-mitigation-actions.md) 섹션을 참조하세요.

# 취소된 CA 인증서가 계속 활성 상태
<a name="audit-chk-revoked-ca-cert"></a>

CA 인증서가 취소되었지만 AWS IoT에서 계속 활성 상태입니다.

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

**심각도:** 심각

## 세부 사항
<a name="audit-chk-revoked-ca-cert-details"></a>

CA 인증서가 발급 기관이 관리하는 인증서 취소 목록에 취소됨으로 표시되지만 AWS IoT에는 여전히 ACTIVE 또는 PENDING\$1TRANSFER로 표시됩니다.

이 점검에서 규정 미준수 CA 인증서가 발견된 경우 다음 사유 코드가 반환됩니다.
+ CERTIFICATE\$1REVOKED\$1BY\$1ISSUER

## 이것이 중요한 이유
<a name="audit-chk-revoked-ca-cert-why-it-matters"></a>

취소된 CA 인증서는 더 이상 디바이스 인증서에 서명하는 데 사용해서는 안 됩니다. 손상되었기 때문에 해당 인증서가 취소되었을 수 있습니다. 새로 추가된 디바이스에 이 CA 인증서를 사용하여 서명된 인증서가 있는 경우에는 보안 위협이 발생할 수 있습니다.

## 수정 방법
<a name="audit-chk-revoked-ca-cert-how-to-fix"></a>

1. [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html)를 사용하여 AWS IoT에서 CA 인증서를 비활성(INACTIVE) 상태로 표시합니다. 완화 작업을 사용하면 다음을 수행할 수 있습니다.
   + 이 변경사항을 실행하려면 감사 결과에서 `UPDATE_CA_CERTIFICATE` 완화 작업을 적용합니다.
   + Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

   자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

1. CA 인증서가 취소된 후 일정 기간에 대해 디바이스 인증서 등록 활동을 검토하여 해당 기간 동안 이 인증서를 사용하여 발급되었을 수 있는 디바이스 인증서를 취소할 것을 고려합니다. [ListCertificatesByCA](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCertificatesByCA.html)를 사용하여 CA 인증서로 서명된 디바이스 인증서를 나열하고 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html)를 사용하여 디바이스 인증서를 취소합니다.

# 공유된 디바이스 인증서
<a name="audit-chk-device-cert-shared"></a>

다중 동시 연결은 동일한 X.509 인증서를 사용하여 AWS IoT에서 인증됩니다.

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

**심각도:** 심각

## 세부 사항
<a name="audit-chk-device-cert-shared-details"></a>

온디맨드 감사의 일부로 이 점검을 수행하면 해당 점검에서는 점검이 실행되기 최대 2시간 전까지 감사 시작 전 31일 동안 디바이스에서 연결하기 위해 사용한 인증서 및 클라이언트 ID를 확인합니다. 예정된 감사의 경우 이 검사는 감사의 마지막 실행 2시간 전부터 감사의 이 인스턴스 시작 2시간 전까지의 데이터를 확인합니다. 점검된 시간 동안 이 상태를 완화하는 단계를 수행한 경우 문제가 지속되는지 여부를 확인하기 위해 동시 연결이 발생한 시기를 기록해 둡니다.

이 점검에서 규정 미준수 인증서가 발견된 경우 다음 사유 코드가 반환됩니다.
+ CERTIFICATE\$1SHARED\$1BY\$1MULTIPLE\$1DEVICES

또한, 이 점검에서 반환되는 결과에는 공유 인증서의 ID, 인증서를 사용하여 연결한 클라이언트의 ID 및 연결/연결 해제 횟수가 포함됩니다. 가장 최근 결과가 먼저 나열됩니다.

## 이것이 중요한 이유
<a name="audit-chk-device-cert-shared-why-it-matters"></a>

각 디바이스에는 AWS IoT 인증을 위한 고유한 인증서가 있어야 합니다. 여러 디바이스에서 동일한 인증서가 사용되는 경우 이는 디바이스 하나가 손상되었음을 나타내는 것일 수 있습니다. 해당 자격 증명이 복제되어 향후 시스템을 손상시킬 수 있습니다.

## 수정 방법
<a name="audit-chk-device-cert-shared-how-to-fix"></a>

디바이스 인증서가 손상되지 않았는지 확인합니다. 손상되었다면 보안 모범 사례를 따라 상황을 완화시킵니다.

여러 디바이스에 동일한 인증서를 사용하는 경우 다음을 수행할 수 있습니다.

1. 고유한 새 인증서를 프로비저닝하고 각 디바이스에 연결합니다.

1. 새 인증서가 유효하고 디바이스가 해당 인증서를 사용하여 연결할 수 있는지 확인합니다.

1. [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html)을 사용하여 이전 인증서를 AWS IoT에서 취소됨(REVOKED)으로 표시합니다. 완화 작업을 사용하여 다음을 수행할 수도 있습니다.
   + 이 변경사항을 실행하려면 감사 결과에서 `UPDATE_DEVICE_CERTIFICATE` 완화 작업을 적용합니다.
   + 조치를 취할 수 있는 그룹에 디바이스를 추가하려면 `ADD_THINGS_TO_THING_GROUP` 완화 조치를 적용합니다.
   + Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

   자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

1. 각 디바이스에서 이전 인증서를 분리합니다.

# 디바이스 인증서 키 품질
<a name="audit-chk-device-cert-key-quality"></a>

AWS IoT 고객은 종종 AWS IoT 메시지 브로커를 인증하기 위해 X.509 인증서를 사용하는 TLS 상호 인증에 의존합니다. 이러한 인증서 및 해당 인증 기관 인증서를 사용하려면 먼저 해당 AWS IoT 계정에 등록해야 합니다. AWS IoT는 등록 시 이러한 인증서에 대해 기본 안전성 점검을 수행합니다. 이러한 점검에는 다음을 확인합니다.
+ 인증서가 유효한 형식이어야 합니다.
+ 인증서가 등록된 인증 기관에 의해 서명되어야 합니다.
+ 인증서 유효 기간이 남아 있어야 합니다. 즉, 만료되지 않은 상태여야 합니다.
+ 인증서의 암호화 키 크기가 최소 필수 크기를 충족해야 합니다. RSA 키의 경우 2048비트 이상이어야 합니다.

이 감사 검사에서는 암호화 키의 품질을 다음과 같이 추가로 테스트해야 합니다.
+ CVE-2008-0166 – Debian 기반 운영 체제에서 0.9.8g-9 이전 버전까지의 OpenSSL 0.9.8c-1을 사용하여 키가 생성되었는지 확인합니다. 이러한 OpenSSL 버전은 예측 가능한 숫자를 생성하는 난수 생성기를 사용하므로 원격 공격자가 암호화 키에 대한 무차별 대입 공격을 더 쉽게 수행할 수 있습니다.
+ CVE-2017-15361 – TPM(Infineon Trusted Platform Module) 펌웨어(예: 0000000000000422 - 4.34 이전 버전, 000000000000062b - 6.43 이전 버전 및 0000000000008521 - 133.33 이전 버전)에서 Infineon RSA 라이브러리 1.02.013에 의해 키가 생성되었는지 확인합니다. 이 라이브러리는 RSA 키 생성을 잘못 처리하기 때문에 공격자가 표적 공격을 통해 일부 암호화 보호 메커니즘을 더 쉽게 파괴할 수 있습니다. 영향을 받는 기술의 예로는 TPM 1.2의 BitLocker, YubiKey 4(4.3.5 이전) PGP 키 생성 및 Chrome OS의 캐시된 사용자 데이터 암호화 기능이 있습니다.

AWS IoT Device Defender는 이러한 테스트에 실패한 인증서를 규정 미준수 인증서로 보고합니다.

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

**심각도:** 심각

## 세부 사항
<a name="audit-chk-device-cert-key-quality-details"></a>

이 점검은 ACTIVE 또는 PENDING\$1TRANSFER 상태인 디바이스 인증서에 적용됩니다.

이 점검에서 규정 미준수 인증서가 발견된 경우 다음 사유 코드가 반환됩니다.
+ CERTIFICATE\$1KEY\$1VULNERABILITY\$1CVE-2017-15361
+ CERTIFICATE\$1KEY\$1VULNERABILITY\$1CVE-2008-0166

## 이것이 중요한 이유
<a name="audit-chk-device-cert-key-quality-why-it-matters"></a>

디바이스에서 취약한 인증서를 사용하는 경우 공격자가 해당 디바이스를 더 쉽게 손상시킬 수 있습니다.

## 수정 방법
<a name="audit-chk-device-cert-key-quality-how-to-fix"></a>

디바이스 인증서를 업데이트하여 이러한 취약성을 알려진 취약성으로 바꿉니다.

여러 디바이스에 동일한 인증서를 사용하는 경우 다음과 같이 하는 것이 좋습니다.

1. 고유한 새 인증서를 프로비저닝하고 각 디바이스에 연결합니다.

1. 새 인증서가 유효하고 디바이스가 해당 인증서를 사용하여 연결할 수 있는지 확인합니다.

1. [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html)을 사용하여 이전 인증서를 AWS IoT에서 취소됨(REVOKED)으로 표시합니다. 완화 작업을 사용하면 다음을 수행할 수 있습니다.
   + 이 변경사항을 실행하려면 감사 결과에서 `UPDATE_DEVICE_CERTIFICATE` 완화 작업을 적용합니다.
   + 조치를 취할 수 있는 그룹에 디바이스를 추가하려면 `ADD_THINGS_TO_THING_GROUP` 완화 조치를 적용합니다.
   + Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

   자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

1. 각 디바이스에서 이전 인증서를 분리합니다.

# CA 인증서 키 품질
<a name="audit-chk-ca-cert-key-quality"></a>

AWS IoT 고객은 종종 AWS IoT 메시지 브로커를 인증하기 위해 X.509 인증서를 사용하는 TLS 상호 인증에 의존합니다. 이러한 인증서 및 해당 인증 기관 인증서를 사용하려면 먼저 해당 AWS IoT 계정에 등록해야 합니다. AWS IoT는 등록 시 이러한 인증서에 대해 다음과 같은 기본 안전성 점검을 수행합니다.
+ 인증서가 유효한 형식입니다.
+ 인증서 유효 기간이 남아 있습니다. 즉, 만료되지 않은 상태입니다.
+ 인증서의 암호화 키 크기가 최소 필수 크기를 충족합니다. RSA 키의 경우 2048비트 이상이어야 합니다.

이 감사 검사에서는 암호화 키의 품질을 다음과 같이 추가로 테스트해야 합니다.
+ CVE-2008-0166 – Debian 기반 운영 체제에서 0.9.8g-9 이전 버전까지의 OpenSSL 0.9.8c-1을 사용하여 키가 생성되었는지 확인합니다. 이러한 OpenSSL 버전은 예측 가능한 숫자를 생성하는 난수 생성기를 사용하므로 원격 공격자가 암호화 키에 대한 무차별 대입 공격을 더 쉽게 수행할 수 있습니다.
+ CVE-2017-15361 – TPM(Infineon Trusted Platform Module) 펌웨어(예: 0000000000000422 - 4.34 이전 버전, 000000000000062b - 6.43 이전 버전 및 0000000000008521 - 133.33 이전 버전)에서 Infineon RSA 라이브러리 1.02.013에 의해 키가 생성되었는지 확인합니다. 이 라이브러리는 RSA 키 생성을 잘못 처리하기 때문에 공격자가 표적 공격을 통해 일부 암호화 보호 메커니즘을 더 쉽게 파괴할 수 있습니다. 영향을 받는 기술의 예로는 TPM 1.2의 BitLocker, YubiKey 4(4.3.5 이전) PGP 키 생성 및 Chrome OS의 캐시된 사용자 데이터 암호화 기능이 있습니다.

AWS IoT Device Defender는 이러한 테스트에 실패한 인증서를 규정 미준수 인증서로 보고합니다.

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

**심각도:** 심각

## 세부 사항
<a name="audit-chk-ca-cert-key-quality-details"></a>

이 점검은 ACTIVE 또는 PENDING\$1TRANSFER 상태인 CA 인증서에 적용됩니다.

이 점검에서 규정 미준수 인증서가 발견된 경우 다음 사유 코드가 반환됩니다.
+ CERTIFICATE\$1KEY\$1VULNERABILITY\$1CVE-2017-15361
+ CERTIFICATE\$1KEY\$1VULNERABILITY\$1CVE-2008-0166

## 이것이 중요한 이유
<a name="audit-chk-ca-cert-key-quality-why-it-matters"></a>

이 CA 인증서를 사용하여 서명된 디바이스가 새로 추가된 경우 보안 위협이 발생할 수 있습니다.

## 수정 방법
<a name="audit-chk-ca-cert-key-quality-how-to-fix"></a>

1. [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html)를 사용하여 AWS IoT에서 CA 인증서를 비활성(INACTIVE) 상태로 표시합니다. 완화 작업을 사용하면 다음을 수행할 수 있습니다.
   + 이 변경사항을 실행하려면 감사 결과에서 `UPDATE_CA_CERTIFICATE` 완화 작업을 적용합니다.
   + Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

   자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

1. CA 인증서가 취소된 후 일정 기간에 대해 디바이스 인증서 등록 활동을 검토하여 해당 기간 동안 이 인증서를 사용하여 발급되었을 수 있는 디바이스 인증서를 취소할 것을 고려합니다. ([ListCertificatesByCA](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCertificatesByCA.html)를 사용하여 CA 인증서로 서명된 디바이스 인증서를 나열하고 [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html)를 사용하여 디바이스 인증서를 취소합니다.)

# 인증되지 않은 Cognito 역할이 지나치게 허용됨
<a name="audit-chk-unauth-cognito-role-permissive"></a>

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

또는 광범위한 디바이스에서 다음 AWS IoT 작업을 수행할 수 있는 권한을 부여하기 때문입니다.
+ MQTT를 사용하여 예약된 주제(섀도우 또는 작업 실행 데이터 포함) 연결, 게시 또는 구독
+ API 명령을 사용하여 섀도우 또는 작업 실행 데이터 읽기 또는 수정

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

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

**심각도:** 심각

## 세부 사항
<a name="audit-chk-unauth-cognito-role-permissive-details"></a>

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

이 점검에서 규정 미준수 인증되지 않은 Amazon Cognito 자격 증명 풀 역할이 발견된 경우 다음 사유 코드가 반환됩니다.
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1ADMIN\$1ACTIONS
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1DATA\$1PLANE\$1ACTIONS

## 이것이 중요한 이유
<a name="audit-chk-unauth-cognito-role-permissive-why-it-matters"></a>

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

## 수정 방법
<a name="audit-chk-unauth-cognito-role-permissive-how-to-fix"></a>

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

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

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

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

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

완화 작업을 사용하면 다음을 수행할 수 있습니다.
+ Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

## 사물 관리 또는 수정
<a name="manage-modify-things-check"></a>

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

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

## 사물 관리 데이터 읽기
<a name="read-thing-admin-data-check"></a>

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

**Example**  
+ 규정 미준수:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "AllowIoTThingOperations",
        "Effect": "Allow",
        "Action": [ 
            "iot:DescribeThing",
            "iot:ListJobExecutionsForThing",
            "iot:ListThingGroupsForThing",
            "iot:ListThingPrincipals"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/name-of-thing"
        ]
      }
    ]
  }
  ```

------

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

## 비사물 관리
<a name="manage-non-things-check"></a>

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

## MQTT 주제 구독/게시
<a name="audit-chk-unauth-cognito-role-permissive-mqtt-topics"></a>

MQTT 메시지는 AWS IoT 메시지 브로커를 통해 전송되며, 섀도우 상태 및 작업 실행 상태 액세스 및 수정을 포함하여 다양한 작업을 수행하기 위해 디바이스에서 사용됩니다. MQTT 메시지를 연결, 게시 또는 구독할 디바이스에 권한을 부여하는 정책은 다음과 같이 이러한 작업을 특정 리소스로 제한해야 합니다.

**연결**  
+ 규정 미준수:

  ```
  arn:aws:iot:region:account-id:client/*
  ```

  와일드카드 \$1를 사용하면 모든 디바이스를 AWS IoT에 연결할 수 있습니다.

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

  조건 키에서 `iot:Connection.Thing.IsAttached`가 true로 설정되지 않는 한 이전 예에서 와일드카드 \$1와 동일합니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
        ]
      }
    ]
  }
  ```

------

  리소스 사양에는 연결하는 데 사용된 디바이스 이름과 일치하는 변수가 포함되어 있습니다. 조건문은 MQTT 클라이언트에서 사용되는 인증서가 이름이 사용된 사물에 연결된 인증서와 일치하는지 확인하여 권한을 추가로 제한합니다.

**게시**  
+ 규정 미준수:

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

  이렇게 하면 디바이스가 모든 디바이스의 섀도우를 업데이트할 수 있습니다(\$1 = 모든 디바이스).

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

  이렇게 하면 디바이스가 모든 디바이스의 섀도우에 대해 읽기, 업데이트 또는 삭제 작업을 수행할 수 있습니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Publish"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012: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/*
  ```

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

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update
  ```

  이렇게 하면 디바이스가 모든 디바이스의 섀도우 업데이트를 확인할 수 있습니다(\$1 = 모든 디바이스).
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Subscribe"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*",
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*"
              ]
          }
      ]
  }
  ```

------

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

**수신**  
+ 규정 준수:

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

  디바이스에서 구독할 권한이 있는 주제의 메시지만 수신할 수 있으므로 허용됩니다.

## 섀도우 또는 작업 데이터 읽기/수정
<a name="read-modify-shadow-job-data-check"></a>

디바이스에 디바이스 섀도우 또는 작업 실행 데이터에 액세스하거나 이를 수정하는 API 작업을 수행할 권한을 부여하는 정책은 이러한 작업을 특정 리소스로 제한해야 합니다. 다음은 API 작업입니다.
+ `DeleteThingShadow`
+ `GetThingShadow`
+ `UpdateThingShadow`
+ `DescribeJobExecution`
+ `GetPendingJobExecutions`
+ `StartNextPendingJobExecutio`n
+ `UpdateJobExecution`

**Example**  
+ 규정 미준수:

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  이렇게 하면 디바이스가 모든 사물에 대해 지정된 작업을 수행할 수 있습니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [ 
            "iot:DeleteThingShadow",
            "iot:GetThingShadow",
            "iot:UpdateThingShadow",
            "iotjobsdata:DescribeJobExecution",
            "iotjobsdata:GetPendingJobExecutions",
            "iotjobsdata:StartNextPendingJobExecution",
            "iotjobsdata:UpdateJobExecution"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing1",
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing2"
        ]
      }
    ]
  }
  ```

------

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

# 인증된 Cognito 역할이 지나치게 허용됨
<a name="audit-chk-auth-cognito-role-permissive"></a>

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

또는 광범위한 디바이스에서 다음 AWS IoT 작업을 수행할 수 있는 권한을 부여하기 때문입니다.
+ 사물 관리 데이터 읽기
+ MQTT를 사용하여 예약된 주제(섀도우 또는 작업 실행 데이터 포함) 연결/게시/구독
+ API 명령을 사용하여 섀도우 또는 작업 실행 데이터 읽기 또는 수정

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

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

**심각도:** 심각

## 세부 사항
<a name="audit-chk-auth-cognito-role-permissive-details"></a>

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

이 점검에서 규정 미준수 인증된 Amazon Cognito 자격 증명 풀 역할이 발견된 경우 다음 사유 코드가 반환됩니다.
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1THING\$1ADMIN\$1READ\$1ACTIONS
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1NON\$1THING\$1ADMIN\$1ACTIONS
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1THING\$1ADMIN\$1WRITE\$1ACTIONS

## 이것이 중요한 이유
<a name="audit-chk-auth-cognito-role-permissive-why-it-matters"></a>

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

## 수정 방법
<a name="audit-chk-auth-cognito-role-permissive-how-to-fix"></a>

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

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

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

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

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

완화 작업을 사용하면 다음을 수행할 수 있습니다.
+ Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

## 사물 관리 또는 수정
<a name="audit-chk-auth-cognito-role-permissive-manage-things"></a>

다음 AWS IoT API 작업은 사물을 관리하거나 수정하는 데 사용되므로 인증된 Amazon Cognito 자격 증명 풀을 통해 연결되는 디바이스에는 이러한 작업을 수행하는 권한을 부여해서는 안 됩니다.
+ `AddThingToThingGroup` 
+ `AttachThingPrincipal` 
+ `CreateThing` 
+ `DeleteThing` 
+ `DetachThingPrincipal` 
+ `ListThings`
+ `ListThingsInThingGroup` 
+ `RegisterThing` 
+ `RemoveThingFromThingGroup` 
+ `UpdateThing` 
+ `UpdateThingGroupsForThing`

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

## 비사물 관리
<a name="audit-chk-auth-cognito-role-permissive-manage-non-things"></a>

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

## 사물 관리 데이터 읽기
<a name="audit-chk-auth-cognito-role-permissive-read-things-admin-data"></a>

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

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  이렇게 하면 디바이스가 모든 사물에 대해 지정된 작업을 수행할 수 있습니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [ 
            "iot:DescribeThing",
            "iot:ListJobExecutionsForThing",
            "iot:ListThingGroupsForThing",
            "iot:ListThingPrincipals"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing"
        ]
      }
    ]
  }
  ```

------

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

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:DescribeThing",
                  "iot:ListJobExecutionsForThing",
                  "iot:ListThingGroupsForThing",
                  "iot:ListThingPrincipals"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:thing/MyThing*"
              ]
          }
      ]
  }
  ```

------

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

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  이렇게 하면 디바이스가 모든 사물에 대해 지정된 작업을 수행할 수 있습니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [ 
            "iot:DescribeThing",
            "iot:ListJobExecutionsForThing",
            "iot:ListThingGroupsForThing",
            "iot:ListThingPrincipals"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing"
        ]
      }
    ]
  }
  ```

------

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

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:DescribeThing",
                  "iot:ListJobExecutionsForThing",
                  "iot:ListThingGroupsForThing",
                  "iot:ListThingPrincipals"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:thing/MyThing*"
              ]
          }
      ]
  }
  ```

------

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

## MQTT 주제 구독/게시
<a name="audit-chk-auth-cognito-role-permissive-mqtt-topic"></a>

MQTT 메시지는 AWS IoT 메시지 브로커를 통해 전송되며, 섀도우 상태와 작업 실행 상태 액세스 및 수정을 비롯하여 다양한 작업을 수행하는 디바이스에서 사용됩니다. MQTT 메시지를 연결, 게시 또는 구독할 디바이스에 권한을 부여하는 정책은 다음과 같이 이러한 작업을 특정 리소스로 제한해야 합니다.

**연결**  
+ 규정 미준수:

  ```
  arn:aws:iot:region:account-id:client/*
  ```

  와일드카드 \$1를 사용하면 모든 디바이스를 AWS IoT에 연결할 수 있습니다.

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

  조건 키에서 `iot:Connection.Thing.IsAttached`가 true로 설정되지 않는 한 이전 예에서 와일드카드 \$1와 동일합니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
        ]
      }
    ]
  }
  ```

------

  리소스 사양에는 연결하는 데 사용된 디바이스 이름과 일치하는 변수가 포함되어 있으며, 조건문은 MQTT 클라이언트에서 사용되는 인증서가 이름이 사용된 사물에 연결된 인증서와 일치하는지 확인하여 권한을 추가로 제한합니다.

**게시**  
+ 규정 미준수:

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

  이렇게 하면 디바이스가 모든 디바이스의 섀도우를 업데이트할 수 있습니다(\$1 = 모든 디바이스).

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

  이렇게 하면 디바이스가 모든 디바이스의 섀도우에 대해 읽기/업데이트/삭제를 수행할 수 있습니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Publish"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012: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/#
  ```

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

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update
  ```

  이렇게 하면 디바이스가 모든 디바이스의 섀도우 업데이트를 확인할 수 있습니다(\$1 = 모든 디바이스).
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Subscribe"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*",
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*"
              ]
          }
      ]
  }
  ```

------

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

**수신**  
+ 규정 준수:

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

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

## 섀도우 또는 작업 데이터 읽기 또는 수정
<a name="audit-chk-auth-cognito-role-permissive-shadow-job-data"></a>

디바이스에 디바이스 섀도우 또는 작업 실행 데이터에 액세스하거나 이를 수정하는 API 작업을 수행할 권한을 부여하는 정책은 이러한 작업을 특정 리소스로 제한해야 합니다. 다음은 API 작업입니다.
+ `DeleteThingShadow`
+ `GetThingShadow`
+ `UpdateThingShadow`
+ `DescribeJobExecution`
+ `GetPendingJobExecutions`
+ `StartNextPendingJobExecution`
+ `UpdateJobExecution`

**예제**
+ 규정 미준수:

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  이렇게 하면 디바이스가 모든 사물에 대해 지정된 작업을 수행할 수 있습니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iot:DeleteThingShadow",
          "iot:GetThingShadow",
          "iot:UpdateThingShadow",
          "iot:DescribeJobExecution",
          "iotjobsdata:DescribeJobExecution",
          "iotjobsdata:UpdateJobExecution"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing1",
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing2"
        ]
      }
    ]
  }
  ```

------

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

# AWS IoT지나치게 허용적인 정책
<a name="audit-chk-iot-policy-permissive"></a>

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

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

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

**심각도:** 심각

## 세부 사항
<a name="audit-chk-iot-policy-permissive-details"></a>

이 점검에서 규정 미준수 AWS IoT 정책이 발견된 경우 다음 사유 코드가 반환됩니다.
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1DATA\$1PLANE\$1ACTIONS

## 이것이 중요한 이유
<a name="audit-chk-iot-policy-permissive-why-it-matters"></a>

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

## 수정 방법
<a name="audit-chk-iot-policy-permissive-how-to-fix"></a>

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

1. [CreatePolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePolicyVersion.html)을 사용하여 새 규정 준수 정책 버전을 생성합니다. `setAsDefault` 플래그를 true로 설정합니다. (이로 인해 정책을 사용하는 모든 개체에 이 새 버전이 적용됩니다.)

1. [ListTargetsForPolicy](https://docs.aws.amazon.com/iot/latest/apireference/API_ListTargetsForPolicy.html)를 사용하여 정책이 연결된 대상(인증서, 사물 그룹)의 목록을 가져오고 그룹에 포함되는 디바이스 또는 인증서를 사용하여 연결할 디바이스를 결정합니다.

1. 연결된 모든 디바이스가 AWS IoT에 연결될 수 있는지 확인합니다. 디바이스를 연결할 수 없는 경우 [ SetPolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_SetPolicyVersion.html)을 사용하여 기본 정책을 이전 버전으로 롤백하고 정책을 수정한 다음 다시 시도하세요.

완화 조치를 사용하면 다음을 수행할 수 있습니다.
+ 이 변경사항을 실행하려면 감사 결과에서 `REPLACE_DEFAULT_POLICY_VERSION` 완화 작업을 적용합니다.
+ Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

[AWS IoT Core 정책 변수](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-variables.html)를 사용하여 정책에서 AWS IoT 리소스를 동적으로 참조합니다.

## MQTT 권한
<a name="audit-chk-iot-policy-permissive-mqtt-permissions"></a>

MQTT 메시지는 AWS IoT 메시지 브로커를 통해 전송되며, 섀도우 상태 및 작업 실행 상태 액세스 및 수정을 포함하여 다양한 작업을 수행하기 위해 디바이스에서 사용됩니다. MQTT 메시지를 연결, 게시 또는 구독할 디바이스에 권한을 부여하는 정책은 다음과 같이 이러한 작업을 특정 리소스로 제한해야 합니다.

**연결**  
+ 규정 미준수:

  ```
  arn:aws:iot:region:account-id:client/*
  ```

  와일드카드 \$1를 사용하면 모든 디바이스를 AWS IoT에 연결할 수 있습니다.

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

  조건 키에서 `iot:Connection.Thing.IsAttached`가 true로 설정되지 않는 한 이전 예에서 와일드카드 \$1와 동일합니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
        ]
      }
    ]
  }
  ```

------

  리소스 사양에는 연결하는 데 사용된 디바이스 이름과 일치하는 변수가 포함되어 있습니다. 조건문은 MQTT 클라이언트에서 사용되는 인증서가 이름이 사용된 사물에 연결된 인증서와 일치하는지 확인하여 권한을 추가로 제한합니다.

**게시**  
+ 규정 미준수:

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

  이렇게 하면 디바이스가 모든 디바이스의 섀도우를 업데이트할 수 있습니다(\$1 = 모든 디바이스).

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

  이렇게 하면 디바이스가 모든 디바이스의 섀도우에 대해 읽기, 업데이트 또는 삭제 작업을 수행할 수 있습니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Publish"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012: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/*
  ```

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

  ```
  arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update
  ```

  이렇게 하면 디바이스가 모든 디바이스의 섀도우 업데이트를 확인할 수 있습니다(\$1 = 모든 디바이스).
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Subscribe"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*",
                  "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*"
              ]
          }
      ]
  }
  ```

------

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

**수신**  
+ 규정 준수:

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

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

## 섀도우 및 작업 권한
<a name="shadow-job-permissions"></a>

디바이스에 디바이스 섀도우 또는 작업 실행 데이터에 액세스하거나 이를 수정하는 API 작업을 수행할 권한을 부여하는 정책은 이러한 작업을 특정 리소스로 제한해야 합니다. 다음은 API 작업입니다.
+ `DeleteThingShadow`
+ `GetThingShadow`
+ `UpdateThingShadow`
+ `DescribeJobExecution`
+ `GetPendingJobExecutions`
+ `StartNextPendingJobExecution`
+ `UpdateJobExecution`

**예제**
+ 규정 미준수:

  ```
  arn:aws:iot:region:account-id:thing/*
  ```

  이렇게 하면 디바이스가 모든 사물에 대해 지정된 작업을 수행할 수 있습니다.
+ 규정 준수:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [ 
            "iot:DeleteThingShadow",
            "iot:GetThingShadow",
            "iot:UpdateThingShadow",
            "iotjobsdata:DescribeJobExecution",
            "iotjobsdata:GetPendingJobExecutions",
            "iotjobsdata:StartNextPendingJobExecution",
            "iotjobsdata:UpdateJobExecution"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing1",
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing2"
        ]
      }
    ]
  }
  ```

------

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

# 잘못 구성되었을 가능성이 있는 AWS IoT 정책
<a name="audit-chk-iot-misconfigured-policies"></a>

AWS IoT 정책이 잘못 구성되었을 가능성이 있는 것으로 확인되었습니다. 지나치게 허용적인 정책을 비롯하여 정책이 잘못 구성되면 의도하지 않은 리소스에 대한 디바이스 액세스를 허용하는 등의 보안 인시던트가 발생할 수 있습니다.

**잘못 구성되었을 가능성이 있는 AWS IoT 정책** 점검은 정책을 업데이트하기 전에 의도한 작업만 허용되는지 확인하라는 경고입니다.

이 점검은 CLI 및 API에서 `IOT_POLICY_POTENTIAL_MISCONFIGURATION_CHECK`와 같이 나타납니다.

**심각도:** 중간

## 세부 사항
<a name="audit-chk-iot-misconfigured-policies-details"></a>

이 점검에서 잘못 구성되었을 가능성이 있는 AWS IoT 정책이 발견되면 AWS IoT에서 다음 사유 코드가 반환됩니다.
+ POLICY\$1CONTAINS\$1MQTT\$1WILDCARDS\$1IN\$1DENY\$1STATEMENT
+ TOPIC\$1FILTERS\$1INTENDED\$1TO\$1DENY\$1ALLOWED\$1USING\$1WILDCARDS

## 이것이 중요한 이유
<a name="audit-chk-iot-misconfigured-policies-why-it-matters"></a>

정책을 잘못 구성하면 디바이스에 필요한 것보다 더 많은 권한을 제공하여 의도하지 않은 결과를 초래할 수 있습니다. 리소스에 대한 액세스를 제한하고 보안 위협을 방지하기 위해 정책을 신중하게 고려하는 것이 좋습니다.

### 정책의 거부 명령문에 MQTT 와일드카드가 포함된 예제
<a name="example-section-id"></a>

**잘못 구성되었을 가능성이 있는 AWS IoT 정책** 점검은 거부 명령문에 MQTT 와일드카드 문자(`+` 또는 `#`)가 있는지 검사합니다. 와일드카드는 AWS IoT 정책에서 리터럴 문자열로 취급되므로 정책을 지나치게 허용적으로 만들 수 있습니다.

다음 예시는 정책에서 MQTT 와일드카드 `#`를 사용하여 `building/control_room` 관련 주제에 대한 구독을 거부하도록 작성되었습니다. 그러나 MQTT 와일드카드는 AWS IoT 정책에서 와일드카드의 의미가 없으며 디바이스가 `building/control_room/data1`을 구독할 수 있습니다.

**잘못 구성되었을 가능성이 있는 AWS IoT 정책** 점검을 수행하면 이 정책에 사유 코드 `POLICY_CONTAINS_MQTT_WILDCARDS_IN_DENY_STATEMENT`로 플래그가 지정됩니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/#"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
        }
    ]
}
```

------

다음은 적절하게 구성된 정책의 예시입니다. 디바이스에는 `building/control_room/`의 하위 주제를 구독할 수 있는 권한이 없으며 `building/control_room/`의 하위 주제에서 메시지를 수신할 수 있는 권한이 없습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
    },
    {
      "Effect": "Deny",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
    },
    {
      "Effect": "Deny",
      "Action": "iot:Receive",
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/control_room/*"
    }
  ]
}
```

------

### 와일드카드를 사용하여 허용을 거부하려고 하는 주제 필터 예시
<a name="example-section-id2"></a>

다음 예시 정책은 `building/control_room/*` 리소스를 거부하여 `building/control_room` 관련 주제에 대한 구독을 거부하도록 작성되었습니다. 그러나 디바이스는 `building/#`에 대한 구독 요청을 보내고 `building/control_room/data1`을 포함하여 `building`과 관련된 모든 주제에서 메시지를 받을 수 있습니다.

**잘못 구성되었을 가능성이 있는 AWS IoT 정책** 점검을 수행하면 이 정책에 사유 코드 `TOPIC_FILTERS_INTENDED_TO_DENY_ALLOWED_USING_WILDCARDS`로 플래그가 지정됩니다.

다음 예시 정책에는 `building/control_room topics` 주제에 대한 메시지를 수신할 수 있는 권한이 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
        }
    ]
}
```

------

다음은 적절하게 구성된 정책의 예시입니다. 디바이스에는 `building/control_room/`의 하위 주제를 구독할 수 있는 권한이 없으며 `building/control_room/`의 하위 주제에서 메시지를 수신할 수 있는 권한이 없습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/building/control_room/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/*"
        },
        {
            "Effect": "Deny",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/building/control_room/*"
        }
    ]
}
```

------

**참고**  
이 점검에서는 오탐지(false positive)가 보고될 수 있습니다. 플래그가 지정된 정책을 평가하고 감사 억제를 사용하여 오탐지 리소스를 표시하는 것이 좋습니다.

## 수정 방법
<a name="audit-chk-iot-misconfigured-policies-how-to-fix"></a>

이 점점은 잘못 구성되었을 가능성이 있는 정책에 플래그를 지정하므로 오탐지가 발생할 수 있습니다. 나중에 플래그가 지정되지 않도록 [감사 억제](audit-finding-suppressions.md)를 사용하여 오탐지를 표시합니다.

또한 다음 단계에 따라 사물, 사물 그룹 또는 기타 개체에 연결된 규정 미준수 정책을 수정할 수 있습니다.

1. [CreatePolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePolicyVersion.html)을 사용하여 새 규정 준수 정책 버전을 생성합니다. `setAsDefault` 플래그를 true로 설정합니다. (이로 인해 정책을 사용하는 모든 개체에 이 새 버전이 적용됩니다.)

   일반적인 사용 사례에 대한 AWS IoT 정책 생성 예시는 *AWS IoT Core 개발자 안내서*의 [게시 및 구독 정책 예제](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html)를 참조하세요.

1. 연결된 모든 디바이스가 AWS IoT에 연결될 수 있는지 확인합니다. 디바이스를 연결할 수 없는 경우 [ SetPolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_SetPolicyVersion.html)을 사용하여 기본 정책을 이전 버전으로 롤백하고 정책을 수정한 다음 다시 시도하세요.

완화 조치를 사용하면 다음을 수행할 수 있습니다.
+ 이 변경사항을 실행하려면 감사 결과에서 `REPLACE_DEFAULT_POLICY_VERSION` 완화 작업을 적용합니다.
+ Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

자세한 내용은 [완화 작업](dd-mitigation-actions.md) 섹션을 참조하세요.

**AWS IoT Core 개발자 안내서의 [IoT Core 정책 변수](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-variables.html)를 사용하여 정책에서 AWS IoT 리소스를 동적으로 참조합니다.

# 역할 별칭이 지나치게 허용됨
<a name="audit-chk-iot-role-alias-permissive"></a>

AWS IoT 역할 별칭은 연결된 디바이스가 X.509 인증서를 사용하여 AWS IoT에 인증한 다음 AWS IoT 역할 별칭과 연결된 IAM 역할에서 수명이 짧은 AWS 자격 증명을 얻는 메커니즘을 제공합니다. 이러한 자격 증명에 대한 권한의 경우 인증 컨텍스트 변수가 있는 액세스 정책을 사용하여 범위를 축소해야 합니다. 정책이 올바르게 구성되지 않은 경우 권한 공격의 에스컬레이션에 노출될 수 있습니다. 이 감사 검사에서는 AWS IoT 역할 별칭에서 제공하는 임시 자격 증명이 과도하게 허용적이지 않도록 합니다.

다음 조건 중 하나가 검색되면 이 점검이 트리거됩니다.
+ 이 정책은 이 역할 별칭(예: "iot:\$1", "dynamodb:\$1", "iam:\$1" 등)에서 작년에 사용한 모든 서비스에 대한 관리 권한을 제공합니다.
+ 이 정책은 사물 메타데이터 작업에 대한 광범위한 액세스, 제한된 AWS IoT 작업에 대한 액세스 또는 AWS IoT 데이터 영역 작업에 대한 광범위한 액세스를 제공합니다.
+ 이 정책은 "iam", "cloudtrail", "guardduty", "inspector" 또는 "trustedadvisor"와 같은 보안 감사 서비스에 대한 액세스를 제공합니다.

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

**심각도:** 심각

## 세부 사항
<a name="audit-chk-iot-role-alias-permissive-details"></a>

이 점검에서 규정 미준수 IoT 정책이 발견되면 다음 사유 코드가 반환됩니다.
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1USED\$1SERVICES
+ ALLOWS\$1ACCESS\$1TO\$1SECURITY\$1AUDITING\$1SERVICES
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1THING\$1ADMIN\$1READ\$1ACTIONS
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1NON\$1THING\$1ADMIN\$1ACTIONS
+ ALLOWS\$1ACCESS\$1TO\$1IOT\$1THING\$1ADMIN\$1WRITE\$1ACTIONS
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1DATA\$1PLANE\$1ACTIONS

## 이것이 중요한 이유
<a name="audit-chk-iot-role-alias-permissive-why-it-matters"></a>

권한을 디바이스가 정상적인 작업을 수행하는 데 필요한 권한으로 제한하면 디바이스가 손상된 경우 계정에 대한 위험을 줄일 수 있습니다.

## 수정 방법
<a name="audit-chk-iot-role-alias-permissive-how-to-fix"></a>

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

1. [AWS IoT Core 보안 인증 정보 공급자를 사용하여 AWS 서비스에 대한 직접 호출 승인](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)의 단계에 따라 역할 별칭에 보다 제한적인 정책을 적용하세요.

완화 조치를 사용하면 다음을 수행할 수 있습니다.
+ Amazon SNS 메시지에 대한 응답으로 사용자 지정 작업을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

# 역할 별칭으로 사용되지 않는 서비스에 대한 액세스 허용
<a name="audit-chk-role-alias-unused-svcs"></a>

AWS IoT 역할 별칭은 연결된 디바이스가 X.509 인증서를 사용하여 AWS IoT에 인증한 다음 AWS IoT 역할 별칭과 연결된 IAM 역할에서 수명이 짧은 AWS 자격 증명을 얻는 메커니즘을 제공합니다. 이러한 자격 증명에 대한 권한의 경우 인증 컨텍스트 변수가 있는 액세스 정책을 사용하여 범위를 축소해야 합니다. 정책이 올바르게 구성되지 않은 경우 권한 공격의 에스컬레이션에 노출될 수 있습니다. 이 감사 검사에서는 AWS IoT 역할 별칭에서 제공하는 임시 자격 증명이 과도하게 허용적이지 않도록 합니다.

이 점검은 역할 별칭이 작년에 AWS IoT 디바이스에 사용되지 않은 서비스에 액세스할 수 있는 경우 트리거됩니다. 예를 들어, 이 감사에서는 작년에 AWS IoT만 사용한 역할 별칭에 연결된 IAM 역할이 있는데 이 역할에 연결된 정책에서도 `"iam:getRole"` 및 `"dynamodb:PutItem"`에 권한을 부여하는지 보고합니다.

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

**심각도:** 중간

## 세부 사항
<a name="audit-chk-role-alias-unused-svcs-details"></a>

이 점검에서 규정 미준수 AWS IoT 정책이 발견되면 다음 사유 코드가 반환됩니다.
+ ALLOWS\$1ACCESS\$1TO\$1UNUSED\$1SERVICES

## 이것이 중요한 이유
<a name="audit-chk-role-alias-unused-svcs-why-it-matters"></a>

권한을 디바이스가 정상적인 작업을 수행하는 데 필요한 서비스로 제한하면 디바이스가 손상된 경우 계정에 대한 위험을 줄일 수 있습니다.

## 수정 방법
<a name="audit-chk-role-alias-unused-svcs-how-to-fix"></a>

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

1. [AWS IoT Core 보안 인증 정보 공급자를 사용하여 AWS 서비스에 대한 직접 호출 승인](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)의 단계에 따라 역할 별칭에 보다 제한적인 정책을 적용하세요.

완화 조치를 사용하면 다음을 수행할 수 있습니다.
+ Amazon SNS 메시지에 대한 응답으로 사용자 지정 작업을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

# CA 인증서 만료
<a name="audit-chk-ca-cert-approaching-expiration"></a>

CA 인증서가 30일 이내에 만료되거나 만료되었습니다.

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

**심각도:** 중간

## 세부 사항
<a name="audit-chk-ca-cert-approaching-expiration-details"></a>

이 점검은 ACTIVE 또는 PENDING\$1TRANSFER 상태인 CA 인증서에 적용됩니다.

이 점검에서 규정 미준수 CA 인증서가 발견된 경우 다음 사유 코드가 반환됩니다.
+ CERTIFICATE\$1APPROACHING\$1EXPIRATION
+ CERTIFICATE\$1PAST\$1EXPIRATION

## 이것이 중요한 이유
<a name="audit-chk-ca-cert-approaching-expiration-why-it-matters"></a>

만료된 CA 인증서는 새 디바이스 인증서에 서명하는 데 사용해서는 안 됩니다.

## 수정 방법
<a name="audit-chk-ca-cert-approaching-expiration-how-to-fix"></a>

방법은 보안 모범 사례를 참조하세요. 수행 가능한 작업은 다음과 같습니다.

1. 새 CA 인증서를 AWS IoT에 등록합니다.

1. 새 CA 인증서를 사용하여 디바이스 인증서에 서명할 수 있는지 확인합니다.

1. [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html)를 사용하여 AWS IoT에서 이전 CA 인증서를 비활성(INACTIVE)으로 표시합니다. 완화 작업을 사용하여 다음을 수행할 수도 있습니다.
   + 이 변경사항을 실행하려면 감사 결과에서 `UPDATE_CA_CERTIFICATE` 완화 작업을 적용합니다.
   + Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

   자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

# 충돌하는 MQTT 클라이언트
<a name="audit-chk-conflicting-client-ids"></a>

여러 디바이스가 동일한 클라이언트 ID를 사용하여 연결됩니다.

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

**심각도:** 높음

## 세부 사항
<a name="audit-chk-conflicting-client-ids-details"></a>

동일한 클라이언트 ID를 사용한 다중 연결이 성립되어 이미 연결된 디바이스가 연결 해제되었습니다. MQTT 사양에서는 클라이언트 ID당 활성 연결 하나만 허용하므로, 다른 디바이스가 동일한 클라이언트 ID를 사용하여 연결할 경우 이전 디바이스의 연결이 종료됩니다.

온디맨드 감사의 일부로 이 점검을 수행하면 해당 점검에서는 감사 시작 전 31일 동안 클라이언트 ID가 연결에 사용된 방식을 확인합니다. 예정된 감사의 경우 이 점검은 감사가 실행된 마지막 시간부터 감사의 이 인스턴스가 시작된 시간까지의 데이터를 확인합니다. 점검된 시간 동안 이 상태를 완화하는 단계를 수행한 경우 문제가 지속되는지 여부를 확인하기 위해 연결/연결 해제가 발생한 시기를 기록해 둡니다.

이 점검에서 규정 미준수가 발견된 경우 다음 사유 코드가 반환됩니다.
+ DUPLICATE\$1CLIENT\$1ID\$1ACROSS\$1CONNECTIONS

또한 이 점검에서 반환되는 결과에는 연결에 사용된 클라이언트 ID, 보안 주체 ID 및 연결 해제 횟수가 포함됩니다. 가장 최근 결과가 먼저 나열됩니다.

## 이것이 중요한 이유
<a name="audit-chk-conflicting-client-ids-why-it-matters"></a>

ID가 충돌하는 디바이스는 끊임없이 다시 연결되므로 메시지가 손실되거나 디바이스가 연결할 수 없는 상태가 됩니다.

이는 디바이스 또는 디바이스의 자격 증명이 손상되었으며 DDoS 공격일 수 있음을 나타낼 수 있습니다. 또한 계정에서 디바이스가 올바르게 구성되지 않거나 디바이스의 연결이 잘못되어 1분당 여러 번 다시 시도될 수 있습니다.

## 수정 방법
<a name="audit-chk-conflicting-client-ids-how-to-fix"></a>

각 디바이스를 AWS IoT에서 고유한 사물로 등록하고 사물 이름을 연결할 클라이언트 ID로 사용합니다. 또는 MQTT를 통해 디바이스를 연결할 때 UUID를 클라이언트 ID로 사용합니다. 완화 작업을 사용하면 다음을 수행할 수 있습니다.
+ Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

# 디바이스 인증서 만료
<a name="audit-chk-device-cert-approaching-expiration"></a>

디바이스 인증서가 구성된 기준값 기간 내에 만료되거나 이미 만료되었습니다. 인증서 만료 검사 기준값은 30일(최소)에서 3,652일(10년(최대)) 사이로 구성할 수 있으며 기본값은 30일입니다.

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

**심각도:** 중간

## 세부 사항
<a name="audit-chk-device-cert-approaching-expiration-details"></a>

이 점검은 ACTIVE 또는 PENDING\$1TRANSFER 상태인 디바이스 인증서에 적용됩니다.

이 점검에서 규정 미준수 디바이스 인증서가 발견된 경우 다음 사유 코드가 반환됩니다.
+ CERTIFICATE\$1APPROACHING\$1EXPIRATION
+ CERTIFICATE\$1PAST\$1EXPIRATION

## 이것이 중요한 이유
<a name="audit-chk-device-cert-approaching-expiration-why-it-matters"></a>

만료된 후에는 디바이스 인증서를 사용해서는 안 됩니다.

## 디바이스 인증서 만료 검사 구성
<a name="w2aab9c11c43c13"></a>

이 구성을 사용하면 디바이스 플릿 전반에서 만료 날짜가 다가오는 인증서에 대한 알림을 모니터링하고 수신할 수 있습니다. 예를 들어 인증서 만료 후 30일 이내에 알림을 받으려면 다음과 같이 검사를 구성할 수 있습니다.

```
{
    "roleArn": "your-audit-role-arn",
    "auditCheckConfigurations": {
        "DEVICE_CERTIFICATE_EXPIRING_CHECK": {
            "enabled": true,
            "configuration": {
                "CERT_EXPIRATION_THRESHOLD_IN_DAYS": "30"
            }
        }
    }
}
```

## 수정 방법
<a name="audit-chk-device-cert-approaching-expiration-how-to-fix"></a>

방법은 보안 모범 사례를 참조하세요. 수행 가능한 작업은 다음과 같습니다.

1. 새 인증서를 프로비저닝하고 디바이스에 연결합니다.

1. 새 인증서가 유효하고 디바이스가 이 인증서를 사용하여 연결할 수 있는지 확인합니다.

1. [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html)를 사용하여 이전 인증서를 AWS IoT에서 비활성(INACTIVE)으로 표시합니다. 완화 작업을 사용하면 다음을 수행할 수 있습니다.
   + 이 변경사항을 실행하려면 감사 결과에서 `UPDATE_DEVICE_CERTIFICATE` 완화 작업을 적용합니다.
   + 조치를 취할 수 있는 그룹에 디바이스를 추가하려면 `ADD_THINGS_TO_THING_GROUP` 완화 조치를 적용합니다.
   + Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

   자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

1. 기존 인증서를 디바이스에서 분리합니다. ([DetachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_DetachThingPrincipal.html) 참조)

# 디바이스 인증서 수명 확인
<a name="device-certificate-age-check"></a>

이 감사 확인은 디바이스 인증서가 지정한 수보다 크거나 동일한 일수 동안 활성화되어 있을 경우 알림을 전달합니다. 이 검사를 통해 인증서 상태에 대한 정보를 얻을 수 있는 덕분에 인증서 수명이 종료되더라도 주기적으로 적절한 조치를 취할 수 있어 인증서 손상 위험을 줄여 보안을 강화할 수 있습니다.

인증서 수명 검사 기준값은 30일(최소)에서 3,652일(10년(최대)) 사이로 구성할 수 있으며 기본값은 365일입니다.

이 점검은 CLI 및 API에서 `DEVICE_CERTIFICATE_AGE_CHECK`와(과) 같이 나타납니다. 이 검사는 기본적으로 심각도: **낮음**으로 사용 해제되어 있습니다.

## 세부 사항
<a name="w2aab9c11c45b9"></a>

이 점검은 ACTIVE 또는 PENDING\$1TRANSFER 상태인 디바이스 인증서에 적용됩니다. 이 점검에서 규정 미준수 디바이스 인증서가 발견된 경우 다음 사유 코드가 반환됩니다.
+ CERTIFICATE\$1PAST\$1AGE\$1THRESHOLD

## 디바이스 인증서 수명 확인 구성
<a name="w2aab9c11c45c11"></a>

이 구성을 사용하면 플릿의 특정 요구 사항에 맞게 인증서 교체 알림을 맞춤화하여 모든 디바이스 전반에서 강력한 보안 태세를 유지할 수 있습니다. `UpdateAccountAuditConfiguration` API를 사용하여 이 검사를 구성할 수 있습니다. 예를 들어 인증서가 365일 이상 활성 상태일 때 알림을 받으려면 다음과 같이 검사를 구성할 수 있습니다.

```
{
    "roleArn": "your-audit-role-arn",
    "auditCheckConfigurations": {
        "DEVICE_CERTIFICATE_AGE_CHECK": {
            "enabled": true,
            "configuration": {
                "CERT_AGE_THRESHOLD_IN_DAYS": "365"
            }
        }
    }
}
```

# 취소된 디바이스 인증서가 계속 활성 상태
<a name="audit-chk-revoked-device-cert"></a>

취소된 디바이스 인증서가 계속 활성 상태입니다.

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

**심각도:** 중간

## 세부 사항
<a name="audit-chk-revoked-device-cert-details"></a>

디바이스 인증서가 해당 CA의 [인증서 해지 목록](https://en.wikipedia.org/wiki/Certificate_revocation_list)에 있지만, AWS IoT에서 여전히 활성 상태입니다.

이 점검은 ACTIVE 또는 PENDING\$1TRANSFER 상태인 디바이스 인증서에 적용됩니다.

이 점검에서 규정 미준수가 발견된 경우 다음 사유 코드가 반환됩니다.
+ CERTIFICATE\$1REVOKED\$1BY\$1ISSUER

## 이것이 중요한 이유
<a name="audit-chk-revoked-device-cert-why-it-matters"></a>

일반적으로 손상되었으므로 디바이스 인증서가 취소됩니다. 오류 또는 실수로 인해 AWS IoT에서 아직 취소되지 않을 수 있습니다.

## 수정 방법
<a name="audit-chk-revoked-device-cert-how-to-fix"></a>

디바이스 인증서가 손상되지 않았는지 확인합니다. 손상되었다면 보안 모범 사례를 따라 상황을 완화시킵니다. 수행 가능한 작업은 다음과 같습니다.

1. 디바이스에 새 인증서를 프로비저닝합니다.

1. 새 인증서가 유효하고 디바이스가 이 인증서를 사용하여 연결할 수 있는지 확인합니다.

1. [UpdateCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCertificate.html)을 사용하여 이전 인증서를 AWS IoT에서 취소됨(REVOKED)으로 표시합니다. 완화 작업을 사용하면 다음을 수행할 수 있습니다.
   + 이 변경사항을 실행하려면 감사 결과에서 `UPDATE_DEVICE_CERTIFICATE` 완화 작업을 적용합니다.
   + 조치를 취할 수 있는 그룹에 디바이스를 추가하려면 `ADD_THINGS_TO_THING_GROUP` 완화 조치를 적용합니다.
   + Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

   자세한 내용은 [완화 작업](dd-mitigation-actions.md) 단원을 참조하세요.

1. 기존 인증서를 디바이스에서 분리합니다. ([DetachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_DetachThingPrincipal.html) 참조)

# 로깅 비활성화
<a name="audit-chk-logging-disabled"></a>

AWS IoT 로그는 Amazon CloudWatch에서 활성화되지 않습니다. V1, V2 로깅을 모두 확인합니다.

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

**심각도: ** 낮음

## 세부 사항
<a name="audit-chk-logging-disabled-details"></a>

이 점검에서 규정 미준수가 발견된 경우 다음 사유 코드가 반환됩니다.
+ LOGGING\$1DISABLED

## 이것이 중요한 이유
<a name="audit-chk-logging-disabled-why-it-matters"></a>

CloudWatch의 AWS IoT 로그를 통해 인증 실패, 예상치 못한 연결 및 연결 해제 등 디바이스가 손상되었음을 나타낼 수 있는 AWS IoT 내의 동작을 파악할 수 있습니다.

## 수정 방법
<a name="audit-chk-logging-disabled-how-to-fix"></a>

CloudWatch의 AWS IoT 로그를 활성화합니다. **AWS IoT Core 개발자 안내서의 [모니터링 및 로깅](https://docs.aws.amazon.com/iot/latest/developerguide/security-logging.html) 완화 작업을 사용하면 다음을 수행할 수 있습니다.
+ 이 변경사항을 실행하려면 감사 결과에서 `ENABLE_IOT_LOGGING` 완화 작업을 적용합니다.
+ Amazon SNS 메시지에 대해 사용자 지정 응답을 구현하려면 `PUBLISH_FINDINGS_TO_SNS` 완화 작업을 적용합니다.

자세한 내용은 [완화 작업](dd-mitigation-actions.md) 섹션을 참조하세요.