本页面介绍了用户和服务账号如何使用 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 进行身份验证。
用户
使用应用默认凭据 (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 实例的连接字符串。如果您不使用默认 PostgreSQL 端口,请指定端口号。如需详细了解如何找到并构建此字符串,请参阅用于对 Cloud SQL Auth 代理进行身份验证的选项。
./cloud-sql-proxy --auto-iam-authn INSTANCE_CONNECTION_NAME
如需详细了解如何启动代理,请参阅启动 Cloud SQL Auth 代理。
当您准备好使用 Cloud SQL Auth 代理连接到实例时,请使用
psql
客户端登录。替换以下内容:
- HOSTNAME:Cloud SQL Auth 代理使用的 IP 地址。默认情况下,Cloud SQL Auth 代理使用
127.0.0.1
的 localhost 地址,但您可以在启动 Cloud SQL Auth 代理时分配其他 IP 地址。 - USERNAME:对于 IAM,用户名是用户的完整电子邮件地址。对于服务账号,这是服务账号的电子邮件地址(不带
.gserviceaccount.com
域名后缀)。 - PORT_NUMBER:可选。如果您在实例连接字符串中指定了其他端口,请指定该端口号。
- DATABASE_NAME:要连接的数据库名称。
运行以下命令:
psql -h HOSTNAME \ -U USERNAME \ --port PORT_NUMBER \ --dbname=DATABASE_NAME
如需详细了解如何连接到 Cloud SQL Auth 代理,请参阅使用 psql 客户端连接。
- 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 代理的情况下进行连接。
对于这些步骤,您必须执行以下操作:
gcloud sql generate-login-token
命令生成身份验证令牌。如需使用手动 IAM 数据库身份验证登录,请执行以下操作:
gcloud
向 Google Cloud 进行身份验证。
用户
使用
gcloud auth login
向 IAM 进行身份验证。如需了解详情,请参阅使用用户账号进行授权。服务账号
使用
gcloud auth activate-service-account
向 IAM 进行身份验证。如需了解详情,请参阅使用服务账号进行授权。请求访问令牌并使用客户端登录。
替换以下内容:
- HOSTNAME:实例的 IP 地址,即公共 IP 地址或专用 IP 地址。
- USERNAME:对于 IAM,用户名是用户的完整电子邮件地址。对于服务账号,这是服务账号的电子邮件地址(不带
.gserviceaccount.com
域名后缀)。 - DATABASE_NAME:要连接的数据库名称。
PGPASSWORD=`gcloud sql generate-login-token` \ psql "sslmode=require \ hostaddr=HOSTNAME \ user=USERNAME \ dbname=DATABASE_NAME" \ --no-password
如果 Cloud SQL 实例上的
ssl_mode
配置为TRUSTED_CLIENT_CERTIFICATE_REQUIRED
,我们建议您使用自动 IAM 数据库身份验证登录,以强制执行客户端身份验证。
后续步骤
- 详细了解 IAM 数据库身份验证。
- 了解如何在审核日志中启用和查看登录信息。
- 了解如何创建使用 Cloud SQL IAM 数据库身份验证的用户和服务账号。
- 了解如何管理用户和服务账号以使用 IAM 数据库身份验证。