使用客戶自行管理的憑證授權單位 (CA)

本頁面說明如何使用客戶自行管理的憑證授權單位 (CA) 選項,做為 Cloud SQL 執行個體的伺服器 CA 模式。

總覽

如果選擇客戶自行管理的 CA,您必須在憑證授權單位服務 (CA 服務)中設定自己的 CA 集區和 CA。選取客戶自行管理的 CA 選項時,您必須設定 CA 階層,並管理 Cloud SQL 執行個體的 CA 憑證輪換作業。

您必須先在執行個體所在區域建立 CA 集區,並使用 CA 服務在該集區中建立至少一個 CA,才能將 Cloud SQL 執行個體設為使用客戶管理的 CA 選項。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 選項,工作流程如下:

  1. 為 Cloud SQL 專案建立服務帳戶。
  2. 在 CA 服務中建立 CA 集區。
  3. 在 CA 服務中建立 CA。
  4. 設定 Cloud SQL 執行個體,以便使用 CA。設定執行個體時,您會將權限委派給服務帳戶,以便使用您建立的 CA 集區簽署伺服器憑證。

事前準備

使用客戶自行管理的 CA 選項前,請確認您符合下列規定。

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that you have the permissions required to complete this guide.

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Certificate Authority Service API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. Install the gcloud CLI.

  6. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init

必要的角色

如要取得建立 Cloud SQL 專用服務帳戶所需的權限,請要求管理員為各項專案授予您服務帳戶建立者 (roles/iam.serviceAccountCreator) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

如要取得建立 CA 集區和 CA 所需的權限,請要求管理員授予您 CA 服務的 CA 服務作業管理員 (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. 的服務帳戶。記下 CA 服務憑證要求者服務帳戶名稱。

建立憑證授權單位集區

在 CA 服務中建立 CA 集區。

您可以在要建立 Cloud SQL 執行個體的專案中建立 CA 集區,也可以在其他專案中建立 CA 集區。不過,如果您在其他專案中建立 CA 集區,VPC Service Controls 可能會根據組織政策,禁止您建立任何 Cloud SQL 執行個體。如要修正問題,請確認託管 CA 集區和 CA 的專案,以及託管 Cloud SQL 的專案,都屬於同一個 service perimeter。詳情請參閱「Service perimeter」和「管理 service perimeter」。

如要建立 CA 集區,請按照「建立 CA 集區」中的操作說明進行。您可以接受 CA 集區的預設值,並採用下列必要設定:

  • 在您打算建立 Cloud SQL 執行個體的相同區域中建立 CA 集區。如需 Cloud SQL 支援的區域清單,請參閱「區域」。
  • 允許以設定為基礎的憑證要求。
  • 允許主體別名 (SAN) 中的 DNS 名稱。設定 CA 集區的身分限制時,請勿對 DNS 名稱格式設定任何限制,以免與 Cloud SQL 可能新增至 SAN 的內容發生衝突。
  • 如果您為 CA 集區設定身分限制,請務必允許在 SAN 中使用 IP 位址格式。

提供服務帳戶 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 的預設值,但請務必在「Enabled」(已啟用) 狀態下建立 CA。

設定「CA key size and algorithm」(CA 金鑰大小和演算法) 時,您可以選取任何金鑰大小和演算法。Cloud SQL 會使用 EC P-256 (SHA 256) 橢圓曲線金鑰產生伺服器憑證,但 CA 加密編譯金鑰不一定要相符。

如要建立從屬 CA,請先建立並設定根 CA。

設定 Cloud SQL 執行個體,使用客戶管理的 CA

建立 Cloud SQL 執行個體時,您可以設定執行個體,使用客戶管理的 CA 選項。您也可以更新現有執行個體的伺服器 CA 模式,將每個執行個體的 CA 或共用 CA 選項,改為使用客戶自行管理的 CA。

建立執行個體

如要建立使用客戶自行管理的 CA 選項的 Cloud SQL 執行個體,請按照下列步驟操作。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 在「Instance ID」中,輸入執行個體名稱。
  3. 選取資料庫引擎、資料庫版本、Cloud SQL 版本、區域和可用性類型,或接受預設值,如「建立執行個體」所述。
  4. 在「自訂執行個體」部分,展開「顯示設定選項」。
  5. 點按「安全性」。
  6. 在「Server certificate authority mode」(伺服器憑證授權單位模式) 專區,選取「Customer managed CAS certificate authority」(客戶自行管理的 CAS 憑證授權單位)。
  7. 從「CA pool」(CA 集區) 選單中,選取執行個體的 CA 集區。CA 集區必須與您為執行個體選取的區域相同。如果還沒有 CA 集區,請按一下「New pool」(新增集區),建立新的集區。
  8. 選用:如要啟用伺服器憑證自動輪換功能,請勾選「自動輪換伺服器憑證」核取方塊。
  9. 點選「建立執行個體」。

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": "user@example.com",
  "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"
}

