AWS KMS 열쇠 고리 - AWS 데이터베이스 암호화 SDK

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

AWS KMS 열쇠 고리

클라이언트 측 암호화 라이브러리는 데이터베이스 암호화 SDK로 이름이 변경되었습니다. AWS 이 개발자 안내서는 여전히 DynamoDB Encryption Client에 대한 정보를 제공합니다.

AWS KMS 키링은 대칭 암호화 또는 비대칭 AWS KMS keysRSA를 사용하여 데이터 키를 생성, 암호화 및 복호화합니다. AWS Key Management Service (AWS KMS) 는 KMS 키를 보호하고 FIPS 경계 내에서 암호화 작업을 수행합니다. 가능하면 AWS KMS 키링 또는 유사한 보안 속성을 가진 키링을 사용하는 것이 좋습니다.

키링에 대칭형 다중 지역 KMS 키를 사용할 수도 있습니다. AWS KMS 다중 지역 사용에 대한 자세한 내용 및 예는 을 참조하십시오. AWS KMS keys다중 지역 사용 AWS KMS keys 다중 리전 키에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드다중 리전 키 사용을 참조하세요.

AWS KMS 키링에는 두 가지 유형의 래핑 키가 포함될 수 있습니다.

  • 생성기 키: 일반 텍스트 데이터 키를 생성하고 암호화합니다. 데이터를 암호화하는 키링에는 하나의 생성기 키가 있어야 합니다.

  • 추가 키: 생성기 키가 생성한 일반 텍스트 데이터 키를 암호화합니다. AWS KMS 키링에는 0개 이상의 추가 키가 있을 수 있습니다.

레코드를 암호화하려면 생성기 키가 있어야 합니다. AWS KMS 키링에 AWS KMS 키가 하나뿐인 경우 해당 키를 사용하여 데이터 키를 생성하고 암호화합니다.

모든 키링과 마찬가지로 AWS KMS 키링도 개별적으로 사용하거나 동일하거나 다른 유형의 다른 키링과 함께 여러 키링으로 사용할 수 있습니다.

AWS KMS 키링에 필요한 권한

AWS 데이터베이스 암호화 SDK는 필요하지 AWS 계정 않으며 어떤 것에도 의존하지 않습니다. AWS 서비스하지만 AWS KMS 키링을 사용하려면 키링에 다음과 같은 최소 권한이 있어야 합니다. AWS 계정 AWS KMS keys

권한에 대한 자세한 내용은 개발자 안내서의 인증 및 AWS KMS keys액세스 제어를 참조하십시오.AWS Key Management Service

AWS KMS keysAWS KMS 키링에서 식별

AWS KMS 키링에는 하나 이상이 포함될 수 있습니다. AWS KMS keys AWS KMS key AWS KMS 키링에서 를 지정하려면 지원되는 AWS KMS 키 식별자를 사용하십시오. AWS KMS key 키링에서 ID를 식별하는 데 사용할 수 있는 키 식별자는 작업 및 언어 구현에 따라 다릅니다. AWS KMS key의 키 식별자에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드키 식별자를 참조하세요.

작업에 가장 적합한 키 식별자를 사용하는 것이 모범 사례입니다.

  • AWS KMS 키링으로 암호화하려면 키 ID, 키ARN, 별칭 이름 또는 별칭 ARN을 사용하여 데이터를 암호화할 수 있습니다.

    참고

    암호화 키링에서 KMS 키에 대해 별칭 이름 또는 별칭 ARN을 지정하는 경우 암호화 작업은 현재 별칭과 연결된 키 ARN을 암호화된 데이터 키의 메타데이터에 저장합니다. 별칭은 저장되지 않습니다. 별칭을 변경해도 암호화된 데이터 키를 복호화하는 데 사용되는 KMS 키에는 영향을 주지 않습니다.

  • AWS KMS 키링으로 암호를 해독하려면 키 ARN을 사용하여 식별해야 합니다. AWS KMS keys자세한 내용은 래핑 키 선택단원을 참조하세요.

  • 암호화 및 복호화에 사용되는 키 링에서는 키 ARN을 사용하여 AWS KMS keys를 식별해야 합니다.

