Amazon S3 암호화 클라이언트 마이그레이션 - AWS SDK for .NET

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

Amazon S3 암호화 클라이언트 마이그레이션

이 주제에서는 Amazon Simple Storage Service(S3)의 암호화 클라이언트 버전 1 (V1) 에서 버전 2 (V2) 로 애플리케이션을 마이그레이션하고 마이그레이션 프로세스 전반에 걸쳐 애플리케이션 가용성을 보장하는 방법을 보여줍니다.

V2 클라이언트로 암호화된 객체는 V1 클라이언트로 해독할 수 없습니다. 모든 객체를 한 번에 다시 암호화할 필요 없이 새 클라이언트로 쉽게 마이그레이션할 수 있도록 "V1-transitional" 클라이언트가 제공되었습니다. 이 클라이언트는 V1과 V2로 암호화된 객체를 모두 해독할 수 있지만 V1 호환 형식으로만 객체를 암호화합니다. V2 클라이언트는 V1과 V2로 암호화된 객체를 모두 해독할 수 있지만(V1 객체에 대해 활성화된 경우) V2 호환 형식으로만 객체를 암호화합니다.

마이그레이션 개요

이 마이그레이션은 다음 세 단계로 진행됩니다. 이 단계는 여기에 소개되고 다음에 자세히 설명되어 있습니다. 다음 단계가 시작되기 전에 공유 객체를 사용하는 모든 클라이언트에 대해 각 단계를 완료해야 합니다.

  1. 새 형식을 읽으려면 기존 클라이언트를 V1 전환 클라이언트로 업데이트하십시오. 먼저 V1 클라이언트 대신 V1 전환 클라이언트에 종속되도록 애플리케이션을 업데이트합니다. V1 전환 클라이언트를 사용하면 새 V2 클라이언트가 작성한 객체와 V1 호환 형식으로 작성된 객체를 기존 코드에서 해독할 수 있습니다.

    참고

    V1 전환 클라이언트는 마이그레이션 목적으로만 제공됩니다. V1 전환 클라이언트로 이동한 후 V2 클라이언트로 업그레이드를 진행합니다.

  2. V1 전환 클라이언트를 V2 클라이언트로 마이그레이션하여 새 형식을 작성하십시오. 다음으로, 애플리케이션의 모든 V1 전환 클라이언트를 V2 클라이언트로 교체하고 보안 프로필을 V2AndLegacy로 설정합니다. V2 클라이언트에서 이 보안 프로필을 설정하면 해당 클라이언트가 V1 호환 형식으로 암호화된 객체를 해독할 수 있습니다.

  3. V1 형식을 더 이상 읽지 않도록 V2 클라이언트를 업데이트하십시오. 마지막으로 모든 클라이언트를 V2로 마이그레이션하고 모든 객체를 V2 호환 형식으로 암호화하거나 다시 암호화한 후에는 V2 보안 프로필을 V2AndLegacy 대신 V2로 설정합니다. 이렇게 하면 V1 호환 형식의 객체를 해독할 수 없습니다.

새 형식을 읽으려면 기존 클라이언트를 V1 전환 클라이언트로 업데이트

V2 암호화 클라이언트는 이전 버전의 클라이언트에서 지원하지 않는 암호화 알고리즘을 사용합니다. 마이그레이션의 첫 번째 단계는 새로운 형식을 읽을 수 있도록 V1 암호 해독 클라이언트를 업데이트하는 것입니다.

V1 전환 클라이언트를 사용하면 애플리케이션이 V1 및 V2로 암호화된 객체를 모두 해독할 수 있습니다. 이 클라이언트는 Amazon.Extensions.S3.Encryption 패키지의 일부입니다. NuGet V1 전환 클라이언트를 사용하려면 각 애플리케이션에서 다음 단계를 수행하세요.

  1. Amazon.Extensions.S3.Encryption 패키지에 대한 새로운 종속성을 구축합니다. 프로젝트가 .S3에 직접 의존하는 경우 또는 AWSSDK AWSSDK KeyManagementService패키지의 경우 해당 종속성을 업데이트하거나 제거해야 업데이트된 버전이 이 새 패키지와 함께 제공될 수 있습니다.

  2. 다음과 같이 적절한 using 문을 Amazon.S3.Encryption에서 Amazon.Extensions.S3.Encryption으로 변경합니다.

    // using Amazon.S3.Encryption; using Amazon.Extensions.S3.Encryption;
  3. 애플리케이션을 다시 빌드하고 다시 배포합니다.

V1 전환 클라이언트는 V1 클라이언트와 완전히 API 호환되므로 다른 코드 변경이 필요하지 않습니다.

V1 전환 클라이언트를 V2 클라이언트로 마이그레이션하여 새 형식 작성

V2 클라이언트는 NuGet Amazon.Extensions.S3.Encryption 패키지의 일부입니다. 이를 통해 애플리케이션은 V1 및 V2로 암호화된 객체(그렇게 구성된 경우)를 모두 해독할 수 있지만 객체는 V2 호환 형식으로만 암호화합니다.

새 암호화 형식을 읽도록 기존 클라이언트를 업데이트한 후 애플리케이션을 V2 암호화 및 복호화 클라이언트로 안전하게 업데이트를 진행할 수 있습니다. V2 클라이언트를 사용하려면 각 애플리케이션에서 다음 단계를 수행하세요.

  1. EncryptionMaterialsEncryptionMaterialsV2로 변경합니다.

    1. KMS를 사용하는 경우:

      1. KMS 키 ID를 제공합니다.

      2. 사용 중인 암호화 방법, 즉, KmsType.KmsContext를 선언합니다.

      3. 이 데이터 키와 연결할 암호화 컨텍스트를 KMS에 제공합니다. 빈 딕셔너리를 보낼 수 있지만(Amazon 암호화 컨텍스트는 계속 병합됨) 추가 컨텍스트를 제공하는 것이 좋습니다.

    2. 사용자 제공 키 랩 방법(대칭 또는 비대칭 암호화)을 사용하는 경우:

      1. 암호화 자료가 포함된 AES 또는 RSA 인스턴스를 제공합니다.

      2. 사용할 암호화 알고리즘, 즉, SymmetricAlgorithmType.AesGcm 또는 AsymmetricAlgorithmType.RsaOaepSha1를 선언합니다.

  2. SecurityProfile 속성을 SecurityProfile.V2AndLegacy로 설정하여 AmazonS3CryptoConfigurationAmazonS3CryptoConfigurationV2로 변경합니다.

  3. AmazonS3EncryptionClientAmazonS3EncryptionClientV2로 변경합니다. 이 클라이언트는 이전 단계에서 새로 변환된 AmazonS3CryptoConfigurationV2EncryptionMaterialsV2 객체를 가져옵니다.

예: KMS에서 KMS+컨텍스트로

사전 마이그레이션

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 키 랩으로)

StorageModeObjectMetadata 또는 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 키 랩으로)

StorageModeObjectMetadata 또는 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);