AWS KMS 키링 - AWS Encryption SDK

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

AWS KMS 키링

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

버전 2.3부터 AWS KMS 키링 또는 마스터 키 제공자에서 AWS KMS 다중 지역 키를 사용할 수 있습니다. x 또는 버전 AWS Encryption SDK 3.0입니다. AWS 암호화 CLI의 x. 새로운 다중 리전 인식 기호 사용에 대한 자세한 내용 및 예제는 다중 리전 AWS KMS keys 사용 섹션을 참조하세요. 다중 리전 키에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드다중 리전 키 사용을 참조하세요.

참고

버전 4. AWS Encryption SDK .NET용 x 및 버전 3입니다. AWS Encryption SDK for Java x는 비대칭 RSA를 사용하는 AWS KMS 키링을 지원하는 유일한 프로그래밍 언어 구현입니다. AWS KMS keys

다른 언어 구현의 암호화 키링에 비대칭 KMS 키를 포함하려고 하면 암호화 호출이 실패합니다. 복호화 키링에 포함하면 무시됩니다.

KMS 키링에 대한 모든 언급은 키링을 참조합니다. AWS Encryption SDK AWS KMS

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

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

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

암호화할 때 사용하는 AWS KMS 키링에는 생성기 키가 있어야 합니다. 복호화 시 생성기 키는 선택 사항이며 생성기 키와 추가 키 간의 구분은 무시됩니다.

AWS KMS 암호화 키링에 AWS KMS 키가 하나뿐인 경우 해당 키를 사용하여 데이터 키를 생성하고 암호화합니다.

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

AWS KMS 키링에 필요한 권한

키트가 AWS Encryption 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 개발자 가이드키 식별자를 참조하세요.

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

  • 의 암호화 키링에서 키 ARN 또는 별칭 ARN을 사용하여 KMS 키를 식별할 수 있습니다. AWS Encryption SDK for C다른 모든 언어 구현에서는 키 ID, 키 ARN, 별칭 이름 또는 별칭 ARN을 사용하여 데이터를 암호화할 수 있습니다.

  • 복호화 키링에서는 키 ARN을 사용하여 AWS KMS keys를 식별해야 합니다. 이 요구 사항은 AWS Encryption SDK의 모든 언어 구현에 적용됩니다. 자세한 내용은 래핑 키 선택단원을 참조하세요.

  • 암호화 및 복호화에 사용되는 키 링에서는 키 ARN을 사용하여 AWS KMS keys를 식별해야 합니다. 이 요구 사항은 AWS Encryption SDK의 모든 언어 구현에 적용됩니다.

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

암호화를 위한 키링 생성 AWS KMS

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

데이터를 암호화하는 AWS KMS 키링을 만들 때는 일반 텍스트 데이터 키를 생성하고 AWS KMS key 암호화하는 데 사용되는 생성기 키를 지정해야 합니다. 데이터 키는 KMS 키와 수학적으로 관련이 없습니다. 그런 다음 원하는 경우 동일한 일반 텍스트 데이터 키를 AWS KMS keys 암호화하는 추가 항목을 지정할 수 있습니다.

이 키링으로 보호되는 암호화된 메시지를 해독하려면 사용하는 키링에 키링에 AWS KMS keys 정의된 메시지 중 하나 이상이 포함되거나 포함되지 않아야 합니다. AWS KMS keys(없는 AWS KMS 키링을 검색 AWS KMS keys 키링이라고 합니다.)AWS KMS

를 제외한 AWS Encryption SDK 언어 구현에서는 암호화 키링 또는 다중 키링의 모든 래핑 키가 데이터 키를 암호화할 수 있어야 합니다. AWS Encryption SDK for C래핑 키가 암호화되지 않으면 암호화 메서드가 실패합니다. 따라서 호출자는 키링의 모든 키에 필요한 권한을 가지고 있어야 합니다. 검색 키링을 사용하여 단독 또는 다중 키링으로 데이터를 암호화하는 경우 암호화 작업이 실패합니다. 단 AWS Encryption SDK for C, 표준 검색 키링을 무시하지만 다중 지역 검색 키링을 단독으로 지정하거나 다중 키링으로 지정하면 암호화 작업이 실패하는 경우는 예외입니다.