암호 해독 시 AWS 데이터베이스 암호화 SDK는 암호화된 데이터 키 중 하나를 해독할 수 AWS KMS key 있는 AWS KMS 키링을 검색합니다. 구체적으로, AWS 데이터베이스 암호화 SDK는 자료 설명의 암호화된 각 데이터 키에 대해 다음 패턴을 사용합니다.

  • AWS 데이터베이스 암호화 SDK는 자료 설명의 AWS KMS key 메타데이터에서 데이터 키를 암호화한 키 ARN을 가져옵니다.

  • AWS 데이터베이스 암호화 SDK는 복호화 키링에서 일치하는 키가 AWS KMS key 있는 ARN을 검색합니다.

  • 키링에서 일치하는 키가 AWS KMS key 있는 ARN을 찾으면 AWS 데이터베이스 암호화 SDK는 KMS 키를 사용하여 암호화된 데이터 키를 AWS KMS 해독하도록 요청합니다.

  • 그러지 않으면 암호화된 다음 데이터 키(있는 경우)로 건너뛰게 됩니다.

키링 생성 AWS KMS

같거나 다른 AWS KMS keys AWS 계정 AND에서 각 AWS KMS 키링을 하나 AWS KMS key 또는 여러 개 구성하여 구성할 수 있습니다. AWS 리전 AWS KMS key 은 대칭 암호화 키(SYMMETRIC_DEFAULT) 또는 비대칭 RSA KMS 키여야 합니다. 대칭 암호화 다중 리전 KMS 키를 사용할 수도 있습니다. 멀티 키링에 하나 이상의 AWS KMS 키링을 사용할 수 있습니다.

데이터를 암호화하고 해독하는 AWS KMS 키링을 만들거나 암호화 또는 복호화용 키링을 만들 AWS KMS 수 있습니다. 데이터를 암호화하는 AWS KMS 키링을 만들 때는 일반 텍스트 데이터 키를 생성하고 암호화하는 데 사용되는 생성기 키를 지정해야 합니다. AWS KMS key 데이터 키는 KMS 키와 수학적으로 관련이 없습니다. 그런 다음 원하는 경우 동일한 일반 텍스트 데이터 키를 AWS KMS keys 암호화하는 추가 항목을 지정할 수 있습니다. 이 키링으로 보호되는 암호화된 필드를 해독하려면 사용하는 암호 해독 키링에 키링에 정의된 필드 중 하나 이상이 포함되거나 포함되지 않아야 합니다. AWS KMS keys AWS KMS keys(없는 AWS KMSAWS KMS keys 키링을 검색 키링이라고 합니다.)AWS KMS

암호화 키링 또는 다중 키링의 모든 래핑 키는 데이터 키를 암호화할 수 있어야 합니다. 래핑 키가 암호화되지 않으면 암호화 메서드가 실패합니다. 따라서 호출자는 키링의 모든 키에 필요한 권한을 가지고 있어야 합니다. 검색 키링을 사용하여 단독 또는 다중 키링으로 데이터를 암호화하는 경우 암호화 작업이 실패합니다.

다음 예에서는 이 CreateAwsKmsMrkMultiKeyring 방법을 사용하여 대칭 암호화 AWS KMS KMS 키로 키링을 생성합니다. 이 CreateAwsKmsMrkMultiKeyring 메서드는 자동으로 AWS KMS 클라이언트를 생성하고 키링이 단일 리전 키와 다중 리전 키를 모두 올바르게 처리하도록 합니다. 이 예제에서는 키 ARN을 사용하여 KMS 키를 식별합니다. 자세한 내용은 AWS KMS keysAWS KMS 키링에서 식별을 참조하세요.

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyArn) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsMrkMultiKeyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyArn }; var awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);

다음 예에서는 이 CreateAwsKmsRsaKeyring 방법을 사용하여 비대칭 RSA KMS AWS KMS 키로 키링을 생성합니다. 비대칭 AWS KMS RSA 키링을 생성하려면 다음 값을 제공하십시오.

  • kmsClient: 새 클라이언트 생성 AWS KMS

  • kmsKeyID: 비대칭 RSA KMS 키를 식별하는 키 ARN

  • publicKey: 전달한 ByteBuffer 키의 공개 키를 나타내는 UTF-8 인코딩 PEM 파일의 a kmsKeyID

  • encryptionAlgorithm: 암호화 알고리즘은 또는 이어야 합니다. RSAES_OAEP_SHA_256 RSAES_OAEP_SHA_1

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsRsaKeyringInput createAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput.builder() .kmsClient(KmsClient.create()) .kmsKeyId(rsaKMSKeyArn) .publicKey(publicKey) .encryptionAlgorithm(EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256) .build(); IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsRsaKeyringInput = new CreateAwsKmsRsaKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = rsaKMSKeyArn, PublicKey = publicKey, EncryptionAlgorithm = EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256 }; IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);

