

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

# 를 사용하여 쿼리 결과 암호화 AWS Key Management Service
<a name="CloudWatchLogs-Insights-Query-Encrypt"></a>

기본적으로 CloudWatch Logs는 기본 CloudWatch Logs 서버 측 암호화 방법을 사용하여 CloudWatch Logs 인사이트 쿼리의 저장된 결과를 암호화합니다. 키를 사용하여 대신 이러한 결과를 AWS KMS 암호화하도록 선택할 수 있습니다. AWS KMS 키를 암호화 결과와 연결하면 CloudWatch Logs는 해당 키를 사용하여 계정에 있는 모든 쿼리의 저장된 결과를 암호화합니다.

나중에 쿼리 결과에서 키 연결을 해제하면 CloudWatch Logs는 이후 쿼리에서 기본 암호화 방법을 다시 사용합니다. 그러나 키가 연결된 동안 실행된 쿼리는 여전히 해당 키로 암호화됩니다. CloudWatch Logs는 계속해서 키를 참조할 수 있으므로 CloudWatch Logs는 KMS 키의 연결이 해제된 후에도 여전히 해당 결과를 반환할 수 있습니다. 그러나 나중에 키를 비활성화하면 CloudWatch Logs는 해당 키로 암호화된 쿼리 결과를 읽을 수 없습니다.

**중요**  
CloudWatch Logs는 대칭 KMS 키만 지원합니다. 비대칭 키를 사용하여 쿼리 결과를 암호화하지 마세요. 자세한 내용은 [대칭 및 비대칭 키 사용](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)을 참조하세요.

## 제한 사항
<a name="encryption-limits-queries"></a>
+ 다음 단계를 수행하려면 `kms:CreateKey`, `kms:GetKeyPolicy` 및 `kms:PutKeyPolicy` 권한이 있어야 합니다.
+ 쿼리 결과에서 키를 연결하거나 연결 해제하고 난 후 이러한 변경이 적용되기까지 최대 5분의 시간이 소요될 수 있습니다.
+ 연결된 키에 대한 CloudWatch Logs 액세스 권한을 취소하거나 연결된 KMS 키를 삭제한 경우에는 CloudWatch Logs에서 암호화된 데이터를 더 이상 검색할 수 없습니다.
+ CloudWatch 콘솔을 사용하여 키를 연결할 수는 없으며, AWS CLI 또는 CloudWatch Logs API를 사용해야 합니다.

## 1단계: 생성 AWS KMS key
<a name="create-cmk"></a>

다음 [create-key](https://docs.aws.amazon.com/cli/latest/reference/kms/create-key.html) 명령을 사용하여 KMS 키 생성:

```
aws kms create-key
```

이 명령의 출력 화면에는 키의 키 ID와 Amazon Resource Name(ARN)이 포함됩니다. 다음은 예제 출력입니다.

```
{
    "KeyMetadata": {
        "Origin": "AWS_KMS",
        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "Description": "",
        "KeyManager": "CUSTOMER",
        "Enabled": true,
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "CreationDate": 1478910250.94,
        "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59",
        "AWSAccountId": "123456789012",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ]
    }
}
```

## 2단계: KMS 키에 대한 권한 설정
<a name="cmk-permissions"></a>

기본적으로 모든 KMS 키는 비공개입니다. 리소스 소유자만 이를 사용하여 데이터를 암호화 및 해독할 수 있습니다. 그러나 리소스 소유자가 원한다면 다른 사용자 및 리소스에 키에 대한 액세스 권한을 부여할 수 있습니다. 이 단계에서는 키를 사용할 보안 주체 권한을 CloudWatch Logs 서비스에 제공합니다. 이 서비스 보안 주체는 키가 저장된 리전과 동일한 AWS 리전에 있어야 합니다.

가장 좋은 방법은 키 사용을 지정한 AWS 계정으로만 제한하는 것입니다.

먼저 다음 [get-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html) 명령을 사용하는 `policy.json`로 KMS 키에 대한 기본 정책을 저장합니다.

```
aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json
```

텍스트 편집기에서 `policy.json` 파일을 열고 다음 명령문 중 하나에서 굵은 글꼴로 표시된 섹션을 추가합니다. 기존 명령문과 새 명령문을 쉼표로 구분합니다. 이러한 문은 `Condition` 섹션을 사용하여 AWS KMS 키의 보안을 강화합니다. 자세한 내용은 [AWS KMS 키 및 암호화 컨텍스트](encrypt-log-data-kms.md#encrypt-log-data-kms-policy) 단원을 참조하십시오.

이 예제의 `Condition` 섹션에서는 AWS KMS 키 사용을 지정된 계정의 CloudWatch Logs Insights 쿼리 결과로 제한합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "key-default-1",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.region.amazonaws.com"
            },
            "Action": [
                "kms:Encrypt*",
                "kms:Decrypt*",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:Describe*"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                "aws:SourceArn": "arn:aws:logs:us-east-1:111122223333:query-result:*"
                },
                "StringEquals": {
                "aws:SourceAccount": "111122223333"
                }
            }
        }
    ]
}
```

------

마지막으로 아래 [put-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/put-key-policy.html) 명령을 사용하여 업데이트된 정책을 추가합니다.

```
aws kms put-key-policy --key-id key-id --policy-name default --policy file://policy.json
```

## 3단계: KMS 키를 쿼리 결과와 연결
<a name="associate-cmk-query"></a>

**KMS 키를 계정의 쿼리 결과와 연결하려면**  
다음과 같이 [disassociate-kms-key](https://docs.aws.amazon.com/cli/latest/reference/logs/disassociate-kms-key.html) 명령을 사용합니다.

```
aws logs associate-kms-key --resource-identifier "arn:aws:logs:region:account-id:query-result:*" --kms-key-id "key-arn"
```

## 4단계: 계정의 쿼리 결과에서 키 연결 해제
<a name="disassociate-cmk-query"></a>

쿼리 결과에 연결된 KMS 키의 연결을 해제하려면 아래 [disassociate-kms-key](https://docs.aws.amazon.com/cli/latest/reference/logs/disassociate-kms-key.html) 명령을 사용합니다.

```
aws logs disassociate-kms-key --resource-identifier "arn:aws:logs:region:account-id:query-result:*"
```