다음 예에서는 생성기 키 하나와 추가 키 하나를 사용하여 AWS KMS 키링을 만듭니다. 이 예제에서는 키 ARN을 사용하여 KMS 키를 식별합니다. 이는 암호화에 사용되는 AWS KMS 키링의 모범 사례이며 암호 해독에 사용되는 AWS KMS 키링의 요구 사항입니다. 자세한 내용은 AWS KMS keysAWS KMS 키링에서 식별단원을 참조하세요.

C

에서 암호화 AWS KMS key 키링에서 를 식별하려면 키 ARN 또는 별칭 ARN을 지정합니다. AWS Encryption SDK for C복호화 키링에서는 키 ARN을 사용해야 합니다. 자세한 내용은 AWS KMS keysAWS KMS 키링에서 식별 섹션을 참조하세요.

전체 예를 보려면 string.cpp를 참조하세요.

const char * generator_key = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" const char * additional_key = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" struct aws_cryptosdk_keyring *kms_encrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(generator_key,{additional_key});
C# / .NET

For .NET에서 하나 또는 여러 개의 AWS KMS 키가 포함된 AWS KMS 키링을 생성하려면 다중 키링을 생성하십시오 AWS Encryption SDK . AWS Encryption SDK .NET용 키에는 키만을 위한 다중 키링이 포함되어 있습니다. AWS KMS

AWS KMS key .NET용 에서 암호화 키링에 AWS Encryption SDK 대해 를 지정하는 경우 유효한 키 식별자 (키 ID, 키 ARN, 별칭 이름 또는 별칭ARN) 를 사용할 수 있습니다. 키링에서 키를 식별하는 데 도움이 필요하면 을 참조하십시오. AWS KMS keys AWS KMS AWS KMS keysAWS KMS 키링에서 식별

다음 예에서는 버전 4를 사용합니다. .NET에서 생성기 키와 추가 키가 포함된 AWS KMS 키링을 생성하기 AWS Encryption SDK 위한 x입니다. 전체 예제는 .cs를 참조하십시오AwsKmsMultiKeyringExample.

// Instantiate the AWS Encryption SDK and material provider var mpl = new MaterialProviders(new MaterialProvidersConfig()); var esdk = new ESDK(new AwsEncryptionSdkConfig()); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<string> additionalKey = new List<string> { "alias/exampleAlias" }; // Instantiate the keyring input object var kmsEncryptKeyringInput = new CreateAwsKmsMultiKeyringInput { Generator = generatorKey, KmsKeyIds = additionalKey }; var kmsEncryptKeyring = materialProviders.CreateAwsKmsMultiKeyring(kmsEncryptKeyringInput);
JavaScript Browser

에서 암호화 키링으로 AWS KMS key 를 지정하는 경우 유효한 키 식별자 (키 ID AWS Encryption SDK for JavaScript, 키 ARN, 별칭 이름 또는 별칭ARN) 를 사용할 수 있습니다. AWS KMS keys 키링에서 키를 식별하는 데 도움이 필요하면 을 참조하십시오. AWS KMS AWS KMS keysAWS KMS 키링에서 식별

전체 예제를 보려면 의 저장소에서 kms_simple.ts를 참조하십시오. AWS Encryption SDK for JavaScript GitHub

const clientProvider = getClient(KMS, { credentials }) const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' const additionalKey = 'alias/exampleAlias' const keyring = new KmsKeyringBrowser({ clientProvider, generatorKeyId, keyIds: [additionalKey] })
JavaScript Node.js

에서 암호화 키링으로 AWS KMS key 를 지정하는 경우 유효한 키 식별자 (키 ID AWS Encryption SDK for JavaScript, 키 ARN, 별칭 이름 또는 별칭ARN) 를 사용할 수 있습니다. AWS KMS keys 키링에서 키를 식별하는 데 도움이 필요하면 을 참조하십시오. AWS KMS AWS KMS keysAWS KMS 키링에서 식별

전체 예제를 보려면 의 저장소에서 kms_simple.ts를 참조하십시오. AWS Encryption SDK for JavaScript GitHub

const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' const additionalKey = 'alias/exampleAlias' const keyring = new KmsKeyringNode({ generatorKeyId, keyIds: [additionalKey] })
Java

에 하나 또는 여러 개의 AWS KMS 키가 있는 AWS KMS 키링을 만들려면 멀티 키링을 만드세요. AWS Encryption SDK for Java키만 사용할 수 있는 멀티 키링이 AWS Encryption SDK for Java 포함되어 있습니다. AWS KMS

