

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 의 데이터 보호 AWS IoT Core
<a name="data-protection"></a>

 AWS [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)의 데이터 보호에 적용됩니다 AWS IoT Core. 이 모델에 설명된 대로 AWS 는 모든를 실행하는 글로벌 인프라를 보호할 책임이 있습니다 AWS 클라우드. 사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. 사용하는 AWS 서비스 의 보안 구성과 관리 태스크에 대한 책임도 사용자에게 있습니다. 데이터 프라이버시에 관한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq/)를 참조하세요. 유럽의 데이터 보호에 대한 자세한 내용은 *AWS 보안 블로그*의 [AWS 공동 책임 모델 및 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 블로그 게시물을 참조하세요.

데이터 보호를 위해 자격 증명을 보호하고 AWS 계정 AWS IAM Identity Center 또는 AWS Identity and Access Management (IAM)를 사용하여 개별 사용자를 설정하는 것이 좋습니다. 이렇게 하면 개별 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용합니다.
+ SSL/TLS를 사용하여 AWS 리소스와 통신합니다. TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ 를 사용하여 API 및 사용자 활동 로깅을 설정합니다 AWS CloudTrail. CloudTrail 추적을 사용하여 AWS 활동을 캡처하는 방법에 대한 자세한 내용은 *AWS CloudTrail 사용 설명서*의 [ CloudTrail 추적 작업을 참조하세요](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html).
+ 내부의 모든 기본 보안 제어와 함께 AWS 암호화 솔루션을 사용합니다 AWS 서비스.
+ Amazon S3에 저장된 민감한 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용합니다.
+ 명령줄 인터페이스 또는 API를 AWS 통해에 액세스할 때 FIPS 140-3 검증 암호화 모듈이 필요한 경우 FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 [연방 정보 처리 표준(FIPS) 140-3](https://aws.amazon.com/compliance/fips/)을 참조하세요.

고객의 이메일 주소와 같은 기밀 정보나 중요한 정보는 태그나 **이름** 필드와 같은 자유 형식 텍스트 필드에 입력하지 않는 것이 좋습니다. 여기에는 AWS IoT 또는 기타 AWS 서비스 에서 콘솔, API AWS CLI또는 AWS SDKs를 사용하여 작업하는 경우가 포함됩니다. 이름에 사용되는 태그 또는 자유 형식 텍스트 필드에 입력하는 모든 데이터는 청구 또는 진단 로그에 사용될 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명을 URL에 포함해서는 안 됩니다.

데이터 보호에 대한 자세한 내용은 *AWS 보안 블로그*의 [AWS 공동 책임 모델 및 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 블로그 게시물을 참조하세요.

AWS IoT 디바이스는 데이터를 수집하고 해당 데이터에 대한 일부 조작을 수행한 다음 해당 데이터를 다른 웹 서비스로 전송합니다. 짧은 기간 동안 디바이스에 일부 데이터를 저장하도록 선택할 수 있습니다. 사용자는 해당 유휴 데이터에 대해 모든 데이터 보호를 제공할 책임이 있습니다. 디바이스가 데이터를 전송할 때이 섹션의 뒷부분에서 설명한 대로 TLS 연결을 통해 데이터를 AWS IoT전송합니다. AWS IoT 디바이스는 모든 AWS 서비스로 데이터를 전송할 수 있습니다. 각 서비스의 데이터 보안에 대한 자세한 내용은 해당 서비스에 대한 설명서를 참조하세요. CloudWatch Logs에 로그를 쓰고 AWS IoT API 호출을 로깅하도록 구성할 AWS IoT 수 있습니다 AWS CloudTrail. 이러한 서비스의 데이터 보안에 대한 자세한 내용은 [ Amazon CloudWatch에 대한 인증 및 액세스 제어](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/auth-and-access-control-cw.html)와 [AWS KMS 관리형 키를 사용한 CloudTrail 로그 파일 암호화를 참조하세요](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/encrypting-cloudtrail-log-files-with-aws-kms.html).

## 의 데이터 암호화 AWS IoT
<a name="data-protection-encrypt"></a>

기본적으로 전송 AWS IoT 중 및 저장 데이터는 모두 암호화됩니다. [전송 중인 데이터는 TLS를 사용하여 암호화](transport-security.md)되고 저장 데이터는 AWS 소유 키를 사용하여 암호화됩니다.는 AWS Key Management Service AWS KMS keys ()의 고객 관리형(KMS 키)을 AWS IoT 지원합니다AWS KMS. 그러나 Device Advisor 및 AWS IoT Wireless는 만 사용하여 고객 데이터를 암호화 AWS 소유 키 합니다.

 

# 의 전송 보안 AWS IoT Core
<a name="transport-security"></a>

전송 계층 보안(TLS)은 컴퓨터 네트워크를 통한 보안 통신을 위해 설계된 암호화 프로토콜입니다. AWS IoT Core Device Gateway를 사용하려면 디바이스에서 게이트웨이로의 연결에 TLS를 사용하여 전송 중 모든 통신을 암호화해야 합니다. TLS는 AWS IoT Core에서 지원하는 애플리케이션 프로토콜(MQTT, HTTP, WebSocket)의 기밀성을 달성하는 데 사용됩니다. TLS 지원은 다수의 프로그래밍 언어 및 운영 체제를 지원합니다. 내의 데이터는 특정 AWS 서비스에 의해 암호화 AWS 됩니다. 다른 AWS 서비스의 데이터 암호화에 대한 자세한 내용은 해당 서비스의 보안 설명서를 참조하세요.

**Topics**
+ [TLS 프로토콜](#tls-ssl-policy)
+ [보안 정책](#tls-policy-table)
+ [의 전송 보안을 위한 중요 참고 사항 AWS IoT Core](#tls-ssl-core)
+ [LoRaWAN 무선 디바이스를 위한 전송 보안](#tls-lorawan)

## TLS 프로토콜
<a name="tls-ssl-policy"></a>

AWS IoT Core 는 다음 버전의 TLS 프로토콜을 지원합니다.
+ TLS 1.3 
+ TLS 1.2

를 사용하면 도메인 구성에서 TLS 설정([TLS 1.2](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) 및 [TLS 1.3](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3)용)을 AWS IoT Core구성할 수 있습니다. 자세한 내용은 [도메인 구성에서 TLS 설정 구성](iot-endpoints-tls-config.md) 단원을 참조하십시오.

## 보안 정책
<a name="tls-policy-table"></a>

보안 정책은 클라이언트와 서버 간의 TLS 협상 중에 지원되는 프로토콜과 암호를 결정하는 TLS 프로토콜과 해당 암호의 조합입니다. 필요에 따라 미리 정의된 보안 정책을 사용하도록 디바이스를 구성할 수 있습니다. AWS IoT Core 는 사용자 지정 보안 정책을 지원하지 않습니다.

디바이스를 연결할 때 디바이스에 대해 사전 정의된 보안 정책 중 하나를 선택할 수 있습니다 AWS IoT Core. 에서 사전 정의된 최신 보안 정책의 이름에는 릴리스된 연도 및 월을 기반으로 한 버전 정보가 AWS IoT Core 포함됩니다. 기본 사전 정의 보안 정책은 `IoTSecurityPolicy_TLS13_1_2_2022_10`입니다. 보안 정책을 지정하려면 AWS IoT 콘솔 또는를 사용할 수 있습니다 AWS CLI. 자세한 내용은 [도메인 구성에서 TLS 설정 구성](iot-endpoints-tls-config.md) 단원을 참조하십시오.

다음 테이블에는 AWS IoT Core 에서 지원하는 가장 최근의 사전 정의된 보안 정책이 설명되어 있습니다. `IotSecurityPolicy_`가 제목 행의 정책 이름에서 제거되어 해당 위치에 맞게 조정되었습니다.


| **보안 정책** | TLS13\$11\$13\$12022\$110 | TLS13\$11\$12\$12022\$110 | TLS12\$11\$12\$12022\$110 | TLS12\$11\$10\$12016\$101\$1 | TLS12\$11\$10\$12015\$101\$1 | 
| --- | --- | --- | --- | --- | --- | 
| TCP 포트 |  443/8443/8883  |  443/8443/8883  |  443/8443/8883  | 443 | 8443/8883 | 443 | 8443/8883 | 
| TLS 프로토콜 | 
| TLS 1.2 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| TLS 1.3 | ✓ | ✓ |  |  |  |  |  | 
| TLS 암호 | 
| TLS\$1AES\$1128\$1GCM\$1SHA256 | ✓ | ✓ |  |  |  |  |  | 
| TLS\$1AES\$1256\$1GCM\$1SHA384 | ✓ | ✓ |  |  |  |  |  | 
| TLS\$1CHACHA20\$1POLY1305\$1SHA256 | ✓ | ✓ |  |  |  |  |  | 
| ECDHE-RSA-AES128-GCM-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES128-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES128-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES256-GCM-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES256-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA-AES256-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES128-GCM-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES128-SHA256 |  | ✓ | ✓ | ✓ |  | ✓ | ✓ | 
| AES128-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-GCM-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| DHE-RSA-AES256-SHA |  |  |  |  |  | ✓ | ✓ | 
| ECDHE-ECDSA-AES128-GCM-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES128-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES128-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES256-GCM-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES256-SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA-AES256-SHA |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 

**참고**  
`TLS12_1_0_2016_01`는 AWS 리전 ap-east-1, ap-northeast-2, ap-south-1, ap-southeast-2, ca-central-1, cn-north-1, cn-northwest-1, eu-north-1, eu-west-2, eu-west-3, me-south-1, sa-east-1, us-east-2, us-gov-west-1, us-gov-west-2, us-west-1에서만 사용할 수 있습니다.  
`TLS12_1_0_2015_01`는 AWS 리전 ap-northeast-1, ap-southeast-1, eu-central-1, eu-west-1, us-east-1, us-west-2에서만 사용할 수 있습니다.

## 의 전송 보안을 위한 중요 참고 사항 AWS IoT Core
<a name="tls-ssl-core"></a>

[MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html)를 AWS IoT Core 사용하여에 연결하는 디바이스의 경우 TLS는 디바이스와 브로커 간의 연결을 암호화하고 TLS 클라이언트 인증을 AWS IoT Core 사용하여 디바이스를 식별합니다. 자세한 내용은 [클라이언트 인증](https://docs.aws.amazon.com//iot/latest/developerguide/client-authentication.html)을 참조하세요. [HTTP](https://docs.aws.amazon.com//iot/latest/developerguide/http.html)를 AWS IoT Core 사용하여에 연결하는 디바이스의 경우 TLS는 디바이스와 브로커 간의 연결을 암호화하고 인증은 AWS 서명 버전 4에 위임됩니다. 자세한 내용은 **AWS 일반 참조에서 [서명 버전 4를 사용하여 요청에 서명](https://docs.aws.amazon.com//general/latest/gr/create-signed-request.html)을 참조하세요.

디바이스를 연결할 때 [SNI(Server Name Indication) 확장](https://tools.ietf.org/html/rfc3546#section-3.1)을 AWS IoT Core보낼 필요는 없지만 적극 권장됩니다. [다중 계정 등록](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), [사용자 지정 도메인](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html), [VPC 엔드포인트](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html) 및 [구성된 TLS 정책](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html)과 같은 기능을 사용하려면, SNI 확장을 사용하고 `host_name` 필드에 전체 엔드포인트 주소를 제공해야 합니다. `host_name` 필드에는 호출하는 엔드포인트가 포함되어야 합니다. 이 엔드포인트는 다음 중 하나여야 합니다.
+ `aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:Data-ATS`에서 반환한 `endpointAddress`
+ `aws iot [describe-domain-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-domain-configuration.html) –-domain-configuration-name "domain_configuration_name"`에서 반환한 `domainName`

올바르지 않거나 잘못된 `host_name` 값을 가진 디바이스에서 시도한 연결은 실패합니다. AWS IoT Core 는 [사용자 지정 인증](https://docs.aws.amazon.com//iot/latest/developerguide/custom-authentication.html)의 인증 유형에 대해 CloudWatch에 실패를 기록합니다.

AWS IoT Core 는 [SessionTicket TLS 확장](https://www.ietf.org/rfc/rfc5077.txt)을 지원하지 않습니다.

## LoRaWAN 무선 디바이스를 위한 전송 보안
<a name="tls-lorawan"></a>

LoRaWAN 디바이스는 [LoRaWAN™ 보안: LoRa Alliance™에 Gemalto, Actility 및 Semtech이 준비한 백서](https://lora-alliance.org/sites/default/files/2019-05/lorawan_security_whitepaper.pdf)에 설명된 보안 연습을 따릅니다.

LoRaWAN 디바이스를 사용한 전송 보안에 대한 자세한 내용은 [LoRaWAN 데이터 및 전송 보안](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/iot-lorawan-security.html) 섹션을 참조하세요.

# 의 데이터 암호화 AWS IoT
<a name="data-encryption"></a>

데이터 보호는 전송 중(로/에서 이동하는 동안 AWS IoT Core) 및 저장 중(디바이스 또는 다른 AWS 서비스에 저장되는 동안) 데이터를 보호하는 것을 말합니다. 로 전송되는 모든 데이터는 MQTT, HTTPS 및 WebSocket 프로토콜을 사용하여 TLS 연결을 통해 전송되므로 전송 중에 기본적으로 안전합니다. AWS IoT Core 는 디바이스에서 데이터를 AWS IoT Core 수집한 다음 추가 처리를 위해 다른 AWS 서비스로 전송합니다. 다른 AWS 서비스의 데이터 암호화에 대한 자세한 내용은 해당 서비스의 보안 설명서를 참조하세요. 자세한 내용은 [유휴 시 저장된 데이터 암호화](encryption-at-rest.md)를 참조하세요.

FreeRTOS는 키 스토리지를 추상화하여 암호화 객체에 액세스하고 세션을 관리하는 PKCS \$111 라이브러리를 제공합니다. 이 라이브러리를 사용하여 디바이스에 저장된 데이터를 암호화하는 것은 사용자의 책임입니다. 자세한 내용은 [ FreeRTOS퍼블릭 키 암호화 표준(PKCS) \$111 라이브러리](https://docs.aws.amazon.com/freertos/latest/userguide/security-pkcs.html)를 참조하세요.

# 에서 저장 데이터 암호화 AWS IoT Core
<a name="encryption-at-rest"></a>

기본적으로 모든 저장 AWS IoT Core 데이터는 AWS 소유 키를 사용하여 암호화됩니다.는 AWS Key Management Service ()의 대칭 고객 관리형 키 AWS IoT Core 도 지원합니다AWS KMS. 고객 관리형 키를 사용하면 AWS 계정에서 AWS KMS 키를 생성, 소유 및 관리할 수 있습니다. AWS IoT Core 는 KMS 키를 사용하여 저장 데이터를 암호화합니다. 키 정책 생성 및 유지 관리를 포함하여, 이러한 KMS 키를 완전히 제어할 수 있습니다. 이러한 키에 대한 권한을 제어 AWS KMS 하기 위해에 액세스하는 역할에 대한 IAM 정책을 구성할 수도 있습니다.

## AWS 소유 키
<a name="aws-owned-keys"></a>

AWS 소유 키는 AWS 서비스가 여러 AWS 계정에서 사용하기 위해 소유하고 관리하는 KMS 키 모음입니다. AWS 서비스는 AWS 소유 키를 사용하여 데이터를 보호할 수 있습니다. 기본적으로는 AWS 소유 키를 사용하여 저장 데이터를 AWS IoT Core 암호화합니다. 이러한 키는 해당 서비스에서 관리합니다. AWS 소유 키를 보거나 관리하거나 사용할 수 없습니다. 그러나 이러한 키를 보호하기 위해 조치를 취할 필요는 없습니다.

 AWS 소유 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [AWS 소유 키를](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-key) 참조하세요.

## 고객 관리형 키
<a name="customer-managed-keys"></a>

고객 관리형 키는 사용자가 생성, 소유 및 관리하는 AWS 계정의 KMS 키입니다. 키 정책 생성 및 유지 관리를 포함하여, 이러한 AWS KMS 키를 완전히 제어할 수 있습니다. 이러한 키에 대한 권한을 제어 AWS KMS 하기 위해에 액세스하는 역할에 대한 IAM 정책을 구성할 수도 있습니다. 고객 관리형 KMS 키를 사용하여 데이터를 암호화 AWS IoT Core 하도록를 구성할 수 있습니다.

고객 관리형 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)를 참조하세요.

고객 관리형 키를 옵트인하려면 다음 단계를 AWS IoT Core따르세요.

**Topics**
+ [1단계: 고객 관리형 키 만들기](#encryption-at-rest-cmk-create)
+ [2단계: KMS 키를 사용할 수 있는 AWS IoT Core 권한을 부여하는 IAM 역할 생성](#create-an-iam-role)
+ [3단계:에서 고객 관리형 키에 옵트인 AWS IoT Core](#opt-in-customer-managed-keys)
+ [4단계: AWS IoT Core 컨트롤 플레인 작업에 필요한 추가 권한](#cmk-control-plane-permissions)
+ [5단계: 키 관리](#understanding-key-health)
+ [6단계: 키 상태 모니터링](#health-status-monitoring)

### 1단계: 고객 관리형 키 만들기
<a name="encryption-at-rest-cmk-create"></a>

 AWS KMS 콘솔 또는 AWS KMS CLI 명령을 사용하여 대칭 고객 관리형 키를 생성할 수 있습니다. `keySpec`는 `SYMMETRIC_DEFAULT`여야 하고, `keyUsage`는 `ENCRYPT_DECRYPT`여야 합니다.

**참고**  
AWS IoT Core 는 고객 관리형 AWS KMS 키에 대한 `SYMMETRIC_DEFAULT` 키 사양 및 `ENCRYPT_DECRYPT` 키 사용이 있는 키만 지원합니다.

다음은 AWS IoT Core 고객 관리형 키에와 함께 사용할 수 있는 KMS 키를 생성하는 AWS CLI 명령의 예입니다.

```
aws kms create-key --key-spec SYMMETRIC_DEFAULT --key-usage ENCRYPT_DECRYPT --region us-west-2
```

다음은 명령의 출력 예제입니다.

```
{
    "KeyMetadata": {
        "AWSAccountId": "111122223333",
        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "CreationDate": "2024-09-19T11:45:23.982000-07:00",
        "Enabled": true,
        "Description": "",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "Origin": "AWS_KMS",
        "KeyManager": "CUSTOMER",
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "KeySpec": "SYMMETRIC_DEFAULT",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ],
        "MultiRegion": false
    }
}
```

자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [대칭 고객 관리형 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)을 참조하세요.

#### 키 정책
<a name="key-policy"></a>

고객 관리형 키를 만들 때 키 정책을 지정할 수 있습니다. 키 정책에서는 고객 관리형 키에 대한 액세스를 제어합니다. 모든 고객 관리형 키에는 키를 사용할 수 있는 사람과 키를 사용하는 방법을 결정하는 문장이 포함된 정확히 하나의 키 정책이 있어야 합니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [키 정책](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)을 참조하세요.

AWS IoT Core 는 계정의 IAM 역할을 사용하여 고객 관리형 키에 액세스합니다. 사용자 지정 키 정책을 사용하는 경우, 이 키에서 생성된 IAM 역할에 다음 권한이 있는지 확인합니다.
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

### 2단계: KMS 키를 사용할 수 있는 AWS IoT Core 권한을 부여하는 IAM 역할 생성
<a name="create-an-iam-role"></a>

 AWS IoT Core 가 저장 데이터를 암호화하기 위해 생성한 KMS 키를 사용하려면 계정에 IAM 역할도 생성해야 합니다.이 역할은가 KMS 키에 액세스하는 것으로 가정할 AWS IoT Core 수 있습니다.

가 역할을 AWS IoT Core 수임하도록 허용하려면 역할에 다음 신뢰 정책이 있어야 합니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "Service": "iot.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "StringEquals": {
                "aws:SourceAccount": "111122223333"
            },
            "ArnLike": {
                "aws:SourceArn": "arn:aws:iot:us-west-2:111122223333:*"
            }
        }
    }
}
```

IAM 역할에 연결된 IAM 정책에 KMS 키에 대한 다음 권한이 있는지 확인합니다.
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

다음은 고객 관리형 키에 필요한 권한이 있는 IAM 정책의 예입니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowIoTToAccessKMSResource",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey",
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncryptTo",
                "kms:ReEncryptFrom",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": [
                "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
            ],
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws-crypto-ec:vendor": "iot.amazonaws.com"
                }
            }
        }
    ]
}
```

자세한 정보는 *AWS Identity and Access Management 사용 설명서*의 [IAM 사용자에게 권한을 위임할 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)을 참조하세요.

### 3단계:에서 고객 관리형 키에 옵트인 AWS IoT Core
<a name="opt-in-customer-managed-keys"></a>

이전 단계를 모두 완료한 후, AWS IoT Core에서 고객 관리형 키를 사용해 `update-encryption-configuration` CLI 명령을 실행하여 옵트인합니다. 고객 관리형 키를 옵트인하면 AWS 계정의 모든 AWS IoT Core 리소스가 지정된 AWS KMS 키를 사용하여 암호화됩니다.

1. 를 AWS IoT Core 사용하여에서 고객 관리형 키를 옵트인하려면 `update-encryption-configuration` CLI 명령을 AWS CLI실행합니다.

   ```
   aws iot update-encryption-configuration --encryption-type "CUSTOMER_MANAGED_KMS_KEY" \
   --kms-access-role-arn "arn:aws:iam::111122223333:role/myrole" \
   --kms-key-arn "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" --region us-west-2
   ```

1. 를 AWS IoT Core 사용하여에서 고객 관리형 키를 확인하려면 `describe-encryption-configuration` CLI 명령을 AWS CLI실행합니다.

   ```
   aws iot describe-encryption-configuration --region us-west-2
   ```

   에서 고객 관리형 키를 활성화한 경우 출력 AWS IoT Core은 다음과 같을 수 있습니다.

   ```
   {
       "encryptionType": "CUSTOMER_MANAGED_KMS_KEY",
       "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
       "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
       "configurationDetails": {
           "configurationStatus": "HEALTHY"
       },
       "lastModifiedDate": "2024-09-26T22:01:02.365000-07:00"
   }
   ```

   `lastModifiedDate` 필드는 암호화 구성이 마지막으로 업데이트된 날짜를 나타냅니다.

   고객 관리형 키를 활성화하지 않은 경우 출력은 다음과 같을 수 있습니다.

   ```
   {
       "encryptionType": "AWS_OWNED_KMS_KEY",
       "lastModifiedDate": "2024-09-26T22:01:02.365000-07:00"
   }
   ```

### 4단계: AWS IoT Core 컨트롤 플레인 작업에 필요한 추가 권한
<a name="cmk-control-plane-permissions"></a>

고객 관리형 키를 옵트인하면 AWS 계정에 속한 모든 AWS IoT Core 리소스가 제공된 KMS 키로 암호화됩니다. 이제 모든 컨트롤 플레인 작업을 수행하려면 호출자에게 AWS IoT Core 리소스의 특정 작업에 필요한 `kms:Decrypt` 권한 외에도 KMS 키에 대한 권한이 있어야 합니다. 호출자에게 `kms:Decrypt` 권한이 없고 데이터 암호화 또는 복호화가 필요한 API 직접 호출(예: `GetPolicy`)을 수행하는 경우, 호출자는 `UnauthorizedException`을 수신합니다.

예를 들어, `GetPolicy`를 직접 호출할 때, API 직접 호출이 성공하려면 고객 관리형 KMS 키에 대한 `iot:GetPolicy` 및 `kms:Decrypt` 권한이 모두 필요합니다.

**참고**  
암호화 구성에 사용되는 키에 대한 AWS KMS 권한을 부여하도록 IAM 사용자 또는 역할을 업데이트할 때 KMS 키 정책이 각 IAM 사용자 또는 역할에 필요한 권한도 부여하는지 확인합니다.

#### AWS KMS 에 대한 권한 `UpdateEncryptionConfiguration`
<a name="kms-permissions-update-encryption-configuration"></a>

고객 관리형 키를 옵트인하거나 키 구성을 수정하려면 `UpdateEncryptionConfiguration` API 호출에 KMS 키에 대한 다음 AWS KMS 권한이 필요합니다.
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

#### AWS KMS 다른 모든 컨트롤 플레APIs에 대한 권한
<a name="kms-permissions-control-plane-apis"></a>

대부분의 컨트롤 플레인 API는 고객 관리형 키가 활성화된 경우 `kms:Decrypt` 권한이 필요합니다. 그러나 특정 API는 다음과 같은 추가 권한이 필요하지 않습니다.

 AWS KMS 권한이 필요하지 않은 APIs   
`List*` 및 `Delete*` API는 이 버킷에 포함되지 않습니다. 고객은 언제든지 `List*` 또는 `Delete*` 컨트롤 플레인 API를 간접적으로 호출할 수 있으며, 호출자에게 `kms:Decrypt` 권한이 없더라도 해당 API 직접 호출이 성공합니다. `List*` 및 `Delete*` API가 복호화를 수행하지 않아 고객 관리형 키가 비정상이더라도 이러한 API 직접 호출은 성공합니다.  
+ **List\$1 API** - 모든 나열 작업(예: `ListThings`, `ListPolicies`, `ListCertificates`)
+ **Delete\$1 API** - 모든 삭제 작업(예: `DeleteThing`, `DeletePolicy`, `DeleteCertificate`)

### 5단계: 키 관리
<a name="understanding-key-health"></a>

AWS IoT Core 는 고객 관리형 키 구성을 정기적으로 확인하여 암호화 및 복호화 작업이 영향을 받지 않도록 합니다. 이러한 상태 확인은 1분마다 한 번씩 실행되며 암호화 및 복호화 작업을 위해 AWS KMS 키 및 연결된 IAM 역할에 액세스하고 사용할 수 AWS IoT Core있는지 확인합니다.

HEALTHY  
AWS IoT Core 는 지정된 IAM 역할을 통해 AWS KMS 키에 성공적으로 액세스하고 암호화/복호화 작업을 수행할 수 있습니다. 모든 구성 요소가 올바르게 작동합니다.

UNHEALTHY  
AWS IoT Core 는 AWS KMS 키에 액세스하거나 사용할 수 없습니다. 이로 인해 새 암호화 작업을 방해하고 서비스 기능에 영향을 미칠 수 있습니다. `errorCode` 필드는 문제가 해당 키 또는 IAM 역할에 있는지 여부를 나타냅니다.

#### 키 상태에 영향을 미칠 수 있는 고객 작업
<a name="customer-actions-affecting-health"></a>

몇 가지 고객 작업으로 인해 키 상태가 `HEALTHY`에서 `UNHEALTHY`로 변경될 수 있습니다.

키 관련 작업  
+ ** AWS KMS 키 삭제 **- 키 삭제를 예약하면 키가 `Pending deletion` 상태이므로 사용할 수 없습니다.
+ ** AWS KMS 키 비활성화** - KMS 키를 비활성화하면 더 이상 암호화/복호화 작업에 사용할 수 없습니다.
+ **키 삭제 예약** - 삭제가 완료되면 키를 사용할 수 없게 됩니다.
+ **키 정책 수정 **- AWS IoT Core 액세스에 필요한 권한 제거
+ **키 사용 권한 변경** - 필요한 AWS KMS 작업 제한

IAM 역할 관련 작업  
+ **IAM 역할 삭제 **- 키에 액세스하기 위해 역할을 수임할 수 AWS IoT Core 없음
+ **역할 권한 수정 **- 역할 정책에서 필요한 AWS KMS 권한 제거
+ **신뢰 정책 변경** - AWS IoT Core 서비스가 역할을 수임하지 못하도록 방지
+ **제한적인 조건 추가** -가 역할을 AWS IoT Core 사용하지 못하게 하는 조건

계정 수준 작업  
+ **교차 계정 키 액세스 변경** - 서로 다른 계정의 키에 대한 권한 수정
+ **서비스 제어 정책(SCPs)** - AWS KMS 액세스를 제한하는 조직 수준 정책
+ **계정 수준 IAM 정책** - 키 액세스를 재정의하거나 키 액세스와 충돌하는 정책

**중요**  
에서 사용하는 AWS KMS 키, IAM 역할 또는 정책에 대한 모든 변경 사항은 먼저 개발 환경에서 테스트해야 AWS IoT Core 합니다. 변경 후 키 상태를 면밀히 모니터링하여 AWS IoT Core 기능에 영향을 주지 않도록 합니다.

#### 암호화 구성 업데이트
<a name="key-transition"></a>

한 고객 관리형 키에서 다른 고객 관리형 키로 또는 AWS 소유 키와 고객 관리형 키 간에 변경 AWS IoT Core 하도록에서 암호화 구성을 업데이트합니다.

구성을 다른 고객 관리형 키로 변경하려면 다음을·수행하세요.

1. [1단계: 고객 관리형 키 만들기](#encryption-at-rest-cmk-create)의 단계에 따라 새 고객 관리형 키를 생성합니다.

1. 업데이트 기간 동안 이전 키와 새 키 모두에 대한 권한을 포함하도록 IAM 역할 정책을 업데이트합니다.

1. 다음과 같이 새 키를 사용하도록 암호화 구성을 업데이트합니다.

   ```
   aws iot update-encryption-configuration --encryption-type "CUSTOMER_MANAGED_KMS_KEY" \
   --kms-access-role-arn "arn:aws:iam::111122223333:role/myrole" \
   --kms-key-arn "arn:aws:kms:us-west-2:111122223333:key/new-key-id"
   ```

고객 관리형 키에서 AWS 소유 키로 구성을 변경하려면:

```
aws iot update-encryption-configuration --encryption-type "AWS_OWNED_KMS_KEY"
```

**참고**  
새 고객 관리형 키의 암호화 구성을 업데이트할 때, 이전 키와 새 키 모두에 계속 액세스할 수 있어야 작업이 성공할 수 있습니다.

##### 일반적인 장애 시나리오 및 영향
<a name="failure-scenarios"></a>

다음 표에서는 키가 삭제되거나 비활성화되는 일반적인 장애 시나리오를 설명합니다.


| 시나리오 | 즉각적인 영향 | 장기적인 결과 | 
| --- | --- | --- | 
|  키가 비활성화됨  |  모든 새 암호화/복호화 작업이 즉시 실패합니다.  |  키가 다시 활성화되거나 교체될 때까지 서비스 중단  | 
|  키 삭제 예약  |  키 상태가 삭제 보류 중으로 변경되고 모든 암호화/복호화 작업이 실패합니다.  |  삭제 완료 시 자동 서비스 장애 발생  | 
|  키가 영구적으로 삭제됨  |  모든 작업이 즉각적, 영구적으로 실패  |  영구 데이터 손실 및 암호화된 데이터 복구 불가  | 
|  키 정책이 잘못 수정됨  |  AWS IoT Core 키에 대한 액세스 권한을 잃음  |  정책이 수정될 때까지 서비스 장애 발생  | 
|  IAM 역할 삭제됨  |  AWS IoT Core 는 키에 액세스하기 위한 역할을 수임할 수 없습니다.  |  전체 암호화 서비스 장애 발생  | 
|  IAM 역할이 잘못 수정됨  |  AWS IoT Core 는 역할을 수임하거나 역할을 사용하여 키에 액세스할 수 없습니다.  |   IAM 역할이 수정될 때까지 서비스 장애 발생  | 

##### 예방 및 모범 사례
<a name="prevention-best-practices"></a>

우발적인 키 삭제 또는 비활성화를 방지하고 서비스 장애 위험을 최소화하려면 다음을 수행합니다.

키 수명 주기 정책 구현  
키 생성, 교체 및 사용 중지에 대한 명확한 절차를 설정합니다. 어떤 키가 어떤 AWS IoT Core 리소스에서 사용되는지 문서화하고 활성 키의 인벤토리를 유지 관리합니다.

IAM 정책을 사용하여 키 삭제 제한  
권한이 없는 사용자가 중요한 암호화 키를 삭제하거나 비활성화하지 못하도록 방지하는 IAM 정책을 생성합니다. 조건을 사용하여 키 삭제 작업에 대한 추가 승인이 필요합니다.

CloudTrail 로깅 활성화  
CloudTrail을 통해 모든 AWS KMS 키 작업을 모니터링하여 무단 또는 우발적 키 관리 활동을 탐지합니다. 키 삭제, 비활성화 또는 정책 변경에 대한 알림을 설정합니다.

키 교체 절차 테스트  
비프로덕션 환경에서 키 교체 절차를 정기적으로 테스트하여, 키 관련 장애로부터 신속하게 복구할 수 있는지 확인합니다.

키 백업 유지 관리  
 AWS KMS 키 구성 요소를 내보낼 수는 없지만 필요한 경우 키 ARNs, 정책 및 관련 AWS IoT Core 구성에 대한 세부 레코드를 유지하여 키 교체를 신속하게 수행할 수 있습니다.

키 상태 모니터링  
`CMK.Health` 지표를 지속적으로 모니터링하고 주요 상태 변경에 대한 자동 알림을 설정합니다. 자동화된 응답을 구현하여 키 관련 문제를 신속하게 해결합니다.

**중요**  
프로덕션 환경에서 키 업데이트 절차를 구현하기 전에 항상 개발 환경에서 키 업데이트 절차를 테스트합니다. 문서화된 롤백 계획을 수립하고, 긴급 상황 발생 시 키 교체 절차를 신속하게 실행할 수 있는지 확인합니다.

### 6단계: 키 상태 모니터링
<a name="health-status-monitoring"></a>

정기 점검 AWS IoT Core 실행의 일부로 CloudWatch 지표 및 로그가 생성되어 고객 관리형 키 구성의 상태를 파악할 수 있습니다.

AWS IoT Core 는 1분에 한 번 이상 CloudWatch에 `CMK.Health` 지표를 내보냅니다. 지표는가 데이터를 암호화하고 해독하는 데 사용하는 고객 관리형 키의 상태에 AWS IoT Core 대한 정보를 제공합니다.

`CMK.Health` 지표에는 다음과 같은 값이 있습니다.
+ 값은 `1`: AWS IoT Core 이며 데이터 암호화 및 복호화에 암호화 키를 성공적으로 사용할 수 있습니다.
+ 값은 입니다`0`.는 데이터 암호화 및 복호화에 암호화 키를 사용할 수 AWS IoT Core 없습니다.

AWS IoT Core 는 암호화 키의 상태가 변경될 때 AWS IoT 도 V2 로그를 내보냅니다. 이러한 로그는 상태 업데이트에 대한 추가 세부 정보를 제공합니다. 이러한 로그를 보려면 AWS IoT V2 로그를 활성화해야 합니다. `HEALTHY` 로그는 `INFO` 수준에서 내보내고 `UNHEALTHY` 로그는 `ERROR` 수준에서 내보냅니다. 로그 수준에 대한 자세한 내용은 [로그 수준](https://docs.aws.amazon.com/iot/latest/developerguide/configure-logging.html#log-level) 섹션을 참조하세요.

다음 예는 고객 관리형 키의 상태 업데이트를 나타내기 AWS IoT Core 위해에서 내보낸 CloudWatch 로그 항목입니다.

주요 상태 변경을 효과적으로 모니터링하고 변경에 대응하려면 다음을·수행하세요.

1. `CMK.Health` 지표에 대한** CloudWatch 경보를 설정합니다**.

   ```
   aws cloudwatch put-metric-alarm --region us-west-2 \
     --alarm-name "IoTCore-CMK-Health-Alert" \
     --alarm-description "Alert when IoT Core CMK health is unhealthy" \
     --metric-name "CMK.Health" \
     --namespace "AWS/IoT" \
     --statistic "Minimum" \
     --period 300 \
     --evaluation-periods 1 \
     --threshold 1 \
     --comparison-operator "LessThanThreshold" \
     --alarm-actions "arn:aws:sns:us-west-2:111122223333:iot-alerts"
   ```

1. **Enable AWS IoT V2 로깅**을 사용하여 오류 코드 및 메시지와 함께 세부 상태 변경 이벤트를 캡처합니다.

1. 문제 해결을 위해 **구성 상태를 확인합니다**.

   ```
   aws iot describe-encryption-configuration --region us-west-2
   ```

1. `errorCode` 필드를 검사하여 **UNHEALTHY 상태를 조사**합니다.
   + `KMS_KEY_VALIDATION_ERROR` - AWS KMS 키 관련 문제(비활성화, 삭제 또는 정책 문제)
   + `ROLE_VALIDATION_ERROR` - IAM 역할 관련 문제(삭제, 정책 문제 또는 신뢰 문제)

#### UNHEALTHY에서 HEALTHY로
<a name="unhealthy-to-healthy"></a>

암호화 키의 상태가에서 `UNHEALTHY`로 업데이트되면는 다음 형식으로 AWS IoT V2 로그 메시지를 내`HEALTHY` AWS IoT Core 보냅니다.

```
{
    "timestamp": "2017-08-10 15:37:23.476",
    "logLevel": "INFO",
    "traceId": "8421693b-f4f0-4e4a-9235-0cff8bab897d",
    "accountId": "111122223333",
    "status": "SUCCESS",
    "cmkStatus": "HEALTHY",
    "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
    "eventType": "CmkHealthCheck"
}
```

#### HEALTHY에서 UNHEALTHY로
<a name="healthy-to-unhealthy"></a>

암호화 키의 상태가에서 `HEALTHY`로 업데이트되면는 다음 형식으로 AWS IoT V2 로그 메시지를 내`UNHEALTHY` AWS IoT Core 보냅니다.

```
{
    "timestamp": "2017-08-10 15:37:23.476",
    "logLevel": "ERROR",
    "traceId": "8421693b-f4f0-4e4a-9235-0cff8bab897d",
    "accountId": "111122223333",
    "status": "FAILURE",
    "cmkStatus": "UNHEALTHY",
    "errorCode": "KMS_KEY_VALIDATION_ERROR / ROLE_VALIDATION_ERROR",
    "errorMessage": "Error message on why there was a failure",
    "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
    "eventType": "CmkHealthCheck"
}
```

**주의**  
키 상태가 되면 `UNHEALTHY` AWS IoT Core 작업이 즉시 실패합니다. 이 경우에 키 구성, IAM 역할 권한 및 정책을 검토합니다. `CMK.Health` 지표에서 상태 변경을 모니터링합니다. 구성을 검토한 후에도 작업이 계속 실패하면, 계정 관리자 또는 [AWS 지원 센터에](https://console.aws.amazon.com/support/home#/) 문의하여 추가 지원을 받으세요.

#### AWS CloudTrail 이벤트
<a name="aws-cloudtrail-events"></a>

암호화 복호화 작업에 대한 KMS 키 AWS IoT Core사용을 모니터링할 수도 있습니다. `Decrypt` AWS IoT Core 는 KMS 키에 대해 `DescribeKey`, `ReEncrypt`, 및 `GenerateDataKeyWithoutPlaintext` 작업을 수행하여 저장 시 저장된 AWS 계정에 속한 데이터를 암호화/복호화합니다.

`DescribeKey`, `Decrypt`, `ReEncrypt` 및 `GenerateDataKeyWithoutPlaintext`에 대한 CloudTrail 이벤트가 있습니다. 이러한 이벤트는에서 호출한 AWS KMS 작업을 모니터링 AWS IoT Core 하여 고객 관리형 키로 암호화된 데이터에 액세스합니다.

##### `Decrypt` 예
<a name="decrypt"></a>

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "*********************",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
                "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "*****"
            },
            "attributes": {
                "creationDate": "2024-09-16T20:23:39Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "iot.amazonaws.com"
    },
    "eventTime": "2024-09-16T20:32:48Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "iot.amazonaws.com",
    "userAgent": "iot.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "kms-arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "aws-crypto-ec:vendor": "iot.amazonaws.com",
            "branch-key-id": "111122223333",
            "type": "branch:ACTIVE"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "responseElements": null,
    "requestID": "1afb6d98-8388-455d-8b48-e62c9e0cf7f4",
    "eventID": "b59a5f16-0d98-46d8-a590-0e040a48b39b",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```