Mengonfigurasi mTLS native Cassandra

Pengantar

Berbagai komponen Edge for Private Cloud seperti pemroses pesan, server pengelolaan, dan router terhubung melalui saluran teks biasa ke node Cassandra secara default. Di saluran tersebut, data ke dan dari Cassandra dikomunikasikan secara jelas. Apigee mTLS adalah fitur berbasis mesh layanan consul yang menambahkan keamanan pada komunikasi antar-komponen di cluster Edge untuk Private Cloud. Penawaran oleh Apigee ini juga menambahkan keamanan TLS melalui saluran komunikasi antara komponen klien dan Cassandra.

Artikel ini membahas penawaran alternatif baru dari Apigee yang mengamankan komunikasi antara komponen klien dan Cassandra di Edge untuk Private Cloud melalui TLS bersama (alias TLS 2 arah) menggunakan fitur yang tersedia secara native di Cassandra tanpa menggunakan mesh layanan eksternal.

Fitur mTLS native

Mengaktifkan mTLS antara Cassandra dan komponen klien yang dijelaskan dalam artikel ini mengandalkan fitur TLS yang disediakan secara native oleh Apache Cassandra. Jika diaktifkan, koneksi klien ke Cassandra (di port transport native CQL 9042) akan melakukan TLS handshake 2 arah dengan klien sebelum mengizinkan koneksi dibuat. Untuk tujuan koneksi TLS 2 arah ini, Cassandra bertindak sebagai server dan berbagai klien yang terhubung ke Cassandra (seperti edge-message-processor, alat cqlsh, dll.) bertindak sebagai klien.

Untuk TLS 2 arah (atau mutual TLS atau mTLS), Cassandra dan klien harus disiapkan dengan keystore masing-masing. Keystore setiap node Cassandra harus berisi kunci dan sertifikatnya sendiri. Keystore setiap aplikasi klien harus berisi kunci dan sertifikat klien tertentu tersebut. Truststore yang berisi sertifikat dan rantai terkait dari counterpart harus ditambahkan di Cassandra dan klien. Truststore setiap node Cassandra harus berisi sertifikat klien dan truststore setiap klien harus berisi sertifikat semua node Cassandra. Anda dapat membaca artikel TLS/SSL Dua Arah Apigee untuk mengetahui informasi selengkapnya tentang cara kerja handshake TLS dua arah secara umum.

Rantai sertifikat

Secara umum, di TLS Dua Arah, sertifikat server, sertifikat klien, rantai sertifikat, keystore, dan truststore dapat dibuat dengan berbagai cara. Hal yang sama juga berlaku untuk mTLS native klien dan Cassandra. Dengan mempertimbangkan cara organisasi biasanya mengoperasikan cluster Edge untuk Private Cloud dan jumlah pasangan koneksi klien ke Cassandra yang dapat dibuat, Apigee merekomendasikan untuk mengambil pendekatan umum berikut dalam mengonfigurasi kunci dan sertifikat untuk fitur ini. Ada metode lain yang layak, tetapi metode di bawah ini kemungkinan memberikan keseimbangan yang baik antara keamanan dan overhead pemeliharaan.

  1. Dapatkan sertifikat root dan pasangan kunci/sertifikat perantara yang ditandatangani oleh root. Anda mungkin sudah memiliki kunci dan sertifikat tersebut. Jika tidak, Anda dapat membuat sertifikat dan kunci root dan perantara yang ditandatangani sendiri menggunakan langkah-langkah di Lampiran 1.

  2. Gunakan kunci/sertifikat perantara umum dari atas untuk menandatangani semua kunci dan sertifikat khusus aplikasi (leaf).

Dengan memiliki kunci/sertifikat perantara yang sama di seluruh 1 cluster, truststore umum (yang berisi rantai sertifikat root dan perantara yang sama) dikonfigurasi di setiap node Cassandra dan klien. Setiap node Cassandra dan aplikasi klien mendapatkan sertifikat dan kunci leaf uniknya sendiri yang ditandatangani oleh sertifikat/kunci perantara umum.

  1. Mengganti sertifikat leaf node atau aplikasi klien Cassandra sangat mudah.
  2. Merotasi sertifikat perantara atau root masih merupakan operasi yang cukup rumit, tetapi frekuensi rotasi tersebut akan jauh lebih rendah daripada sertifikat leaf.