다중 지역 사용 AWS KMS keys

AWS 데이터베이스 암호화 SDK에서 다중 지역을 래핑 AWS KMS keys 키로 사용할 수 있습니다. 하나의 AWS 리전다중 지역 키를 사용하여 암호화하는 경우 다른 영역의 관련 다중 지역 키를 사용하여 암호를 해독할 수 있습니다. AWS 리전

다중 지역 KMS 키는 키 구성 요소와 키 AWS 리전 ID가 동일한 서로 다른 키들의 AWS KMS keys 집합입니다. 이러한 관련 키를 다른 리전에서 마치 동일한 키인 것처럼 사용할 수 있습니다. 다중 지역 키는 지역 간 호출 없이 한 지역에서는 암호화하고 다른 지역에서는 암호를 해독해야 하는 일반적인 재해 복구 및 백업 시나리오를 지원합니다. AWS KMS다중 리전 키에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드다중 리전 키 사용을 참조하세요.

다중 지역 키를 지원하기 위해 데이터베이스 암호화 SDK에는 다중 지역 인식 키링이 포함되어 있습니다. AWS AWS KMS 이 CreateAwsKmsMrkMultiKeyring 방법은 단일 리전 키와 다중 리전 키를 모두 지원합니다.

  • 단일 리전 키의 경우 다중 리전 인식 기호는 단일 리전 AWS KMS 키링처럼 작동합니다. 데이터를 암호화한 단일 리전 키로만 사이퍼텍스트 복호화를 시도합니다. AWS KMS 키링 경험을 단순화하려면 대칭 암호화 KMS 키를 사용할 때마다 이 CreateAwsKmsMrkMultiKeyring 방법을 사용하는 것이 좋습니다.

  • 다중 리전 키의 경우 다중 리전 인식 기호는 데이터를 암호화한 것과 동일한 다중 리전 키 또는 사용자가 지정한 리전의 관련 다중 리전 키를 사용하여 사이퍼텍스트를 복호화하려고 시도합니다.

KMS 키를 두 개 이상 사용하는 다중 리전 인식 키링에서는 단일 리전 및 다중 리전 키를 여러 개 지정할 수 있습니다. 그러나 관련 다중 리전 키의 각 집합에서 하나의 키만 지정할 수 있습니다. 키 ID가 같은 키 식별자를 두 개 이상 지정하면 생성자 호출이 실패합니다.

다음 예시는 다중 지역 KMS 키를 사용하여 AWS KMS 키링을 생성합니다. 예제에서는 다중 지역 키를 생성기 키로, 단일 지역 키를 하위 키로 지정합니다.

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput createAwsKmsMrkMultiKeyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(multiRegionKeyArn) .kmsKeyIds(Collections.singletonList(kmsKeyArn)) .build(); IKeyring awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsMrkMultiKeyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = multiRegionKeyArn, KmsKeyIds = new List<String> { kmsKeyArn } }; var awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);

다중 지역 AWS KMS 키링을 사용하는 경우 엄격 모드 또는 검색 모드에서 암호문을 해독할 수 있습니다. 엄격 모드에서 사이퍼텍스트를 복호화하려면 사이퍼텍스트를 복호화하는 리전에서 관련 다중 리전 키의 키 ARN을 사용하여 다중 리전 인식 기호를 인스턴스화합니다. 다른 리전(예: 레코드가 암호화된 리전)에 있는 관련 다중 리전 키의 키 ARN을 지정하면 다중 리전 인식 기호가 해당 AWS KMS key에 대한 리전 간 호출을 수행합니다.

엄격 모드에서 복호화할 때 다중 리전 인식 기호에는 키 ARN이 필요합니다. 여기에서는 관련 다중 리전 키의 각 집합에서 하나의 키 ARN만 허용합니다.

AWS KMS 다중 리전 키를 사용하여 검색 모드에서 복호화할 수도 있습니다. 검색 모드에서 복호화할 때는 어떤 AWS KMS keys도 지정하지 않습니다. (단일 지역 검색 키링에 대한 자세한 내용은 을 참조하십시오.) AWS KMS 검색 키링 사용 AWS KMS

다중 리전 키로 암호화한 경우 검색 모드에서 다중 리전 인식 기호는 로컬 리전의 관련 다중 리전 키를 사용하여 복호화를 시도합니다. 존재하지 않는 경우 호출이 실패합니다. 검색 모드에서 AWS 데이터베이스 암호화 SDK는 암호화에 사용되는 다중 지역 키에 대해 지역 간 호출을 시도하지 않습니다.

검색 키링 사용 AWS KMS

복호화할 때는 AWS 데이터베이스 암호화 SDK에서 사용할 수 있는 래핑 키를 지정하는 것이 좋습니다. 이 권장사항을 따르려면 AWS KMS 래핑 키를 지정한 키로 제한하는 AWS KMS 암호 해독 키링을 사용하세요. 하지만 AWS KMS 검색 키링, 즉 래핑 키를 지정하지 않는 AWS KMS 키링을 만들 수도 있습니다.

AWS 데이터베이스 암호화 SDK는 표준 AWS KMS 검색 키링과 다중 지역 키에 대한 검색 키링을 제공합니다. AWS KMS AWS Database Encryption SDK에서 다중 리전 키 사용에 관한 정보는 다중 지역 사용 AWS KMS keys 섹션을 참조하세요.

래핑 키를 지정하지 않기 때문에 검색 키링은 데이터를 암호화할 수 없습니다. 검색 키링을 사용하여 단독 또는 다중 키링으로 데이터를 암호화하는 경우 암호화 작업이 실패합니다.

복호화 시 AWS Database Encryption SDK는 해당 키를 소유하거나 액세스할 수 있는 사람과 관계없이 암호화된 데이터를 사용하여 암호화된 데이터 키를 사용하여 암호화된 데이터 키를 AWS KMS 복호화하도록 요청할 수 있습니다. AWS KMS key AWS KMS key호출자가 AWS KMS key에 대한 kms:Decrypt 권한이 있는 경우에만 호출이 성공합니다.

중요

복호화 다중 키링에 AWS KMS 검색 키링을 포함하면 검색 키링이 다중 키링의 다른 키링에 지정된 모든 KMS 키 제한보다 우선 적용됩니다. 다중 키링은 제한이 가장 적은 키링처럼 동작합니다. 검색 키링을 사용하여 단독 또는 다중 키링으로 데이터를 암호화하는 경우 암호화 작업이 실패합니다

데이터베이스 암호화 SDK는 편의를 위해 검색 키링을 제공합니다. AWS AWS KMS 단, 다음과 같은 이유로 가능하면 더 제한적인 키링을 사용하는 것이 좋습니다.

  • 인증 — 발신자에게 암호 해독에 사용할 권한이 AWS KMS key 있는 한, AWS KMS 검색 키링은 자료 설명에 있는 데이터 키를 암호화하는 데 사용된 모든 것을 사용할 수 있습니다. AWS KMS key 이것은 AWS KMS key 호출자가 사용하려는 것이 아닐 수도 있습니다. 예를 들어 암호화된 데이터 키 중 하나가 누구나 사용할 수 AWS KMS key 있는 보안 수준이 낮은 상태에서 암호화되었을 수 있습니다.

  • 지연 시간 및 성능 — AWS Database Encryption SDK가 다른 AWS 계정 및 지역에서 암호화된 데이터를 포함하여 암호화된 데이터 키를 모두 해독하려고 시도하고 호출자에게 암호 해독에 사용할 권한이 없기 때문에 AWS KMS 검색 키링이 다른 키링보다 느릴 수 있습니다. AWS KMS keys AWS KMS keys

검색 키링을 사용하는 경우 검색 필터를 사용하여 지정된 KMS AWS 계정 키와 파티션에 사용할 수 있는 KMS 키를 제한하는 것이 좋습니다. 계정 ID 및 파티션을 찾는 데 도움이 필요하면 의 AWS 계정 식별자ARN 형식을 참조하십시오. AWS 일반 참조

다음 코드 예제는 AWS 데이터베이스 암호화 SDK가 사용할 수 있는 KMS 키를 파티션 및 예제 계정의 KMS 키로 제한하는 검색 필터를 사용하여 검색 키링을 인스턴스화합니다. AWS KMS aws 111122223333

이 코드를 사용하기 전에 예제 AWS 계정 및 파티션 값을 AND 파티션의 유효한 값으로 바꾸십시오. AWS 계정 KMS 키가 중국 리전에 있는 경우 aws-cn 파티션 값을 사용하세요. KMS 키가 AWS GovCloud (US) Regions에 있는 경우 aws-us-gov 파티션 값을 사용하세요. 다른 AWS 리전에 있는 경우 aws 파티션 값을 사용하세요.

