Amazon DynamoDB에서 저장 데이터 암호화를 사용할 때 다음을 고려하세요.
모든 테이블 데이터는 암호화됩니다.
서버 측 저장 데이터 암호화는 모든 DynamoDB 테이블에서 활성화되며 비활성화할 수 없습니다. 테이블에서 항목의 하위 집합만 암호화할 수 없습니다.
저장 시 암호화는 영구 스토리지 미디어에서 정적(저장 시) 상태인 데이터만 암호화합니다. 전송 중인 데이터 또는 사용 중인 데이터에 대한 데이터 보안 문제가 있는 경우 추가 조치를 취해야 합니다.
-
전송 중 데이터: DynamoDB의 모든 데이터는 전송 중에 암호화됩니다. 기본적으로 DynamoDB와의 통신은 보안 소켓 계층(SSL)/전송 계층 보안(TLS) 암호화를 사용하여 네트워크 트래픽을 보호하는 HTTPS 프로토콜을 사용합니다.
-
사용 중인 데이터: DynamoDB에 보내기 전에 클라이언트 측 암호화를 사용하여 데이터를 보호합니다. 자세한 내용은 Amazon DynamoDB Encryption Client 개발자 안내서의 클라이언트 측 및 서버 측 암호화를 참조하세요.
암호화된 테이블에서 스트림을 사용할 수 있습니다. DynamoDB 스트림은 항상 테이블 수준 암호화 키로 암호화됩니다. 자세한 내용은 DynamoDB Streams에 대한 변경 데이터 캡처 섹션을 참조하세요.
DynamoDB 백업은 암호화되고 이 백업에서 복원되는 테이블도 암호화가 활성화되어 있습니다. 백업 데이터를 암호화하기 위해 AWS 소유 키, AWS 관리형 키 또는 고객 관리형 키를 사용할 수 있습니다. 자세한 내용은 DynamoDB에 대한 백업 및 복원 단원을 참조하십시오.
로컬 보조 인덱스와 글로벌 보조 인덱스는 베이스 테이블과 동일한 키를 사용해 암호화됩니다.
암호화 유형
참고
고객 관리형 키는 글로벌 테이블 버전 2017에서 지원되지 않습니다. DynamoDB 글로벌 테이블에서 고객 관리형 키를 사용하려면 테이블을 글로벌 테이블 버전 2019로 업그레이드하고 사용 설정해야 합니다.
AWS Management Console에서 AWS 관리형 키 또는 고객 관리형 키를 사용하여 데이터를 암호화할 때 암호화 유형은 KMS
입니다. AWS 소유 키를 사용할 경우 암호화 유형은 DEFAULT
입니다. Amazon DynamoDB API에서 AWS 관리형 키 또는 고객 관리형 키를 사용하여 데이터를 암호화할 때 암호화 유형은 KMS
입니다. 암호화 유형이 없을 경우 AWS 소유 키를 사용하여 데이터를 암호화합니다. 언제든지 AWS 소유 키, AWS 관리형 키 및 고객 관리형 키 간에 전환할 수 있습니다. 콘솔, AWS Command Line Interface(AWS CLI) 또는 Amazon DynamoDB API를 사용해 암호화 키를 전환할 수 있습니다.
고객 관리형 키를 사용할 때 다음과 같은 제한을 유의하세요.
-
DynamoDB Accelerator(DAX) 클러스터에 고객 관리형 키를 사용할 수 없습니다. 자세한 내용은 DAX 저장 데이터 암호화 섹션을 참조하세요.
-
트랜잭션을 사용하는 테이블을 암호화하기 위해 고객 관리형 키를 사용할 수 없습니다. 그러나 트랜잭션 전파의 내구성을 보장하기 위해 트랜잭션 요청의 복사본이 서비스에 의해 임시로 저장되고 AWS 소유 키를 사용하여 암호화됩니다. 테이블 및 보조 인덱스에서 커밋된 데이터는 항상 고객 관리형 키를 사용하여 저장 중 암호화됩니다.
-
Contributor Insights를 사용하는 테이블을 암호화하기 위해 고객 관리형 키를 사용할 수 있습니다. 그러나 Amazon CloudWatch로 전송되는 데이터는 AWS 소유 키로 암호화됩니다.
-
새 고객 관리형 키로 전환하는 경우 프로세스가 완료될 때까지 원래 키를 사용하도록 설정해야 합니다. AWS에서 새 키로 암호화하기 전에 데이터를 해독하기 위해 원래 키가 필요합니다. 테이블의 SSEDescription 상태가 활성화되고 새 고객 관리형 키의 KMSMasterKeyArn이 표시되면 프로세스가 완료됩니다. 이 시점에서 원래 키를 비활성화하거나 삭제하도록 예약할 수 있습니다.
-
새 고객 관리 키가 표시되면 테이블과 모든 새 온디맨드 백업이 새 키로 암호화됩니다.
-
기존 온디맨드 백업은 백업이 생성될 때 사용된 고객 관리 키로 암호화된 상태로 유지됩니다. 이러한 백업을 복원하려면 동일한 키가 필요합니다. DescripbeBackup API를 사용하여 해당 백업의 SSEDescription을 확인하여 각 백업이 생성된 기간의 키를 식별할 수 있습니다.
-
고객 관리형 키를 비활성화하거나 삭제를 예약하는 경우 DynamoDB Streams에 있는 모든 데이터는 24시간 수명이 적용됩니다. 24시간이 지날 경우 모든 회수되지 않은 데이터는 트리밍 권한이 주어집니다.
-
고객 관리형 키를 비활성화하거나 삭제를 예약한 경우에는 유지 시간(TTL) 삭제가 30분간 진행됩니다. 이러한 TTL 삭제는 DynamoDB Streams로 계속 방출되며 표준 트리밍/보존 간격이 적용됩니다.
KMS 키 및 데이터 키 사용
DynamoDB 암호화 기능은 AWS KMS key와 데이터 키 계층을 사용하여 테이블 데이터를 보호합니다. DynamoDB는 동일한 키 계층을 사용하여 내구성 있는 미디어에 기록되는 DynamoDB 스트림, 전역 테이블 및 백업을 보호합니다.
DynamoDB에서 테이블을 구현하기 전에 암호화 전략을 계획하는 것이 좋습니다. 민감한 데이터나 기밀 데이터를 DynamoDB에 저장하는 경우 계획에 클라이언트측 암호화를 포함하는 것을 고려해 보세요. 이렇게 하면 데이터를 원본에 최대한 가깝게 암호화하고 전체 수명 주기 동안 데이터를 보호할 수 있습니다. 자세한 내용은 DynamoDB 암호화 클라이언트 설명서를 참조하세요.
- AWS KMS key
-
유휴 시 암호화는 AWS KMS key에서 DynamoDB 테이블을 보호합니다. 기본적으로 DynamoDB는 DynamoDB 서비스 계정에서 생성 및 관리되는 다중 테넌트 암호화 키인 AWS 소유 키를 사용합니다. 그러나 AWS 계정의 DynamoDB(
aws/dynamodb
)용 고객 관리형 키에서 DynamoDB 테이블을 암호화할 수 있습니다. 각 테이블마다 다른 KMS 키를 선택할 수 있습니다. 테이블에 대해 선택한 KMS 키는 로컬 및 전역 보조 인덱스, 스트림 및 백업을 암호화하는 데에도 사용됩니다.테이블을 생성 또는 업데이트할 때 테이블에 대해 KMS 키를 선택합니다. 언제든지 DynamoDB 콘솔에서 또는 UpdateTable 작업을 사용하여 테이블에 대한 KMS 키를 변경할 수 있습니다. 키 전환 프로세스는 원활하며 가동 중지 시간 또는 서비스 저하가 발생하지 않습니다.
고객 관리형 키를 사용하여 다음과 같은 기능을 얻을 수 있습니다.
-
KMS 키에 대한 액세스를 제어하기 위한 키 정책, IAM 정책 및 권한 부여 설정을 포함하여 KMS 키를 생성하고 관리합니다 KMS 키를 활성화 및 비활성화하고, 자동 키 교체를 활성화 및 비활성화하고, KMS 키가 더 이상 사용되지 않을 때 KMS 키를 삭제할 수 있습니다.
-
가져온 키 구성 요소가 있는 고객 관리형 키를 사용하거나 고객이 소유하고 관리하는 사용자 지정 키 스토어에서 고객 관리형 키를 사용할 수 있습니다.
-
AWS CloudTrail 로그에서 AWS KMS에 대한 DynamoDB API 호출을 검사하여 DynamoDB 테이블의 암호화 및 복호화를 감사할 수 있습니다.
다음과 같은 기능이 필요한 경우 AWS 관리형 키를 사용합니다.
-
AWS CloudTrail 로그에서 AWS KMS에 대한 DynamoDB API 호출을 검사하여 DynamoDB 테이블의 암호화 및 복호화를 감사할 수 있습니다.
그러나 AWS 소유 키는 무료이며 그 사용은 AWS KMS 리소스 또는 요청 할당량에 포함되지 않습니다. 고객 관리형 키 및 AWS 관리형 키는 각 API 호출에 대해 요금이 부과
되며 이러한 KMS 키에 AWS KMS 할당량이 적용됩니다. -
- 테이블 키
-
DynamoDB는 테이블에 대해 KMS 키를 사용하여 테이블 키라고 하는 테이블에 대한 고유한 데이터 키를 생성하고 암호화합니다. 테이블 키는 암호화된 테이블의 수명 기간 동안 존속합니다.
테이블 키는 키 암호화 키로 사용됩니다. DynamoDB는 이 테이블 키를 사용하여 테이블 데이터를 암호화하는 데 사용되는 데이터 암호화 키를 보호합니다. DynamoDB는 테이블에 있는 각 기본 구조의 고유한 데이터 암호화 키를 생성하지만, 동일한 데이터 암호화 키로 여러 테이블 항목을 보호할 수 없습니다.
암호화된 테이블에 처음 액세스하면 DynamoDB가 KMS 키를 사용하여 테이블 키를 해제하도록 AWS KMS에 요청합니다. 그런 다음 일반 텍스트 테이블 키를 사용하여 데이터 암호화 키를 해독하고, 일반 텍스트 데이터 암호화 키를 사용하여 테이블 데이터를 해독합니다.
DynamoDB는 AWS KMS 외부에 테이블 키와 데이터 암호화 키를 저장하고 사용합니다. 고급 암호화 표준
(AES) 암호화 및 256비트 암호화 키로 모든 키를 보호합니다. 그런 다음 필요에 따라 테이블 데이터를 해독할 때 사용할 수 있도록 암호화된 데이터로 암호화된 키를 저장합니다. 테이블의 KMS 키를 변경하면 DynamoDB가 새 테이블 키를 생성합니다. 그런 다음 새 테이블 키를 사용하여 데이터 암호화 키를 다시 암호화합니다.
- 테이블 키 캐싱
-
각 DynamoDB 작업마다 AWS KMS 를 호출하지 않도록 DynamoDB는 메모리에 있는 각 호출자의 일반 텍스트 테이블 키를 캐싱합니다. 5분의 비활성 시간이 경과하여 DynamoDB가 캐싱된 테이블 키를 요청할 경우 테이블 키를 해독하라는 새로운 요청을 AWS KMS에 보냅니다. 이 호출은 마지막 테이블 키 해제 요청 이후 KMS 키의 액세스 정책에 적용된 모든 변경 사항을 AWS KMS 또는 AWS Identity and Access Management(IAM)에 캡처합니다.
KMS 키 사용 권한 부여
계정에서 고객 관리형 키 또는 AWS 관리형 키를 사용하여 DynamoDB 테이블을 보호할 경우 해당 KMS 키에 대한 정책이 DynamoDB에 사용자 대신 키를 사용할 권한을 부여해야 합니다. DynamoDB용 AWS 관리형 키의 권한 부여 컨텍스트에는 그 사용 권한을 위임하는 키 정책과 권한 부여가 포함되어 있습니다.
고객 관리형 키에 대한 정책 및 권한 부여를 완전히 제어할 수 있습니다. AWS 관리형 키는 계정에 있으므로 해당 정책 및 권한 부여를 볼 수 있습니다. 하지만 정책은 AWS에 의해 관리되므로 사용자가 정책을 변경할 수는 없습니다.
DynamoDB는 기본 AWS 소유 키를 사용하여 AWS 계정의 DynamoDB 테이블을 보호하기 위해 추가 인증이 필요하지 않습니다.
AWS 관리형 키에 대한 키 정책
DynamoDB가 암호화 작업에서 DynamoDB(aws/dynamodb
)에 대해 AWS 관리형 키를 사용하는 경우 DynamoDB 리소스에 액세스하는 사용자를 수행합니다. AWS 관리형 키에 대한 키 정책은 계정의 모든 사용자에게 지정된 작업에 대해 AWS 관리형 키를 사용할 권한을 부여합니다. 그러나 DynamoDB가 사용자 대신 요청할 때만 권한이 부여됩니다. 키 정책의 ViaService 조건은 요청이 DynamoDB 서비스에서 이루어지지 않은 경우 어떤 사용자도 AWS 관리형 키를 사용하도록 허용하지 않습니다.
이 키 정책은 모든 AWS 관리형 키의 정책과 마찬가지로 AWS에 의해 설정됩니다. 변경은 할 수 없지만 언제든 보는 것은 가능합니다. 자세한 내용은 키 정책 보기를 참조하세요.
키 정책의 정책 설명문은 다음 효과를 갖습니다.
-
계정 내 사용자가 DynamoDB에서 대신 요청이 올 때만 암호화 작업에서 DynamoDB에 AWS 관리형 키를 사용할 수 있도록 합니다. 이 정책은 사용자들이 KMS 키의 권한 부여를 생성하는 것도 허용합니다.
-
계정의 승인된 IAM 자격 증명이 DynamoDB용 AWS 관리형 키의 속성을 보고 DynamoDB가 KMS 키를 사용하도록 허용하는 권한을 취소할 수 있습니다. DynamoDB는 지속적인 유지 관리 작업에 권한 부여를 사용합니다.
-
DynamoDB가 읽기 전용 작업을 수행하여 계정의 DynamoDB용 AWS 관리형 키를 찾을 수 있게 합니다.
{
"Version" : "2012-10-17",
"Id" : "auto-dynamodb-1",
"Statement" : [ {
"Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB",
"Effect" : "Allow",
"Principal" : {
"AWS" : "*"
},
"Action" : [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ],
"Resource" : "*",
"Condition" : {
"StringEquals" : {
"kms:CallerAccount" : "111122223333",
"kms:ViaService" : "dynamodb.us-west-2.amazonaws.com"
}
}
}, {
"Sid" : "Allow direct access to key metadata to the account",
"Effect" : "Allow",
"Principal" : {
"AWS" : "arn:aws:iam::111122223333:root"
},
"Action" : [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ],
"Resource" : "*"
}, {
"Sid" : "Allow DynamoDB Service with service principal name dynamodb.amazonaws.com to describe the key directly",
"Effect" : "Allow",
"Principal" : {
"Service" : "dynamodb.amazonaws.com"
},
"Action" : [ "kms:Describe*", "kms:Get*", "kms:List*" ],
"Resource" : "*"
} ]
}
고객 관리형 키에 대한 키 정책
DynamoDB 테이블을 보호하기 위해 고객 관리형 키를 선택하면 DynamoDB는 선택하는 보안 주체를 대신하여 KMS 키를 사용할 수 있는 권한을 얻습니다. 해당 보안 주체, 즉 사용자 또는 역할은 DynamoDB가 필요한 KMS 키에 대한 권한이 있어야 합니다. 키 정책, IAM 정책 또는 권한 부여에 이러한 권한을 제공할 수 있습니다.
DynamoDB는 고객 관리형 키에 대해 최소한 다음 권한이 있어야 합니다.
-
kms:ReEncrypt*(kms:ReEncryptFrom and kms:ReEncryptTo용)
-
kms:GenerateDataKey*(kms:GenerateDataKey 및 kms:GenerateDataKeyWithoutPlaintext용)
예를 들어 다음 예제 키 정책은 필수 권한만 제공합니다. 이 정책에는 다음과 같은 효과가 있습니다.
-
DynamoDB가 암호화 작업에 KMS 키를 사용하고 권한 부여를 생성하도록 허용합니다. 단, DynamoDB를 사용할 권한이 있는 계정의 보안 주체를 대신해 동작하는 경우에 한합니다. 정책 문에 지정된 보안 주체가 DynamoDB를 사용할 권한이 없는 경우 DynamoDB 서비스에서 오는 경우에도 호출이 실패합니다.
-
kms:ViaService 조건 키는 정책 문에 나열된 보안 주체를 대신하여 DynamoDB로부터 요청이 오는 경우에만 사용 권한을 허용합니다. 이러한 보안 주체는 이러한 작업을 직접 호출 할 수 없습니다. 참고:
kms:ViaService
값(dynamodb.*.amazonaws.com
)은 리전 위치에 별표(*)가 있습니다. DynamoDB는 DynamoDB 전역 테이블을 지원하기 위해 교차 리전 호출을 수행할 수 있도록 특정 AWS 리전과 독립적인 권한이 필요합니다. -
KMS 키 관리자(
db-team
역할을 수임할 수 있는 사용자)에게 KMS 키에 대한 읽기 전용 액세스와 테이블을 보호하기 위해 DynamoDB가 필요로 하는 권한 부여를 포함하여 권한 부여를 취소할 수 있는 권한을 제공합니다.
예제 키 정책을 사용하기 전에 예제 보안 주체를 AWS 계정의 실제 보안 주체로 바꿉니다.
{
"Id": "key-policy-dynamodb",
"Version":"2012-10-17",
"Statement": [
{
"Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::111122223333:user/db-lead
"},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey",
"kms:CreateGrant"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:ViaService" : "dynamodb.*.amazonaws.com"
}
}
},
{
"Sid": "Allow administrators to view the KMS key and revoke grants",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/db-team
"
},
"Action": [
"kms:Describe*",
"kms:Get*",
"kms:List*",
"kms:RevokeGrant"
],
"Resource": "*"
}
]
}
권한 부여를 사용하여 DynamoDB 승인
키 정책 이외에 DynamoDB는 권한 부여를 사용하여 DynamoDB용 AWS 관리형 키(aws/dynamodb
) 또는 고객 관리형 키에 대한 권한을 설정합니다. 계정에서 KMS 키에 대한 권한 부여를 보려면 ListGrants 작업을 사용합니다. DynamoDB는 AWS 소유 키를 사용하여 테이블을 보호하는 데 권한 부여 또는 추가 권한이 필요하지 않습니다.
DynamoDB는 배경 시스템 유지 관리 및 연속 데이터 보호 태스크를 수행할 때 권한 부여 권한을 사용합니다. 권한 부여를 사용하여 테이블 키도 생성합니다.
각 권한 부여는 테이블마다 다릅니다. 계정에 동일한 KMS 키로 암호화되는 여러 테이블이 있는 경우 각 테이블 유형별 권한 부여가 있습니다. 권한 부여는 DynamoDB 암호화 컨텍스트의 제한을 받는데, 여기에는 테이블 이름과 AWS 계정 ID가 포함되며, 더 이상 필요 없을 경우 권한 부여 제거 권한도 포함됩니다.
권한 부여를 생성하려면 DynamoDB가 암호화된 테이블을 생성한 사용자를 대신하여 CreateGrant
를 호출할 수 있는 권한이 있어야 합니다. AWS 관리형 키의 경우 DynamoDB 는 키 정책에서 kms:CreateGrant
권한을 얻습니다. 이를 통해 계정 사용자는 DynamoDB가 승인된 사용자를 대신하여 요청할 때만 KMS 키에서 CreateGrant를 호출할 수 있습니다.
이 키 정책은 계정이 KMS 키에 대한 권한 부여를 취소하도록 허용할 수도 있습니다. 단, 활성 암호화 테이블에서 권한 부여를 취소할 경우에는 DynamoDB가 테이블을 보호하고 유지하지 못합니다.
DynamoDB 암호화 컨텍스트
암호화 컨텍스트는 보안되지 않은 임의의 데이터를 포함하는 키-값 페어 세트입니다. 데이터 암호화 요청에 암호화 컨텍스트를 포함하는 경우 AWS KMS는 암호화된 데이터에 암호화 컨텍스트를 암호 방식으로 바인딩합니다. 따라서 동일한 암호화 컨텍스트로 전달해야 이 데이터를 해독할 수 있습니다.
DynamoDB는 모든 AWS KMS 암호화 작업에서 동일한 암호화 컨텍스트를 사용합니다. 고객 관리형 키 또는 AWS 관리형 키 를 사용하여 DynamoDB 테이블을 보호할 경우 암호화 컨텍스트를 사용하여 감사 레코드 및 로그에서 KMS 키의 사용을 식별할 수 있습니다. AWS CloudTrail 및 Amazon CloudWatch Logs 같은 로그에서 일반 텍스트에 나타나기도 합니다.
암호화 컨텍스트를 정책 및 권한 부여에서 승인 조건으로 사용할 수도 있습니다. DynamoDB는 암호화 컨텍스트를 사용하여 계정 및 리전에서 고객 관리형 키 또는 AWS 관리형 키에 대한 액세스를 허용하는 권한을 제한합니다.
AWS KMS에 요청할 때 DynamoDB 는 두 개의 키값 쌍이 있는 암호화 컨텍스트를 사용합니다.
"encryptionContextSubset": {
"aws:dynamodb:tableName": "Books"
"aws:dynamodb:subscriberId": "111122223333"
}
-
테이블 – 첫 번째 키값 쌍은 DynamoDB가 암호화 중인 테이블을 나타냅니다. 키는
aws:dynamodb:tableName
입니다. 값은 테이블의 이름입니다."aws:dynamodb:tableName": "
<table-name>
"예:
"aws:dynamodb:tableName": "
Books
" -
계정 – 두 번째 키값 쌍은 AWS 계정을 나타냅니다. 키는
aws:dynamodb:subscriberId
입니다. 값은 계정 ID입니다."aws:dynamodb:subscriberId": "
<account-id>
"예:
"aws:dynamodb:subscriberId": "111122223333"
AWS KMS와 DynamoDB 상호 작용 모니터링
고객 관리형 키 또는 AWS 관리형 키를 사용하여 DynamoDB 테이블을 보호할 경우 AWS CloudTrail 로그를 사용하여 DynamoDB가 사용자 대신 AWS KMS로 전송하는 요청을 추적할 수 있습니다.
GenerateDataKey
, Decrypt
및 CreateGrant
요청은 이 섹션에서 다룹니다. 그리고 DynamoDB는 DescribeKey 작업을 사용하여 사용자가 선택한 KMS 키가 계정과 리전에 있는지 확인합니다. 그리고 RetireGrant 작업을 사용하여 사용자가 테이블을 삭제할 때 권한 부여를 제거합니다.
- GenerateDataKey
-
사용자가 테이블에서 영구 암호화를 활성화하면 DynamoDB가 고유한 테이블 키를 생성합니다. 테이블에 대한 KMS 키를 지정하는 GenerateDataKey 요청을 AWS KMS로 보냅니다.
GenerateDataKey
작업을 기록하는 이벤트는 다음 예시 이벤트와 유사합니다. 사용자는 DynamoDB 서비스 계정입니다. 파라미터에는 KMS 키의 Amazon 리소스 이름(ARN), 256비트 키가 필요한 키 지정자, 테이블과 AWS 계정를 식별하는 암호화 컨텍스트가 포함됩니다.{ "eventVersion": "1.05", "userIdentity": { "type": "AWSService", "invokedBy": "dynamodb.amazonaws.com" }, "eventTime": "2018-02-14T00:15:17Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "dynamodb.amazonaws.com", "userAgent": "dynamodb.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:dynamodb:tableName": "Services", "aws:dynamodb:subscriberId": "111122223333" }, "keySpec": "AES_256", "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab" }, "responseElements": null, "requestID": "229386c1-111c-11e8-9e21-c11ed5a52190", "eventID": "e3c436e9-ebca-494e-9457-8123a1f5e979", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333", "sharedEventID": "bf915fa6-6ceb-4659-8912-e36b69846aad" }
- Decrypt
-
암호화된 DynamoDB 테이블에 액세스하면 DynamoDB가 테이블 키를 해독해야만 계층에서 그 아래에 있는 키를 해독할 수 있습니다. 이후 테이블에 있는 데이터를 해독합니다. 테이블 키를 복호화하려면 DynamoDB는 테이블에 대한 KMS 키를 지정하는 AWS KMS로 Decrypt 요청을 보냅니다.
Decrypt
작업을 기록하는 이벤트는 다음 예시 이벤트와 유사합니다. 사용자는 테이블에 액세스 중인 AWS 계정에 있는 보안 주체입니다. 파라미터에는 암호화된 테이블 키(암호화 텍스트 blob)와, 테이블 및 AWS 계정를 식별하는 암호화 컨텍스트가 포함됩니다. AWS KMS는 암호화 텍스트에서 KMS 키의 ID를 파생합니다.{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-02-14T16:42:15Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROAIGDT3HGFQZX4RY6RU", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" } }, "invokedBy": "dynamodb.amazonaws.com" }, "eventTime": "2018-02-14T16:42:39Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "dynamodb.amazonaws.com", "userAgent": "dynamodb.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:dynamodb:tableName": "Books", "aws:dynamodb:subscriberId": "111122223333" } }, "responseElements": null, "requestID": "11cab293-11a6-11e8-8386-13160d3e5db5", "eventID": "b7d16574-e887-4b5b-a064-bf92f8ec9ad3", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
- CreateGrant
-
고객 관리형 키 또는 AWS 관리형 키를 사용하여 DynamoDB 테이블을 보호하면 DynamoDB는 권한 부여를 사용하여 서비스가 지속적 데이터 보호와 유지 관리 및 내구성 태스크를 수행하도록 허용합니다. 이러한 권한 부여가 AWS 소유 키에서는 필요하지 않습니다.
DynamoDB가 생성하는 권한 부여는 테이블마다 다릅니다. CreateGrant 요청에 있는 주체는 테이블을 생성한 사용자입니다.
CreateGrant
작업을 기록하는 이벤트는 다음 예시 이벤트와 유사합니다. 파라미터에는 테이블에 대한 KMS 키의 Amazon 리소스 이름(ARN), 피부여자 주체 및 삭제 주체(DynamoDB 서비스), 권한 부여가 적용되는 작업이 포함됩니다. 모든 암호화 작업에서 지정된 암호화 컨텍스트를 사용할 것을 요구하는 제한도 포함됩니다.{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-02-14T00:12:02Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" } }, "invokedBy": "dynamodb.amazonaws.com" }, "eventTime": "2018-02-14T00:15:15Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-west-2", "sourceIPAddress": "dynamodb.amazonaws.com", "userAgent": "dynamodb.amazonaws.com", "requestParameters": { "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "retiringPrincipal": "dynamodb.us-west-2.amazonaws.com", "constraints": { "encryptionContextSubset": { "aws:dynamodb:tableName": "Books", "aws:dynamodb:subscriberId": "111122223333" } }, "granteePrincipal": "dynamodb.us-west-2.amazonaws.com", "operations": [ "DescribeKey", "GenerateDataKey", "Decrypt", "Encrypt", "ReEncryptFrom", "ReEncryptTo", "RetireGrant" ] }, "responseElements": { "grantId": "5c5cd4a3d68e65e77795f5ccc2516dff057308172b0cd107c85b5215c6e48bde" }, "requestID": "2192b82a-111c-11e8-a528-f398979205d8", "eventID": "a03d65c3-9fee-4111-9816-8bf96b73df01", "readOnly": false, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }