활성 브랜치 키 생성 - AWS 데이터베이스 암호화 SDK

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

활성 브랜치 키 생성

브랜치 키는 AWS KMS 계층적 키링 AWS KMS key 이 호출 수를 줄이는 데 사용하는에서 파생된 데이터 키입니다 AWS KMS. 활성 브랜치 키는 최신 버전의 브랜치 키입니다. 계층적 키링은 모든 암호화 요청에 대해 고유한 데이터 키를 생성하고 활성 브랜치 키에서 파생된 고유한 래핑 키로 각 데이터 키를 암호화합니다.

새 활성 브랜치 키를 생성하려면 키 스토어 작업을 정적으로 구성해야 합니다. CreateKey는 키 스토어 작업 구성에 지정된 KMS 키 ARN을 키 스토어 허용 목록에 추가하는 권한 있는 작업입니다. 그런 다음 KMS 키를 사용하여 새 활성 브랜치 키를 생성합니다. KMS 키가 키 스토어에 추가되면 삭제할 수 없으므로이 작업에 대한 액세스를 제한하는 것이 좋습니다.

애플리케이션의 컨트롤 플레인의 KeyStore Admin 인터페이스를 통해 CreateKey 작업을 사용하는 것이 좋습니다. 이 접근 방식은 키 관리 모범 사례에 부합합니다.

데이터 영역에서 브랜치 키를 생성하지 마십시오. 이 방법을 사용하면 다음과 같은 결과가 발생할 수 있습니다.

  • 에 대한 불필요한 호출 AWS KMS

  • 동시성이 높은 환경에서 AWS KMS 에 대한 여러 동시 호출

  • 백업 DynamoDB 테이블에 대한 여러 TransactWriteItems 호출입니다.

CreateKey 작업에는 기존 브랜치 키를 덮어쓰지 않도록 TransactWriteItems 호출에 조건 확인이 포함됩니다. 그러나 데이터 영역에서 키를 생성해도 리소스 사용량이 비효율적이고 잠재적인 성능 문제가 발생할 수 있습니다.

키 스토어에서 KMS 키 하나를 허용 목록에 추가하거나 키 스토어 작업 구성에서 지정한 KMS 키 ARN을 업데이트하고를 CreateKey 다시 호출하여 여러 KMS 키를 허용 목록에 추가할 수 있습니다. 여러 KMS 키를 허용 목록으로 표시하는 경우 키 스토어 사용자는 액세스 권한이 있는 키 스토어에서 허용 목록으로 지정된 키를 사용할 수 있도록 검색을 위해 키 스토어 작업을 구성해야 합니다. 자세한 내용은 키 스토어 작업 구성 단원을 참조하십시오.

필요한 권한

브랜치 키를 생성하려면 키 스토어 작업에 지정된 KMS 키에 대한 kms:GenerateDataKeyWithoutPlaintextkms:ReEncrypt 권한이 필요합니다.

브랜치 키 생성

다음 작업은 키 스토어 작업 구성에서 지정한 KMS 키를 사용하여 새 활성 브랜치 키를 생성하고 키 스토어 역할을 하는 DynamoDB 테이블에 활성 브랜치 키를 추가합니다.

CreateKey를 호출할 때 다음과 같은 선택적 값을 지정하도록 선택할 수 있습니다.

  • branchKeyIdentifier: 사용자 지정 branch-key-id를 정의합니다.

    사용자 지정 branch-key-id를 만들려면 encryptionContext 파라미터에 추가 암호화 컨텍스트도 포함해야 합니다.

  • encryptionContext: kms:GenerateDataKeyWithoutPlaintext 호출에 포함된 암호화 컨텍스트에서 추가 인증 데이터(AAD)를 제공하는 선택적 비보안 키-값 페어 세트를 정의합니다.

    이 추가 암호화 컨텍스트는 aws-crypto-ec: 접두사와 표시됩니다.

Java
final Map<String, String> additionalEncryptionContext = Collections.singletonMap("Additional Encryption Context for", "custom branch key id"); final String BranchKey = keystore.CreateKey( CreateKeyInput.builder() .branchKeyIdentifier(custom-branch-key-id) //OPTIONAL .encryptionContext(additionalEncryptionContext) //OPTIONAL .build()).branchKeyIdentifier();
C# / .NET
var additionalEncryptionContext = new Dictionary<string, string>(); additionalEncryptionContext.Add("Additional Encryption Context for", "custom branch key id"); var branchKeyId = keystore.CreateKey(new CreateKeyInput { BranchKeyIdentifier = "custom-branch-key-id", // OPTIONAL EncryptionContext = additionalEncryptionContext // OPTIONAL });
Rust
let additional_encryption_context = HashMap::from([ ("Additional Encryption Context for".to_string(), "custom branch key id".to_string()) ]); let branch_key_id = keystore.create_key() .branch_key_identifier("custom-branch-key-id") // OPTIONAL .encryption_context(additional_encryption_context) // OPTIONAL .send() .await? .branch_key_identifier .unwrap();

먼저, CreateKey 작업은 다음 값을 생성합니다.

그런 다음 CreateKey 작업은 다음 요청을 사용하여 kms:GenerateDataKeyWithoutPlaintext를 호출합니다.

{ "EncryptionContext": { "branch-key-id" : "branch-key-id", "type" : "type", "create-time" : "timestamp", "logical-key-store-name" : "the logical table name for your key store", "kms-arn" : the KMS key ARN, "hierarchy-version" : "1", "aws-crypto-ec:contextKey": "contextValue" }, "KeyId": "the KMS key ARN you specified in your key store actions", "NumberOfBytes": "32" }
참고

데이터베이스를 검색 가능한 암호화로 구성하지 않았더라도 CreateKey 작업을 수행하면 활성 브랜치 키와 비컨 키가 생성됩니다. 두 키 모두 키 스토어에 저장됩니다. 자세한 내용은 검색 가능한 암호화를 위한 계층적 키링 사용을 참조하세요.

다음으로 CreateKey 작업은 kms:ReEncrypt를 호출하여 암호화 컨텍스트를 업데이트하고 브랜치 키에 대한 활성 레코드를 생성합니다.

마지막으로 CreateKey 작업은 ddb:TransactWriteItems를 호출하여 2단계에서 생성한 테이블의 브랜치 키를 유지할 새 항목을 작성합니다. 항목에는 다음 속성이 있습니다.

{ "branch-key-id" : branch-key-id, "type" : "branch:ACTIVE", "enc" : the branch key returned by the GenerateDataKeyWithoutPlaintext call, "version": "branch:version:the branch key version UUID", "create-time" : "timestamp", "kms-arn" : "the KMS key ARN you specified in Step 1", "hierarchy-version" : "1", "aws-crypto-ec:contextKey": "contextValue" }