Java
// Create discovery filter DiscoveryFilter discoveryFilter = DiscoveryFilter.builder() .partition("aws") .accountIds(111122223333) .build(); // Create the discovery keyring CreateAwsKmsMrkDiscoveryMultiKeyringInput createAwsKmsMrkDiscoveryMultiKeyringInput = CreateAwsKmsMrkDiscoveryMultiKeyringInput.builder() .discoveryFilter(discoveryFilter) .build(); IKeyring decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);
C# / .NET
// Create discovery filter var discoveryFilter = new DiscoveryFilter { Partition = "aws", AccountIds = 111122223333 }; // Create the discovery keyring var createAwsKmsMrkDiscoveryMultiKeyringInput = new CreateAwsKmsMrkDiscoveryMultiKeyringInput { DiscoveryFilter = discoveryFilter }; var decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);

AWS KMS 지역 검색 키링 사용

AWS KMS 리전 검색 키링은 KMS 키의 ARN을 지정하지 않는 키링입니다. 대신 AWS 데이터베이스 암호화 SDK에서 특히 KMS 키만 사용하여 해독할 수 있습니다. AWS 리전

AWS KMS 지역 검색 키링으로 암호를 해독하는 경우 AWS 데이터베이스 암호화 SDK는 지정된 in으로 암호화된 모든 암호화된 데이터 키를 해독합니다. AWS KMS key AWS 리전성공하려면 호출자에게 지정된 데이터 키 중 암호화된 데이터 키 중 하나 이상에 대한 kms:Decrypt 권한이 있어야 합니다. AWS KMS keys AWS 리전

다른 검색 키링과 마찬가지로 리전 검색 키링은 암호화에 영향을 주지 않습니다. 암호화된 필드를 복호화할 때만 작동합니다. 암호화 및 복호화에 사용되는 다중 키링에서 리전 검색 키링을 사용하는 경우 복호화 시에만 유효합니다. 다중 리전 검색 키링을 사용하여 단독 또는 다중 키링으로 데이터를 암호화하는 경우 암호화 작업이 실패합니다.

중요

암호 해독 다중 키링에 AWS KMS 지역 검색 키링을 포함하는 경우 지역 검색 키링이 다중 키링의 다른 키링에 지정된 모든 KMS 키 제한보다 우선합니다. 다중 키링은 제한이 가장 적은 키링처럼 동작합니다. AWS KMS 검색 키링은 단독으로 사용되거나 다중 키링에 사용되는 경우 암호화에 영향을 주지 않습니다.

AWS 데이터베이스 암호화 SDK의 지역 검색 키링은 지정된 지역의 KMS 키로만 암호 해독을 시도합니다. 검색 키링을 사용하는 경우 클라이언트에서 지역을 구성합니다. AWS KMS 이러한 AWS 데이터베이스 암호화 SDK 구현은 지역별로 KMS 키를 필터링하지 않지만 지정된 지역 외부의 KMS 키에 대한 암호 해독 AWS KMS 요청은 실패합니다.

검색 키링을 사용하는 경우 검색 필터를 사용하여 암호 해독에 사용되는 KMS 키를 지정된 및 파티션의 KMS 키로 제한하는 것이 좋습니다. AWS 계정

예를 들어 다음 코드는 검색 필터를 사용하여 AWS KMS 지역 검색 키링을 만듭니다. 이 키링은 AWS 데이터베이스 암호화 SDK를 미국 서부 (오레곤) 지역 (us-west-2) 의 계정 111122223333에 있는 KMS 키로 제한합니다.

Java
// Create the discovery filter DiscoveryFilter discoveryFilter = DiscoveryFilter.builder() .partition("aws") .accountIds(111122223333) .build(); // Create the discovery keyring CreateAwsKmsMrkDiscoveryMultiKeyringInput createAwsKmsMrkDiscoveryMultiKeyringInput = CreateAwsKmsMrkDiscoveryMultiKeyringInput.builder() .discoveryFilter(discoveryFilter) .regions("us-west-2") .build(); IKeyring decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);
C# / .NET
// Create discovery filter var discoveryFilter = new DiscoveryFilter { Partition = "aws", AccountIds = 111122223333 }; // Create the discovery keyring var createAwsKmsMrkDiscoveryMultiKeyringInput = new CreateAwsKmsMrkDiscoveryMultiKeyringInput { DiscoveryFilter = discoveryFilter, Regions = us-west-2 }; var decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);