Amazon DocumentDB 탄력적 클러스터에 대한 저장 데이터 암호화 - Amazon DocumentDB

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

Amazon DocumentDB 탄력적 클러스터에 대한 저장 데이터 암호화

다음 항목은 Amazon DocumentDB 탄력적 클러스터의 AWS Key Management Service 암호화 키를 배우고, 생성하고, 모니터링하는 데 도움이 됩니다.

Amazon DocumentDB 탄력적 클러스터는 키 관리를 위해 AWS Key Management Service (AWS KMS)와 자동으로 통합되며, 데이터를 보호하기 위해 봉투 암호화라는 알려진 방법을 사용합니다. 봉투 암호화에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드봉투 암호화를 참조하십시오.

AWS KMS key은(는) 키의 논리적 표현입니다. KMS 키에는 키 ID, 생성 날짜, 설명 및 키 상태와 같은 메타데이터가 포함됩니다. 또한 KMS 키에는 데이터를 암호화 및 복호화하는 데 사용되는 키 재료도 포함됩니다. KMS 키에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드AWS KMS keys 단원을 참조하십시오.

Amazon DocumentDB 탄력적 클러스터는 두 가지 유형의 키를 사용한 암호화를 지원합니다:

  • AWS소유 키 — Amazon DocumentDB 탄력적 클러스터는 기본적으로 이러한 키를 사용하여 개인 식별이 가능한 데이터를 자동으로 암호화합니다. 사용자는 AWS 소유 키를 보거나 관리 또는 사용할 수 없으며 해당 키의 사용을 감사할 수 없습니다. 그러나 데이터를 암호화하는 키를 보호하기 위해 작업을 수행하거나 프로그램을 변경할 필요는 없습니다. 자세한 내용은 AWS Key Management Service 개발자 가이드AWS 소유 키를 참조하십시오.

  • 고객 관리 키— 생성, 소유 및 관리하는 대칭AWS KMS keys. 이 암호화 계층을 완전히 제어할 수 있으므로 다음과 같은 작업을 수행할 수 있습니다:

    • 키 정책 수립 및 유지

    • IAM 정책 및 권한 부여 수립 및 유지

    • 키 정책 활성화 및 비활성화

    • 키 암호화 자료 순환

    • 태그 추가

    • 키 별칭 생성

    • 삭제를 위한 스케줄 키

    자세한 내용은 AWS Key Management Service 개발자 가이드고객 관리형 키를 참조하십시오.

중요

Amazon DocumentDB는 대칭 암호화 KMS 키만 지원하므로 클러스터를 암호화하려면 대칭 암호화 KMS 키를 사용해야 합니다. 비대칭 KMS 키를 사용하여 Amazon DocumentDB 탄력적 클러스터의 데이터를 암호화하지 마십시오. 자세한 내용은 AWS Key Management Service 개발자 가이드AWS KMS의 비대칭 키를 참조하십시오.

예를 들어, 키에 대한 액세스가 취소된 경우 Amazon DocumentDB가 더 이상 클러스터의 암호화 키에 액세스할 수 없는 경우 암호화된 클러스터는 터미널 상태가 됩니다. 이러한 경우에는 백업 파일에서만 클러스터를 복원할 수 있습니다. Amazon DocumentDB의 경우 항상 1일 동안 백업이 실행됩니다. 또한 암호화된 Amazon DocumentDB 클러스터에 대한 키를 비활성화하면 해당 클러스터에 대한 읽기 및 쓰기 액세스 권한이 손실됩니다. Amazon DocumentDB는 접근 권한이 없는 키로 암호화된 클러스터를 만나면 클러스터를 터미널 상태로 만듭니다. 이러한 상태에서는 클러스터를 더 이상 사용하지 못하기 때문에 데이터베이스의 현재 상태를 복구할 수 없습니다. 클러스터를 복원하려면 Amazon DocumentDB의 암호화 키에 대한 액세스를 다시 실행한 다음 백업에서 클러스터를 복원해야 합니다.

중요

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

