本頁說明如何將客戶管理的憑證授權單位 (CA) 選項用於 Cloud SQL 執行個體的伺服器 CA 模式。
總覽
使用客戶管理的 CA 選項時,您可以在 憑證授權單位服務 (CA 服務) 中設定自己的 CA 集區和 CA。選取客戶自行管理的 CA 選項後,您可以設定 CA 階層,並管理 Cloud SQL 執行個體的 CA 憑證輪替作業。
您必須先在與執行個體相同的區域中建立 CA 集區,並使用 CA 服務在該集區中建立至少一個 CA,才能使用客戶管理的 CA 選項建立 Cloud SQL 執行個體。CA 可以是根 CA或從屬 CA。您也可以在 CA 服務中建立從屬 CA,然後將從屬 CA 鏈結至外部根 CA。建立執行個體時,您必須指定 CA 集區。您的要求會委派給專屬專案服務帳戶,該帳戶具有使用 CA 資源池的權限。服務帳戶會向集區要求 CA,Cloud SQL 會使用該 CA 為執行個體簽署伺服器憑證。
如要為 Cloud SQL 中的執行個體選擇伺服器 CA 模式,您可以選擇下列三個選項:
- 每個例項的內部 CA
- Google 代管的共用 CA
- 由客戶自行管理的 CA
如果您基於法規遵循需求,需要自行管理 CA,可以選擇「客戶管理的 CA」選項。如要進一步瞭解如何使用其他選項,請參閱「使用 SSL/TLS 憑證進行授權」一節。
工作流程
如要使用客戶管理的 CA 選項,工作流程如下:
- 為 Cloud SQL 專案建立服務帳戶。
- 在 CA 服務中建立 CA 集區。
- 在 CA 服務中建立 CA。
- 建立使用 CA 的 Cloud SQL 執行個體。建立執行個體時,您會將權限委派給服務帳戶,以便使用您建立的 CA 集區簽署伺服器憑證。
事前準備
使用客戶管理的 CA 選項前,請確認您符合下列需求。
必要的角色
如要取得建立 Cloud SQL 專屬服務帳戶所需的權限,請管理員為每個個別專案授予「服務帳戶建立者」 (roles/iam.serviceAccountCreator
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
如要取得建立 CA 集區和 CA 所需的權限,請要求管理員授予您 CA 服務的「CA Service Operation Manager」(roles/privateca.caManager
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
建立專案專屬服務帳戶
在您打算建立 Cloud SQL 執行個體的專案中,建立專用服務帳戶,以便處理建立及簽署 Cloud SQL 執行個體的伺服器憑證的要求。
gcloud
執行下列指令,為 Cloud SQL 專案建立服務帳戶:
gcloud beta services identity create \ --service=sqladmin.googleapis.com \ --project=PROJECT_ID
將 PROJECT_ID
替換為您打算建立 Cloud SQL 執行個體的專案 ID。
這項指令會在專案中建立名為 service-PROJECT_ID@gcp-sa-cloud-sql.iam.gserviceaccount.com
的服務帳戶。記下 CA 服務憑證要求者服務帳戶名稱。
建立憑證授權單位集區
在 CA 服務中建立 CA 集區。
您可以在要建立 Cloud SQL 執行個體的專案中建立 CA 集區,也可以在其他專案中建立 CA 集區。不過,如果您在其他專案中建立 CA 資源池,VPC Service Controls 可能會根據機構政策禁止您建立任何 Cloud SQL 執行個體。如要修正這個問題,請確認代管 CA 集區和 CA 的專案,以及代管 Cloud SQL 的專案,都屬於相同的服務範圍。詳情請參閱「服務範圍」和「管理服務範圍」。
如要建立 CA 集區,請按照「建立 CA 集區」一文中的指示操作。您可以接受 CA 集區的預設值,並使用下列必要的設定:
- 在您打算建立 Cloud SQL 執行個體的相同區域中建立 CA 集區。如需 Cloud SQL 支援的地區清單,請參閱「地區」。
- 允許以設定為基礎的憑證要求。
- 允許主體別名 (SAN) 中的 DNS 名稱。設定 CA 集區的 ID 限制時,請勿針對 DNS 名稱的格式設定任何限制,以免與 Cloud SQL 可能新增至 SAN 的內容產生衝突。
為服務帳戶提供 CA 集區存取權
為確保服務帳戶具備為 Cloud SQL 執行個體申請及簽署憑證的權限,請為您建立的 CA 集區服務帳戶授予下列角色:
roles/privateca.certificateRequester
gcloud
執行
gcloud privateca pools
指令,將 CA 集區的存取權授予服務帳戶:
gcloud privateca pools add-iam-policy-binding CA_POOL_ID \ --project=PROJECT_ID \ --location=REGION \ --member serviceAccount:SERVICE_ACCOUNT_NAME \ --role=roles/privateca.certificateRequester
請將以下項目改為對應的值:
CA_POOL_ID
替換為您建立的 CA 集區 ID。PROJECT_ID
與您打算建立 Cloud SQL 執行個體的專案 ID。REGION
則替換為您建立 CA 集區的地區。SERVICE_ACCOUNT_NAME
與您先前為專案建立的 CA 服務憑證要求者服務帳戶名稱。
在 CA 集區中建立 CA
在您建立的 CA 集區中至少建立一個 CA。
您可以建立根 CA 或從屬 CA。
如要建立根 CA,請按照「建立根 CA」中的指示操作。您可以接受 CA 的預設值,但請務必在「已啟用」狀態下建立 CA。
設定 CA 金鑰大小和演算法時,您可以選取任何金鑰大小和演算法。Cloud SQL 會使用 EC P-384 (SHA-384) 橢圓曲線金鑰產生伺服器憑證,但 CA 加密編譯金鑰不必相符。如果您建立子 CA,則必須先建立並設定根 CA。
如要在 CA 服務中建立子 CA,請按照「建立子 CA」中的操作說明進行。
如要透過外部根 CA 建立從屬 CA,請按照透過外部根 CA 建立從屬 CA一文中的操作說明進行。
建立 Cloud SQL 執行個體
如要建立使用客戶管理 CA 選項的 Cloud SQL 執行個體,請執行下列操作。
控制台
您無法使用 Google Cloud 控制台建立使用客戶管理 CA 選項的執行個體。如果您使用Google Cloud 主控台建立執行個體,預設會採用共用 CA 模式。
如要選取其他伺服器 CA 模式,請改用 gcloud sql instances create
指令。
gcloud
gcloud sql instances create "INSTANCE_NAME" \ --database-version=DATABASE_VERSION \ --project=PROJECT_ID \ --region=REGION \ --server-ca-mode=CUSTOMER_MANAGED_CAS_CA \ --server-ca-pool=projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID
請將以下項目改為對應的值:
INSTANCE_NAME
與您要建立的 Cloud SQL 執行個體名稱。DATABASE_VERSION
與您要建立的 Cloud SQL 執行個體版本的enum
相同。PROJECT_ID
與您打算建立 Cloud SQL 執行個體的專案 ID。PROJECT_ID_CAS
與您建立 CA_POOL_ID 的專案 ID 相符。這個專案可能與您要建立 Cloud SQL 執行個體的專案相同,也可能不同。REGION
則替換為您建立 CA 集區的地區。您必須將執行個體建立在與 CA 集區相同的地區內。CA_POOL_ID
替換為您建立的 CA 集區 ID。
REST
如要建立使用客戶管理 CA 選項的 Cloud SQL 執行個體,請使用 instances.insert
方法,並指定下列屬性:
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
您打算建立 Cloud SQL 執行個體的專案 ID。PROJECT_ID_CAS
:您建立 CA_POOL_ID 的專案 ID。這個專案可能與您要建立 Cloud SQL 執行個體的專案相同,也可能不同。INSTANCE_ID
您要建立的 Cloud SQL 執行個體名稱。REGION
您建立 CA 集區的地區。您必須將執行個體建立在與 CA 集區相同的地區內。CA_POOL_ID
替換為您建立的 CA 集區 ID。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
JSON 要求主體:
{
"name":"INSTANCE_ID",
"region":"REGION
",
"databaseVersion": "DATABASE_VERSION",
"settings":{
"ipConfiguration":
{
"serverCaPool": "projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID",
"serverCaMode": "CUSTOMER_MANAGED_CAS_CA"
}
}
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances", "status": "PENDING", "user": "[email protected]", "insertTime": "2025-01-16T02:32:12.281Z", "operationType": "UPDATE", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID_CSQL/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
疑難排解
問題 | 疑難排解 |
---|---|
您會收到下列錯誤訊息: PERMISSION_DENIED: Permission 。 |
請確認您已為 Cloud SQL 專案建立的服務帳戶授予 roles/privateca.certificateRequester 角色。詳情請參閱「為服務帳戶提供 CA 集區存取權」一文。 |
您會收到下列錯誤訊息: PERMISSION_DENIED: Request is prohibited by organization's policy vpcServiceControlsUniqueIdentifier VPC_SERVICE_CONTROLS_UNIQUE_IDENTIFIER.
|
請務必設定 VPC Service Controls,讓代管 CA 服務 CA 集區和 CA 的專案,以及代管 Cloud SQL 的專案,都屬於相同的服務範圍。詳情請參閱「服務範圍」和「管理服務範圍」。 |
您會收到下列其中一則
|
檢查 CA 集區和 CA 的設定。 請確認您符合「建立 CA 集區」和「在 CA 集區中建立 CA」一文中列出的所有規定。 |
您會收到下列錯誤訊息:
|
這代表 CA 服務的配額問題。請確認專案中的憑證授權單位服務配額。檢查是否可能在 Cloud SQL 以外的 CA 集區中使用要求。詳情請參閱「配額與限制」。 |
您會收到下列錯誤訊息: NOT FOUND: parent resource CA_POOL_ID not found.
|
請檢查您在建立 Cloud SQL 執行個體時指定的專案 ID、位置和 CA 集區名稱。請確認你沒有輸入任何錯字。 |
您會收到下列錯誤訊息: FAILED_PRECONDITION: There are no enabled CAs in the CaPool.
Please ensure that there is at least one enabled Certificate Authority to
issue a certificate.
|
請確認您已在建立 Cloud SQL 執行個體時指定的 CA 集區中,建立至少一個 CA,且該 CA 處於已啟用狀態。 |
您會收到下列錯誤訊息: FAILED_PRECONDITION: Per-Product Per-Project Service Account (P4 SA) SERVICE_ACCOUNT_NAME not found for project PROJECT_ID.
|
請確認您已為 Cloud SQL 專案建立服務帳戶。詳情請參閱「建立專案專屬服務帳戶」。 |
您會收到下列錯誤訊息: INVALID ARGUMENT: Invalid format for server CA pool.
|
請確認您指定的 CA 資源池格式正確無誤: projects/PROJECT_ID/locations/REGION/caPools/CA_POOL_ID
|
您會收到下列錯誤訊息: INVALID ARGUMENT: The instance's server CA pool must be in the same region as the instance.
|
請確認 CA 集區與要建立的 Cloud SQL 執行個體位於相同區域。 |