에서 암호화 키링으로 AWS KMS key 를 지정하는 경우 유효한 키 식별자 (키 ID AWS Encryption SDK for Java, 키 ARN, 별칭 이름 또는 별칭ARN) 를 사용할 수 있습니다. AWS KMS keys 키링에서 키를 식별하는 데 도움이 필요하면 을 참조하십시오. AWS KMS AWS KMS keysAWS KMS 키링에서 식별

전체 예제를 보려면 의 AWS Encryption SDK for Java 저장소에 BasicEncryptionKeyringExample있는.java를 참조하십시오. GitHub

// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<String> additionalKey = Collections.singletonList("alias/exampleAlias"); // Create the AWS KMS keyring final CreateAwsKmsMultiKeyringInput keyringInput = CreateAwsKmsMultiKeyringInput.builder() .generator(generatorKey) .kmsKeyIds(additionalKey) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMultiKeyring(keyringInput);

암호 해독을 위한 AWS KMS 키링 만들기

또한 반환되는 암호화된 AWS KMS 메시지를 해독할 때 키링을 지정합니다. AWS Encryption SDK 암호 해독 키링에서 지정하는 AWS KMS keys경우 AWS Encryption SDK 는 해당 래핑 키만 사용하여 암호화된 메시지의 암호화된 데이터 키를 해독합니다. (아무 것도 지정하지 않는 AWS KMS 검색 키링을 사용할 수도 있습니다.) AWS KMS keys

복호화할 때 는 암호화된 데이터 키 중 하나를 해독할 수 AWS KMS key 있는 AWS KMS 키링을 AWS Encryption SDK 검색합니다. 특히 에서는 암호화된 메시지의 암호화된 각 데이터 키에 대해 다음 패턴을 AWS Encryption SDK 사용합니다.

  • 는 암호화된 메시지의 AWS KMS key 메타데이터에서 데이터 키를 암호화한 키 ARN을 AWS Encryption SDK 가져옵니다.

  • 는 암호 해독 키링에서 일치하는 키를 AWS KMS key 가진 ARN을 AWS Encryption SDK 검색합니다.

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

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

암호화된 데이터 키의 키 ARN이 암호 해독 키링에 포함되어 있지 않으면 암호화된 데이터 키의 암호를 해독하려고 AWS Encryption SDK 시도하지 않습니다. AWS KMS key 암호 해독 키링에 AWS KMS keys 해당 암호화된 데이터 키의 ARN이 포함되어 있지 않으면 호출하지 않아도 암호 해독 호출이 실패합니다. AWS Encryption SDK AWS KMS

버전 1.7부터. x에서 암호화된 데이터 키를 해독할 때 는 AWS Encryption SDK 항상 의 키 ARN을 암호 해독 작업의 AWS KMS keyKeyId 파라미터에 전달합니다. AWS KMS 사용하려는 AWS KMS key 래핑 키로 암호화된 데이터 키를 복호화할 수 있는 AWS KMS 가장 좋은 방법은 복호화 시기를 식별하는 것입니다.

암호 해독 AWS KMS 키링 중 하나 이상이 암호화된 메시지의 암호화된 데이터 키 중 하나를 AWS KMS key 해독할 수 있으면 키링을 사용한 암호 해독 호출이 성공합니다. 또한 호출자는 이 AWS KMS key에 대한 kms:Decrypt 권한이 있어야 합니다. 이 동작을 통해 서로 다른 AWS 리전 LAN 계정의 여러 AWS KMS keys 데이터를 암호화할 수 있지만 특정 계정, 지역, 사용자, 그룹 또는 역할에 맞게 조정된 보다 제한적인 암호 해독 키링을 제공할 수 있습니다.

암호 해독 AWS KMS key 키링에서 a를 지정하는 경우 해당 키 ARN을 사용해야 합니다. 그렇지 않으면 이 AWS KMS key 인식되지 않습니다. 키 ARN을 찾으려면 AWS Key Management Service 개발자 가이드키 ID 및 ARN 찾기를 참조하세요.

참고

복호화를 위해 암호화 키링을 재사용하는 경우 키링의 AWS KMS keys 가 해당 키 ARN에 의해 식별되는지 확인합니다.

예를 들어, 다음 AWS KMS 키링에는 암호화 키링에 사용된 추가 키만 포함됩니다. 그러나 이 예제에서는 별칭(alias/exampleAlias)으로 추가 키를 참조하는 대신 복호화 호출에 필요한 추가 키의 키 ARN을 사용합니다.

