針對 IAM 資料庫驗證設定現有和新的執行個體

本頁提供建立或編輯 Cloud SQL 執行個體的程序,允許設定為使用 Cloud SQL IAM 資料庫驗證的使用者、服務帳戶或群組存取。如要進一步瞭解 Cloud SQL IAM 整合,請參閱「IAM 驗證」。

新建立的執行個體會包含 postgres 資料庫。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the gcloud CLI.

  5. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Install the gcloud CLI.

  10. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

    gcloud init
  12. 請確認使用者帳戶具備 Cloud SQL 管理員和 Compute 檢視者角色。

    前往「IAM」頁面

    進一步瞭解角色和權限。

  13. 單一專案可擁有的執行個體數量上限取決於這些執行個體的網路架構

    • 全新 SQL 網路架構:每個專案最多可有 1000 個執行個體。
    • 舊版 SQL 網路架構:每個專案最多可有 100 個執行個體。
    • 同時使用兩種架構:視執行個體在兩種架構中的分布情形而定,上限介於 100 到 1000 之間。

    如需提高上限,請提交客服案件。唯讀備用資源會計為執行個體。

    為 IAM 資料庫驗證設定新的執行個體

    如要為 IAM 資料庫驗證設定新的 Cloud SQL 執行個體,請啟用 cloudsql.iam_authentication 旗標。啟用這個旗標後,您就可以將 IAM 使用者、服務帳戶或群組新增至 Cloud SQL 執行個體。

    如要設定新的 Cloud SQL 執行個體以使用 IAM 資料庫驗證,請按照下列步驟操作:

    控制台

    1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

      前往 Cloud SQL 執行個體

    2. 點選「建立執行個體」
    3. 按一下「Choose PostgreSQL」(選擇 PostgreSQL)
    4. 輸入「執行個體 ID」的名稱。
    5. 請勿在執行個體名稱中加入敏感資訊或個人識別資訊,因為外部使用者可以看見此名稱。您不需要在執行個體名稱中包含專案 ID,系統會在適當地方 (例如在記錄檔中) 自動加入專案 ID。
    6. 輸入預設管理員的密碼。
    7. 從「資料庫版本」選單中選取資料庫版本。
    8. 在「Choose region and zonal availability」(選擇區域和可用區供應情形) 專區中,選取執行個體的區域和可用區。您的執行個體必須與存取該執行個體的資源位於相同地區。選取的區域日後無法修改。通常不需要指定區域。
    9. 在「Customize your instance」(自訂執行個體) 專區中,按一下「Show Configuration Options」(顯示設定選項),然後展開「Flags」(旗標)
    10. 按一下「新增旗標」
    11. 從「選擇標記」選單中選取 cloudsql.iam_authentication 標記。確認已選取「開啟」做為這個標記的值,然後按一下「完成」
    12. 視需要設定其他執行個體設定。如要進一步瞭解設定,請參閱「設定」。
    13. 點選「建立執行個體」

    gcloud

    執行 gcloud sql instances create,並將 --database-flags 參數設為 cloudsql.iam_authentication=on

    更改下列內容:

    • INSTANCE_NAME:新執行個體的名稱。
    • POSTGRES_VERSION:PostgreSQL 版本 (例如 POSTGRES_9_6、 POSTGRES_10、POSTGRES_11 或 POSTGRES_12)。
    • NUMBER_OF_CORES:機器中的核心數量。
    • AMOUNT_OF_MEMORY:電腦中的記憶體容量。請提供大小單位 (例如 3072MiB 或 9GiB)。
    • ZONE:偏好的 Compute Engine 可用區 (例如 us-central1-a 或 us-central1-b)。
    • PASSWORD:為根使用者建立密碼。
    gcloud sql instances create INSTANCE_NAME \
    --database-version=POSTGRES_VERSION \
    --cpu=NUMBER_OF_CORES \
    --memory=AMOUNT_OF_MEMORY \
    --zone=ZONE_NAME \
    --root-password=PASSWORD \
    --database-flags=cloudsql.iam_authentication=on

    Terraform

    如要建立啟用 IAM 資料庫驗證功能的執行個體,請使用 Terraform 資源

    resource "google_sql_database_instance" "default" {
      name             = "postgres-db-auth-instance-name-test"
      region           = "us-west4"
      database_version = "POSTGRES_14"
      settings {
        tier = "db-custom-2-7680"
        database_flags {
          name  = "cloudsql.iam_authentication"
          value = "on"
        }
      }
    }

    套用變更

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

    準備 Cloud Shell

    1. 啟動 Cloud Shell
    2. 設定要套用 Terraform 設定的預設 Google 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. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

    刪除變更

    如要刪除變更,請按照下列步驟操作:

    1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false
      deletion_protection =  "false"
    2. 執行下列指令,並在提示中輸入 yes,套用更新的 Terraform 設定:
      terraform apply
    1. 執行下列指令,並在提示中輸入 yes,移除先前透過 Terraform 設定套用的資源:

      terraform destroy

    REST v1

    請勿在執行個體名稱中加入敏感資訊或個人識別資訊 (PII),因為外部使用者可以看見此名稱。

    您不需要在執行個體名稱中包含專案 ID,系統會在需要時自動加入專案 ID (例如在記錄檔中)。

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

    • INSTANCE_ID:所需執行個體 ID
    • REGION:所需區域,例如 us-east-1
    • PROJECT_ID:專案 ID
    • LOCATION_ID:地點 ID
    • DATABASE_VERSION:資料庫版本的列舉字串。 例如:POSTGRES_12
    • PASSWORD:根使用者的密碼
    • MACHINE_TYPE:機器 (層級) 類型的列舉字串,如下所示: db-custom-[CPUS]-[MEMORY_MBS]

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
      "name": "INSTANCE_ID",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "rootPassword": "PASSWORD",
      "settings": {
        "tier": "MACHINE_TYPE",
        "backupConfiguration": {
          "enabled": true
        },
        "databaseFlags": [
          {
            "name": "cloudsql.iam_authentication",
            "value": "on"
          }
        ]
      }
    }
    

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

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    
    如要瞭解如何建立該工作的基礎 REST API 要求,請參閱 instances:insert 頁面中的 APIs Explorer

    REST v1beta4

    請勿在執行個體名稱中加入敏感資訊或個人識別資訊 (PII),因為外部使用者可以看見此名稱。

    您不需要在執行個體名稱中包含專案 ID,系統會在需要時自動加入專案 ID (例如在記錄檔中)。

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

    • INSTANCE_ID:所需執行個體 ID
    • REGION:所需區域,例如 us-east-1
    • PROJECT_ID:專案 ID
    • LOCATION_ID:地點 ID
    • DATABASE_VERSION:資料庫版本的列舉字串。 例如:POSTGRES_12
    • PASSWORD:根使用者的密碼
    • MACHINE_TYPE:機器 (層級) 類型的列舉字串,如下所示: db-custom-[CPUS]-[MEMORY_MBS]

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances

    JSON 要求主體:

    {
      "name": "INSTANCE_ID",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "rootPassword": "PASSWORD",
      "settings": {
        "tier": "MACHINE_TYPE",
        "backupConfiguration": {
          "enabled": true
        },
        "databaseFlags": [
          {
            "name": "cloudsql.iam_authentication",
            "value": "on"
          }
        ]
      }
    }
    

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

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    
    如要瞭解如何建立該工作的基礎 REST API 要求,請參閱 instances:insert 頁面中的 APIs Explorer

    為 IAM 資料庫驗證設定現有執行個體

    如要為現有 Cloud SQL 執行個體設定 IAM 資料庫驗證,請啟用 cloudsql.iam_authentication 旗標。啟用這個旗標後,您就可以將 IAM 使用者、服務帳戶或群組新增至 Cloud SQL 執行個體。

    如要設定現有的 Cloud SQL 執行個體,以使用 IAM 資料庫驗證,請按照下列步驟操作:

    控制台

    1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

      前往 Cloud SQL 執行個體

    2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
    3. 按一下 [編輯]
    4. 在「自訂執行個體」部分,展開「旗標」
    5. 按一下「新增旗標」
    6. 從「選擇標記」選單中選取 cloudsql.iam_authentication 標記。確認已選取「開啟」做為這個標記的值,然後按一下「完成」
    7. 視需要設定其他執行個體設定。如要進一步瞭解設定,請參閱「設定」。
    8. 按一下 [儲存]

    gcloud

    如要瞭解如何安裝及開始使用 gcloud CLI,請參閱「安裝 gcloud CLI」。如要瞭解如何啟動 Cloud Shell,請參閱「使用 Cloud Shell」。

    請使用 gcloud sql instances patch 執行這項程序。

    更改下列內容:

    • INSTANCE_NAME:新執行個體的名稱。
    gcloud sql instances patch INSTANCE_NAME \
    --database-flags=cloudsql.iam_authentication=on

    這會重設所有其他現有的資料庫旗標設定。如需設定資料庫標記的進一步指引,請參閱「設定資料庫標記」。


    REST v1

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

    • PROJECT_ID:專案 ID
    • LOCATION_ID:地點 ID
    • INSTANCE_ID:所需執行個體 ID
    • REGION:所需區域
    • DATABASE_VERSION:資料庫版本的列舉字串。 例如:POSTGRES_12
    • PASSWORD:根使用者的密碼
    • MACHINE_TYPE:機器 (層級) 類型的列舉字串,如下所示: db-custom-[CPUS]-[MEMORY_MBS]

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
      "name": "INSTANCE_ID",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "rootPassword": "PASSWORD",
      "settings": {
        "tier": "MACHINE_TYPE",
        "backupConfiguration": {
          "enabled": true
        }
        "databaseFlags":
        [
          {
            "name": "cloudsql.iam_authentication",
            "value": "on"
          }
        ]
      }
    }
    

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

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    REST v1beta4

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

    • PROJECT_ID:專案 ID
    • LOCATION_ID:地點 ID
    • INSTANCE_ID:所需執行個體 ID
    • REGION:所需區域
    • DATABASE_VERSION:資料庫版本的列舉字串。 例如:POSTGRES_12
    • PASSWORD:根使用者的密碼
    • MACHINE_TYPE:機器 (層級) 類型的列舉字串,如下所示: db-custom-[CPUS]-[MEMORY_MBS]

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances

    JSON 要求主體:

    {
      "name": "INSTANCE_ID",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "rootPassword": "PASSWORD",
      "settings": {
        "tier": "MACHINE_TYPE",
        "backupConfiguration": {
          "enabled": true
        }
        "databaseFlags":
        [
          {
            "name": "cloudsql.iam_authentication",
            "value": "on"
          }
        ]
      }
    }
    

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

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    後續步驟