本页面介绍了如何准备 AlloyDB for PostgreSQL 实例,以便可以通过 Identity and Access Management (IAM) 进行数据库身份验证。
IAM 身份验证可通过标准 PostgreSQL 用户(所有 AlloyDB 集群都支持这些用户)来补充数据库身份验证。如果您在集群上启用 IAM 身份验证,则可以使用 IAM 或 PostgreSQL 用户角色向该集群进行身份验证。
默认情况下,AlloyDB 实例未启用 IAM 身份验证。如需启用 IAM 身份验证,请完成以下步骤:
- 在 IAM 用户或服务账号需要连接到的每个实例上手动启用 IAM 身份验证。 
- 对于需要以数据库用户身份登录的每个 IAM 用户或服务账号,请完成以下步骤: - 使用 IAM 管理员工具,向该用户或服务账号授予 - alloydb.databaseUser和- serviceusage.serviceUsageConsumer角色。
- 使用 Google Cloud CLI,在 AlloyDB 集群中创建与该用户或服务账号对应的数据库用户。 
- 使用数据库管理员账号(例如 - postgres),向新数据库用户授予访问相应数据库表的权限。
 
每当您需要向 AlloyDB 集群添加更多 IAM 用户时,都可以重复执行这些步骤。
启用或停用 IAM 身份验证
如需在实例上启用 IAM 身份验证,请将该实例上的 alloydb.iam_authentication 标志设置为 on。
如需在实例上停用 IAM 身份验证,请将 alloydb.iam_authentication 恢复为其默认值 off。
如需详细了解如何在 AlloyDB 实例上设置标志,请参阅配置实例的数据库标志。
向 IAM 用户或服务账号授予对实例的访问权限
为新数据库用户启用 IAM 访问权限需要完成两个步骤:
- 更新项目的 IAM 设置,以向相应的 IAM 用户或服务账号授予 AlloyDB 数据库访问权限。 
- 在集群上创建新数据库用户,并将用户名设置为相应 IAM 用户或服务账号的电子邮件地址。 
您可以重复第 2 步,向 IAM 账号授予对项目中其他集群的访问权限。
使用适当的角色更新 IAM 账号
您可以向 IAM 用户或服务账号授予以下 IAM 角色,从而使其能够向 AlloyDB 实例进行身份验证:
- alloydb.databaseUser:让用户可以连接到您的 AlloyDB 实例。
- serviceusage.serviceUsageConsumer:向用户提供对检查权限的 API 的访问权限。
为此,请按照向其他用户授予访问权限中的说明操作。在选择要向 IAM 主账号授予的角色的步骤中,选择 alloydb.databaseUser。
将 IAM 用户或服务账号添加到集群
控制台
- 转到集群页面。 
- 点击您要向其中添加用户的集群的名称。 
- 点击用户。 
- 点击添加用户账号。 
- 选择 Cloud IAM。 
- 在主账号字段中,输入 IAM 主账号。 - 对于 IAM 用户账号,请提供用户账号的完整电子邮件地址。例如 - kai@altostrat.com。- 对于 IAM 服务账号,请提供服务账号的地址(不带 - .gserviceaccount.com后缀)。例如,如需指定服务账号- my-service@my-project.iam.gserviceaccount.com,您可以在此处使用值- my-service@my-project.iam。
- 如需为用户分配默认 - alloydbsuperuser以外的角色,请按以下步骤操作:- 在角色中输入角色的名称。
- 如需添加角色,请按 Enter 键或 Tab 键。
- 针对要为相应用户移除的任何角色,选择 x。 - 如需了解详情,请参阅预定义角色 
 
- 点击添加。 
gcloud
如需根据 IAM 用户或服务账号创建 PostgreSQL 数据库用户,请使用 gcloud alloydb users create 命令。
gcloud alloydb users create USERNAME \
--cluster=CLUSTER \
--region=REGION \
--type=IAM_BASED执行以下变量替换操作:
- USERNAME:您要添加为新数据库用户的 IAM 用户的标识符。- 对于 IAM 用户账号,请提供用户账号的完整电子邮件地址。例如 - kai@altostrat.com。- 对于 IAM 服务账号,请提供服务账号的地址(不带 - .gserviceaccount.com后缀)。例如,如需指定服务账号- my-service@my-project.iam.gserviceaccount.com,您可以在此处使用值- my-service@my-project.iam。
- CLUSTER:要在其中创建此数据库用户账号的集群的 ID。
- REGION:集群所在区域的 ID。 例如- us-central1。
向 IAM 用户授予适当的数据库权限
默认情况下,将 IAM 用户添加到数据库实例时,不会向该新用户授予对任何数据库的权限。
用户或服务账号连接到数据库时,可以针对已被授予 PUBLIC 访问权限的任何数据库对象运行查询。
如果他们需要其他访问权限,可以使用 GRANT PostgreSQL 语句授予更多权限。
GRANT SELECT ON TABLE_NAME TO "USERNAME";
执行以下变量替换操作:
- USERNAME:用户的电子邮件地址。您必须使用英文双引号将地址括起来。
- TABLE_NAME:您希望用户可以访问的表的名称。
从集群中移除 IAM 用户或服务账号
控制台
- 转到集群页面。 
- 点击要从中移除用户的集群的名称。 
- 点击用户。 
- 在表示要移除的用户的行上,点击 打开适用于此用户的操作。 
- 选择移除。 
- 在移除用户账号?对话框中,点击移除。 
gcloud
使用 gcloud alloydb users delete 命令。
gcloud alloydb users delete USERNAME \
--cluster=CLUSTER \
--region=REGION替换以下内容:
- USERNAME:您要从集群中移除的 IAM 用户的标识符。- 对于 IAM 用户账号,请提供用户账号的完整电子邮件地址。例如 - kai@altostrat.com。- 对于 IAM 服务账号,请提供服务账号的地址(不带 - .gserviceaccount.com后缀)。例如,如需指定服务账号- my-service@my-project.iam.gserviceaccount.com,您可以在此处使用值- my-service@my-project.iam。
- CLUSTER:要从中移除此用户的集群的 ID。
- REGION:集群所在区域的 ID。 例如- us-central1。