AWS KMS 마스터 키 제공자 업데이트 - AWS Encryption SDK

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

AWS KMS 마스터 키 제공자 업데이트

최신 버전으로 마이그레이션하려면 1. 의 x 버전이고 AWS Encryption SDK, 이어서 버전 2.0으로. x 이상에서는 레거시 AWS KMS 마스터 키 제공자를 엄격 모드 또는 검색 모드에서 명시적으로 생성된 마스터 키 제공자로 교체해야 합니다. 레거시 마스터 키 공급자는 버전 1.7x에서 더 이상 사용되지 않으며 버전 2.0.x에서 제거되었습니다. 이 변경은 AWS Encryption SDK for JavaAWS Encryption SDK for Python, 및 암호화를 사용하는 애플리케이션과 스크립트에 필요합니다.AWS CLI 이 섹션의 예제는 코드를 업데이트하는 방법을 보여줍니다.

참고

Python의 경우 지원 중단 경고를 켭니다. 이렇게 하면 코드에서 업데이트해야 하는 부분을 식별하는 데 도움이 됩니다.

마스터 키 제공자가 아닌 AWS KMS 마스터 키를 사용하는 경우 이 단계를 건너뛰어도 됩니다. AWS KMS 마스터 키는 더 이상 사용되지 않거나 제거되지 않습니다. 해당 마스터 키는 지정한 래핑 키로만 암호화하고 복호화합니다.

이 섹션의 예제는 변경해야 하는 코드 요소에 초점을 맞춥니다. 업데이트된 코드의 전체 예제를 보려면 프로그래밍 언어 GitHub 저장소의 예제 섹션을 참조하십시오. 또한 이러한 예제는 일반적으로 키를 ARNs 사용하여 나타냅니다 AWS KMS keys. 암호화를 위한 마스터 키 제공자를 생성할 때는 임의의 유효한 AWS KMS 키 식별자를 사용하여 를 표현할 수 있습니다. AWS KMS key 복호화를 위한 마스터 키 제공자를 생성할 때는 키를 사용해야 합니다. ARN

마이그레이션에 대해 자세히 알아보기

모든 AWS Encryption SDK 사용자를 대상으로 약정 정책을 설정하는 방법을 알아보세요. 커밋 정책 설정

AWS Encryption SDK for C 및 AWS Encryption SDK for JavaScript 사용자의 경우, 에서 AWS KMS 키링 업데이트 키링의 선택적 업데이트에 대해 알아보세요.

엄격 모드로 마이그레이션

최신으로 업데이트한 후 1. 의 x AWS Encryption SDK버전에서는 엄격 모드에서 기존 마스터 키 제공자를 마스터 키 제공자로 교체하십시오. 엄격 모드에서는 암호화 및 복호화 시 사용할 래핑 키를 지정해야 합니다. 는 사용자가 지정하는 래핑 키만 AWS Encryption SDK 사용합니다. 더 이상 사용되지 않는 마스터 키 제공자는 다른 AWS KMS key 지역과 지역을 포함하여 AWS KMS keys 암호화된 데이터 키를 사용하여 데이터를 해독할 수 있습니다. AWS 계정

엄격 모드의 마스터 키 제공자는 버전 1.7에 도입되었습니다. AWS Encryption SDK x. 이는 버전 1.7x에서 더 이상 사용되지 않으며 버전 2.0.x에서 제거되는 레거시 마스터 키 공급자를 교체합니다. 엄격 모드에서 마스터 키 제공자를 사용하는 것이 AWS Encryption SDK 가장 좋습니다.

다음 코드는 암호화 및 복호화에 사용할 수 있는 엄격 모드의 마스터 키 공급자를 생성합니다.

Java

이 예제는 AWS Encryption SDK for Java의 버전 1.6.2 이하 버전을 사용하는 애플리케이션의 코드를 나타냅니다.

이 코드는 KmsMasterKeyProvider.builder() 메서드를 사용하여 마스터 키 제공자를 인스턴스화합니다. AWS KMS 마스터 키 제공자는 래핑 AWS KMS key 키로 사용하는 마스터 키 제공자를 인스턴스화합니다.

// Create a master key provider // Replace the example key ARN with a valid one String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder() .withKeysForEncryption(awsKmsKey) .build();

이 예제는 AWS Encryption SDK for Java 의 버전 1.7.x 이상 버전을 사용하는 애플리케이션의 코드를 나타냅니다. 전체 예제는.java를 참조하십시오BasicEncryptionExample.

이전 예제에서 사용된 Builder.build()Builder.withKeysForEncryption() 메서드는 버전 1.7.x에서 더 이상 사용되지 않으며 버전 2.0.x에서 제거되었습니다.

엄격 모드 마스터 키 공급자로 업데이트하기 위해 이 코드는 더 이상 사용되지 않는 메서드에 대한 호출을 새 Builder.buildStrict() 메서드에 대한 호출로 대체합니다. 이 예제에서는 하나를 AWS KMS key 래핑 키로 지정하지만 Builder.buildStrict() 메서드는 여러 개의 AWS KMS keys목록을 사용할 수 있습니다.

