配置新实例和现有实例以使用 IAM 数据库身份验证

本页面介绍了如何创建或修改 Cloud SQL 实例以允许配置为使用 Cloud SQL IAM 数据库身份验证的用户或服务账号。如需详细了解 Cloud SQL IAM 集成,请参阅 IAM 身份验证

新创建的实例具有四个系统数据库:

  • information_schema:提供对数据库元数据的访问权限,这些元数据是关于 MySQL 服务器的信息。
  • mysql:系统架构。它包含一些表,这些表用于存储 MySQL 服务器运行时所需的信息。
  • performance_schema:用于在较低级别监控 MySQL 服务器执行的功能。
  • sys:包含一组对象,可帮助 DBA 和开发者解释由性能架构收集的数据。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 安装 Google Cloud CLI。
  5. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  6. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  7. 确保您的 Google Cloud 项目已启用结算功能

  8. 安装 Google Cloud CLI。
  9. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  10. 确保您的用户账号具有 Cloud SQL Admin 和 Compute Viewer 角色。

    转到 IAM 页面

    详细了解角色和权限。

配置新实例以使用 IAM 数据库身份验证

Cloud SQL 使用标志启用和停用实例上的 IAM 用户连接。在此过程中,您需要启用该标志。

如需配置使用 Cloud SQL IAM 数据库身份验证的新实例,请按如下所述操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击创建实例
  3. 点击选择 MySQL
  4. 输入实例 ID 的名称。请勿在实例名称中包含敏感信息或个人身份信息,因为此名称对外可见。无需在实例名称中包含项目 ID。系统会在适当的位置(例如在日志文件中)自动包含项目 ID。
  5. 为根用户输入密码。
  6. 数据库版本下拉菜单中,选择数据库版本。
  7. 选择区域和可用区可用性部分,为实例选择区域和可用区。将实例与访问实例的资源置于相同地区内。以后无法更改选择的地区。通常,您无需指定区域。
  8. 自定义实例部分,点击显示配置选项,然后展开标志
  9. 点击添加标志
  10. 选择标志下拉菜单中,选择 cloudsql_iam_authentication 标志。确保选择开启作为此标志的值,然后点击完成
  11. 根据需要配置其他实例设置。如需详细了解设置,请参阅设置
  12. 点击创建实例

gcloud

运行 gcloud sql instances create,注意将 --database-flags 参数设置为 cloudsql_iam_authentication=on

替换以下内容:

  • INSTANCE_NAME:新实例的名称。
  • MYSQL_VERSION:MySQL 版本(例如 MYSQL_5_7 或 MYSQL_8_0)。
  • 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=MYSQL_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             = "mysql-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    database_flags {
      name  = "cloudsql_iam_authentication"
      value = "on"
    }
  }
  # 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
}

应用更改

如需在 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 显示“应用完成!”消息。

  3. 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 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:数据库版本的枚举字符串。 例如 MYSQL_8_0
  • PASSWORD:根用户的密码
  • MACHINE_TYPE:机器(层级)类型的枚举字符串,例如:db-custom-[CPUS]-[MEMORY_MBS]

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/sql/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/sql/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/sql/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:数据库版本的枚举字符串。 例如 MYSQL_8_0
  • 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

配置现有实例以使用 Cloud SQL IAM 数据库身份验证

如需在现有实例上配置 IAM 数据库身份验证,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“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:数据库版本的枚举字符串。 例如 MYSQL_8_0
  • PASSWORD:根用户的密码
  • MACHINE_TYPE:机器(层级)类型的枚举字符串,例如:db-custom-[CPUS]-[MEMORY_MBS]

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/sql/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/sql/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/sql/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目 ID
  • LOCATION_ID:位置 ID
  • INSTANCE_ID:所需的实例 ID
  • REGION:所需地区
  • DATABASE_VERSION:数据库版本的枚举字符串。 例如 MYSQL_8_0
  • 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"
}

后续步骤