Dokumen ini menjelaskan cara menambahkan enkripsi TLS ke deployment Spanner Omni di virtual machine (VM). Deployment dengan fitur keamanan jaringan menggunakan Transport Layer Security (TLS) 1.3 untuk mengenkripsi dan mengautentikasi komunikasi dalam deployment dan dengan kliennya. Spanner Omni menyediakan TLS timbal balik (mTLS) untuk meningkatkan keamanan, di mana kedua pihak saling mengautentikasi sebelum bertukar data. mTLS bersifat opsional antara klien dan server, tetapi server Spanner Omni berkomunikasi satu sama lain melalui mTLS.
Versi Pratinjau Spanner Omni tidak mendukung enkripsi TLS. Untuk mendapatkan fitur yang memungkinkan Anda membuat deployment dengan enkripsi TLS, hubungi Google untuk meminta akses awal ke Spanner Omni versi lengkap.
Sebelum memulai
Sebelum memulai, pastikan lingkungan Anda memenuhi persyaratan berikut:
Pastikan Anda memiliki akses SSH ke setiap mesin dalam deployment. Akses ini memungkinkan Anda mendownload dan menjalankan biner Spanner Omni.
Jaringan Anda harus mengizinkan komunikasi TCP di port 15000 hingga 15025.
Setiap mesin harus memiliki penyimpanan yang cukup untuk menghosting data yang ditangani deployment.
Tinjau halaman Persyaratan sistem untuk memastikan penyiapan Anda memenuhi persyaratan.
Jika Anda menjalankan biner di platform virtualisasi vSphere, nonaktifkan virtualisasi TSC. Untuk melakukannya, tambahkan setelan
monitor_control.virtual_rdtsc = FALSEke file konfigurasi.vmxvirtual machine.
Langkah 1: Buat deployment tanpa enkripsi TLS
Ikuti langkah-langkah di Membuat deployment VM Omni Spanner tanpa enkripsi. Pastikan deployment VM Anda tanpa enkripsi dan fitur keamanan berfungsi dengan benar. Halaman ini mengasumsikan bahwa Anda telah membuat deployment regional dengan tiga zona.
Langkah 2: Buat sertifikat
Anda perlu membuat tiga set sertifikat:
| Jenis sertifikat | Deskripsi |
|---|---|
| Sertifikat API | Sertifikat API membantu melindungi server Spanner API. |
| Sertifikat Server | Sertifikat server membantu melindungi komunikasi antar-server. |
| Sertifikat klien | Pengguna akhir atau aplikasi menggunakan sertifikat klien untuk membangun identitas dan kepercayaan mereka dengan server Spanner Omni. |
Sertifikat ini diterbitkan oleh Otoritas Sertifikasi (CA). Spanner Omni menyediakan alat untuk membuat CA dan ketiga jenis sertifikat. Lakukan langkah-langkah berikut di salah satu perangkat Anda.
Anda dapat membuat sertifikat ini di workstation menggunakan Spanner Omni CLI, lalu mentransfer file sertifikat ke setiap server Spanner Omni. Untuk mengetahui informasi selengkapnya, lihat Panduan memulai menggunakan Spanner Omni CLI.
Untuk membuat sertifikat, Anda harus menyelesaikan langkah-langkah berikut:
Buat Otoritas Sertifikasi (CA)
Otoritas ini adalah CA root untuk semua sertifikat klien dan server yang Anda buat pada langkah-langkah berikut.
spanner certificates create-ca --ca-certificate-directory=certs
Direktori certs berisi sertifikat CA. Buat salinan sertifikat ini untuk digunakan sebagai CA bagi sertifikat API.
cp certs/ca.crt certs/ca-api.crt
Direktori $HOME/.spanner/private-keys berisi kunci pribadi untuk CA.
Cadangkan dan amankan direktori ini. Pengguna yang memiliki akses ke kunci pribadi dapat
menandatangani sertifikat arbitrer yang dipercayai oleh klien yang memercayai CA yang ditandatangani sendiri.
Meskipun Anda dapat menggunakan CA yang sama untuk semua sertifikat, sertifikat API dan sertifikat klien harus menggunakan CA yang sama. Secara opsional, Anda dapat membuat CA tambahan (atau menggunakan CA yang dipercaya secara eksternal) untuk sertifikat API.
Pastikan Anda menggunakan CA yang tepat dalam langkah-langkah berikut saat membuat sertifikat. Dokumen ini menggunakan CA yang sama untuk semua jenis sertifikat.
Membuat sertifikat server
Anda membuat dua jenis sertifikat server:
Sertifikat server Spanner: Mengenkripsi komunikasi antara server Spanner Omni.
Sertifikat API: Mengenkripsi komunikasi dari sistem yang berinteraksi dengan deployment.
Penyiapan ini memberikan pengelolaan sertifikat yang lebih fleksibel, seperti rotasi sertifikat.
Buat sertifikat server Spanner
Server Spanner Omni menggunakan sertifikat server untuk mengenkripsi komunikasi satu sama lain (komunikasi antar-server).
Buat sertifikat server dengan menjalankan perintah berikut. Ganti SERVER_LIST dengan daftar nama server atau akhiran Spanner yang dipisahkan koma.
SERVER_NAMES=SERVER_LIST
spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Perintah ini akan membuat dua file, server.crt dan server.key, di direktori certs.
Buat sertifikat API
Sertifikat API mengenkripsi komunikasi dari sistem yang berinteraksi dengan deployment. Dengan menggunakan sertifikat terpisah untuk API dan komunikasi antar-server, Anda dapat mengelola dan mengganti setiap jenis secara terpisah.
Buat sertifikat API dengan menjalankan perintah berikut. Ganti LB_DNS dengan DNS load balancer.
SERVER_NAMES=LB_DNS
spanner certificates create-server --filename-prefix=api --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Perintah ini akan membuat dua file lagi, api.crt dan api.key, di direktori certs. Jika diperlukan, Anda dapat menggunakan CA yang dipercaya secara eksternal untuk sertifikat API.
Mendistribusikan sertifikat ke semua server
Salin direktori certs ke semua server lain dalam deployment untuk memulainya dengan fitur keamanan jaringan.
scp -r certs REMOTE_HOST:SPANNER_DIR/certs
Langkah 3: Buat sertifikat klien
Anda dapat menggunakan sertifikat klien untuk mengautentikasi pengguna dan aplikasi di Spanner. Sertifikat klien memungkinkan mTLS antara klien dan server.
Sertifikat klien harus ditandatangani oleh CA yang sama dengan sertifikat API dan harus berisi nama pengguna untuk otorisasi. Contoh ini menggunakan pengguna admin, yang merupakan pengguna default untuk setiap database. Untuk mengetahui informasi selengkapnya tentang opsi autentikasi, peran, dan pengguna, lihat Autentikasi dan otorisasi di Spanner Omni.
USERNAME=admin
spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Perintah ini akan membuat file client.crt dan client.key di direktori clientcerts. Kirim file ini ke komputer mana pun yang terhubung ke server deployment.
Jika berencana menggunakan sertifikat klien dengan library klien Java, Anda harus membuat kunci sertifikat dalam format PKCS#8. Gunakan perintah berikut:
USERNAME=admin
spanner certificates create-client $USERNAME \
--output-directory clientcerts \
--ca-certificate-directory certs \
--generate-pkcs8-key
Langkah 4: Mulai ulang server
Setelah Anda membuat sertifikat dan menyalinnya ke semua server dalam deployment, mulai ulang setiap server.
Deployment server tunggal
Untuk deployment server tunggal, jalankan perintah berikut:
nohup spanner start-single-server \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
Server dimulai. Lihat Langkah 7: Berinteraksi dengan deployment untuk berinteraksi dengan deployment.
Deployment penyebaran skala
Untuk deployment scale-out, mulai server di setiap mesin. Nilai untuk
server_address dan zone harus cocok dengan nilai dalam konfigurasi deployment.
Jaringan harus menyelesaikan server_address. Server menggunakan alamat IP ini untuk
komunikasi internal. Jalankan perintah berikut untuk memulai server root:
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
Perintah berikut menunjukkan contoh dengan nilai tertentu:
nohup spanner start \
--root \
--server-address=rootserver1 \
--zone=us-central-1a \
--base-dir=./spanbasedir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
Untuk mengaktifkan mTLS bagi klien, gunakan
flag --enable-client-certificate-authentication=true saat memulai server.
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false \
--enable-client-certificate-authentication=true &
Setelah server berjalan di setiap mesin, Anda siap membuat deployment.
Langkah 5: Buat deployment dengan enkripsi TLS
Jalankan perintah spanner deployment create dari salah satu server root:
spanner deployment create --config-file=deployment.yaml
Konsol untuk setiap mesin menampilkan pesan yang menunjukkan bahwa deployment kini mencakup enkripsi TLS. Semua server berkomunikasi satu sama lain melalui saluran terenkripsi.
Langkah 6: (Opsional) Konfigurasikan load balancer
Untuk mengelola dan mendistribusikan traffic klien di seluruh server dalam deployment Anda, siapkan load balancer. Pastikan konfigurasi load balancer untuk health check menggunakan HTTPS, bukan HTTP. Gunakan detail konfigurasi berikut:
| Parameter | Nilai |
|---|---|
| Protokol | TCP |
| IP Backend | Alamat IP server Anda. |
| Port | 15000 (Ini adalah port default. Jika Anda menggunakan port yang berbeda di flag --server-address, gunakan port tersebut.) |
| URL health check | https://IP_ADDRESS:15012/healthz |
| Strategi penyeimbangan | roundrobin (mendistribusikan permintaan secara berurutan di seluruh server) |
Langkah 7: Berinteraksi dengan deployment
Anda dapat berinteraksi dengan deployment Spanner Omni dari VM mana pun menggunakan Spanner Omni CLI.
Anda harus menyertakan tanda berikut dengan setiap perintah untuk membuat koneksi terenkripsi:
--ca-certificate-file=certs/ca-api.crt
Jika Anda mengaktifkan mTLS untuk klien, sertakan juga tanda berikut dengan setiap perintah:
--client-certificate-directory=clientcerts
Untuk login dan berinteraksi dengan deployment Anda, ikuti langkah-langkah berikut:
Login ke Spanner Omni
spanner auth login admin \ --ca-certificate-file=certs/ca-api.crt \ --deployment-endpoint=ENDPOINTSandi default-nya adalah
admin.Successfully logged in as "admin"Buat database
spanner --deployment-endpoint=ENDPOINT databases create mydb --ca-certificate-file=certs/ca-api.crtCreating database...done.Buka SQL Shell
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner>Membuat tabel dan menambahkan data
spanner> create table names (nameId INT64 NOT NULL, name String(100)) Primary Key (nameId); Query OK, 0 rows affected (4.62 sec) spanner> insert names (nameId, name) values (1, "Jack"); Query OK, 1 rows affected (0.18 sec)Memverifikasi data
Mencantumkan database:
spanner databases list --ca-certificate-file=certs/ca-api.crtNAME STATE VERSION_RETENTION_PERIOD EARLIEST_VERSION_TIME KMS_KEY_NAME ENABLE_DROP_PROTECTION mydb READY 1h 2025-02-07T12:25:30Z falseDapatkan data dari tabel:
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner> show tables; +----------------+ | Tables_in_mydb | +----------------+ | names | +----------------+ 1 rows in set (0.14 sec) spanner> select * from names; +--------+--------+ | nameId | name | +--------+--------+ | 1 | Jack | +--------+--------+ 1 rows in set (18.69 msecs)
Langkah 8: (Opsional) Menskalakan deployment
Anda dapat menambahkan server non-root ke zona untuk menskalakan kapasitas zona. Untuk melakukannya, buat sertifikat server untuk server non-root seperti yang dijelaskan di Langkah 2: Buat sertifikat, lalu mulai server dengan perintah berikut:
spanner start \
--server-address=NON_ROOT_MACHINE \
--join-servers=ROOT_SERVER1,ROOT_SERVER2,ROOT_SERVER3 \
--zone=us-central1-a \
--base-dir=./spandir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false
Langkah berikutnya
- Gunakan Library klien dan driver JDBC untuk menghubungkan aplikasi Anda dengan deployment.
- Mengelola pengguna dan peran.