// Create a master key provider in strict mode // Replace the example key ARN with a valid one from your AWS 계정. String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder() .buildStrict(awsKmsKey);
Python

이 예제는 AWS Encryption SDK for Python의 버전 1.4.1을 사용하는 애플리케이션의 코드를 나타냅니다. 이 코드는 버전 1.7.x에서 더 이상 사용되지 않으며 버전 2.0.x에서 제거된 KMSMasterKeyProvider를 사용합니다. 복호화할 때는 지정한 내용에 관계없이 AWS KMS key 암호화된 데이터 키를 사용합니다. AWS KMS keys

단, KMSMasterKey는 더 이상 사용되지 않거나 제거되지 않았습니다. 암호화 및 복호화 시에는 사용자가 지정한 값만 사용합니다. AWS KMS key

# Create a master key provider # Replace the example key ARN with a valid one key_1 = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" key_2 = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" aws_kms_master_key_provider = KMSMasterKeyProvider( key_ids=[key_1, key_2] )

이 예제는 AWS Encryption SDK for Python의 버전 1.7.x를 사용하는 애플리케이션의 코드를 나타냅니다. 전체 예제는 basic_encryption.py를 참조하세요.

엄격 모드 마스터 키 공급자로 업데이트하기 위해 이 코드는 KMSMasterKeyProvider()에 대한 호출을 StrictAwsKmsMasterKeyProvider()에 대한 호출로 대체합니다.

# Create a master key provider in strict mode # Replace the example key ARNs with valid values from your AWS 계정 key_1 = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" key_2 = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" aws_kms_master_key_provider = StrictAwsKmsMasterKeyProvider( key_ids=[key_1, key_2] )
AWS Encryption CLI

이 예제에서는 암호화 버전 1.1.7 이하를 사용하여 암호화하고 해독하는 방법을 보여줍니다. AWS CLI

1.1.7 이하 버전에서는 암호화할 때 하나 이상의 마스터 키(또는 래핑 키)를 지정합니다(예: AWS KMS key). 사용자 지정 마스터 키 공급자를 사용하지 않는 한 복호화 시 래핑 키를 지정할 수 없습니다. 암호화는 데이터 키를 AWS 암호화한 모든 래핑 키를 사용할 CLI 수 있습니다.

\\ Replace the example key ARN with a valid one $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \\ Encrypt your plaintext data $ aws-encryption-cli --encrypt \ --input hello.txt \ --master-keys key=$keyArn \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .

이 예제에서는 AWS 암호화 CLI 버전 1.7을 사용하여 암호화하고 해독하는 방법을 보여줍니다. x 이상. 전체 예제는 AWS Encryption CLI의 예제 섹션을 참조하세요.

--master-keys 파라미터는 버전 1.7.x에서 더 이상 사용되지 않으며 버전 2.0.x에서 제거되었습니다. 암호화 및 복호화 명령에 필요한 --wrapping-keys 파라미터로 대체되었습니다. 이 파라미터는 엄격 모드 및 검색 모드를 지원합니다. 엄격 모드는 의도한 래핑 키를 확실히 사용할 수 있는 AWS Encryption SDK 모범 사례입니다.

엄격 모드로 업그레이드하려면 --wrapping-keys 파라미터의 key 속성을 사용하여 암호화 및 복호화 시 래핑 키를 지정하세요.

\\ Replace the example key ARN with a valid value $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \\ Encrypt your plaintext data $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyArn \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys key=$keyArn \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .

검색 모드로 마이그레이션

버전 1.7부터. x에서는 AWS KMS 마스터 키 제공자에 대해 엄격 모드를 사용하는 것이 AWS Encryption SDK 가장 좋습니다. 즉, 암호화 및 복호화 시 래핑 키를 지정하는 것입니다. 암호화할 때는 항상 래핑 키를 지정해야 합니다. 하지만 복호화를 AWS KMS keys 위한 키를 지정하는 것이 비현실적인 경우도 ARNs 있습니다. 예를 들어 암호화 AWS KMS keys 시 식별을 위해 별칭을 사용하는 경우 암호 해독 시 키를 나열해야 한다면 별칭의 이점을 잃게 됩니다. ARNs 또한 검색 모드의 마스터 키 공급자는 원래 마스터 키 공급자처럼 작동하므로 마이그레이션 전략의 일환으로 일시적으로 사용하고 나중에 엄격 모드에서 마스터 키 공급자로 업그레이드할 수 있습니다.

이와 같은 경우에는 검색 모드에서 마스터 키 공급자를 사용할 수 있습니다. 이러한 마스터 키 공급자에서는 래핑 키를 지정할 수 없으므로 암호화에 사용할 수 없습니다. 복호화할 때는 데이터 키를 암호화한 모든 래핑 키를 사용할 수 있습니다. 하지만 동일한 방식으로 동작하는 레거시 마스터 키 공급자와는 달리 검색 모드에서 명시적으로 생성해야 합니다. 검색 모드에서 마스터 키 공급자를 사용하는 경우 사용할 수 있는 래핑 키를 특정 AWS 계정의 것으로만 제한할 수 있습니다. 이 검색 필터는 선택 사항이지만 권장되는 모범 사례입니다. AWS 파티션과 계정에 대한 자세한 내용은 AWS 일반 참조Amazon 리소스 이름을 참조하세요.

