

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

# 에서 저장 데이터 암호화 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"
}
```