設定私人服務存取權和 Private Service Connect

本頁面說明如何設定私人服務存取權Private Service Connect

設定私人服務存取權後,您就能分配 IP 位址範圍,並為 Trusted Cloud 專案中的虛擬私有雲 (VPC) 網路建立私人服務連線。這樣一來,虛擬私有雲網路中的資源就能連線至 Cloud SQL 執行個體。

設定 Private Service Connect 後,您就能從屬於不同群組、團隊、專案或機構的多個虛擬私有雲網路,連線至主要 Cloud SQL 執行個體或任何讀取副本。

建立支援私人服務存取和 Private Service Connect 的執行個體

建立同時支援私人服務存取權和 Private Service Connect 的 Cloud SQL 執行個體,即可享有這兩項服務的優點。詳情請參閱執行個體的連線選項

使用 Private Service Connect,即可從屬於不同群組、團隊、專案或機構的多個虛擬私有雲網路連線至 Cloud SQL 執行個體。

您可以使用 gcloud CLI 或 API,建立支援私人服務存取權和 Private Service Connect 的 Cloud SQL 執行個體。

gcloud

如要建立同時支援私人服務存取和 Private Service Connect 的執行個體,請使用 gcloud beta sql instances create 指令:

gcloud beta sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip \
--allocated-ip-range-name=RANGE_NAME \
--enable-google-private-path \
--tier=MACHINE_TYPE \
--database-version=DATABASE_VERSION \
--network=VPC_PSA_NETWORK_PATH \
--enable-bin-log \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

請將下列項目改為對應的值:

  • INSTANCE_NAME:執行個體的名稱。
  • PROJECT_ID:包含執行個體的專案 ID 或專案編號。 Trusted Cloud
  • REGION_NAME:執行個體的區域名稱。
  • ALLOWED_PROJECTS:以半形逗號分隔的允許專案 ID 或編號清單。如果專案不在這個清單中,您就無法在專案中建立 Private Service Connect 端點,連線至執行個體。

  • AVAILABILITY_TYPE:為執行個體啟用高可用性。請為這個參數指定下列其中一個值:
    • REGIONAL:啟用高可用性,建議用於實際工作環境執行個體。執行個體會容錯移轉至所選區域內的其他可用區。
    • ZONAL:不提供容錯移轉功能。這是預設值。

    如要進一步瞭解如何為執行個體設定及移除高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。

  • RANGE_NAME:針對這個選用參數,設定要分配 IP 範圍的範圍名稱。範圍名稱必須符合RFC 1035,且長度介於 1 至 63 個字元之間。
  • MACHINE_TYPE:執行個體的機器類型。
  • DATABASE_VERSION:執行個體的資料庫版本 (例如 MYSQL_8_0)。
  • VPC_PSA_NETWORK_PATH:執行個體連線的虛擬私有雲網路名稱和路徑 (例如 "projects/PROJECT_ID/global/networks/default")。這個網路用於私人服務存取連線,以及 Cloud SQL 執行個體的私人服務存取 IP 位址。
  • VPC_PSC_NETWORK_PATH:建立 Private Service Connect 端點時,虛擬私有雲網路的路徑。例如:
    projects/my-host-project/global/networks/default
  • SERVICE_PROJECT:建立 Private Service Connect 端點的專案。如果 VPC 網路不是共用 VPC,則只能是該網路的主專案。如果是共用虛擬私有雲,則可以是主專案或服務專案。

如要瞭解如何連線至已啟用 Private Service Connect 的執行個體,請參閱「連線至 Cloud SQL 執行個體」。

如要停用公開 IP,請使用 --no-assign-ip 參數。

此外,您也可以選擇使用 --enable-google-private-path 參數,允許 BigQuery 等其他服務透過私人 IP 連線存取 Cloud SQL 中的資料,並對這些資料執行查詢。 Trusted Cloud 只有在下列情況下,這個參數才有效:

  • 使用 --no-assign-ip 參數。
  • 您可以使用 --network 參數,指定要用於建立私人連線的虛擬私有雲網路名稱。

Terraform

如要建立同時啟用私人服務存取和 Private Service Connect 的執行個體,請使用 google_sql_database_instance Terraform 資源


resource "google_compute_network" "peering_network" {
  name                    = "private-network"
  auto_create_subnetworks = "false"
}

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.peering_network.id
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.peering_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

resource "google_sql_database_instance" "default" {
  name             = "mysql-instance"
  region           = "us-central1"
  database_version = "MYSQL_8_0"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-f1-micro"
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = [] # Add consumer project IDs here.
      }
      ipv4_enabled    = false
      private_network = google_compute_network.peering_network.id
    }
  }
}

