本页介绍了如何创建或修改 Cloud SQL 实例以允许配置为使用 Cloud SQL IAM 数据库身份验证的用户、服务账号或群组。如需详细了解 Cloud SQL IAM 集成,请参阅 IAM 身份验证。
新创建的实例具有一个 postgres 数据库。
准备工作
- 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.
- 
    
    
      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
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
      Install the gcloud CLI. 
- 
          如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 
- 
        如需初始化 gcloud CLI,请运行以下命令: gcloud init
- 
    
    
      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
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
      Install the gcloud CLI. 
- 
          如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 
- 
        如需初始化 gcloud CLI,请运行以下命令: gcloud init
- 确保您的用户账号具有 Cloud SQL Admin 和 Compute Viewer 角色。
    详细了解角色和权限。 
- 新 SQL 网络架构:每个项目最多可以有 1,000 个实例。
- 旧 SQL 网络架构:每个项目最多可以有 100 个实例。
- 同时使用这两种架构:实例数量上限将在 100 到 1,000 之间,具体取决于实例在这两种架构之间的分布情况。
- 
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。 
- 点击创建实例。
- 点击选择 PostgreSQL。
- 为实例 ID 输入名称。 请勿在实例名称中包含敏感信息或个人身份信息,因为此名称对外可见。无需在实例名称中包含项目 ID。系统会在适当的位置(例如在日志文件中)自动包含项目 ID。
- 为默认管理员输入密码。
- 从数据库版本菜单中,选择相应的数据库版本。
- 在选择区域和可用区可用性部分,为实例选择区域和可用区。将实例与访问实例的资源置于相同地区内。以后无法更改选择的地区。通常,您无需指定区域。
- 在自定义实例部分,点击显示配置选项,然后展开标志。
- 点击添加标志。
- 从选择标志菜单中,选择 cloudsql.iam_authentication标志。确保选择开启作为此标志的值,然后点击完成。
- 根据需要配置其他实例设置。如需详细了解设置,请参阅设置。
- 点击创建实例。
- 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:为根用户创建密码。
- 启动 Cloud Shell。
- 
    设置要应用 Terraform 配置的默认 Google Cloud 项目。 您只需为每个项目运行一次以下命令,即可在任何目录中运行它。 export GOOGLE_CLOUD_PROJECT=PROJECT_ID 如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。 
- 
    在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf扩展名,例如main.tf。在本教程中,该文件称为main.tf。mkdir DIRECTORY && cd DIRECTORY && touch main.tf 
- 
    如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。 将示例代码复制到新创建的 main.tf中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。 
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
- 
    初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade选项:terraform init -upgrade 
- 
    查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:terraform plan 根据需要更正配置。 
- 
    通过运行以下命令并在提示符处输入 yes来应用 Terraform 配置:terraform apply 等待 Terraform 显示“应用完成!”消息。 
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
- 如需停用防删除保护,请在 Terraform 配置文件中将 deletion_protection参数设置为false。deletion_protection = "false" 
- 运行以下命令并在提示符处输入 yes,以应用更新后的 Terraform 配置:terraform apply 
- 
             运行以下命令并在提示符处输入 yes,以移除之前使用 Terraform 配置应用的资源:terraform destroy 
- 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]
- 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]
- 
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。 
- 如需打开实例的概览页面,请点击实例名称。
- 点击修改。
- 在自定义实例部分,展开标志。
- 点击添加标志。
- 从选择标志菜单中,选择 cloudsql.iam_authentication标志。确保选择开启作为此标志的值,然后点击完成。
- 根据需要配置其他实例设置。如需详细了解设置,请参阅设置。
- 点击保存。
- INSTANCE_NAME:新实例的名称。
- PROJECT_ID:项目 ID
- LOCATION_ID:位置 ID
- INSTANCE_ID:所需的实例 ID
- REGION:所需区域
- DATABASE_VERSION:数据库版本的枚举字符串。
  
  例如 POSTGRES_12
- PASSWORD:根用户的密码
- MACHINE_TYPE:机器(层级)类型的枚举字符串,例如:db-custom-[CPUS]-[MEMORY_MBS]
- PROJECT_ID:项目 ID
- LOCATION_ID:位置 ID
- INSTANCE_ID:所需的实例 ID
- REGION:所需区域
- DATABASE_VERSION:数据库版本的枚举字符串。
  
  例如 POSTGRES_12
- PASSWORD:根用户的密码
- MACHINE_TYPE:机器(层级)类型的枚举字符串,例如:db-custom-[CPUS]-[MEMORY_MBS]
- 详细了解 IAM 数据库身份验证。
- 了解如何配置读取副本登录以使用 IAM 数据库身份验证。
- 了解如何创建使用 Cloud SQL IAM 数据库身份验证的用户和服务账号。
- 了解如何使用 IAM 数据库身份验证登录 Cloud SQL 数据库。
- 了解如何管理用户和服务账号以使用 IAM 数据库身份验证。
您在单个项目中可以拥有的实例数上限取决于这些实例的网络架构:
如需请求增加配额,请提交支持请求。读取副本会被计为实例。
配置新实例以使用 IAM 数据库身份验证
如需配置新的 Cloud SQL 实例以使用 IAM 数据库身份验证,您需要启用 cloudsql.iam_authentication 标志。启用此标志后,您可以将 IAM 用户、服务账号或群组添加到 Cloud SQL 实例。
如需配置新的 Cloud SQL 实例以使用 IAM 数据库身份验证,请执行以下操作:
控制台
gcloud
运行 gcloud sql instances create,注意将 --database-flags 参数设置为 cloudsql.iam_authentication=on。
替换以下内容:
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 资源。
应用更改
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
应用更改
删除更改
如需删除更改,请执行以下操作:
REST v1
请勿在实例名称中包含敏感信息或个人身份信息 (PII),因为此名称可供外部用户查看。
无需在实例名称中包含项目 ID。系统会在适当的位置(例如在日志文件中)自动包含项目 ID。
在使用任何请求数据之前,请先进行以下替换:
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
请勿在实例名称中包含敏感信息或个人身份信息 (PII),因为此名称可供外部用户查看。
无需在实例名称中包含项目 ID。系统会在适当的位置(例如在日志文件中)自动包含项目 ID。
在使用任何请求数据之前,请先进行以下替换:
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"
}
配置现有实例以使用 IAM 数据库身份验证
如需配置现有 Cloud SQL 实例以使用 IAM 数据库身份验证,您需要启用 cloudsql.iam_authentication 标志。启用此标志后,您可以将 IAM 用户、服务账号或群组添加到 Cloud SQL 实例。
如需配置现有 Cloud SQL 实例以使用 IAM 数据库身份验证,请执行以下操作:
控制台
gcloud
如需了解如何安装和开始使用 gcloud CLI,请参阅安装 gcloud CLI。如需了解如何启动 Cloud Shell,请参阅使用 Cloud Shell。
对于此过程,请使用 
  gcloud
  sql instances patch。
替换以下内容:
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql.iam_authentication=on
这将重置所有其他现有数据库标志设置。如需进一步了解如何设置数据库标志,请参阅设置数据库标志。
REST v1
在使用任何请求数据之前,请先进行以下替换:
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
在使用任何请求数据之前,请先进行以下替换:
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"
}