Cloud SQL IAM 数据库身份验证

本页面介绍了 IAM 数据库身份验证在 Cloud SQL 实例上的工作原理,以及它对用户和服务账号的创建以及从这些账号登录有何影响。

简介

Cloud SQL 与 Identity and Access Management (IAM) 相集成,可帮助您更好地管理用户和服务账号对数据库的登录访问权限。此功能称为 IAM 数据库身份验证。

身份验证是验证尝试访问实例的用户身份的过程。Cloud SQL 将以下类型的身份验证用于数据库用户:

  • 数据库的内置身份验证:使用用户名和密码对数据库用户进行身份验证。
  • IAM 数据库身份验证通过访问令牌使用 IAM 对用户进行身份验证。

Cloud SQL 的 IAM 身份验证

使用 IAM 身份验证时,不会直接向最终用户授予资源(Cloud SQL 实例)访问权限。而是将权限分组为多个角色,然后将这些角色授予主账号。如需了解详情,请参阅 IAM 概览

让用户通过 IAM 数据库身份验证登录的管理员可以使用 IAM 通过 IAM 政策集中管理其实例的访问权限控制。IAM 政策涉及以下实体:

  • 主账号。在 Cloud SQL 中,您可以使用两种类型的主账号:用户账号和服务账号(用于应用)。IAM 数据库身份验证不支持其他主账号类型,例如 Google 群组、Google Workspace 网域或 Cloud Identity 网域。如需了解详情,请参阅与身份相关的概念
  • 角色。对于 IAM 数据库身份验证,用户需要 cloudsql.instances.login 权限才能登录实例。如需获取此权限,请将用户或服务账号绑定到预定义的 Cloud SQL Instance User 角色或绑定了该权限的自定义角色。如需详细了解 IAM 角色,请参阅角色
  • 资源。主账号有权访问的资源是 Cloud SQL 实例。默认情况下,IAM 政策绑定在项目级层应用,以便主账号获得项目中所有 Cloud SQL 实例的角色权限。

IAM 数据库身份验证选项

Cloud SQL for PostgreSQL 有两种 IAM 数据库身份验证选项:自动和手动。

自动 IAM 数据库身份验证

通过自动 IAM 数据库身份验证,您可以将请求和管理访问令牌切换到中间 Cloud SQL 连接器(如 Cloud SQL Auth 代理)。通过自动 IAM 数据库身份验证,用户只需要在来自客户端的连接请求中传递 IAM 数据库用户名。连接器代表客户端提交密码特性的访问令牌信息。

自动 IAM 数据库身份验证需要使用 Cloud SQL 连接器。它目前受 Cloud SQL Auth 代理Go 连接器Java 连接器Python 连接器支持。

为了获得最安全、最可靠的体验,我们建议您使用自动 IAM 数据库身份验证。IAM 数据库身份验证使用 OAuth 2.0 访问令牌,这些令牌短期有效,仅在一小时内有效。Cloud SQL 连接器能够请求和刷新这些令牌,从而确保依赖于连接池的长期有效进程或应用具有稳定的连接。强烈建议您使用自动 IAM 数据库身份验证,而非手动身份验证。

如需了解详情,请参阅使用自动 IAM 数据库身份验证登录

手动 IAM 数据库身份验证

手动 IAM 数据库身份验证要求 IAM 主账号在客户端连接请求中明确传递密码特性的访问令牌。主账号必须先登录 Google Cloud 并向 IAM 明确请求访问令牌。

使用 gcloud CLI,您可以明确请求一个具有 Cloud SQL Admin API 范围的 OAuth 2.0 令牌,用于登录数据库。当您使用 IAM 数据库身份验证以数据库用户身份登录时,将您的电子邮件地址用作用户名,并将访问令牌用作密码。您可以将此方法与数据库的直接连接或 Cloud SQL 连接器搭配使用。

使用 IAM 数据库身份验证登录只能通过 SSL 连接执行。

如需了解详情,请参阅使用手动 IAM 数据库身份验证登录

用户和服务账号管理

如需为用户和服务账号授予使用 IAM 数据库身份验证访问实例上的数据库的权限,您需要将它们添加到实例中。如需了解详情,请参阅添加使用 IAM 的用户或服务账号

如果您使用 Google Cloud 控制台添加用户或服务账号,则 Cloud SQL 会要求您为用户添加“Cloud SQL User”角色。用户必须登录此角色才能登录实例。

如果您使用 gcloud 或 API 添加用户,则需要手动授予登录权限。使用 PostgreSQL GRANT 命令授予数据库权限

Cloud SQL IAM 数据库身份验证的实例配置

您可以使用 cloudsql.iam_authentication 标志在实例上启用 IAM 数据库身份验证。启用此标志后,实例即可支持已配置为使用 IAM 数据库身份验证的账号登录。

设置此标志不会阻止现有的非 IAM 用户使用其用户名和密码登录。但是,如果您在实例上停用了此标志,则之前使用 IAM 数据库身份验证添加的任何用户都将无法访问该实例。如需了解详情,请参阅配置实例以使用 IAM 数据库身份验证

不同实例场景的 Cloud SQL IAM 数据库身份验证

读取副本 读取副本中不会自动启用 IAM 数据库身份验证,即使主实例启用了此功能也不例外。创建读取副本后,您需要添加 IAM 数据库身份验证。如需了解详情,请参阅配置读取副本登录以使用 IAM 数据库身份验证
恢复的实例 如果先前备份了某个实例,后来在同一项目的相同或不同实例中恢复它,则当前用户登录授权适用。如果您要将备份恢复到另一个项目中的新实例,则需要为新实例设置用户授权。如需了解详情,请参阅添加使用 IAM 数据库身份验证的用户或服务账号

使用 Cloud Audit Logs

如需保留数据访问(包括登录)的记录,您可以使用审核日志。Cloud Audit Logs 默认处于关闭状态。您需要开启数据访问审核日志才能进行登录跟踪。将审核日志记录用于此目的会产生数据日志记录费用。如需了解详情,请参阅审核日志配置数据访问审核日志日志记录数据的价格

限制

  1. 为了安全起见,使用 IAM 数据库身份验证的登录仅适用于 SSL 连接。未加密的连接会被拒绝。
  2. 每个实例都有每分钟登录(包括成功的登录和失败的登录)配额。超出配额时,登录暂时无法进行。我们建议您不要频繁登录,并使用已获授权的网络限制登录。 登录授权的配额为每个实例每分钟 3000 次。

后续步骤