추가 키를 사용하여 데이터를 복호화할 수 있는 권한이 있는 경우 이 키링을 사용하여 생성기 키와 추가 키로 암호화된 메시지를 복호화할 수 있습니다.

C
const char * additional_key = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" struct aws_cryptosdk_keyring *kms_decrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(additional_key);
C# / .NET

이 암호 해독 키링에는 AWS KMS 키가 하나만 포함되므로 이 예제에서는 CreateAwsKmsKeyring() 메서드를 해당 객체의 인스턴스와 함께 사용합니다. CreateAwsKmsKeyringInput 단일 AWS KMS 키 또는 다중 키 키링을 사용하여 AWS KMS 키 1개로 키링을 만들 수 있습니다. 자세한 내용은 AWS Encryption SDK for .NET의 데이터 암호화단원을 참조하세요. 다음 예시에서는 버전 4를 사용합니다. .NET에서 복호화를 AWS Encryption SDK 위한 AWS KMS 키링을 생성하는 데 사용되는 x입니다.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string additionalKey = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"; // Instantiate a KMS keyring for one AWS KMS key. var kmsDecryptKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = additionalKey }; var kmsDecryptKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321' const keyring = new KmsKeyringBrowser({ clientProvider, keyIds: [additionalKey] })
JavaScript Node.js
const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321' const keyring = new KmsKeyringNode({ keyIds: [additionalKey] })
Java

이 암호 해독 키링에는 AWS KMS 키가 하나만 포함되므로 이 예제에서는 CreateAwsKmsKeyring() 메서드를 해당 객체의 인스턴스와 함께 사용합니다. CreateAwsKmsKeyringInput 단일 AWS KMS 키 또는 다중 키 키링을 사용하여 AWS KMS 키 1개로 키링을 만들 수 있습니다.

// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); String additionalKey = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"; // Create a AwsKmsKeyring CreateAwsKmsKeyringInput kmsDecryptKeyringInput = CreateAwsKmsKeyringInput.builder() .generator(additionalKey) .kmsClient(KmsClient.create()) .build(); IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);

다음과 같이 암호 해독을 위한 생성기 키를 지정하는 AWS KMS 키링을 사용할 수도 있습니다. 복호화할 때 는 제너레이터 키와 추가 키 간의 AWS Encryption SDK 차이를 무시합니다. 지정된 항목 중 하나를 사용하여 암호화된 데이터 키를 AWS KMS keys 해독할 수 있습니다. 호출자가 이를 사용하여 데이터를 해독할 수 있는 권한을 가진 경우에만 호출이 AWS KMS 성공합니다. AWS KMS key

C
struct aws_cryptosdk_keyring *kms_decrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(generator_key, {additional_key, other_key});
C# / .NET

다음 예제에서는 AWS Encryption SDK for .NET 4.x 버전을 사용합니다.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate a KMS keyring for one AWS KMS key. var kmsDecryptKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = generatorKey }; var kmsDecryptKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) const keyring = new KmsKeyringBrowser({ clientProvider, generatorKeyId, keyIds: [additionalKey, otherKey] })
JavaScript Node.js
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds: [additionalKey, otherKey] })
Java
// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Create a AwsKmsKeyring CreateAwsKmsKeyringInput kmsDecryptKeyringInput = CreateAwsKmsKeyringInput.builder() .generator(generatorKey) .kmsClient(KmsClient.create()) .build(); IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);

지정된 AWS KMS keys항목을 모두 사용하는 암호화 키링과 달리 암호화된 메시지와 관련이 없고 호출자에게 사용 권한이 없는 암호 해독 키링을 사용하여 암호화된 메시지를 해독할 수 있습니다. AWS KMS keys AWS KMS keys 호출자가 필요한 권한이 없는 경우와 같이 AWS KMS 에 대한 암호화 해제 호출이 실패하면 AWS Encryption SDK 는 다음 암호화된 데이터 키로 건너뜁니다.

검색 키링 사용 AWS KMS

복호화할 때는 사용할 수 있는 래핑 키를 지정하는 것이 가장 좋습니다. AWS Encryption SDK 이 모범 사례를 따르려면 AWS KMS 래핑 키를 지정한 키로 제한하는 AWS KMS 암호 해독 키링을 사용하십시오. 하지만 AWS KMS 검색 키링, 즉 래핑 키를 지정하지 않는 AWS KMS 키링을 만들 수도 있습니다.

