Spanner Omni menggunakan TLS 1.3 untuk mengenkripsi data yang mengalir antara klien dan server, serta antara server Spanner Omni. Spanner Omni menyediakan mTLS untuk meningkatkan keamanan di mana kedua pihak saling membangun keaslian sebelum bertukar data. Jika Anda menggunakan enkripsi, server Anda harus berkomunikasi melalui mTLS. Anda dapat memilih apakah klien dan server Anda juga menggunakan mTLS.
Sebelum memulai
Pastikan Anda memenuhi persyaratan berikut:
Membuat cluster Kubernetes Konfigurasi ini mendukung Google Kubernetes Engine (GKE) dan Amazon Elastic Kubernetes Service (Amazon EKS). Anda mungkin perlu menyesuaikan konfigurasi agar berfungsi di lingkungan lain.
Pastikan cluster Kubernetes dapat mengakses artefak Artifact Registry yang menghosting penampung Spanner Omni.
Instal dan konfigurasi alat command line
kubectldan Helm.Jika Anda menyiapkan lingkungan Kubernetes di mesin platform virtualisasi vSphere, nonaktifkan virtualisasi Time Stamp Counter (TSC) dengan menambahkan
monitor_control.virtual_rdtsc = FALSEke file konfigurasi.vmxvirtual machine. Tindakan ini memastikan TrueTime berfungsi dengan benar.Pastikan lingkungan Anda memenuhi persyaratan sistem Spanner Omni.
Langkah 1: Buat sertifikat
Anda harus membuat tiga set sertifikat:
Sertifikat API: Sertifikat ini membantu melindungi server Spanner Omni API.
Sertifikat server: Sertifikat ini membantu melindungi komunikasi antar-server.
Sertifikat klien: Pengguna akhir atau aplikasi menggunakannya untuk menetapkan identitas dan kepercayaan mereka dengan server Spanner Omni.
Sertifikat ini diterbitkan oleh Otoritas Sertifikasi (CA). Spanner Omni menyediakan alat untuk membuat CA yang ditandatangani sendiri dan ketiga jenis sertifikat.
Lakukan langkah-langkah berikut di salah satu mesin Anda. Langkah-langkah ini mengasumsikan bahwa
namespace-nya adalah spanner-ns. Ubah ini ke namespace yang ingin Anda gunakan
dalam deployment.
Anda dapat membuat sertifikat ini di workstation menggunakan Spanner Omni CLI.
1. Membuat Otoritas Sertifikasi (CA)
Otoritas Sertifikasi (CA) menerbitkan semua sertifikat. Organisasi Anda mungkin memiliki CA pusat, atau Anda dapat menggunakan CA publik. Meskipun Anda dapat menggunakan CA yang sama untuk semua sertifikat, sertifikat API dan sertifikat klien harus menggunakan CA yang sama.
Spanner Omni memungkinkan Anda membuat CA pribadi.
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certs
Perintah create-ca akan menghasilkan sertifikat CA di direktori certs.
Anda dapat menyalin sertifikat ini untuk digunakan sebagai CA bagi sertifikat API, atau
membuat CA lain. Pastikan Anda menggunakan CA yang benar saat membuat sertifikat.
cp certs/ca.crt certs/ca-api.crt
Direktori $HOME/.spanner/private-keys berisi kunci pribadi untuk CA.
Anda harus mencadangkan dan mengamankan direktori ini. Pengguna yang memiliki akses ke kunci pribadi dapat menandatangani sertifikat arbitrer yang dipercaya oleh klien yang memercayai CA yang ditandatangani sendiri. Jika ingin, Anda dapat membuat CA tambahan (atau menggunakan CA yang dipercaya secara eksternal) untuk sertifikat API. Dokumen ini menggunakan CA yang sama untuk semua jenis sertifikat.
2. Membuat sertifikat server
Anda harus membuat dua jenis sertifikat server:
Sertifikat API: Gunakan sertifikat ini untuk mengenkripsi komunikasi dari sistem yang berinteraksi dengan deployment.
Sertifikat server Spanner: Server Spanner Omni menggunakan sertifikat ini untuk mengenkripsi komunikasi satu sama lain.
Konfigurasi ini memberikan fleksibilitas dalam mengelola sertifikat ini. Misalnya, Anda dapat menggunakan rotasi sertifikat.
Buat sertifikat server Spanner
Untuk membuat sertifikat server, jalankan perintah berikut:
# Comma-separate names of the Spanner servers; wildcards are supported.
SERVER_NAMES=*.pod.NAMESPACE
./google/spanner/bin/spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Perintah ini akan membuat server.crt dan server.key di direktori certs.
Buat sertifikat API
Untuk membuat sertifikat API, jalankan perintah berikut:
OMNI_ENDPOINT=spanner.NAMESPACE
./google/spanner/bin/spanner certificates create-server --filename-prefix=api --hostnames=${OMNI_ENDPOINT} --ca-certificate-directory certs --output-directory certs
Perintah ini akan membuat api.crt dan api.key di direktori certs. Jika
perlu, gunakan CA yang dipercaya secara eksternal untuk sertifikat API.
3. Membuat sertifikat klien
Anda dapat menggunakan sertifikat klien untuk mengautentikasi pengguna dan aplikasi. Sertifikat klien mengaktifkan mTLS antara klien dan server. Anda dapat melewati langkah ini jika Anda tidak berencana menggunakan mTLS.
CA yang sama yang menandatangani sertifikat API harus menandatangani sertifikat klien, yang
juga harus berisi nama pengguna untuk otorisasi. Untuk contoh ini, gunakan pengguna
admin, yang merupakan pengguna default untuk setiap database baru. Untuk mengetahui informasi selengkapnya, lihat Autentikasi dan otorisasi di Spanner Omni.
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Perintah ini akan membuat client.crt dan client.key di direktori clientcerts. Kirim file ini ke mesin mana pun yang terhubung ke deployment.
Jika Anda berencana menggunakan sertifikat klien dengan library klien Java, Anda harus membuat kunci sertifikat dalam format PKCS#8. Gunakan perintah berikut:
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs --generate-pkcs8-key
Langkah 2: Kirim sertifikat dan sandi admin ke cluster Kubernetes
Jalankan perintah berikut untuk membuat namespace dan mengirim sertifikat serta sandi admin ke cluster Kubernetes Anda:
Buat namespace:
kubectl create namespace NAMESPACEKirim sertifikat TLS ke rahasia:
kubectl create secret generic tls-certs \ --from-file=ca.crt="certs/ca.crt" \ --from-file=ca-api.crt="certs/ca-api.crt" \ --from-file=server.crt="certs/server.crt" \ --from-file=server.key="certs/server.key" \ --from-file=api.crt="certs/api.crt" \ --from-file=api.key="certs/api.key" \ -n NAMESPACEBuat file sandi yang berisi sandi untuk pengguna
admindefault, dengan izin terbatas (hanya dapat dibaca oleh pemiliknya, izin 600):printf '%s' 'PASSWORD' > admin_password.txt chmod 600 admin_password.txtSandi harus memenuhi persyaratan berikut:
- Panjangnya antara 8 dan 32 karakter.
- Minimal satu karakter huruf besar.
- Setidaknya satu karakter huruf kecil.
- Minimal satu angka.
- Setidaknya satu karakter khusus.
Buat secret untuk sandi administrator:
kubectl create secret generic spanner-admin-password \ --from-file=password=admin_password.txt \ -n NAMESPACE
Langkah 3: Buat deployment dengan enkripsi TLS
Ikuti langkah-langkah berikut untuk membuat deployment dengan enkripsi TLS.
1. Menyiapkan konfigurasi Helm
Lihat Membuat konfigurasi diagram Helm dan buat konfigurasi deployment untuk lingkungan Anda.
Untuk mengaktifkan TLS dan mengonfigurasi sandi administrator, tetapkan nilai berikut dalam konfigurasi diagram Helm Anda:
# Enables TLS
global:
insecureMode: false
# Enables client certificate authentication (mTLS)
deployment:
enableClientCertificateAuthentication: true
# Name of the secret containing the administrator password
adminPasswordSecret: spanner-admin-password
2. Buat deployment
Jalankan perintah berikut untuk membuat deployment:
kubectl create ns monitoring
helm upgrade --install spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni \
--version VERSION \
--set global.platform=gke \
--set global.insecureMode=false \
--set deployment.enableClientCertificateAuthentication=true \
--set deployment.adminPasswordSecret=spanner-admin-password \
--namespace NAMESPACE \
--set monitoring.enabled=true
Perintah ini memicu tugas bootstrap. Anda dapat melacak progres dengan melihat log tugas ini:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
Output menunjukkan progres. Setelah selesai, Anda akan melihat pesan yang menyatakan "Deployment created successfully".
3. Periksa status pod
Jalankan perintah berikut untuk memverifikasi status pod:
kubectl get pods --watch --namespace NAMESPACE
Semua pod dalam status READY.
4. Perbarui sertifikat dan deployment dengan detail load balancer
Langkah ini diperlukan jika Anda ingin klien terhubung dari luar cluster Kubernetes.
# Get the service details
kubectl get service spanner -n NAMESPACE
# The EXTERNAL-IP:PORT is the API or deployment endpoint for your deployment.
# Update the API certificate with these details.
OMNI_ENDPOINT=EXTERNAL_IP,spanner.NAMESPACE.svc
./google/spanner/bin/spanner certificates update \
--certificate-file=certs/api.crt \
--certificate-key-file=certs/api.key \
--hostnames=${OMNI_ENDPOINT} \
--ca-certificate-directory=certs
# Update the secrets in Kubernetes
kubectl patch secret tls-certs -n NAMESPACE -p "{\"data\":{\"api.crt\":\"$(base64 -w 0 certs/api.crt)\"}}"
Langkah 4: Berinteraksi dengan Spanner Omni
Anda dapat berinteraksi dengan deployment Spanner Omni dari VM mana pun menggunakan Spanner Omni CLI.
Jika Anda mengaktifkan mTLS untuk klien, gunakan flag berikut dengan setiap perintah:
--client-certificate-directory=CLIENT_CERTIFICATE_DIRECTORY--ca-certificate-file=API_CA_CERT_FILE_PATH
1. Login ke Spanner Omni (opsional)
Login ke Spanner Omni (langkah ini bersifat opsional jika Anda menggunakan sertifikat klien):
./google/spanner/bin/spanner auth login admin \
--ca-certificate-file=certs/ca-api.crt \
--deployment-endpoint=DEPLOYMENT_ENDPOINT
Saat diminta, masukkan sandi yang dikonfigurasi di admin_password.txt.
Successfully logged in as "admin"
2. Buat database
Jalankan perintah berikut untuk membuat database:
./google/spanner/bin/spanner --deployment-endpoint=DEPLOYMENT_ENDPOINT databases create DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
3. Buka SQL Shell
Jalankan perintah berikut untuk membuka shell:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --deployment-endpoint=DEPLOYMENT_ENDPOINT --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
4. Membuat tabel dan menambahkan data
Jalankan perintah SQL berikut:
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)
5. Memverifikasi deployment
Untuk mencantumkan database, jalankan perintah berikut:
./google/spanner/bin/spanner databases list --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Outputnya akan terlihat mirip seperti berikut:
| NAMA | STATUS | VERSION_RETENTION_PERIOD | EARLIEST_VERSION_TIME | ENABLE_DROP_PROTECTION |
|---|---|---|---|---|
| DATABASE_NAME | SIAP | 1j | 2025-02-07T12:25:30Z | false |
Untuk membuat kueri data, jalankan perintah berikut:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Jalankan perintah SQL berikut:
SHOW TABLES;
SELECT * FROM names;
Atau, Anda dapat mengikuti petunjuk di Menggunakan PGAdapter dengan Spanner Omni untuk mengonfigurasi PGAdapter dan berinteraksi menggunakan alat seperti psql.
Langkah 5: Pantau deployment
Jika Anda menginstal Spanner Omni dengan monitoring.enabled=true,
Prometheus akan meng-scrape metrik. Anda dapat menggunakan Grafana untuk memvisualisasikan metrik ini.
1. Mendapatkan detail layanan
Jalankan perintah berikut untuk mendapatkan detail layanan:
# Prometheus service details. Default port is 9090.
kubectl get service prometheus-service -n monitoring
# Grafana service details. Default port is 3000.
kubectl get service grafana -n monitoring
Langkah berikutnya
- Gunakan Library klien dan driver JDBC untuk menghubungkan aplikasi Anda dengan deployment.
- Mengelola pengguna dan peran.