Gunakan praktik keamanan organisasi Anda untuk memutuskan apakah akan menggunakan sertifikat root dan perantara umum di berbagai cluster cloud pribadi. Anda dapat melihat Lampiran 2 untuk penyiapan sertifikat alternatif.

Langkah-langkah selanjutnya dalam artikel ini memberikan detail untuk metodologi di atas dalam mendesain kunci dan sertifikat.

Batasan dan peringatan

Batasan berikut berlaku untuk fitur ini.

  • Penawaran mTLS native antara komponen klien dan Cassandra ini TIDAK kompatibel dengan apigee-mtls. Jika Anda menggunakan fitur ini, Anda tidak dapat menggunakan apigee-mtls dan sebaliknya.
  • Mengaktifkan mTLS antara komponen klien dan Cassandra akan berdampak pada performa koneksi yang dibuat antara klien dan Cassandra. Operasi seperti booting klien atau penskalaan koneksi Cassandra mungkin lebih lambat karena Cassandra dan klien harus melakukan negosiasi TLS terlebih dahulu sebelum memulai komunikasi. Dampaknya akan kecil dan biasanya tidak terlihat.
  • Di Cassandra, mTLS dapat diterapkan secara opsional pada koneksi klien masuk. Meskipun dapat diaktifkan, pemberlakuan harus dinonaktifkan selama tugas operasional seperti upgrade software Apigee, mengaktifkan/menonaktifkan fitur TLS, dan jenis rotasi sertifikat tertentu. Lihat bagian Operasi dan Konfigurasi untuk mengetahui detail selengkapnya.
  • Pengelolaan dan pemeliharaan sertifikat adalah tanggung jawab pelanggan.
  • Merotasi sertifikat memiliki berbagai nuansa. Lihat bagian Rotasi Sertifikat untuk mengetahui detail selengkapnya

Mengaktifkan mTLS native

Pada tingkat tinggi, mengaktifkan mTLS native adalah prosedur 3 langkah seperti yang dijelaskan di bawah:

  1. Dapatkan sertifikat root dan pasangan kunci/sertifikat perantara.
  2. Buat pasangan sertifikat/kunci leaf dari 1 node Cassandra, tandatangani, simpan di keystore, dan konfigurasi Cassandra untuk mTLS opsional. Ulangi langkah-langkah untuk setiap node Cassandra satu per satu.
  3. Buat pasangan kunci/sertifikat leaf dari 1 aplikasi klien, tandatangani, simpan di keystore, dan konfigurasikan aplikasi klien untuk mTLS. Ulangi langkah-langkah di setiap aplikasi klien satu per satu. Aplikasi klien:
    1. edge-management-server
    2. edge-message-processor
    3. edge-router

Langkah-langkah ini dijelaskan di bawah:

Mendapatkan sertifikat root dan sertifikat perantara

Dapatkan sertifikat root dan pasangan kunci/sertifikat perantara yang ditandatangani oleh root. Gunakan sertifikat root dan perantara yang ditandatangani CA organisasi Anda atau buat sertifikat yang ditandatangani sendiri. Simpan rantai sertifikat root dan intermediate di truststore. Lihat Lampiran 1 untuk mengetahui perintah yang berguna. Perintah berikutnya mengasumsikan Anda memiliki akses ke file berikut:

  • intermediate.key - file kunci untuk sertifikat perantara untuk menandatangani sertifikat entitas akhir
  • intermediate-cert.pem- intermediate certificate