는 표준 AWS KMS 검색 키링과 다중 지역 키용 검색 키링을 AWS Encryption SDK 제공합니다. AWS KMS 에서 다중 지역 키를 사용하는 방법에 대한 자세한 내용은 을 참조하십시오. AWS Encryption SDK다중 리전 AWS KMS keys 사용

래핑 키를 지정하지 않기 때문에 검색 키링은 데이터를 암호화할 수 없습니다. 검색 키링을 사용하여 단독 또는 다중 키링으로 데이터를 암호화하는 경우 암호화 작업이 실패합니다. 단 AWS Encryption SDK for C, 암호화 작업에서 표준 검색 키링을 무시하지만 다중 리전 검색 키링을 단독으로 또는 여러 키링으로 지정하면 실패하는 경우는 예외입니다.

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

중요

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

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

  • 인증 — AWS KMS 검색 키링은 암호화된 메시지의 데이터 키를 암호화하는 데 사용된 모든 AWS KMS key 것을 사용할 수 있으며, 호출자가 이를 사용하여 복호화할 수 있는 권한을 갖도록 할 수 있습니다. AWS KMS key 이것이 호출자가 사용하려는 AWS KMS key 가 아닐 수도 있습니다. 예를 들어 암호화된 데이터 키 중 하나가 누구나 사용할 수 있는 보안 수준이 낮은 상태에서 암호화되었을 수 있습니다. AWS KMS key

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

검색 키링을 사용하는 경우 검색 필터를 사용하여 사용할 수 있는 KMS 키를 지정된 KMS 키 및 파티션에 있는 키로만 제한하는 것이 좋습니다. AWS 계정 검색 필터는 AWS Encryption SDK버전 1.7.x 이상에서 지원됩니다. 계정 ID 및 파티션을 찾는 데 도움이 필요하면 AWS 일반 참조AWS 계정 식별자ARN 형식을 참조하세요.

다음 코드는 파티션에 있는 AWS KMS KMS 키와 111122223333 예제 계정에 사용할 AWS Encryption SDK 수 있는 KMS 키를 제한하는 검색 필터를 사용하여 검색 키링을 인스턴스화합니다. aws

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

C

전체 예제는 kms_discovery.cpp를 참조하세요.

std::shared_ptr<KmsKeyring::> discovery_filter( KmsKeyring::DiscoveryFilter::Builder("aws") .AddAccount("111122223333") .Build()); struct aws_cryptosdk_keyring *kms_discovery_keyring = Aws::Cryptosdk::KmsKeyring::Builder() .BuildDiscovery(discovery_filter));
C# / .NET

다음 예제에서는 AWS Encryption SDK for .NET 4.x 버전을 사용합니다.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); List<string> account = new List<string> { "111122223333" }; // In a discovery keyring, you specify an AWS KMS client and a discovery filter, // but not a AWS KMS key var kmsDiscoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), DiscoveryFilter = new DiscoveryFilter() { AccountIds = account, Partition = "aws" } }; var kmsDiscoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(kmsDiscoveryKeyringInput);
JavaScript Browser

JavaScript에서는 검색 속성을 명시적으로 지정해야 합니다.

const clientProvider = getClient(KMS, { credentials }) const discovery = true const keyring = new KmsKeyringBrowser(clientProvider, { discovery, discoveryFilter: { accountIDs: [111122223333], partition: 'aws' } })
JavaScript Node.js

JavaScript에서는 검색 속성을 명시적으로 지정해야 합니다.