更新執行個體,改用客戶自行管理的 CA

更新執行個體以使用客戶管理的 CA 前,請先完成下列事項:

  • 查看 Google Cloud 服務清單,瞭解哪些服務不支援連線至設定為使用客戶自行管理的 CA 的 Cloud SQL 執行個體。如果部署作業必須使用該服務,您可能需要延後更新。
  • 如果您使用 Cloud SQL Auth Proxy 或任何 Cloud SQL 語言連接器連線至執行個體,請確認這些工具的版本符合最低要求。如要使用 Cloud SQL Auth Proxy,請確認您使用的是 2.14.3 以上版本。如要瞭解 Cloud SQL 語言連接器的最低版本需求,請參閱「Cloud SQL 語言連接器需求」。
  • 請確認您已建立 CA 集區,並為服務帳戶提供 CA 集區的存取權。
  • 確認 CA 集區中至少有一個 CA。
  • 為避免更新後發生任何中斷情形,請從客戶自行管理的 CA 下載憑證,並將資料庫用戶端設為信任您的 CA。

請按照下列程序更新 Cloud SQL 執行個體,改用客戶自行管理的 CA 選項。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 點選執行個體名稱,開啟執行個體的「總覽」頁面。
  3. 按一下 [編輯]。
  4. 在「自訂執行個體」部分,展開「顯示設定選項」。
  5. 點按「安全性」。
  6. 在「Server certificate authority mode」(伺服器憑證授權單位模式) 專區,選取「Customer managed CAS certificate authority」(客戶自行管理的 CAS 憑證授權單位)。
  7. 從「CA pool」(CA 集區) 選單中,選取執行個體的 CA 集區。CA 集區必須與您為執行個體選取的區域相同。如果還沒有 CA 集區,請按一下「New pool」(新增集區),建立新的集區。
  8. 選用:如要啟用伺服器憑證自動輪換功能,請勾選「自動輪換伺服器憑證」核取方塊。
  9. 按一下「儲存」。

gcloud

如要更新執行個體,請執行下列指令:

gcloud sql instances patch INSTANCE_NAME \
--server-ca-mode=CUSTOMER_MANAGED_CAS_CA \
--server-ca-pool=projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID

請務必為 --server-ca-mode 旗標指定 CUSTOMER_MANAGED_CAS_CA。

更改下列內容:

  • INSTANCE_NAME:要修補的 Cloud SQL 執行個體名稱。
  • PROJECT_ID_CAS:CA_POOL_ID 所在專案的 ID。這個專案可能與 Cloud SQL 執行個體所在專案相同,也可能不同。
  • 將 REGION 替換為建立 CA 集區的區域。執行個體必須與 CA 集區位於相同區域。
  • CA_POOL_ID:要指派給執行個體的 CA 集區 ID。您也可以使用這個指令,為已設為使用 CUSTOMER_MANAGED_CAS_CA 的執行個體變更 CA 集區

REST

如要更新 Cloud SQL 執行個體,改用客戶管理的 CA 選項,請使用 instances.patch 方法,並指定下列屬性:

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:Cloud SQL 執行個體所在專案的 ID。
  • INSTANCE_ID:要修補的 Cloud SQL 執行個體名稱。
  • PROJECT_ID_CAS:您建立 CA_POOL_ID 的專案 ID。這個專案可能與 Cloud SQL 執行個體所在專案相同或不同。
  • REGION 是您建立 CA 集區的區域。您必須在 CA 集區所在的區域建立執行個體。
  • CA_POOL_ID:要指派給執行個體的 CA 集區 ID。您也可以使用這個指令,變更已設為使用 CUSTOMER_MANAGED_CAS_CA 的執行個體 CA 集區。

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