Mengonfigurasi node Cassandra

  1. Pilih satu node Cassandra
  2. Buat pasangan kunci dan sertifikat leaf, lalu tandatangani dengan sertifikat perantara. Simpan kunci dan sertifikat yang ditandatangani ke keystore. Contohnya:
    
    # Generate Leaf key and csr
    openssl req -newkey rsa:2048 -keyout cass-node1.key -out cass-node1-req.pem -sha256 -days 365 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=yourip/emailAddress=cassnode1@yourorg.com"
    
    # leaf cert signed by intermediate
    openssl x509 -req -in cass-node1-req.pem -CAkey intermediate.key -CA intermediate-cert.pem -days 365 -CAcreateserial -out cass-node1-cert.pem
    
    # keystore packaging leaf key and cert
    openssl pkcs12 -export -clcerts -in cass-node1-cert.pem -inkey cass-node1.key -out cass-node1-keystore.pfx -name nativemtls -password pass:keystorepass

    Tempatkan file keystore dan truststore di lokasi tertentu pada node dan pastikan file tersebut dapat diakses oleh pengguna Apigee

    cp cass-node1-keystore.pfx /opt/apigee/customer/application/
    cp truststore.pfx /opt/apigee/customer/application/
    
    chown apigee:apigee /opt/apigee/customer/application/cass-node1-keystore.pfx
    chown apigee:apigee /opt/apigee/customer/application/truststore.pfx

  3. Buat atau edit file /opt/apigee/customer/application/cassandra.properties. Tambahkan konten berikut dalam file ini:
    ### Enable Cassandra TLS on CQL connections
    conf_cassandra_client_encryption_enabled=true
    
    ### Optional TLS - true or false
    conf_cassandra_client_encryption_optional=true
    
    ### Keystore details
    conf_cassandra_client_encryption_keystore=/opt/apigee/customer/application/cass-node1-keystore.pfx
    conf_cassandra_client_encryption_keystore_password=keystorepass
    conf_cassandra_server_encryption_store_type=PKCS12
    
    ### Whether to enable 2-way TLS (or mTLS) - true or false
    conf_cassandra_client_encryption_require_client_auth=true
    
    ### When 2-way TLS is enabled, client certificate details need to be provided via a truststore
    conf_cassandra_client_encryption_truststore=/opt/apigee/customer/application/truststore.pfx
    conf_cassandra_client_encryption_truststore_password=trustpass
    conf_cassandra_client_encryption_store_type=PKCS12
    

    Selain itu, untuk sistem operasi yang mendukung FIPS, tambahkan properti berikut ke file /opt/apigee/customer/application/cassandra.properties:

    conf_cassandra_client_encryption_protocol=TLSv1.2

    Pastikan file dimiliki dan dapat dibaca oleh pengguna Apigee:

    chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
  4. Mengonfigurasi dan memulai ulang node Cassandra
    apigee-service apigee-cassandra configure
    apigee-service apigee-cassandra restart
    
  5. Ulangi langkah-langkah di atas pada setiap node Cassandra satu per satu

Mengonfigurasi aplikasi klien

Bagian ini berlaku untuk komponen klien berikut yang terhubung ke Cassandra:

  • edge-management-server
  • edge-message-processor
  • edge-router

  1. Pilih satu komponen klien
  2. Buat pasangan kunci dan sertifikat leaf, lalu tandatangani dengan sertifikat perantara. Simpan kunci dan sertifikat yang ditandatangani ke keystore. Contohnya:
    
    # Generate Leaf key and csr
    openssl req -newkey rsa:2048 -keyout mgmt-node1.key -out mgmt-node1-req.pem -sha256 -days 365 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=yourip/emailAddress=mgmtnode1@yourorg.com"
    
    # leaf cert signed by intermediate
    openssl x509 -req -in mgmt-node1-req.pem -CAkey intermediate.key -CA intermediate-cert.pem -days 365 -CAcreateserial -out mgmt-node1-cert.pem
    
    # keystore packaging leaf key and cert
    openssl pkcs12 -export -clcerts -in mgmt-node1-cert.pem -inkey mgmt-node1.key -out mgmt-node1-keystore.pfx -name nativemtls -password pass:keystorepass
    

    Tempatkan file keystore dan truststore di lokasi tertentu pada node dan pastikan file tersebut dapat diakses oleh pengguna Apigee

    cp mgmt-node1-keystore.pfx /opt/apigee/customer/application/
    cp truststore.pfx /opt/apigee/customer/application/
    
    chown apigee:apigee /opt/apigee/customer/application/mgmt-node1-keystore.pfx
    chown apigee:apigee /opt/apigee/customer/application/truststore.pfx

  3. Buat dan edit file konfigurasi berdasarkan aplikasi yang Anda konfigurasi
    Aplikasi File konfigurasi
    Server pengelolaan /opt/apigee/customer/application/management-server.properties
    Prosesor pengelolaan /opt/apigee/customer/application/message-processor.properties
    Router /opt/apigee/customer/application/router.properties

    Tambahkan konfigurasi berikut dalam file:

    ### Enable TLS on CQL connections
    conf_cassandra_sslconfig.enable.tls=true
    conf_cassandra_sslconfig.enable.mtls=true
    
    ### Keystore Details
    conf_cassandra_sslconfig.keystore.path=/opt/apigee/customer/application/mgmt-node1-keystore.pfx
    conf_cassandra_sslconfig.keystore.password=keystorepass
    conf_cassandra_sslconfig.keystore.type=PKCS12
    
    ### Truststore Details
    conf_cassandra_sslconfig.truststore.path=/opt/apigee/customer/application/truststore.pfx
    conf_cassandra_sslconfig.truststore.password=trustpass
    conf_cassandra_sslconfig.truststore.type=PKCS12
    

    Pastikan file konfigurasi dimiliki dan dapat dibaca oleh pengguna apigee

    chown apigee:apigee configuration file
    
    ### Example:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    

  4. Mulai ulang aplikasi klien
    # Configure and restart service:
    apigee-service component configure
    apigee-service component restart
    # Example, to configure and restart message processor application
    apigee-service edge-message-processor configure
    apigee-service edge-message-processor restart
    
  5. Anda dapat memvalidasi bahwa SSL dikonfigurasi dengan benar di aplikasi klien dengan mencari log di sepanjang baris di bawah ini dalam log sistem aplikasi yang sesuai:

    Opsi SSL ditambahkan ke koneksi cassandra

  6. Ulangi langkah-langkah di atas pada setiap aplikasi klien satu per satu

Operasi dan konfigurasi

Menerapkan mTLS

Jika mTLS tidak diterapkan di Cassandra, Cassandra akan menerima koneksi teks biasa dari klien atau klien yang dapat melakukan handshake TLS 2 arah dengan berhasil. Agar pemberlakuan mTLS berfungsi, mTLS harus dikonfigurasi di Cassandra terlebih dahulu. Anda dapat menyetel penerapan mTLS di Cassandra dengan mengikuti langkah-langkah di bawah:

  1. Pilih satu node Cassandra
  2. Buat atau edit file /opt/apigee/customer/application/cassandra.properties. Tambahkan atau edit properti berikut dalam file ini:
    ### Optional TLS - true or false
    conf_cassandra_client_encryption_optional=false
    

    Pastikan file dimiliki dan dapat dibaca oleh pengguna apigee

    chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
    
  3. Mengonfigurasi dan memulai ulang node Cassandra
    apigee-service apigee-cassandra configure
    apigee-service apigee-cassandra restart
    
  4. Ulangi langkah-langkah di atas pada setiap node Cassandra satu per satu

Setelah mTLS diterapkan di Cassandra, alat kueri Cassandra standar cqlsh tidak dapat terhubung ke Cassandra secara langsung. Untuk mengonfigurasi cqlsh untuk SSL, buat sertifikat dan kunci leaf baru (mirip dengan sertifikat dan kunci leaf untuk aplikasi klien) lalu lakukan hal berikut:

  1. Membuat atau mengedit file $HOME/.cassandra/cqlshrc
  2. Tambahkan konten berikut dalam file:
    [ssl]
    certfile = /home/admin-user/certs/inter-root.pem
    validate = false
    userkey = /home/admin-user/certs/cqlsh1.key
    usercert = /home/admin-user/certs/cqlsh1-cert.pem
    
    • certfile - File sertifikat yang berisi rantai sertifikat root dan perantara
    • userkey - kunci klien yang akan digunakan oleh cqlsh. Ini harus berupa pasangan kunci/sertifikat leaf yang dapat Anda buat dan tandatangani dengan sertifikat perantara.
    • usercert - sertifikat klien yang akan digunakan oleh cqlsh. Ini harus berupa kunci/sertifikat leaf yang dapat Anda buat dan tandatangani dengan sertifikat perantara.
  3. Jalankan perintah cqlsh seperti biasa sambil memberikan argumen --ssl. Misalnya:
    $  /opt/apigee/apigee-cassandra/bin/cqlsh --ssl X.X.X.X
    Connected to Apigee at X.X.X.X:9042
    [cqlsh 6.0.0 | Cassandra 4.0.13 | CQL spec 3.4.5 | Native protocol v5]
    Use HELP for help.
    cqlsh>
    