const discovery = true const keyring = new KmsKeyringNode({ discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: '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);

AWS KMS 지역 검색 키링 사용

AWS KMS 리전 검색 키링은 KMS 키의 ARN을 지정하지 않는 키링입니다. 대신 특히 KMS 키만 사용하여 암호를 AWS Encryption SDK 해독할 수 있습니다. AWS 리전

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

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

중요

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

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

검색 키링을 사용하는 경우 검색 필터를 사용하여 암호 해독에 사용되는 KMS 키를 지정된 KMS 키와 파티션에 있는 키로만 제한하는 것이 좋습니다. AWS 계정 검색 필터는 AWS Encryption SDK버전 1.7.x 이상에서 지원됩니다.

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

C

작동 예제에서 이 키링과 create_kms_client 메서드를 보려면 kms_discovery.cpp를 참조하세요.

std::shared_ptr<KmsKeyring::DiscoveryFilter> discovery_filter( KmsKeyring::DiscoveryFilter::Builder("aws") .AddAccount("111122223333") .Build()); struct aws_cryptosdk_keyring *kms_regional_keyring = Aws::Cryptosdk::KmsKeyring::Builder() .WithKmsClient(create_kms_client(Aws::Region::US_WEST_2)).BuildDiscovery(discovery_filter));
C# / .NET

.NET용에는 전용 지역 검색 키링이 없습니다. AWS Encryption SDK 단, 여러 기술을 사용하여 복호화할 때 사용되는 KMS 키를 특정 리전으로 제한할 수 있습니다.

검색 키링에서 리전을 제한하는 가장 효율적인 방법은 단일 리전 키만 사용하여 데이터를 암호화한 경우에도 다중 리전 인식 검색 키링을 사용하는 것입니다. 단일 리전 키가 발견되면 다중 리전 인식 키링은 다중 리전 기능을 사용하지 않습니다.

CreateAwsKmsMrkDiscoveryKeyring() 메서드에서 반환된 키링은 AWS KMS를 호출하기 전에 리전별로 KMS 키를 필터링합니다. 개체의 매개 변수로 지정된 지역의 KMS 키로 암호화된 데이터 키를 암호화한 AWS KMS 경우에만 암호 해독 요청을 보냅니다. Region CreateAwsKmsMrkDiscoveryKeyringInput

다음 예에서는 버전 4를 사용합니다. .NET의 AWS Encryption SDK x입니다.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); List<string> account = new List<string> { "111122223333" }; // Create the discovery filter var filter = DiscoveryFilter = new DiscoveryFilter { AccountIds = account, Partition = "aws" }; var regionalDiscoveryKeyringInput = new CreateAwsKmsMrkDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2), Region = RegionEndpoint.USWest2, DiscoveryFilter = filter }; var kmsRegionalDiscoveryKeyring = materialProviders.CreateAwsKmsMrkDiscoveryKeyring(regionalDiscoveryKeyringInput);

AWS KMS 클라이언트 인스턴스 () AmazonKeyManagementServiceClient에서 지역을 AWS 리전 지정하여 KMS 키를 특정 키로만 제한할 수도 있습니다. 단, 이 구성은 multi-Region-aware 검색 키링을 사용하는 것보다 효율성이 떨어지고 비용이 더 많이 들 수 있습니다. AWS KMS호출하기 전에 지역별로 KMS 키를 필터링하는 대신 AWS Encryption SDK for .NET은 암호화된 각 데이터 키를 AWS KMS 호출하고 이를 해독할 때까지 각 암호화된 데이터 키를 AWS KMS 호출하여 사용하는 KMS 키를 지정된 지역으로 제한합니다.

다음 예제에서는 AWS Encryption SDK for .NET 4.x 버전을 사용합니다.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); List<string> account = new List<string> { "111122223333" }; // Create the discovery filter, // but not a AWS KMS key var createRegionalDiscoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2), DiscoveryFilter = new DiscoveryFilter() { AccountIds = account, Partition = "aws" } }; var kmsRegionalDiscoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(createRegionalDiscoveryKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) const discovery = true const clientProvider = limitRegions(['us-west-2'], getKmsClient) const keyring = new KmsKeyringBrowser(clientProvider, { discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: 'aws' } })
JavaScript Node.js

작동 예제에서 이 키링과 limitRegions 및 함수를 보려면 kms_리전_discovery.ts를 참조하세요.

const discovery = true const clientProvider = limitRegions(['us-west-2'], getKmsClient) const keyring = new KmsKeyringNode({ clientProvider, discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: 'aws' } })
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);

AWS Encryption SDK for JavaScript 또한 Node.js 및 브라우저용 excludeRegions 함수를 내보냅니다. 이 함수는 특정 지역을 AWS KMS keys 생략하는 AWS KMS 지역 검색 키링을 생성합니다. 다음 AWS KMS keys 예에서는 미국 동부 (버지니아 북부) (us-east-1) 를 AWS 리전 제외한 모든 지역의 계정 111122223333에서 사용할 수 있는 AWS KMS 지역 검색 키링을 만듭니다.

에는 유사한 AWS Encryption SDK for C 방법이 없지만 사용자 지정을 만들어 구현할 수 있습니다. ClientSupplier

이 예는 Node.js에 대한 코드를 보여줍니다.

const discovery = true const clientProvider = excludeRegions(['us-east-1'], getKmsClient) const keyring = new KmsKeyringNode({ clientProvider, discovery, discoveryFilter: { accountIDs: [111122223333], partition: 'aws' } })