다음 예에서는 암호화를 위한 엄격 모드에서 AWS KMS 마스터 키 제공자를 생성하고 복호화를 위한 검색 모드에서 AWS KMS 마스터 키 제공자를 생성합니다. 검색 모드의 마스터 키 공급자는 검색 필터를 사용하여 복호화에 사용되는 래핑 키를 aws 파티션 및 특정 예제 AWS 계정으로만 제한합니다. 매우 간단한 이 예제에서는 계정 필터가 필요하지 않지만 한 애플리케이션에서 데이터를 암호화하고 다른 애플리케이션에서 데이터를 복호화할 때 매우 유용한 모범 사례입니다.

Java

이 예제는 AWS Encryption SDK for Java의 버전 1.7.x 이상 버전을 사용하는 애플리케이션의 코드를 나타냅니다. 전체 예제는.java를 참조하십시오. DiscoveryDecryptionExample

암호화를 위한 엄격 모드에서 마스터 키 공급자를 인스턴스화하기 위해 이 예제에서는 Builder.buildStrict() 메서드를 사용합니다. 복호화를 위한 검색 모드에서 마스터 키 공급자를 인스턴스화하기 위해서는 Builder.buildDiscovery() 메서드를 사용합니다. 이 Builder.buildDiscovery() 메서드는 지정된 AWS 파티션과 계정의 AWS KMS keys 개수를 DiscoveryFilter 제한하는 AWS Encryption SDK a를 사용합니다.

// Create a master key provider in strict mode for encrypting // Replace the example alias ARN with a valid one from your AWS 계정. String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias"; KmsMasterKeyProvider encryptingKeyProvider = KmsMasterKeyProvider.builder() .buildStrict(awsKmsKey); // Create a master key provider in discovery mode for decrypting // Replace the example account IDs with valid values. DiscoveryFilter accounts = new DiscoveryFilter("aws", Arrays.asList("111122223333", "444455556666")); KmsMasterKeyProvider decryptingKeyProvider = KmsMasterKeyProvider.builder() .buildDiscovery(accounts);
Python

이 예제는 AWS Encryption SDK for Python 의 버전 1.7.x 이상 버전을 사용하는 애플리케이션의 코드를 나타냅니다. 전체 예제는 discovery_kms_provider.py를 참조하세요.

암호화를 위한 엄격 모드에서 마스터 키 공급자를 생성하기 위해 이 예제에서는 StrictAwsKmsMasterKeyProvider를 사용합니다. 복호화를 위해 검색 모드에서 마스터 키 제공자를 AWS Encryption SDK 생성하려면 AWS KMS keys 지정된 AWS 파티션과 계정 내에서만 사용할 수 DiscoveryFilter 있도록 제한하는 a를 사용합니다DiscoveryAwsKmsMasterKeyProvider.

# Create a master key provider in strict mode # Replace the example key ARN and alias ARNs with valid values from your AWS 계정. key_1 = "arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias" key_2 = "arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" aws_kms_master_key_provider = StrictAwsKmsMasterKeyProvider( key_ids=[key_1, key_2] ) # Create a master key provider in discovery mode for decrypting # Replace the example account IDs with valid values accounts = DiscoveryFilter( partition="aws", account_ids=["111122223333", "444455556666"] ) aws_kms_master_key_provider = DiscoveryAwsKmsMasterKeyProvider( discovery_filter=accounts )
AWS Encryption CLI

이 예제에서는 암호화 버전 1.7을 사용하여 암호화하고 해독하는 방법을 보여줍니다. AWS CLI x 이상. 버전 1.7.x부터 암호화 및 복호화 시 --wrapping-keys 파라미터가 필요합니다. --wrapping-keys 파라미터는 엄격 모드 및 검색 모드를 지원합니다. 전체 예제는 AWS Encryption CLI의 예제 섹션을 참조하세요.

암호화할 때 이 예제에서는 래핑 키를 지정합니다(필수 사항). 복호화할 때는 값이 true--wrapping-keys 파라미터의 discovery 속성을 사용하여 검색 모드를 명시적으로 선택합니다.

이 예제에서는 검색 모드에서 사용할 AWS Encryption SDK 수 있는 래핑 키를 특정 AWS 계정래핑 키로 제한하기 위해 --wrapping-keys 매개 변수의 discovery-partitiondiscovery-account 속성을 사용합니다. 이러한 선택적 속성은 discovery 속성이 true로 설정된 경우에만 유효합니다. discovery-partitiondiscovery-account 속성을 함께 사용해야 하며 둘 다 단독으로는 유효하지 않습니다.

\\ Replace the example key ARN with a valid value $ keyAlias=arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias \\ Encrypt your plaintext data $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyAlias \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext \\ Replace the example account IDs with valid values $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys discovery=true \ discovery-partition=aws \ discovery-account=111122223333 \ discovery-account=444455556666 \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .