활성 브랜치 키 생성 - AWS Encryption SDK

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

활성 브랜치 키 생성

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

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

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

필요한 권한

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

브랜치 키 생성

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

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

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

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

  • encryptionContext: 는 kms:GenerateDataKeyWithoutPlaintext call에 포함된 암호화 컨텍스트에서 추가 인증된 데이터(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 });
Python
additional_encryption_context = {"Additional Encryption Context for": "custom branch key id"} branch_key_id: str = keystore.create_key( CreateKeyInput( branch_key_identifier = "custom-branch-key-id", # OPTIONAL encryption_context = additional_encryption_context, # OPTIONAL ) )

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

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

{ "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 작업은 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" }