JSON 要求主體:

{
  "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/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2025-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

將執行個體從客戶自行管理的 CA 切換至共用 CA

您可以將使用客戶自行管理 CA 的執行個體,更新為使用共用 CA (GOOGLE_MANAGED_CAS_CA)。不過,如果執行個體已設為使用客戶自行管理的 CA,則無法更新為使用執行個體專屬 CA (GOOGLE_MANAGED_INTERNAL_CA)。

更新執行個體以使用共用 CA 之前,請先下載全域和區域 CA 組合,並複製到資料庫用戶端,讓用戶端信任這些 CA。在切換伺服器 CA 模式設定前設定憑證,有助於避免資料庫用戶端可能中斷。

如要將執行個體的伺服器 CA 模式切換為使用共用 CA,請按照下列程序操作。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 點選執行個體名稱,開啟執行個體的「總覽」頁面。
  3. 按一下 [編輯]。
  4. 在「自訂執行個體」部分,展開「顯示設定選項」。
  5. 點按「安全性」。
  6. 在「Server certificate authority mode」(伺服器憑證授權單位模式) 專區,選取「Google managed CAS certificate authority」(Google 代管的 CAS 憑證授權單位)。
  7. 選用:如要啟用伺服器憑證自動輪換功能,請勾選「自動輪換伺服器憑證」核取方塊。
  8. 按一下「儲存」。

gcloud

如要更新執行個體,請執行下列指令:

gcloud sql instances patch INSTANCE_NAME \
--server-ca-mode=GOOGLE_MANAGED_CAS_CA \
--server-ca-pool=""

在指令中執行下列操作:

  • 將 INSTANCE_NAME 替換為要修補的 Cloud SQL 執行個體名稱。
  • 為 --server-ca-mode 旗標指定 GOOGLE_MANAGED_CAS_CA。
  • 針對 --server-ca-pool 旗標,您必須指定空白字串或 ""。

REST

如要更新使用客戶自行管理的 CA 的 Cloud SQL 執行個體,改用共用 CA 選項,請使用 instances.patch 方法並指定下列屬性:

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:Cloud SQL 執行個體所在專案的 ID。
  • INSTANCE_ID:要修補的 Cloud SQL 執行個體名稱。

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

JSON 要求主體:

{
  "settings":{
     "ipConfiguration":
      {
         "serverCaPool": "",
         "serverCaMode": "GOOGLE_MANAGED_CAS_CA"
      }
   }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2025-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

疑難排解

問題 疑難排解

您收到下列錯誤訊息:

PERMISSION_DENIED: Permission privateca.certificates.create denied on CA_POOL_ID。
請務必將 roles/privateca.certificateRequester 角色授予您為 Cloud SQL 專案建立的服務帳戶。詳情請參閱「為服務帳戶提供 CA 集區存取權」。

您收到下列錯誤訊息:

PERMISSION_DENIED: Request is prohibited by organization's policy vpcServiceControlsUniqueIdentifier VPC_SERVICE_CONTROLS_UNIQUE_IDENTIFIER.
請務必設定 VPC Service Controls,讓託管 CA Service CA 集區和 CA 的專案,以及託管 Cloud SQL 的專案,都屬於同一個 service perimeter。詳情請參閱「Service perimeter」和「管理 service perimeter」。

您收到下列其中一則 INVALID ARGUMENT 錯誤訊息:

  • Public key algorithm is not permitted by the CaPool's issuance policy.
  • This CaPool's issuance policy does not permit passthrough subjects and/or subject alternative names, and thus can only be used with the REFLECTED_SPIFFE subject mode.
  • Config issuance mode is not permitted by the CaPool's issuance policy.

請檢查 CA 集區和 CA 的配置設定。請確認您符合「建立 CA 集區」和「在 CA 集區中建立 CA」列出的所有需求條件。

您收到下列錯誤訊息:

RESOURCE_EXHAUSTED

這代表 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 執行個體位於相同區域。

後續步驟