AWS KMS에서 Amazon DocumentDB 탄력적 클러스터가 권한 부여를 사용하는 방법

Amazon DocumentDB 탄력적 클러스터는 고객 관리형 키를 사용하려면 권한이 필요합니다.

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

Amazon DocumentDB 탄력적 클러스터는 다음 내부 작업에 고객 관리형 키를 사용하려면 보조금이 필요합니다:

  • DescribeKey 요청을 AWS KMS에게 전송하여 트래커 또는 지오펜스 컬렉션을 생성할 때 입력한 대칭 고객 관리 KMS 키 ID가 유효한지 확인합니다.

  • GenerateDataKey 요청을 AWS KMS에게 전송하여 고객 관리형 키에 의해 암호화된 데이터 키를 생성합니다.

  • Decrypt 암호화된 데이터 키를 암호화하는 데 사용할 수 있도록 암호화된 데이터 키의 암호를 해독하기 위한 요청을 AWS KMS에게 보냅니다.

  • 언제든지 권한 부여에 대한 액세스 권한을 취소하거나 고객 관리형 키에 대한 서비스 액세스를 제거할 수 있습니다. 이렇게 하면 Amazon DocumentDB 탄력적 클러스터는 고객 관리형 키에 의해 암호화된 데이터에 액세스할 수 없게 되어 해당 데이터에 의존하는 작업에 영향을 미칩니다.

고객 관리형 키 생성

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

대칭 고객 관리형 키

AWS Key Management Service개발자 가이드대칭형 고객 관리형 키 생성 단계를 따르십시오.

키 정책

키 정책은 고객 관리형 키에 대한 액세스를 제어합니다. 모든 고객 관리형 키에는 키를 사용할 수 있는 사람과 키를 사용하는 방법을 결정하는 설명이 포함된 정확히 하나의 키 정책이 있어야 합니다. 고객 관리형 키를 생성할 때 키 정책을 지정할 수 있습니다. 자세한 내용은 AWS Key Management Service 개발자 가이드AWS Key Management Service 개요에 있는 KMS 키 액세스 정보를 참조하십시오.

고객 관리형 키를 Amazon DocumentDB 탄력적 클러스터 리소스와 함께 사용하려면 키 정책에서 다음과 같은 API 작업을 허용해야 합니다:

  • kms:CreateGrant — 고객 관리형 키에 권한 부여를 추가합니다. 지정된 KMS 키에 대한 제어 액세스 권한을 부여합니다. 이 키를 통해 Amazon Location Service가 필요로 하는 작업에 액세스할 수 있습니다. 권한 부여에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드AWS KMS의 권한 부여를 참조하십시오.

  • kms:DescribeKey - Docdb Elastic이 키를 검증할 수 있도록 고객 관리형 키 세부 정보를 제공합니다.

  • kms:Decrypt – Docdb Elastic이 저장된 암호화된 데이터 키를 사용하여 암호화된 데이터에 액세스할 수 있습니다.

  • kms:GenerateDataKey— 데이터 키가 암호화에 즉시 사용되지 않기 때문에 Docdb Elastic이 암호화된 데이터 키를 생성하고 저장할 수 있습니다.

자세한 내용은 AWS Key Management Service 개발자 가이드키 정책의 AWS 서비스에 대한 권한키 액세스 문제 해결을 참조하십시오.

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

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

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

자세한 내용은 AWS Key Management Service 개발자 가이드다른 계정의 사용자가 CMK를 사용하도록 허용을 참조하십시오.

Amazon DocumentDB 탄력적 클러스터에 대한 암호화 키 모니터링

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

다음은 AWS CloudTrail 고객 관리형 키에 의해 암호화된 데이터에 액세스하기 위해 Amazon DocumentDB 탄력적 클러스터에서 호출한 CreateGrant, GenerateDataKeyWithoutPlainText, DecryptDescribeKey 작업을 모니터링하기 위한 AWS KMS key 이벤트입니다:

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" }

자세히 알아보기

다음 리소스에서 저장 데이터 암호화에 대한 추가 정보를 확인할 수 있습니다: