本文說明如何為虛擬機器 (VM) 上的 Spanner Omni 部署作業新增 TLS 加密。部署作業使用網路安全功能時,會透過傳輸層安全標準 (TLS) 1.3 加密及驗證部署作業內部和與用戶端之間的通訊。Spanner Omni 提供相互傳輸層安全標準 (mTLS),可提升安全性,雙方在交換資料前會先驗證彼此的真實性。用戶端與伺服器之間可選擇是否使用 mTLS,但 Spanner Omni 伺服器會透過 mTLS 彼此通訊。
Spanner Omni 的預覽版本不支援 TLS 加密。如要取得可建立 TLS 加密部署作業的功能,請與 Google 聯絡,要求搶先存取完整版 Spanner Omni。
事前準備
開始之前,請確認您的環境符合下列需求:
請確認您有權透過 SSH 存取部署中的每部機器。您可透過這項存取權下載及執行 Spanner Omni 二進位檔。
網路必須允許通訊埠 15000 到 15025 的 TCP 通訊。
每部機器都必須有足夠的儲存空間,才能託管部署作業處理的資料。
查看「系統需求」頁面,確認設定符合需求。
如果您在 vSphere 虛擬化平台上執行二進位檔,請停用 TSC 虛擬化。如要這麼做,請將
monitor_control.virtual_rdtsc = FALSE設定新增至虛擬機器的.vmx設定檔。
步驟 1:建立不含 TLS 加密的部署作業
按照「建立未加密的 Spanner Omni VM 部署作業」一文中的步驟操作。確認未加密且未啟用安全防護功能的 VM 部署作業可正常運作。本頁面假設您已建立包含三個區域的區域部署作業。
步驟 2:產生憑證
您需要建立三組憑證:
| 憑證類型 | 說明 |
|---|---|
| API 憑證 | API 憑證可保護 Spanner API 伺服器。 |
| 伺服器憑證 | 伺服器憑證有助於保護伺服器間的通訊。 |
| 用戶端憑證 | 使用者或應用程式會使用用戶端憑證,與 Spanner Omni 伺服器建立身分和信任關係。 |
這些憑證是由認證授權單位 (CA) 核發。Spanner Omni 提供工具,可建立 CA 和所有三種憑證。在其中一部電腦上執行下列步驟。
您可以使用 Spanner Omni CLI 在工作站上建立這些憑證,然後將憑證檔案傳輸至每個 Spanner Omni 伺服器。詳情請參閱「使用 Spanner Omni CLI 的快速入門導覽課程」。
如要產生認證,請完成下列步驟:
建立憑證授權單位 (CA)
這個授權單位是您在後續步驟中產生所有用戶端和伺服器憑證的根 CA。
spanner certificates create-ca --ca-certificate-directory=certs
certs 目錄包含 CA 憑證。複製這個憑證,做為 API 憑證的 CA。
cp certs/ca.crt certs/ca-api.crt
$HOME/.spanner/private-keys 目錄包含 CA 的私密金鑰。備份並保護這個目錄。如果使用者有權存取私密金鑰,就能簽署任意憑證,而信任自行簽署 CA 的用戶端也會信任這些憑證。雖然所有憑證都可以使用同一個 CA,但 API 憑證和用戶端憑證必須使用同一個 CA。您可以選擇為 API 憑證建立額外的 CA (或使用外部信任的 CA)。建立憑證時,請務必在下列步驟中使用正確的 CA。本文對所有憑證類型使用相同的 CA。
產生伺服器憑證
您會產生兩種類型的伺服器憑證:
Spanner 伺服器憑證: 加密 Spanner Omni 伺服器之間的通訊。
API 憑證:加密與部署作業互動的系統通訊。
這樣一來,您就能更彈性地管理這些憑證,例如憑證輪替。
建立 Spanner 伺服器憑證
Spanner Omni 伺服器會使用伺服器憑證,加密彼此之間的通訊 (伺服器間通訊)。
執行下列指令,建立伺服器憑證。將 SERVER_LIST 替換為以半形逗號分隔的 Spanner 伺服器名稱或後置字串清單。
SERVER_NAMES=SERVER_LIST
spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
這個指令會在 certs 目錄中建立 server.crt 和 server.key 兩個檔案。
建立 API 憑證
API 憑證會加密與部署作業互動的系統通訊。API 和伺服器間通訊使用不同的憑證,可讓您獨立管理及輪替每種憑證。
執行下列指令,建立 API 憑證。將 LB_DNS 替換為負載平衡器的 DNS。
SERVER_NAMES=LB_DNS
spanner certificates create-server --filename-prefix=api --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
這個指令會在 certs 目錄中建立另外兩個檔案:api.crt 和 api.key。如有需要,您可以為 API 憑證使用外部信任的 CA。
將憑證發放給所有伺服器
將 certs 目錄複製到部署作業中的所有其他伺服器,即可啟動這些伺服器並使用網路安全功能。
scp -r certs REMOTE_HOST:SPANNER_DIR/certs
步驟 3:產生用戶端憑證
您可以使用用戶端憑證,在 Spanner 中驗證使用者和應用程式。用戶端憑證可啟用用戶端與伺服器之間的 mTLS。
用戶端憑證必須由與 API 憑證相同的 CA 簽署,且必須包含授權用的使用者名稱。這個範例使用 admin 使用者,這是每個資料庫的預設使用者。如要進一步瞭解使用者、角色和驗證選項,請參閱「Spanner Omni 中的驗證和授權」。
USERNAME=admin
spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
這個指令會在 clientcerts 目錄中建立 client.crt 和 client.key 檔案。將這些檔案傳送至連線至部署作業伺服器的任何電腦。
如果您打算搭配 Java 用戶端程式庫使用用戶端憑證,請務必以 PKCS#8 格式產生憑證金鑰。使用下列指令:
USERNAME=admin
spanner certificates create-client $USERNAME \
--output-directory clientcerts \
--ca-certificate-directory certs \
--generate-pkcs8-key
步驟 4:重新啟動伺服器
產生憑證並複製到部署作業中的所有伺服器後,請重新啟動每部伺服器。
單一伺服器部署作業
如為單一伺服器部署項目,請執行下列指令:
nohup spanner start-single-server \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
伺服器會啟動。請參閱「步驟 7:與部署作業互動」,瞭解如何與部署作業互動。
向外擴充部署
如果是向外擴充部署作業,請在每部機器上啟動伺服器。server_address 和 zone 的值必須與部署設定中的值相符。網路必須解析 server_address。伺服器會使用這個位址進行內部通訊。執行下列指令,啟動根伺服器:
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
下列指令顯示具有特定值的範例:
nohup spanner start \
--root \
--server-address=rootserver1 \
--zone=us-central-1a \
--base-dir=./spanbasedir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
如要為用戶端啟用 mTLS,請在啟動伺服器時使用 --enable-client-certificate-authentication=true 標記。
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 &
現在每部機器都已執行伺服器,您可以開始建立部署作業。
步驟 5:建立採用 TLS 加密的部署作業
從其中一個根伺服器執行 spanner deployment create 指令:
spanner deployment create --config-file=deployment.yaml
每部機器的控制台都會顯示訊息,指出部署作業現在包含 TLS 加密。所有伺服器都會透過加密管道相互通訊。
步驟 6:(選用) 設定負載平衡器
如要管理及分配部署作業中伺服器的用戶端流量,請設定負載平衡器。請確認健康狀態檢查的負載平衡器設定使用 HTTPS,而非 HTTP。請使用下列設定詳細資料:
| 參數 | 值 |
|---|---|
| 通訊協定 | TCP |
| 後端 IP | 伺服器的 IP 位址。 |
| 通訊埠 | 15000 (這是預設通訊埠。如果您在 --server-address 旗標中使用了其他通訊埠,請使用該通訊埠。 |
| 健康狀態檢查網址 | https://IP_ADDRESS:15012/healthz |
| 平衡策略 | roundrobin (依序將要求分散到各個伺服器) |
步驟 7:與部署作業互動
您可以使用 Spanner Omni CLI,從任何 VM 與 Spanner Omni 部署作業互動。
您必須在每個指令中加入下列旗標,才能建立加密連線:
--ca-certificate-file=certs/ca-api.crt
如果為用戶端啟用 mTLS,請在每個指令中加入下列旗標:
--client-certificate-directory=clientcerts
如要登入並與部署作業互動,請按照下列步驟操作:
登入 Spanner Omni
spanner auth login admin \ --ca-certificate-file=certs/ca-api.crt \ --deployment-endpoint=ENDPOINT預設密碼為
admin。Successfully logged in as "admin"建立資料庫
spanner --deployment-endpoint=ENDPOINT databases create mydb --ca-certificate-file=certs/ca-api.crtCreating database...done.開啟 SQL Shell
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner>建立資料表並新增資料
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)驗證資料
列出資料庫:
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 false從資料表取得資料:
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)
步驟 8:(選用) 擴大部署範圍
您可以將非根伺服器新增至區域,擴充區域容量。如要執行這項操作,請按照「步驟 2:產生憑證」的說明,為非根伺服器產生伺服器憑證,然後使用下列指令啟動伺服器:
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
後續步驟
- 使用用戶端程式庫和 JDBC 驅動程式,將應用程式連線至部署作業。
- 管理使用者和角色。