Menonaktifkan penerapan mTLS di Cassandra

Untuk menonaktifkan penerapan mTLS di Cassandra, ikuti langkah-langkah di bawah:

  1. Pilih satu node Cassandra
  2. Buat atau edit file /opt/apigee/customer/application/cassandra.properties. Tambahkan atau edit properti berikut dalam file ini:
    ### Optional TLS - true or false
    conf_cassandra_client_encryption_optional=true
    

    Pastikan file dimiliki dan dapat dibaca oleh pengguna apigee

    chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
    
  3. Mengonfigurasi dan memulai ulang node Cassandra
    apigee-service apigee-cassandra configure
    apigee-service apigee-cassandra restart
    
  4. Ulangi langkah-langkah di atas pada setiap node Cassandra satu per satu

Menonaktifkan mTLS native

Menonaktifkan mTLS native adalah proses multi-langkah, mirip dengan mengaktifkan mTLS native. Langkah-langkah tingkat tingginya adalah:

  1. Nonaktifkan penerapan mTLS di Cassandra (Jika diterapkan)
  2. Nonaktifkan mTLS di semua node aplikasi klien berikut satu per satu:
    • edge-management-server
    • edge-message-processor
    • edge-router
    1. Buat dan edit file konfigurasi berdasarkan aplikasi yang Anda konfigurasi:
      Aplikasi File konfigurasi
      Server pengelolaan /opt/apigee/customer/application/management-server.properties
      Prosesor pengelolaan /opt/apigee/customer/application/message-processor.properties
      Router /opt/apigee/customer/application/router.properties
    2. Tambahkan atau edit properti berikut dalam file konfigurasi:
      ### TLS on CQL connections
      conf_cassandra_sslconfig.enable.tls=false
      conf_cassandra_sslconfig.enable.mtls=false
      
    3. Pastikan file konfigurasi dimiliki dan dapat dibaca oleh pengguna apigee:
      chown apigee:apigee configuration file
      
      ### Example:
      chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    4. Mulai ulang aplikasi klien:
      
      # Configure and restart service:
      apigee-service component configure
      apigee-service component restart
      
      # Example, to configure and restart message processor application
      apigee-service edge-message-processor configure
      apigee-service edge-message-processor restart
      
    5. Ulangi langkah #a hingga #d di setiap aplikasi klien, satu per satu.
  3. Nonaktifkan mTLS di semua node Cassandra satu per satu:
    1. Pilih satu node Cassandra.
    2. Buat atau edit file /opt/apigee/customer/application/cassandra.properties. Tambahkan atau edit properti berikut dalam file ini:
      ### Cassandra TLS on CQL connections
      conf_cassandra_client_encryption_enabled=false
      

      Pastikan file dimiliki dan dapat dibaca oleh pengguna apigee

      chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
      
    3. Mengonfigurasi dan memulai ulang node Cassandra
    4. apigee-service apigee-cassandra configure
      apigee-service apigee-cassandra restart
      
    5. Ulangi langkah #a hingga #c di setiap node Cassandra, satu per satu.

Rotasi sertifikat

Rotasi hanya untuk sertifikat Leaf (tetap menggunakan sertifikat Intermediate dan Root yang sama)

Langkah-langkah yang serupa dengan Mengonfigurasi aplikasi klien dapat diikuti:

  1. Buat kunci/sertifikat leaf baru untuk aplikasi menggunakan kunci/sertifikat perantara yang sama
  2. Konfigurasi jalur ke kunci/sertifikat leaf baru di aplikasi beserta sandi dan jenis keystore
  3. Mulai ulang aplikasi
