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 keamanan yang ditingkatkan, di mana kedua pihak menetapkan keaslian satu sama lain 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 dapat berfungsi di lingkungan lain.
Pastikan cluster Kubernetes dapat mengakses artefak Artifact Registry yang menghosting container 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. Hal 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 antarserver.
Sertifikat klien: Pengguna akhir atau aplikasi menggunakan sertifikat ini untuk menetapkan identitas dan kepercayaan mereka dengan server Spanner Omni.
Certificate authority (CA) menerbitkan sertifikat ini. 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 menjadi namespace yang ingin Anda gunakan dalam deployment.
Anda dapat membuat sertifikat ini di workstation menggunakan Spanner Omni CLI.
1. Membuat certificate authority
Anda harus membuat dua certificate authority (CA) terpisah untuk mengisolasi komunikasi antarserver internal dari komunikasi klien dan API eksternal:
- CA server internal (
ca.crt): menerbitkan sertifikat server (server.crt) yang digunakan secara eksklusif untuk komunikasi mTLS internal antara server Spanner Omni. - CA API dan klien (
ca-api.crt): menerbitkan sertifikat server API (api.crt) dan sertifikat mTLS klien (client.crt). Atau, Anda dapat menggunakan CA tepercaya eksternal atau CA organisasi Anda untuk sertifikat API dan sertifikat klien.
Buat CA server internal untuk komunikasi antar-server:
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certsPerintah ini membuat sertifikat CA server internal (
certs/ca.crt) dan menulis kunci pribadinya ke$HOME/.spanner/private-keys/ca.key.Buat CA terpisah untuk sertifikat API dan sertifikat klien, lalu salin sertifikat CA-nya ke
certs/ca-api.crt:./google/spanner/bin/spanner certificates create-ca \ --ca-certificate-directory=api-certs \ --ca-private-key-directory=$HOME/.spanner/api-private-keys cp api-certs/ca.crt certs/ca-api.crtPerintah ini membuat sertifikat CA klien dan API (
api-certs/ca.crt, disalin kecerts/ca-api.crt) dan menulis kunci pribadinya ke$HOME/.spanner/api-private-keys/ca.key.
Cadangkan dan amankan $HOME/.spanner/private-keys dan
$HOME/.spanner/api-private-keys. Pengguna yang memiliki akses ke kunci pribadi ini dapat
menandatangani sertifikat arbitrer yang dipercaya oleh deployment.
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 tersebut. Misalnya, Anda dapat menggunakan rotasi sertifikat.
Membuat sertifikat server Spanner
Buat sertifikat server:
# 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.
Membuat sertifikat API
Buat sertifikat API menggunakan CA API:
OMNI_ENDPOINT=spanner.NAMESPACE.svc
./google/spanner/bin/spanner certificates create-server \
--filename-prefix=api \
--hostnames=${OMNI_ENDPOINT} \
--ca-certificate-directory=api-certs \
--ca-private-key-directory=$HOME/.spanner/api-private-keys \
--output-directory=certs
Perintah ini akan membuat api.crt dan api.key di direktori certs. Jika perlu, gunakan CA tepercaya 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 tidak berencana menggunakan mTLS.
Tanda tangani sertifikat klien dengan API dan CA klien (api-certs/ca.crt, yang cocok dengan certs/ca-api.crt) dan sertakan nama pengguna untuk otorisasi. Jangan menandatangani sertifikat klien dengan CA server internal (certs/ca.crt). 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.
Buat sertifikat klien:
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME \
--output-directory=clientcerts \
--ca-certificate-directory=api-certs \
--ca-private-key-directory=$HOME/.spanner/api-private-keys
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=api-certs \
--ca-private-key-directory=$HOME/.spanner/api-private-keys \
--generate-pkcs8-key
4. Membuat keyset wrapper
Spanner Omni menggunakan keyset wrapper Kunci Enkripsi Kunci (KEK) yang dipasang di /spanner/kms/wrapper_key di setiap pod server untuk mengenkripsi kunci internal, seperti kunci penandatanganan dan enkripsi token.
Untuk membuat file keyset wrapper baru menggunakan spanner keys create-keyset, jalankan
perintah berikut:
./google/spanner/bin/spanner keys create-keyset --output-file=kms/wrapper_key
Secara default, spanner keys create-keyset menghasilkan kunci AES256_GCM. Untuk
membuat jenis kunci yang berbeda, gunakan flag --key-template dengan salah satu
nilai jenis kunci berikut: AES256_GCM, AES128_GCM, AES256_GCM_RAW,
CHACHA20_POLY1305, atau XCHACHA20_POLY1305.
Langkah 2: Kirim sertifikat, keyset wrapper, dan sandi administrator ke cluster Kubernetes
Jalankan perintah berikut untuk membuat namespace dan mengirim sertifikat, keyset wrapper, dan sandi administrator ke cluster Kubernetes Anda:
Buat namespace:
kubectl create namespace NAMESPACEKirim sertifikat TLS ke secret:
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 NAMESPACEKirim keyset wrapper ke secret (
wrapper-key), yang dipasang di/spanner/kmsdi setiap pod server:kubectl create secret generic wrapper-key \ --from-file=wrapper_key="kms/wrapper_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.
- Minimal 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. Membuat 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 progresnya dengan melihat log tugas ini:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
Output akan menunjukkan progresnya. Setelah selesai, Anda akan melihat pesan yang menyatakan "Deployment created successfully".
3. Memeriksa status pod
Jalankan perintah berikut untuk memverifikasi status pod:
kubectl get pods --watch --namespace NAMESPACE
Semua pod berada dalam status READY.
4. Memperbarui 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=api-certs \
--ca-private-key-directory=$HOME/.spanner/api-private-keys
# 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 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. Membuka 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 mengkueri 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: Memantau deployment
Jika Anda menginstal Spanner Omni dengan monitoring.enabled=true,
Prometheus akan mengumpulkan 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.