기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon S3 암호화 클라이언트 마이그레이션
이 주제에서는 Amazon Simple Storage Service(S3)의 암호화 클라이언트 버전 1 (V1) 에서 버전 2 (V2) 로 애플리케이션을 마이그레이션하고 마이그레이션 프로세스 전반에 걸쳐 애플리케이션 가용성을 보장하는 방법을 보여줍니다.
V2 클라이언트로 암호화된 객체는 V1 클라이언트로 해독할 수 없습니다. 모든 객체를 한 번에 다시 암호화할 필요 없이 새 클라이언트로 쉽게 마이그레이션할 수 있도록 "V1-transitional" 클라이언트가 제공되었습니다. 이 클라이언트는 V1과 V2로 암호화된 객체를 모두 해독할 수 있지만 V1 호환 형식으로만 객체를 암호화합니다. V2 클라이언트는 V1과 V2로 암호화된 객체를 모두 해독할 수 있지만(V1 객체에 대해 활성화된 경우) V2 호환 형식으로만 객체를 암호화합니다.
마이그레이션 개요
이 마이그레이션은 다음 세 단계로 진행됩니다. 이 단계는 여기에 소개되고 다음에 자세히 설명되어 있습니다. 다음 단계가 시작되기 전에 공유 객체를 사용하는 모든 클라이언트에 대해 각 단계를 완료해야 합니다.
-
새 형식을 읽으려면 기존 클라이언트를 V1 전환 클라이언트로 업데이트하십시오. 먼저 V1 클라이언트 대신 V1 전환 클라이언트에 종속되도록 애플리케이션을 업데이트합니다. V1 전환 클라이언트를 사용하면 새 V2 클라이언트가 작성한 객체와 V1 호환 형식으로 작성된 객체를 기존 코드에서 해독할 수 있습니다.
참고
V1 전환 클라이언트는 마이그레이션 목적으로만 제공됩니다. V1 전환 클라이언트로 이동한 후 V2 클라이언트로 업그레이드를 진행합니다.
-
V1 전환 클라이언트를 V2 클라이언트로 마이그레이션하여 새 형식을 작성하십시오. 다음으로, 애플리케이션의 모든 V1 전환 클라이언트를 V2 클라이언트로 교체하고 보안 프로필을
V2AndLegacy
로 설정합니다. V2 클라이언트에서 이 보안 프로필을 설정하면 해당 클라이언트가 V1 호환 형식으로 암호화된 객체를 해독할 수 있습니다. -
V1 형식을 더 이상 읽지 않도록 V2 클라이언트를 업데이트하십시오. 마지막으로 모든 클라이언트를 V2로 마이그레이션하고 모든 객체를 V2 호환 형식으로 암호화하거나 다시 암호화한 후에는 V2 보안 프로필을
V2AndLegacy
대신V2
로 설정합니다. 이렇게 하면 V1 호환 형식의 객체를 해독할 수 없습니다.
새 형식을 읽으려면 기존 클라이언트를 V1 전환 클라이언트로 업데이트
V2 암호화 클라이언트는 이전 버전의 클라이언트에서 지원하지 않는 암호화 알고리즘을 사용합니다. 마이그레이션의 첫 번째 단계는 새로운 형식을 읽을 수 있도록 V1 암호 해독 클라이언트를 업데이트하는 것입니다.
V1 전환 클라이언트를 사용하면 애플리케이션이 V1 및 V2로 암호화된 객체를 모두 해독할 수 있습니다. 이 클라이언트는 Amazon.Extensions.S3.Encryption
-
Amazon.Extensions.S3.Encryption
패키지에 대한 새로운 종속성을 구축합니다. 프로젝트가 AWSSDK.S3 또는 AWSSDK.KeyManagementService 패키지에 직접 의존하는 경우, 이러한 종속성을 업데이트하거나 제거하여 업데이트된 버전이 이 새 패키지로 풀인되도록 해야 합니다. -
다음과 같이 적절한
using
문을Amazon.S3.Encryption
에서Amazon.Extensions.S3.Encryption
으로 변경합니다.// using Amazon.S3.Encryption; using Amazon.Extensions.S3.Encryption;
-
애플리케이션을 다시 빌드하고 다시 배포합니다.
V1-transitional 클라이언트는 V1 클라이언트와 완전히 API호환되므로 다른 코드 변경은 필요하지 않습니다.
V1 전환 클라이언트를 V2 클라이언트로 마이그레이션하여 새 형식 작성
V2 클라이언트는 Amazon.Extensions.S3.Encryption
새 암호화 형식을 읽도록 기존 클라이언트를 업데이트한 후 애플리케이션을 V2 암호화 및 복호화 클라이언트로 안전하게 업데이트를 진행할 수 있습니다. V2 클라이언트를 사용하려면 각 애플리케이션에서 다음 단계를 수행하세요.
-
EncryptionMaterials
를EncryptionMaterialsV2
로 변경합니다.-
사용 시KMS:
-
KMS 키 ID를 입력합니다.
-
사용 중인 암호화 방법, 즉,
KmsType.KmsContext
를 선언합니다. -
이 데이터 키와 연결할 암호화 컨텍스트를 KMS에 제공합니다. 빈 딕셔너리를 보낼 수 있지만(Amazon 암호화 컨텍스트는 계속 병합됨) 추가 컨텍스트를 제공하는 것이 좋습니다.
-
-
사용자 제공 키 랩 방법(대칭 또는 비대칭 암호화)을 사용하는 경우:
-
암호화 자료가 포함된
AES
또는RSA
인스턴스를 제공합니다. -
사용할 암호화 알고리즘, 즉,
SymmetricAlgorithmType.AesGcm
또는AsymmetricAlgorithmType.RsaOaepSha1
를 선언합니다.
-
-
-
SecurityProfile
속성을SecurityProfile.V2AndLegacy
로 설정하여AmazonS3CryptoConfiguration
을AmazonS3CryptoConfigurationV2
로 변경합니다. -
AmazonS3EncryptionClient
를AmazonS3EncryptionClientV2
로 변경합니다. 이 클라이언트는 이전 단계에서 새로 변환된AmazonS3CryptoConfigurationV2
및EncryptionMaterialsV2
객체를 가져옵니다.
예: KMS ~ KMS+Context
사전 마이그레이션
using System.Security.Cryptography; using Amazon.S3.Encryption; var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab"); var configuration = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
마이그레이션 후
using System.Security.Cryptography; using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy) { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
예: 대칭 알고리즘(AES-CBC에서 AES-GCM 키 랩)
StorageMode
는 ObjectMetadata
또는 InstructionFile
일 수 있습니다.
사전 마이그레이션
using System.Security.Cryptography; using Amazon.S3.Encryption; var symmetricAlgorithm = Aes.Create(); var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm); var configuration = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
마이그레이션 후
using System.Security.Cryptography; using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; var symmetricAlgorithm = Aes.Create(); var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy) { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
참고
AES-로 복호화할 때는 복호화된 데이터 사용을 시작하기 전에 전체 객체를 끝까지 GCM읽습니다. 이는 암호화되었던 객체이므로 객체가 수정되지 않았는지 확인하기 위함입니다.
예: 비대칭 알고리즘(RSA- RSA-OAEP-SHA1 키 랩)
StorageMode
는 ObjectMetadata
또는 InstructionFile
일 수 있습니다.
사전 마이그레이션
using System.Security.Cryptography; using Amazon.S3.Encryption; var asymmetricAlgorithm = RSA.Create(); var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm); var configuration = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
마이그레이션 후
using System.Security.Cryptography; using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; var asymmetricAlgorithm = RSA.Create(); var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy) { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
V1 형식을 더 이상 읽지 않도록 V2 클라이언트 업데이트
결국에는 모든 객체가 V2 클라이언트를 사용하여 암호화되거나 다시 암호화됩니다. 변환이 완료되면 다음 코드 조각에 표시된 것처럼 SecurityProfile
속성을 SecurityProfile.V2
로 설정하여 V2 클라이언트에서 V1 호환성을 비활성화할 수 있습니다.
//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);