Rotasi untuk sertifikat Root atau Intermediate

Jika Anda berencana mengganti sertifikat perantara atau root, sebaiknya lakukan ini sebagai proses multi-langkah:

  1. Nonaktifkan mTLS native Cassandra di seluruh cluster Anda.
  2. Gunakan sertifikat root dan perantara baru untuk membuat sertifikat aplikasi atau leaf baru.
  3. Ikuti langkah-langkah untuk mengaktifkan mTLS native Cassandra menggunakan kumpulan kunci dan sertifikat baru.

Operasi Apigee Umum

Untuk melakukan operasi Apigee umum seperti mengupgrade software Apigee, menambahkan atau menghapus node Cassandra, menambahkan atau menghapus pusat data, mengaktifkan atau menonaktifkan autentikasi Cassandra, dll., pastikan mTLS tidak diterapkan di Cassandra. Jika Anda telah menerapkan mTLS, nonaktifkan penerapan sebelum melanjutkan operasi ini.

Lampiran 1

Langkah-langkah dalam lampiran ini dapat diikuti untuk membuat pasangan kunci/sertifikat perantara dan root yang ditandatangani sendiri serta menambahkan rantai sertifikat ini ke truststore.

Buat sertifikat root dan perantara yang ditandatangani sendiri

# Create self-signed root key and cert
openssl req -x509 -newkey rsa:2048 -keyout root.key -out root-cert.pem -sha256 -days 3650 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=root.yourorg.com/emailAddress=apigeeroot@yourorg.com"

# Create intermediate key and cert (signed by root)
openssl req -newkey rsa:2048 -keyout intermediate.key -out intermediate-req.pem -sha256 -days 3650 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=inter.yourorg.com/emailAddress=apigeeinter@yourorg.com"

openssl x509 -req -in intermediate-req.pem -CAkey root.key -CA root-cert.pem -days 3650 -CAcreateserial -out intermediate-cert.pem

Membuat truststore

# Merge root and intermediate cert into 1 file
cat intermediate-cert.pem > inter-root.pem
cat root-cert.pem >> inter-root.pem

# Create truststore to be used everywhere
keytool -keystore truststore.pfx -storetype PKCS12 -importcert -file inter-root.pem -keypass trustpass -storepass trustpass -alias nativemtls -noprompt

Lampiran 2: Penyiapan pembuatan rantai sertifikat alternatif

Meskipun artikel ini merekomendasikan penyiapan rantai sertifikat tertentu yang menyeimbangkan keamanan dan kemudahan operasi, ada alternatif lain yang dijelaskan di bawah. Sebagian besar prinsip umum juga berlaku untuk metodologi lain seperti:

  1. Memiliki kunci dan sertifikat leaf langsung untuk setiap node atau aplikasi klien Cassandra (tanpa sertifikat root penandatanganan atau sertifikat perantara). Hal ini kemungkinan akan membuat rotasi sertifikat menjadi rumit.
  2. Memiliki beberapa set root dan perantara untuk berbagai kasus penggunaan. Misalnya, node Cassandra memiliki 1 set sertifikat root/perantara yang digunakan untuk menandatangani semua sertifikat leaf Cassandra. Demikian pula, semua aplikasi klien dapat memiliki satu set root/intermediate terpisah untuk menandatangani sertifikat leaf aplikasi. Konfigurasi tersebut dapat dilakukan, tetapi melibatkan penambahan rantai sertifikat root/perantara ke truststore yang sesuai. Dalam contoh ini, truststore Cassandra harus berisi sertifikat root/perantara klien dan aplikasi klien harus memiliki rantai root/perantara node Cassandra di truststore-nya.
  3. Mirip dengan di atas, Anda dapat memiliki beberapa set sertifikat root dan perantara untuk berbagai region, tetapi semua klien di semua region dan semua server di semua region harus mengetahui semua rantai root dan perantara dengan menambahkannya semua di truststore yang dikonfigurasi.