resource "google_compute_network_peering_routes_config" "peering_routes" {
  peering              = google_service_networking_connection.default.peering
  network              = google_compute_network.peering_network.name
  import_custom_routes = true
  export_custom_routes = true
}

resource "google_compute_address" "default" {
  name         = "psc-compute-address-${google_sql_database_instance.default.name}"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"      # Replace value with the name of the subnet here.
  address      = "192.168.0.43" # Replace value with the IP address to reserve.
}

data "google_sql_database_instance" "default" {
  name = resource.google_sql_database_instance.default.name
}

resource "google_compute_forwarding_rule" "default" {
  name                  = "psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region                = "us-central1"
  network               = "default"
  ip_address            = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target                = data.google_sql_database_instance.default.psc_service_attachment_link
}

如要在 Trusted Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Trusted Cloud 專案。

    每項專案只需要執行一次這個指令,且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 .tf,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。

    將範例程式碼複製到新建立的 main.tf

    視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。

  3. 查看並修改範例參數,套用至您的環境。
  4. 儲存變更。
  5. 初始化 Terraform。每個目錄只需執行一次這項操作。
    terraform init

    如要使用最新版 Google 供應商,請加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」訊息。

  3. 開啟 Trusted Cloud 專案即可查看結果。在 Trusted Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含執行個體的專案 ID 或專案編號。 Trusted Cloud
  • INSTANCE_NAME:執行個體的名稱。
  • REGION_NAME:執行個體的區域名稱。
  • AVAILABILITY_TYPE:為執行個體啟用高可用性。請為這個參數指定下列其中一個值:
    • REGIONAL:啟用高可用性,建議用於實際工作環境執行個體。執行個體會容錯移轉至所選區域內的其他可用區。
    • ZONAL:不提供容錯移轉功能。這是預設值。

    如要進一步瞭解如何為執行個體設定及移除高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。

  • VPC_PSA_NETWORK_PATH:執行個體連線的虛擬私有雲網路路徑 (例如 "projects/PROJECT_ID/global/networks/default")。這個網路用於私人服務存取連線,以及 Cloud SQL 執行個體的私人服務存取 IP 位址。
  • RANGE_NAME:針對這個選用參數,設定要分配 IP 範圍的範圍名稱。範圍名稱必須符合RFC 1035,且長度介於 1 至 63 個字元之間。
  • ALLOWED_PROJECTS:以半形逗號分隔的允許專案 ID 或編號清單。如果專案不在這個清單中,您就無法在專案中建立 Private Service Connect 端點,連線至執行個體。

  • VPC_PSC_NETWORK_PATH:建立 Private Service Connect 端點時,虛擬私有雲網路的路徑。例如:
    projects/my-host-project/global/networks/default
  • SERVICE_PROJECT:建立 Private Service Connect 端點的專案。如果 VPC 網路不是共用 VPC,則只能是該網路的主專案。如果是共用虛擬私有雲,則可以是主專案或服務專案。

  • MACHINE_TYPE:執行個體的機器類型。

如要瞭解如何連線至已啟用 Private Service Connect 的執行個體,請參閱「連線至 Cloud SQL 執行個體」。

由於執行個體具有內部 IP 位址,因此您將 ipv4Enabled 參數設為 false

如果將選用的 enablePrivatePathForGoogleCloudServices 參數設為 true,則允許 BigQuery 等其他 Trusted Cloud by S3NS 服務存取 Cloud SQL 中的資料,並透過內部 IP 連線查詢這項資料。將這個參數設為 false 後,其他 Trusted Cloud by S3NS 服務就無法透過內部 IP 連線存取 Cloud SQL 中的資料。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

JSON 要求主體:

{
  "name": "INSTANCE_NAME",
  "project": PROJECT_ID",
  "region": "REGION_NAME",
  "databaseVersion": "MYSQL_8_0",
  "kind": "sql#instance",
  "settings": {
    "availabilityType": "AVAILABILITY_TYPE",
    "backupConfiguration": {
      "binaryLogEnabled": true,
      "enabled": true,
      "kind": "sql#backupConfiguration",
      "startTime": "00:00"
    },
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": VPC_PSA_NETWORK_PATH,
      "allocatedIpRange": "RANGE_NAME",
      "enablePrivatePathForGoogleCloudServices": true,
      "pscConfig": {
        "allowedConsumerProjects": [
          "ALLOWED_PROJECTS"
        ],
        "pscAutoConnections": [
          {
            "consumerProject":"SERVICE_PROJECT",
            "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_PSC_NETWORK_PATH"
          }
        ],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "SYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

停用執行個體的 Private Service Connect

如果執行個體同時啟用 Private Service Connect 和私有服務存取權,您可以停用 Private Service Connect。

停用執行個體的 Private Service Connect 時,這項作業預計需要 8 分鐘,執行個體會停機約 45 秒。作業完成後,私人服務存取和 Private Service Connect 連線路徑就不會再共存在同一個執行個體上。您無法使用 Private Service Connect 連線至執行個體。

您可以使用 gcloud CLI 或 API,為執行個體停用 Private Service Connect。

gcloud

如要停用執行個體的 Private Service Connect,請使用 gcloud beta sql instances patch 指令:

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--no-enable-private-service-connect \
--clear-allowed-psc-projects

請將下列項目改為對應的值:

  • INSTANCE_NAME:執行個體名稱
  • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Trusted Cloud

Terraform

如要停用執行個體的 Private Service Connect,請使用 google_sql_database_instance Terraform 資源

resource "google_sql_database_instance" "disable_psc_example" {
  name             = "mysql-disable-psc-example"
  region           = "us-central1"
  database_version = "MYSQL_8_0"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-f1-micro"
    ip_configuration {
      psc_config {
        psc_enabled               = false
        allowed_consumer_projects = [] # clear consumer projects
      }
      ipv4_enabled    = false
      private_network = google_compute_network.peering_network.id
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Trusted Cloud
  • INSTANCE_NAME:執行個體名稱

HTTP 方法和網址:

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

JSON 要求主體:

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "pscEnabled": "false",
        "allowedConsumerProjects": [{}]
      }
    },
    "kind": "sql#settings"
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

為執行個體啟用 Private Service Connect

如果執行個體已啟用私人服務存取,您可以為該執行個體啟用 Private Service Connect。您可以使用 Private Service Connect,從多個虛擬私有雲網路連線至 Cloud SQL 執行個體。

為執行個體啟用 Private Service Connect 時,這項作業預計需要 8 分鐘,執行個體會停機約 45 秒。作業完成後,私人服務存取和 Private Service Connect 連線路徑都會存在於同一個執行個體上。

您可以使用 gcloud CLI 或 API,為執行個體啟用 Private Service Connect。

gcloud

如要為執行個體啟用 Private Service Connect,請使用 gcloud beta sql instances patch 指令:

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

請將下列項目改為對應的值:

  • INSTANCE_NAME:執行個體名稱
  • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Trusted Cloud
  • ALLOWED_PROJECTS:以半形逗號分隔的允許專案 ID 或編號清單。如果專案不在這個清單中,您就無法在專案中建立 Private Service Connect 端點,連線至執行個體。

  • VPC_PSC_NETWORK_PATH:建立 Private Service Connect 端點的虛擬私有雲網路路徑。例如:
    projects/my-host-project/global/networks/default
  • SERVICE_PROJECT:建立 Private Service Connect 端點的專案。如果 VPC 網路不是共用 VPC,則只能是該網路的主專案。如果是共用虛擬私有雲,則可以是主專案或服務專案。

如要瞭解如何連線至已啟用 Private Service Connect 的執行個體,請參閱「連線至 Cloud SQL 執行個體」。

Terraform

如要為執行個體啟用 Private Service Connect,請使用 google_sql_database_instance Terraform 資源

resource "google_sql_database_instance" "default" {
  name             = "mysql-instance"
  region           = "us-central1"
  database_version = "MYSQL_8_0"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-f1-micro"
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = [] # Add consumer project IDs here.
      }
      ipv4_enabled    = false
      private_network = google_compute_network.peering_network.id
    }
  }
}

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含執行個體的專案 ID 或專案編號。 Trusted Cloud
  • INSTANCE_NAME:執行個體的名稱。
  • ALLOWED_PROJECTS:以半形逗號分隔的允許專案 ID 或編號清單。這些專案會覆寫已設為使用 Private Service Connect 的專案。如果專案不在這個清單中,您就無法在專案中建立 Private Service Connect 端點,連線至執行個體。
  • VPC_PSC_NETWORK_PATH:建立 Private Service Connect 端點的虛擬私有雲網路路徑。例如:
    projects/my-host-project/global/networks/default
  • SERVICE_PROJECT:建立 Private Service Connect 端點的專案。如果 VPC 網路不是共用 VPC,則只能是該網路的主專案。如果是共用虛擬私有雲,則可以是主專案或服務專案。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "pscAutoConnections": [
          {
            "consumerProject":"SERVICE_PROJECT",
            "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_PSC_NETWORK_PATH"
          }
        ],
        "pscEnabled": "true",
        "allowedConsumerProjects": [ALLOWED_PROJECTS]
      }
    },
    "kind": "sql#settings"
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

如要瞭解如何連線至已啟用 Private Service Connect 的執行個體,請參閱「連線至 Cloud SQL 執行個體」。