

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Ubah data CSE-KMS tabel menjadi SSE-KMS
<a name="convert-csekms-table-ssekms"></a>

Jika alur kerja Anda saat ini digunakan CSE-KMS untuk enkripsi data tabel, transisi ke SSE-KMS dengan langkah-langkah berikut.

## Prasyarat
<a name="convert-csekms-table-ssekms-preq"></a>

Jika Anda masih menulis data menggunakan pengaturan CSE-KMS workgroup atau sisi klien, ikuti langkah-langkah [Migrasi dari ke CSE-KMS SSE-KMS](migrating-csekms-ssekms.md) untuk memperbaruinya. SSE-KMS Ini mencegah data CSE-KMS terenkripsi baru ditambahkan selama proses migrasi dari alur kerja lain yang mungkin menulis ke tabel.

## Migrasi data
<a name="convert-csekms-table-ssekms-migrat"></a>

1. Periksa apakah tabel memiliki `has_encrypted_data` properti yang disetel ke`true`. Properti ini menentukan bahwa tabel mungkin berisi CSE-KMS data terenkripsi. Namun, penting untuk dicatat bahwa properti ini dapat hadir bahkan pada tabel tanpa CSE-KMS data terenkripsi yang sebenarnya.

------
#### [ Console ]

   1. Buka konsol Athena di [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. Pilih **Luncurkan editor kueri**.

   1. Di sisi kiri editor, di bawah **Database**, pilih database yang ingin Anda kueri.

   1. Di editor Query, jalankan query berikut untuk melihat nilai yang disetel ke `has_encrypted_data table` properti.

      ```
      SHOW TBLPROPERTIES {{<table_name>}}('has_encrypted_data');
      ```

------
#### [ CLI ]

   Mulai Athena query yang menunjukkan nilai `has_encrypted_data` properti pada tabel seperti yang ditunjukkan pada contoh berikut.

   ```
   aws athena start-query-execution \
       --query-string "SHOW TBLPROPERTIES {{<table-name>}}('has_encrypted_data');" \
       --work-group "{{<my-workgroup>}}"
   ```

   Ambil hasil query untuk memeriksa nilai properti `has_encrypted_data` tabel untuk tabel seperti yang ditunjukkan pada contoh berikut.

   ```
   aws athena get-query-results --query-execution-id {{<query-execution-id-from-previous-step>}}
   ```

------

1. Untuk setiap objek CSE-KMS terenkripsi dalam tabel.

   1. Unduh objek dari S3 menggunakan klien enkripsi S3 dan dekripsi. Berikut adalah contoh dengan AWS Java SDK V2.

      **Impor**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.services.s3.model.GetObjectRequest;
      import software.amazon.awssdk.services.s3.model.GetObjectResponse;
      import software.amazon.encryption.s3.S3EncryptionClient;
      import software.amazon.encryption.s3.materials.Keyring;
      import software.amazon.encryption.s3.materials.KmsDiscoveryKeyring;
      ```

      Kode

      ```
      final Keyring kmsDiscoveryKeyRing = KmsDiscoveryKeyring.builder()
              .enableLegacyWrappingAlgorithms(true)
              .build();
      final S3EncryptionClient s3EncryptionClient = S3EncryptionClient.builder()
              .enableLegacyUnauthenticatedModes(true)
              .keyring(kmsDiscoveryKeyRing)
              .build();
      
      GetObjectRequest getObjectRequest = GetObjectRequest.builder()
              .bucket("{{amzn-s3-demo-bucket}}")
              .key("{{<my-key>}}")
              .build();
      
      ResponseInputStream<GetObjectResponse> s3Object = s3EncryptionClient.getObject(getObjectRequest);
      ```

   1. Unggah objek ke S3 dengan nama dan SSE-KMS enkripsi yang sama. Berikut adalah contoh dengan AWS Java SDK V2.

      **Impor**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.core.sync.RequestBody;
      import software.amazon.awssdk.services.s3.S3Client;
      import software.amazon.awssdk.services.s3.model.PutObjectRequest;
      import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
      ```

      **Kode**

      ```
      final S3Client s3Client = S3Client.builder()
              .build();
                  
      PutObjectRequest putObjectRequest = PutObjectRequest.builder()
              .bucket("{{amzn-s3-demo-bucket}}")
              .key("{{<my-key>}}")
              .serverSideEncryption(ServerSideEncryption.AWS_KMS)
              .ssekmsKeyId("{{<my-kms-key>}}")
              .build();
      
      s3Client.putObject(putObjectRequest, RequestBody.fromBytes(s3Object.readAllBytes()));
      ```

## Pasca migrasi
<a name="convert-csekms-table-ssekms-post-migrat"></a>

Setelah berhasil mengenkripsi ulang semua CSE-KMS file dalam tabel, lakukan langkah-langkah berikut. 

1. Hapus `has_encrypted_data` properti dari tabel.

------
#### [ Console ]

   1. Buka konsol Athena di [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. Pilih **Luncurkan editor kueri**.

   1. Di sisi kiri editor, di bawah **Database**, pilih database yang ingin Anda kueri.

   1. Di editor Query, jalankan query berikut untuk tabel Anda.

      ```
      ALTER TABLE {{<database-name>}}.{{<table-name>}} UNSET TBLPROPERTIES ('has_encrypted_data')
      ```

------
#### [ CLI ]

   Jalankan perintah berikut untuk menghapus `has_encrypted_data` properti dari tabel Anda.

   ```
   aws athena start-query-execution \
       --query-string "ALTER TABLE {{<database-name>}}.{{<table-name>}} UNSET TBLPROPERTIES ('has_encrypted_data');" \
       --work-group "{{<my-workgroup>}}"
   ```

------

1. Perbarui alur kerja Anda untuk menggunakan klien S3 dasar alih-alih klien enkripsi S3 dan kemudian tentukan SSE-KMS enkripsi untuk penulisan data. 