

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

# Amazon DocumentDB 탄력적 클러스터에 대한 저장 데이터 암호화
<a name="elastic-encryption"></a>

다음 주제는 Amazon DocumentDB 탄력적 클러스터의 AWS Key Management Service 암호화 키를 학습, 생성 및 모니터링하는 데 도움이 됩니다.

**Topics**
+ [Amazon DocumentDB 탄력적 클러스터가에서 권한 부여를 사용하는 방법 AWS KMS](#ec-encrypt-grants)
+ [고객 관리형 키 생성](#ec-encrypt-create)
+ [Amazon DocumentDB 탄력적 클러스터에 대한 암호화 키 모니터링](#ec-encrypt-monitor)
+ [자세히 알아보기](#ec-encrypt-learn)

Amazon DocumentDB 탄력적 클러스터는 키 관리를 위해 AWS Key Management Service (AWS KMS)와 자동으로 통합되며 봉투 암호화라는 메서드를 사용하여 데이터를 보호합니다. 봉투 암호화에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [봉투 암호화](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)를 참조하십시오.

 AWS KMS key 는 키의 논리적 표현입니다. KMS 키에는 키 ID, 생성 날짜, 설명 및 키 상태와 같은 메타데이터가 포함됩니다. 또한 KMS 키에는 데이터를 암호화 및 복호화하는 데 사용되는 키 재료도 포함됩니다. KMS 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) 섹션을 참조하십시오.

Amazon DocumentDB 탄력적 클러스터는 두 가지 유형의 키를 사용한 암호화를 지원합니다:
+ **AWS 소유 키 -** Amazon DocumentDB 탄력적 클러스터는 기본적으로 이러한 키를 사용하여 개인 식별 데이터를 자동으로 암호화합니다. AWS소유 키를 확인, 관리 또는 사용하거나 사용을 감사할 수 없습니다. 하지만 데이터를 암호화하는 키를 보호하기 위해 어떤 작업을 수행하거나 어떤 프로그램을 변경할 필요가 없습니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [AWS 소유 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)를 참조하세요.
+ **고객 관리형 키 -** AWS KMS keys 사용자가 생성, 소유 및 관리하는 대칭 키입니다. 이 암호화 계층을 완전히 제어할 수 있으므로 다음과 같은 작업을 수행할 수 있습니다.
  + 키 정책 수립 및 유지
  + IAM 정책 및 권한 부여 수립 및 유지
  + 키 정책 활성화 및 비활성화
  + 키 암호화 자료 교체
  +  태그 추가
  + 키 별칭 만들기
  + 삭제를 위한 스케줄 키

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

**중요**  
Amazon DocumentDB는 대칭 암호화 KMS 키만 지원하므로 클러스터를 암호화하려면 대칭 암호화 KMS 키를 사용해야 합니다. 비대칭 KMS 키를 사용하여 Amazon DocumentDB 탄력적 클러스터의 데이터를 암호화하지 마십시오. 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [AWS KMS의 비대칭 키](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)를 참조하십시오.  
예를 들어, 키에 대한 액세스가 취소된 경우 Amazon DocumentDB가 더 이상 클러스터의 암호화 키에 액세스할 수 없는 경우 암호화된 클러스터는 터미널 상태가 됩니다. 이러한 경우에는 백업 파일에서만 클러스터를 복원할 수 있습니다. Amazon DocumentDB의 경우 항상 1일 동안 백업이 실행됩니다. 또한 암호화된 Amazon DocumentDB 클러스터에 대한 키를 비활성화하면 해당 클러스터에 대한 읽기 및 쓰기 액세스 권한이 손실됩니다. Amazon DocumentDB는 접근 권한이 없는 키로 암호화된 클러스터를 만나면 클러스터를 터미널 상태로 만듭니다. 이러한 상태에서는 클러스터를 더 이상 사용하지 못하기 때문에 데이터베이스의 현재 상태를 복구할 수 없습니다. 클러스터를 복원하려면 Amazon DocumentDB의 암호화 키에 대한 액세스를 다시 실행한 다음 백업에서 클러스터를 복원해야 합니다.

**중요**  
암호화된 클러스터의 KMS 키는 이미 생성한 후에는 변경할 수 없습니다. 암호화된 탄력적 클러스터를 생성하기 전에 암호화 키 요구 사항을 결정해야 합니다.

## Amazon DocumentDB 탄력적 클러스터가에서 권한 부여를 사용하는 방법 AWS KMS
<a name="ec-encrypt-grants"></a>

Amazon DocumentDB 탄력적 클러스터는 고객 관리형 키를 사용하려면 [권한](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)이 필요합니다.

고객 관리형 키로 암호화된 클러스터를 생성하면 Amazon DocumentDB 탄력적 클러스터는 `CreateGrant` 요청을 전송하여 사용자를 대신하여 권한을 생성합니다 AWS KMS. 의 권한 부여 AWS KMS 는 Amazon DocumentDB 탄력적 클러스터에 고객 계정의 KMS 키에 대한 액세스 권한을 부여하는 데 사용됩니다.

Amazon DocumentDB 탄력적 클러스터는 다음 내부 작업에 고객 관리형 키를 사용하려면 권한이 필요합니다:
+  AWS KMS 에 `DescribeKey` 요청을 보내 트래커 또는 지오펜스 컬렉션을 생성할 때 입력한 대칭 고객 관리형 KMS 키 ID가 유효한지 확인합니다.
+  AWS KMS 에 `GenerateDataKey` 요청을 보내 고객 관리형 키로 암호화된 데이터 키를 생성합니다.
+  AWS KMS 에 `Decrypt` 요청을 보내 암호화된 데이터 키를 복호화하여 데이터를 암호화하는 데 사용할 수 있도록 합니다.
+ 언제든지 권한 부여에 대한 액세스 권한을 취소하거나 고객 관리형 키에 대한 서비스 액세스를 제거할 수 있습니다. 이렇게 하면 Amazon DocumentDB 탄력적 클러스터는 고객 관리형 키에 의해 암호화된 데이터에 액세스할 수 없게 되어 해당 데이터에 의존하는 작업에 영향을 미칩니다.

## 고객 관리형 키 생성
<a name="ec-encrypt-create"></a>

 AWS Management Console 또는 AWS KMS API를 사용하여 대칭 고객 관리형 키를 생성할 수 있습니다.

**대칭 고객 관리형 키**

*AWS Key Management Service 개발자 가이드*의 [대칭형 고객 관리형 키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) 단계를 따르십시오.

**키 정책**

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

고객 관리형 키를 Amazon DocumentDB 탄력적 클러스터 리소스와 함께 사용하려면 키 정책에서 다음과 같은 API 작업을 허용해야 합니다:
+ [https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) - 고객 관리형 키에 권한 부여를 추가합니다. 지정된 KMS 키에 대한 제어 액세스 권한을 부여합니다. 이 키를 통해 Amazon Location Service가 필요로 하는 작업에 액세스할 수 있습니다. 권한 부여에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [AWS KMS의 권한 부여](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)를 참조하십시오.
+ [https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) - Docdb Elastic이 키를 검증할 수 있도록 고객 관리형 키 세부 정보를 제공합니다.
+ [https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) – Docdb Elastic이 저장된 암호화된 데이터 키를 사용하여 암호화된 데이터에 액세스할 수 있습니다.
+ [https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)— 데이터 키가 암호화에 즉시 사용되지 않기 때문에 Docdb Elastic이 암호화된 데이터 키를 생성하고 저장할 수 있습니다.

자세한 내용은 *AWS Key Management Service 개발자 안내서*[의 키 정책의 AWS 서비스에 대한 권한](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-services.html) 및 [키 액세스 문제 해결을 참조하세요](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html).

**IAM 정책을 통한 고객 관리형 키 액세스 제한**

KMS 키 정책 외에도 IAM 정책에서 KMS 키 권한을 제한할 수도 있습니다.

다양한 방법으로 IAM 정책을 더 엄격하게 설정할 수 있습니다. 예를 들어 고객 관리형 키를 Amazon DocumentDB 탄력적 클러스터에서 시작되는 요청에만 사용할 수 있도록 하려면 [`kms:ViaService` 조건 키](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)를 `docdb-elastic.<region-name>.amazonaws.com` 값과 함께 사용할 수 있습니다.

자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [다른 계정의 사용자가 CMK를 사용하도록 허용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)을 참조하십시오.

## Amazon DocumentDB 탄력적 클러스터에 대한 암호화 키 모니터링
<a name="ec-encrypt-monitor"></a>

Docdb Elastic 리소스와 함께 AWS KMS key 고객 관리형 키를 사용하는 경우 AWS CloudTrail 또는 Amazon CloudWatch Logs를 사용하여 Docdb Elastic이 보내는 요청을 추적할 수 있습니다 AWS KMS.

다음 예제는 Amazon DocumentDB 탄력적 클러스터가 고객 관리형 키로 암호화된 데이터에 액세스`DescribeKey`하기 위해 호출하는 AWS KMS key 작업을 모니터링하기 위한 `CreateGrant``GenerateDataKeyWithoutPlainText`, `Decrypt`, 및 AWS CloudTrail 이벤트입니다.

------
#### [ CreateGrant ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "Sampleuser01"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-05-09T23:04:20Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "docdb-elastic.amazonaws.com"
    },
    "eventTime": "2023-05-09T23:55:48Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "docdb-elastic.amazonaws.com",
    "userAgent": "docdb-elastic.amazonaws.com",
    "requestParameters": {
        "retiringPrincipal": "docdb-elastic.us-east-1.amazonaws.com",
        "granteePrincipal": "docdb-elastic.us-east-1.amazonaws.com",
        "operations": [
            "Decrypt",
            "Encrypt",
            "GenerateDataKey",
            "GenerateDataKeyWithoutPlaintext",
            "ReEncryptFrom",
            "ReEncryptTo",
            "CreateGrant",
            "RetireGrant",
            "DescribeKey"
        ],
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "responseElements": {
        "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ GenerateDataKey ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "Sampleuser01"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-05-10T18:02:59Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "docdb-elastic.amazonaws.com"
    },
    "eventTime": "2023-05-10T18:03:25Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "docdb-elastic.amazonaws.com",
    "userAgent": "docdb-elastic.amazonaws.com",
    "requestParameters": {
        "keySpec": "AES_256",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ Decrypt ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "Sampleuser01"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-05-10T18:05:49Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "docdb-elastic.amazonaws.com"
    },
    "eventTime": "2023-05-10T18:06:19Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "docdb-elastic.amazonaws.com",
    "userAgent": "docdb-elastic.amazonaws.com",
    "requestParameters": {
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ DescribeKey ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "Sampleuser01"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-05-09T23:04:20Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "docdb-elastic.amazonaws.com"
    },
    "eventTime": "2023-05-09T23:55:48Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DescribeKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "docdb-elastic.amazonaws.com",
    "userAgent": "docdb-elastic.amazonaws.com",
    "requestParameters": {
        "keyId": "alias/SampleKmsKey"
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------

## 자세히 알아보기
<a name="ec-encrypt-learn"></a>

다음 리소스에서 저장 데이터 암호화에 대한 추가 정보를 확인할 수 있습니다:
+  AWS KMS 개념에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [AWS Key Management Service 기본 개념](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)을 참조하세요.
+  AWS KMS 보안에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*의에 [대한 보안 모범 사례를 AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html) 참조하세요.