Mengaktifkan enkripsi kunci rahasia

Dokumen ini menjelaskan cara mengaktifkan enkripsi rahasia konsumen aplikasi developer (kredensial klien) yang tersimpan dalam database Cassandra.

Ringkasan

Secara tradisional, Apigee Edge untuk Private Cloud telah menyediakan enkripsi opsional untuk data peta nilai kunci (KVM) dan token akses OAuth.

Tabel berikut menjelaskan opsi enkripsi untuk data dalam penyimpanan di Apigee for Private Cloud:

Entity Enkripsi diaktifkan secara default Enkripsi tersedia secara opsional Dokumentasi terkait
KVM Tidak Ya Lihat Tentang KVM terenkripsi.
Token akses OAuth Tidak Ya Lihat Meng-hash token untuk keamanan ekstra.
Consumer secret aplikasi developer Tidak Ya Untuk mengaktifkannya, lakukan langkah-langkah konfigurasi dalam dokumen ini.

Untuk mengaktifkan enkripsi kredensial klien, Anda perlu melakukan tugas berikut di semua node server manajemen dan pemroses pesan:

  • Buat keystore untuk menyimpan Kunci enkripsi kunci (KEK). Apigee menggunakan kunci terenkripsi ini untuk mengenkripsi kunci rahasia yang diperlukan untuk mengenkripsi data Anda.
  • Mengedit properti konfigurasi di semua server pengelolaan dan node pemroses pesan.
  • Buat aplikasi developer untuk memicu pembuatan kunci.
  • Mulai ulang node.

Tugas ini dijelaskan dalam dokumen ini.

Yang perlu Anda ketahui tentang fitur enkripsi kunci

Langkah-langkah dalam dokumen ini menjelaskan cara mengaktifkan fitur KEK, yang memungkinkan Apigee mengenkripsi kunci rahasia yang digunakan untuk mengenkripsi rahasia konsumen aplikasi developer ketika disimpan dalam keadaan nonaktif di database Cassandra.

Secara default, nilai apa pun yang ada di database tidak akan berubah (dalam teks biasa) dan akan terus berfungsi seperti sebelumnya.

Jika Anda melakukan operasi tulis pada entity yang tidak dienkripsi, entity tersebut akan dienkripsi saat operasi disimpan. Misalnya, jika Anda mencabut token yang tidak dienkripsi, lalu menyetujuinya nanti, token yang baru disetujui akan dienkripsi.

Menjaga keamanan kunci

Pastikan untuk menyimpan salinan keystore, tempat KEK disimpan di lokasi yang aman. Sebaiknya gunakan mekanisme pengamanan Anda sendiri untuk menyimpan salinan keystore. Seperti yang dijelaskan dalam petunjuk dalam dokumen ini, keystore harus ditempatkan di setiap node server pengelola dan pemroses pesan tempat file konfigurasi lokal dapat mereferensikannya. Namun, Anda juga harus menyimpan salinan keystore di tempat lain untuk disimpan dengan aman dan sebagai cadangan.

Mengaktifkan enkripsi kunci

Ikuti langkah-langkah berikut untuk enkripsi kunci rahasia konsumen:

Prasyarat

Anda harus memenuhi persyaratan berikut sebelum melakukan langkah-langkah dalam dokumen ini:

  • Anda harus menginstal atau mengupgrade ke Apigee Edge untuk Private Cloud 4.50.00.10 atau yang lebih baru.
  • Anda harus menjadi administrator Apigee Edge untuk Private Cloud.

Langkah 1: Buat keystore

Ikuti langkah-langkah berikut untuk membuat keystore guna menyimpan kunci enkripsi kunci (KEK):

  1. Jalankan perintah berikut untuk membuat keystore guna menyimpan kunci yang akan digunakan untuk mengenkripsi KEK. Masukkan perintah persis seperti yang ditampilkan. (Anda dapat memberikan nama keystore yang diinginkan):
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

    Saat diminta, masukkan sandi. Anda akan menggunakan sandi ini di bagian selanjutnya saat mengonfigurasi server pengelolaan dan pemroses pesan.

    Perintah ini menghasilkan file keystore kekstore.p12 yang berisi kunci dengan alias KEYSTORE_NAME.

  2. (Opsional) Pastikan bahwa file dibuat dengan benar menggunakan perintah berikut. Jika file benar, perintah akan menampilkan kunci dengan alias KEYSTORE_NAME:
    keytool -list -keystore kekstore.p12

Menggunakan keystore BCFKS untuk sistem operasi yang mengaktifkan FIPS

Jika menggunakan Edge for Private Cloud di sistem operasi yang mengaktifkan FIPS, Anda harus membuat keystore jenis BCFKS. Keystore tersebut dapat dibuat di komputer non-FIPS, lalu ditransfer ke komputer yang mematuhi FIPS. Untuk membuat keystore, gunakan perintah berikut:

keytool -genseckey -alias <KEYSTORE_NAME> -keyalg AES -keysize 256 \
-storetype BCFKS -keystore keystore.bcfks \
-providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
-keypass keystorepass -storepass keystorepass

Anda mungkin perlu melakukan setelan Java tambahan di komputer tempat Anda membuat keystore ini. Anda mungkin perlu mengedit file keamanan Java komputer (biasanya terletak di /usr/lib/jvm/jre/lib/security/java.security). Dalam file ini, temukan dan edit properti berikut:

# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS

Langkah 2: Konfigurasikan server pengelolaan

Selanjutnya, konfigurasikan server pengelolaan. Jika server pengelolaan diinstal di beberapa node, Anda harus mengulangi langkah-langkah ini di setiap node.

  1. Salin file keystore yang Anda buat di Langkah 1 ke direktori di node server pengelolaan, seperti /opt/apigee/customer/application. Contoh:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Pastikan file dapat dibaca oleh pengguna apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. Tambahkan properti berikut ke /opt/apigee/customer/application/management-server.properties. Jika file tidak ada, buat file tersebut. Lihat juga Referensi file properti.
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    Perhatikan bahwa KEK_PASSWORD mungkin sama dengan KEYSTORE_PASSWORD, bergantung pada alat yang digunakan untuk membuat keystore.

  4. Mulai ulang server pengelolaan menggunakan perintah berikut:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready

    Perintah wait_for_ready menampilkan pesan berikut saat server pengelolaan sudah siap:

    Checking if management-server is up: management-server is up.
  5. Jika Anda telah menginstal server pengelolaan di beberapa node, ulangi langkah 1-4 di atas untuk setiap node server pengelolaan.

Langkah 3: Buat aplikasi developer

Setelah server pengelolaan diupdate, Anda harus membuat aplikasi developer untuk memicu pembuatan kunci yang digunakan untuk mengenkripsi data kredensial klien:

  1. Buat aplikasi Developer untuk memicu pembuatan kunci enkripsi data (KEK). Untuk mengetahui langkah-langkahnya, lihat Mendaftarkan aplikasi.
  2. Hapus aplikasi developer jika Anda mau. Anda tidak perlu menyimpannya setelah kunci enkripsi dibuat.

Langkah 4: Konfigurasikan pemroses pesan

Hingga enkripsi diaktifkan dalam pemroses pesan, permintaan runtime tidak akan dapat memproses kredensial terenkripsi apa pun.

  1. Salin file keystore yang Anda buat di Langkah 1 ke direktori pada node pemroses pesan, seperti /opt/apigee/customer/application. Contoh:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Pastikan file dapat dibaca oleh pengguna apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. Tambahkan properti berikut ke /opt/apigee/customer/application/message-processor.properties. Jika file tidak ada, buat file tersebut. Lihat juga Referensi file properti.
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    Perhatikan bahwa KEK_PASSWORD mungkin sama dengan KEYSTORE_PASSWORD bergantung pada alat yang digunakan untuk membuat keystore.

  4. Mulai ulang pemroses pesan menggunakan perintah berikut:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready

    Perintah wait_for_ready akan menampilkan pesan berikut saat pemroses pesan siap memproses pesan:

    Checking if message-processor is up: message-processor is up.
  5. Jika Anda telah menginstal pemroses pesan di beberapa node, ulangi langkah 1-4 di setiap node pemroses pesan.

Ringkasan

Setiap aplikasi developer yang Anda buat mulai sekarang akan memiliki rahasia kredensial yang dienkripsi saat dalam penyimpanan di database Cassandra.

Menggunakan variabel lingkungan untuk properti konfigurasi

Atau, Anda dapat menetapkan properti konfigurasi server pengelolaan dan pemroses pesan berikut menggunakan variabel lingkungan. Jika ditetapkan, variabel lingkungan akan mengganti properti yang ditetapkan dalam file konfigurasi server manajemen atau pemroses pesan.

conf_keymanagement_kmscred.encryption.keystore.pass=
conf_keymanagement_kmscred.encryption.kek.pass=

Variabel lingkungan yang sesuai adalah:

export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD

Jika menetapkan variabel lingkungan ini, Anda dapat menghilangkan properti konfigurasi ini dari file konfigurasi di node server pengelolaan dan pemroses pesan, karena properti ini akan diabaikan:

conf_keymanagement_kmscred.encryption.keystore.pass
conf_keymanagement_kmscred.encryption.kek.pass

Referensi file properti

Bagian ini menjelaskan properti konfigurasi yang harus Anda tetapkan pada semua node server pengelolaan dan pemroses pesan, seperti yang dijelaskan sebelumnya dalam dokumen ini.

Properti Default Deskripsi
conf_keymanagement_kmscred.encryption.enabled false Harus true untuk mengaktifkan enkripsi kunci.
conf_keymanagement_kmscred.encryption.allowFallback false Tetapkan allowFallback ke true untuk memastikan kredensial teks biasa yang ada terus berfungsi.
conf_keymanagement_kmscred.encryption.keystore.path T/A Berikan jalur ke keystore KEK di node server manajemen atau pemroses pesan. Lihat Langkah 2: Konfigurasikan server manajemen dan Langkah 3: Konfigurasikan pemroses pesan.
conf_keymanagement_kmscred.encryption.kek.alias T/A Alias yang digunakan untuk menyimpan KEK di keystore.
conf_keymanagement_kmscred.encryption.keystore.pass T/A Opsional jika Anda menggunakan variabel lingkungan untuk menetapkan properti ini. Lihat juga Menggunakan variabel lingkungan untuk properti konfigurasi.
conf_keymanagement_kmscred.encryption.kek.pass T/A Opsional jika Anda menggunakan variabel lingkungan untuk menetapkan properti ini. Lihat juga Menggunakan variabel lingkungan untuk properti konfigurasi.