Amazon DynamoDB에서 AWS KMS를 사용하는 방법 - AWS Key Management Service

Amazon DynamoDB에서 AWS KMS를 사용하는 방법

Amazon DynamoDB는 확장 가능한 완전관리형 NoSQL 데이터베이스 서비스입니다. DynamoDB는 AWS Key Management Service(AWS KMS)와 통합되어 저장된 암호화 서버 측 암호화 기능을 지원합니다.

저장시 암호화 기능을 통해 DynamoDB는 테이블이 디스크에 있을 때마다 DynamoDB 테이블에 있는 모든 고객 데이터를 투명하게 암호화합니다(기본 키 및 로컬 및 전역 보조 인덱스 포함). (테이블에 정렬 키가 있는 경우 범위 경계를 표시하는 정렬 키 중 일부가 테이블 메타데이터에 일반 텍스트 형태로 저장됩니다.) 테이블에 액세스하면 DynamoDB가 테이블 데이터를 투명하게 복호화합니다. 암호화된 테이블을 사용 또는 관리하기 위해 애플리케이션을 변경할 필요가 없습니다.

또한 DynamoDB 스트림, 전역 테이블백업이 내구성 있는 미디어에 저장될 때마다 영구 암호화가 이들 객체를 보호합니다. 이 주제에서 테이블에 대한 설명은 이들 객체에도 적용됩니다.

모든 DynamoDB 테이블은 암호화됩니다. 신규 또는 기존 테이블에 대해 암호화를 활성화 또는 비활성화하는 옵션은 없습니다. 기본적으로 모든 테이블은 DynamoDB 서비스 계정의 AWS 소유 키로 암호화됩니다. 그러나 계정의 DynamoDB용 AWS 관리형 키 또는 고객 관리형 키 아래의 테이블 일부 또는 전체를 암호화하는 옵션을 선택할 수 있습니다.

참고

2018년 11월 이전에는 영구 암호화가 DynamoDB용 AWS 관리형 키만 지원하는 옵션 기능이었습니다. DynamoDB 테이블에서 유휴 상태의 데이터 암호화를 활성화한 경우 AWS Management Console 또는 UpdateTable 작업을 사용하여 고객 관리형 키 또는 AWS 소유 키로 전환하지 않는 한 테이블은 AWS 관리형 키에서 계속 암호화됩니다.

DynamoDB의 클라이언트측 암호화

서버 측 암호화 기능인 영구 암호화 외에 AWS에는 Amazon DynamoDB 암호화 클라이언트 기능도 있습니다. 이 클라이언트 측 암호화 라이브러리를 통해 DynamoDB로 제출되기 전의 테이블 데이터를 보호할 수 있습니다. TLS는 서버 측 암호화를 사용하여 HTTPS 연결을 통해 전송 중인 데이터를 암호화합니다. 데이터는 DynamoDB 엔드포인트에서 복호화되었다가 DynamoDB에 저장되기 전에 다시 암호화됩니다. 클라이언트 측 암호화는 소스부터 DynamoDB의 스토리지, 그리고 사용자에게 다시 전송될 때까지 데이터를 완벽하게 보호합니다.

DynamoDB 암호화 클라이언트를 유휴 시 암호화와 함께 사용할 수 있습니다. 이 전략이 DynamoDB 데이터에 적합한지 결정하는 데 도움이 되도록 Amazon DynamoDB 암호화 클라이언트 개발자 안내서클라이언트 측 또는 서버 측 암호화?를 참조하십시오.

KMS 키 및 데이터 키 사용

DynamoDB 암호화 기능은 AWS KMS key와 데이터 키 계층을 사용하여 테이블 데이터를 보호합니다. DynamoDB는 동일한 키 계층을 사용하여 내구성 있는 미디어에 기록되는 DynamoDB 스트림, 전역 테이블 및 백업을 보호합니다.

AWS KMS key

저장 데이터 암호화는 AWS KMS key에서 DynamoDB 테이블을 보호합니다. 기본적으로 DynamoDB는 DynamoDB 서비스 계정에서 생성 및 관리되는 다중 테넌트 암호화 키인 AWS 소유 키를 사용합니다. 그러나 고객 관리형 키 또는 AWS 계정의 DynamoDB용 AWS 관리형 키(aws/dynamodb)에서 DynamoDB 테이블을 암호화할 수 있습니다. 각 테이블마다 다른 KMS 키를 선택할 수 있습니다. 테이블에 대해 선택한 KMS 키는 로컬 및 전역 보조 인덱스, 스트림 및 백업을 암호화하는 데에도 사용됩니다.

테이블을 생성 또는 업데이트할 때 테이블에 대해 KMS 키를 선택합니다. 언제든지 DynamoDB 콘솔에서 또는 UpdateTable 작업을 사용하여 테이블에 대한 KMS 키를 변경할 수 있습니다. 키 전환 프로세스는 원활하며 가동 중지 시간 또는 서비스 저하가 발생하지 않습니다.

중요

DynamoDB는 대칭 KMS 키만 지원합니다. 비대칭 KMS 키를 사용하여 DynamoDB 테이블을 암호화할 수 없습니다. KMS 키가 대칭 또는 비대칭인지 여부를 확인하는 방법은 비대칭 KMS 키 식별 단원을 참조하세요.

고객 관리형 키를 사용하여 다음과 같은 기능을 얻을 수 있습니다.

다음과 같은 기능이 필요한 경우 AWS 관리형 키를 사용합니다.

  • KMS 키해당 키 정책을 볼 수 있습니다. 키 정책을 변경할 수 없습니다.

  • AWS CloudTrail 로그에서 AWS KMS에 대한 DynamoDB API 호출을 검사하여 DynamoDB 테이블의 암호화 및 복호화를 감사할 수 있습니다.

그러나 AWS 소유 키는 무료이며 그 사용은 AWS KMS 리소스 또는 요청 할당량에 포함되지 않습니다. 고객 관리형 키 및 AWS 관리형 키는 각 API 호출에 대해 요금이 부과되며 이러한 KMS 키에 AWS KMS 할당량이 적용됩니다.

테이블 키

DynamoDB는 테이블에 대해 KMS 키를 사용하여 테이블 키라고 하는 테이블에 대한 고유한 데이터 키생성하고 암호화합니다. 테이블 키는 암호화된 테이블의 수명 기간 동안 존속합니다.

테이블 키는 키 암호화 키로 사용됩니다. DynamoDB는 이 테이블 키를 사용하여 테이블 데이터를 암호화하는 데 사용되는 데이터 암호화 키를 보호합니다. 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는 고객 관리형 키에 대해 최소한 다음 권한이 있어야 합니다.

예를 들어 다음 예제 키 정책은 필요한 권한만 제공합니다. 이 정책에는 다음과 같은 효과가 있습니다.

  • 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 CloudTrailAmazon 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, DecryptCreateGrant 요청은 이 섹션에서 다룹니다. 그리고 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": "arn:aws:kms:us-west-2:111122223333:key/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": "arn:aws:kms:us-west-2:111122223333:key/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" }