기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS KMS 마스터 키 공급자 업데이트
의 최신 1.x 버전으로 마이그레이션 AWS Encryption SDK한 다음 버전 2.0.x 이상으로 마이그레이션하려면 레거시 AWS KMS 마스터 키 공급자를 엄격한 모드 또는 검색 모드에서 명시적으로 생성된 마스터 키 공급자로 교체해야 합니다. 레거시 마스터 키 공급자는 버전 1.7x에서 더 이상 사용되지 않으며 버전 2.0.x에서 제거되었습니다. 이 변경은 AWS Encryption SDK for Java, 및 AWS 암호화 CLI를 사용하는 애플리케이션 AWS Encryption SDK for Python및 스크립트에 필요합니다. 이 섹션의 예제는 코드를 업데이트하는 방법을 보여줍니다.
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 계정 및 리전 AWS KMS keys 을 포함하여 데이터 키를 암호화된 AWS KMS key 를 사용하여 데이터를 해독할 수 있습니다.
엄격한 모드의 마스터 키 공급자는 AWS Encryption SDK 버전 1.7.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 이상 버전을 사용하는 애플리케이션의 코드를 나타냅니다. 전체 예제는 BasicEncryptionExample.java 를 참조하세요.
이전 예제에서 사용된 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 keys 지정한 에 관계없이 데이터 키를 암호화된 AWS KMS key 를 사용합니다.
단, 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
-
이 예제에서는 암호화 CLI 버전 1.1.7 이하를 사용하여 AWS 암호화하고 복호화하는 방법을 보여줍니다.
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 .
이 예제에서는 암호화 CLI 버전 1.7.x 이상을 사용하여 AWS 암호화하고 복호화하는 방법을 보여줍니다. 전체 예제는 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 좋습니다. 즉, 암호화 및 복호화 시 래핑 키를 지정하는 것이 좋습니다. 암호화할 때는 항상 래핑 키를 지정해야 합니다. 그러나 복호화에 ARNs AWS KMS keys 대한 키를 지정하는 것이 비현실적인 경우가 있습니다. 예를 들어 별칭을 사용하여 암호화 AWS KMS keys 할 때 별칭을 식별하는 경우 복호화ARNs할 때 키를 나열해야 하는 경우 별칭의 이점을 잃게 됩니다. 또한 검색 모드의 마스터 키 공급자는 원래 마스터 키 공급자처럼 작동하므로 마이그레이션 전략의 일환으로 일시적으로 사용하고 나중에 엄격 모드에서 마스터 키 공급자로 업그레이드할 수 있습니다.
이와 같은 경우에는 검색 모드에서 마스터 키 공급자를 사용할 수 있습니다. 이러한 마스터 키 공급자에서는 래핑 키를 지정할 수 없으므로 암호화에 사용할 수 없습니다. 복호화할 때는 데이터 키를 암호화한 모든 래핑 키를 사용할 수 있습니다. 하지만 동일한 방식으로 동작하는 레거시 마스터 키 공급자와는 달리 검색 모드에서 명시적으로 생성해야 합니다. 검색 모드에서 마스터 키 공급자를 사용하는 경우 사용할 수 있는 래핑 키를 특정 AWS 계정의 것으로만 제한할 수 있습니다. 이 검색 필터는 선택 사항이지만 권장되는 모범 사례입니다. AWS 파티션과 계정에 대한 자세한 내용은 AWS 일반 참조의 Amazon 리소스 이름을 참조하세요.
다음 예제에서는 암호화를 위한 엄격한 모드의 AWS KMS 마스터 키 공급자와 복호화를 위한 검색 모드의 AWS KMS 마스터 키 공급자를 생성합니다. 검색 모드의 마스터 키 공급자는 검색 필터를 사용하여 복호화에 사용되는 래핑 키를 aws
파티션 및 특정 예제 AWS 계정으로만 제한합니다. 매우 간단한 이 예제에서는 계정 필터가 필요하지 않지만 한 애플리케이션에서 데이터를 암호화하고 다른 애플리케이션에서 데이터를 복호화할 때 매우 유용한 모범 사례입니다.
- Java
-
이 예제는 AWS Encryption SDK for Java의 버전 1.7.x 이상 버전을 사용하는 애플리케이션의 코드를 나타냅니다. 전체 예제는 DiscoveryDecryptionExample.java 를 참조하세요.
암호화를 위한 엄격 모드에서 마스터 키 공급자를 인스턴스화하기 위해 이 예제에서는 Builder.buildStrict()
메서드를 사용합니다. 복호화를 위한 검색 모드에서 마스터 키 공급자를 인스턴스화하기 위해서는 Builder.buildDiscovery()
메서드를 사용합니다. 이 Builder.buildDiscovery()
메서드는 지정된 AWS 파티션 및 계정 AWS KMS keys 에서 를 AWS Encryption SDK 로 제한DiscoveryFilter
하는 를 사용합니다.
// 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 파티션 및 계정 AWS KMS keys 에서 를 AWS Encryption SDK 로 제한DiscoveryFilter
하는 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
-
이 예제에서는 암호화 CLI 버전 1.7.x 이상을 사용하여 AWS 암호화하고 복호화하는 방법을 보여줍니다. 버전 1.7.x부터 암호화 및 복호화 시 --wrapping-keys
파라미터가 필요합니다. --wrapping-keys
파라미터는 엄격 모드 및 검색 모드를 지원합니다. 전체 예제는 AWS Encryption CLI의 예제 섹션을 참조하세요.
암호화할 때 이 예제에서는 래핑 키를 지정합니다(필수 사항). 복호화할 때는 값이 true
인 --wrapping-keys
파라미터의 discovery
속성을 사용하여 검색 모드를 명시적으로 선택합니다.
이 검색 모드에서 사용할 AWS Encryption SDK 수 있는 래핑 키를 특정 의 래핑 키로 제한하기 위해 AWS 계정이 예제에서는 --wrapping-keys
파라미터의 discovery-partition
및 discovery-account
속성을 사용합니다. 이러한 선택적 속성은 discovery
속성이 true
로 설정된 경우에만 유효합니다. discovery-partition
및 discovery-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 .