本页面介绍了用户和服务账号如何使用 Cloud SQL IAM 数据库身份验证登录 Cloud SQL 数据库。如需了解详情,请参阅 IAM 身份验证。
准备工作
- 将实例配置为使用 IAM 数据库身份验证。如需了解详情,请参阅配置新实例以使用 IAM 数据库身份验证。
- 将 IAM 用户、服务账号或群组添加到数据库。如需了解详情,请参阅将 IAM 用户或服务账号添加到数据库和将群组添加到数据库。
- 将
roles/cloudsql.instanceUser
IAM 角色添加到您的 IAM 用户、服务账号或群组。这是一个预定义角色,其中包含必要的 Cloud SQL IAMcloudsql.instances.login
权限。您需要此权限才能使用 IAM 数据库身份验证登录数据库实例。如需了解详情,请参阅角色和权限。 默认情况下,将 IAM 用户添加到数据库时,新数据库用户无权访问任何数据库。您需要使用
GRANT
命令向 IAM 数据库用户授予任何必要的权限。如需了解详情,请参阅向 IAM 用户授予数据库权限和向群组授予数据库权限。如果您使用的是 IAM 群组身份验证,则 IAM 用户或服务账号必须是已获授予 IAM 角色或权限以登录 Cloud SQL 实例的群组的成员。Cloud SQL 会在用户或服务账号首次登录实例后创建一个账号。
使用自动 IAM 数据库身份验证登录
您可以将 Cloud SQL 连接器配置为代表用户或应用自动处理向 Cloud SQL 实例进行身份验证的操作。连接器包括 Cloud SQL Auth 代理、Go 连接器、Java 连接器和 Python 连接器,所有这些连接器均支持自动 IAM 数据库身份验证。将 Cloud SQL 连接器与自动 IAM 数据库身份验证搭配使用时,用于启动连接器的 IAM 账号必须是向数据库进行身份验证的同一账号。如需使用自动 IAM 数据库身份验证登录,请执行以下操作:
Cloud SQL Auth 代理
向 Google Cloud 进行身份验证。
User
使用应用默认凭据 (ADC) 向 Google Cloud 进行身份验证。
使用
gcloud auth application-default login
命令。如需了解详情,请参阅设置应用默认凭据。服务账号
如需使用服务账号通过 ADC 向 Google Cloud 进行身份验证,您可以使用服务账号模拟或设置服务账号密钥。如果要使用服务账号模拟进行身份验证,请替换 SERVICE_ACCOUNT_EMAIL_ADDRESS 并运行以下命令:
gcloud auth application-default login --impersonate-service-account SERVICE_ACCOUNT_EMAIL_ADDRESS
如需了解详情,请参阅设置应用默认凭据。
使用
--auto-iam-authn
标志启动 Cloud SQL Auth 代理。将 INSTANCE_CONNECTION_NAME 替换为用于标识 Cloud SQL 实例的连接字符串。如果您使用的是默认 MySQL 端口以外的端口,请指定端口号。如需详细了解如何找到并构建此字符串,请参阅用于对 Cloud SQL Auth 代理进行身份验证的选项。./cloud-sql-proxy --auto-iam-authn INSTANCE_CONNECTION_NAME
如需详细了解如何启动代理,请参阅启动 Cloud SQL Auth 代理。
当您准备好使用 Cloud SQL Auth 代理连接到实例时,请使用
mysql
客户端登录。替换以下内容:- HOSTNAME:Cloud SQL Auth 代理使用的 IP 地址。默认情况下,Cloud SQL Auth 代理使用
127.0.0.1
的 localhost 地址,但您可以在启动 Cloud SQL Auth 代理时分配其他 IP 地址。 - USERNAME:对于 IAM 用户账号,这是用户的电子邮件地址,不带
@
符号或域名。例如,对于test-user@example.com
,输入test-user
。对于服务账号,这是服务账号的电子邮件地址(不带@project-id.iam.gserviceaccount.com
后缀)。 - PORT_NUMBER:可选。如果您在实例连接字符串中指定了其他端口,请指定该端口号。
运行以下命令:
mysql --host=HOSTNAME \ --user=USERNAME \ --port=PORT_NUMBER
如需详细了解如何连接到 Cloud SQL Auth 代理,请参阅使用 mysql 客户端连接。
- HOSTNAME:Cloud SQL Auth 代理使用的 IP 地址。默认情况下,Cloud SQL Auth 代理使用
Go
Java JDBC
Java R2DBC
Python
使用手动 IAM 数据库身份验证登录
用户或应用可以这样向数据库进行身份验证:使用 IAM,向 Google Cloud 手动请求访问令牌并将其提供给数据库。使用 gcloud CLI,您可以明确请求一个具有 Cloud SQL Admin API 范围的 OAuth 2.0 令牌,用于登录数据库。当您使用手动 IAM 数据库身份验证以数据库用户身份登录时,将您的电子邮件地址用作用户名,并将访问令牌用作密码。您可以将此方法与数据库的直接连接或 Cloud SQL 连接器搭配使用。
在此过程中,您将向 Google Cloud 进行身份验证,请求访问令牌,然后通过将该令牌作为 IAM 数据库用户的密码传入来连接到数据库。请按照以下步骤在不使用 Cloud SQL Auth 代理的情况下进行连接。
对于这些步骤,您必须执行以下操作:
- 使用 --enable-cleartext-plugin
mysql
选项。 - 如果您要连接到具有公共 IP 的实例,请授予对实例的外部访问权限。如需了解详情,请参阅授权您机器的 IP 地址用于公共 IP 地址。
- 如果要连接到具有专用 IP 的实例,请在 Virtual Private Cloud (VPC) 网络中运行该命令。
- 使用
gcloud sql generate-login-token
命令生成身份验证令牌。
如需使用手动 IAM 数据库身份验证登录,请执行以下操作:
gcloud
向 Google Cloud 进行身份验证。
User
使用
gcloud auth login
向 IAM 进行身份验证。如需了解详情,请参阅使用用户账号进行授权。服务账号
使用
gcloud auth activate-service-account
向 IAM 进行身份验证。如需了解详情,请参阅使用服务账号进行授权。请求访问令牌并使用客户端登录。
替换以下内容:
- HOSTNAME:实例的 IP 地址,即公共 IP 地址或专用 IP 地址。
- USERNAME:对于 IAM 用户账号,这是用户的电子邮件地址,不带
@
符号或域名。例如,对于test-user@example.com
,输入test-user
。对于服务账号,这是服务账号的电子邮件地址(不带@project-id.iam.gserviceaccount.com
后缀)。
MYSQL_PWD=`gcloud sql generate-login-token` \ mysql --enable-cleartext-plugin \ --ssl-mode=REQUIRED \ --host=HOSTNAME \ --user=USERNAME
如果 Cloud SQL 实例上的
ssl_mode
配置为TRUSTED_CLIENT_CERTIFICATE_REQUIRED
,请在您登录时添加客户端证书和客户端密钥。此外,如需让客户端验证服务器的身份以实现双向身份验证,请指定服务器证书server-ca.pem
。例如:MYSQL_PWD=`gcloud sql generate-login-token` \ mysql --enable-cleartext-plugin \ --ssl-mode=VERIFY_CA \ --ssl-ca=server-ca.pem \ --ssl-cert=client-cert.pem \ --ssl-key=client-key.pem \ --host=HOSTNAME \ --user=USERNAME
如需了解如何创建客户端证书和密钥,请参阅客户端证书。
后续步骤
- 详细了解 IAM 数据库身份验证。
- 了解如何在审核日志中启用和查看登录信息。
- 了解如何创建使用 Cloud SQL IAM 数据库身份验证的用户和服务账号。
- 了解如何向用户或服务账号添加 IAM 政策绑定。
- 了解如何管理用户和服务账号以使用 IAM 数据库身份验证。