默认情况下,会话 Identity and Access Management 权限位于项目级层。本文档介绍了如何使用 IAM Conditions 来更精细地控制对 Vertex AI Agent Engine 会话资源的访问权限。
概览
借助 IAM Conditions,您可以选择仅在满足指定条件时向身份(成员)授予对会话和会话事件资源的访问权限。您可以使用 API 属性 aiplatform.googleapis.com/sessionUserId 和以通用表达式语言编写的表达式,根据会话资源中的 userId 字符串来控制对会话的访问权限。用户 ID 是创建会话时提供的任意字符串,例如 userId = "userA"。
这些有条件的 Identity and Access Management 政策是在项目级层创建的,适用于项目中的所有会话和会话事件。您可以将 IAM 条件应用于各种类型的主账号,包括项目的用户和服务账号。
IAM Conditions 条件可用于同时授予多个相关会话资源(包括尚不存在的资源)的 Identity and Access Management (IAM) 权限。您可以限制对会话和事件的访问权限,以便用户只能访问自己的信息,或者开发者只能查看某些会话资源,而无需获得特殊权限。
准备工作
如需为会话和会话事件设置有条件的 Identity and Access Management 政策,请执行以下操作:
- 查看 IAM Conditions:熟悉 IAM Conditions 概览。
- 确定必要的角色:确定哪些专用会话 IAM 角色适合您的使用情形,以确保遵循最小权限原则。
-
确定受影响的主账号:确定组织中的哪些人应获得哪些权限。例如,请考虑以下情况:
- 用户是否应该能够看到其他用户的会话?
- 开发者是否应该能够查看所有会话?
- 项目管理员是否应该能够查看所有会话?
- 某些代理身份是否应能够访问某些会话?
-
授予 IAM 角色:确保您拥有包含执行本文档中的任务所需的必要权限的角色。
<0x
如需获得将 IAM 条件应用于 Vertex AI Agent Engine 会话资源所需的权限,请让您的管理员为您授予以下 IAM 角色:
- 对于项目: Project IAM Admin (`roles/resourcemanager.projectIamAdmin`)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含将 IAM Conditions 应用于 Vertex AI Agent Engine 会话资源所需的权限。如需查看所需的确切权限,请展开所需权限部分:
如果您计划在整个组织中使用 IAM Conditions 条件,则还需要管理组织政策的权限。所需权限
如需将 IAM Conditions 应用于 Vertex AI Agent Engine 会话资源,您需要具有以下权限:
-
在项目级层设置有条件的 IAM 访问权限:
`resourcemanager.projects.setIamPolicy`
为会话创建条件访问
通过在项目级的 Identity and Access Management 政策绑定中添加条件,授予对会话的条件式访问权限。该条件使用 api.getAttribute('aiplatform.googleapis.com/sessionUserId', "") 函数来检查会话资源的用户 ID。您可以在创建会话时定义用户 ID。
如需详细了解如何创建具有条件的 IAM 政策,请参阅允许政策中的条件。
如需向主账号授予单个角色,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 IAM 页面。
选择您的项目。
选择要向其授予一个角色的主账号:
从下拉列表中选择要授予的角色。出于最佳安全做法考虑,请选择一个仅包含主账号所需权限的角色。您可以选择一个专用会话 IAM 角色。
使用
aiplatform.googleapis.com/sessionUserId作为 API 属性,为角色添加条件。如需查看一些可能的条件语句,请参阅以下示例。点击保存。将向主账号授予资源上的角色。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
add-iam-policy-binding命令使您可以快速向主账号授予角色。在使用下面的命令数据之前,请先进行以下替换:
-
PROJECT_ID:您的 Google Cloud 项目 ID。项目 ID 为字母数字,例如my-project。 -
PRINCIPAL:主账号(或成员)的标识符,通常其格式如下:PRINCIPAL_TYPE:ID。 例如user:my-user@example.com或principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com。如需查看PRINCIPAL可以采用的值的完整列表,请参阅主账号标识符。对于主账号类型
user,标识符中的域名必须是 Google Workspace 网域或 Cloud Identity 网域。如需了解如何设置 Cloud Identity 网域,请参阅 Cloud Identity 概览。 -
ROLE_NAME:要撤消的角色的名称。请采用以下某种格式:- 预定义角色:
roles/aiplatform.IDENTIFIER - 项目级自定义角色:
projects/PROJECT_ID/roles/IDENTIFIER
从下拉列表中选择要授予的角色。出于最佳安全做法考虑,请选择一个仅包含主账号所需权限的角色。 您可以选择一个专用会话 IAM 角色。
- 预定义角色:
-
CONDITION:使用aiplatform.googleapis.com/sessionUserId作为 API 属性,为角色添加条件。 如需查看一些可能的条件语句,请参阅以下示例。
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL --role=ROLE_NAME \ --condition=CONDITION
Windows (PowerShell)
gcloud projects add-iam-policy-binding PROJECT_ID ` --member=PRINCIPAL --role=ROLE_NAME ` --condition=CONDITION
Windows (cmd.exe)
gcloud projects add-iam-policy-binding PROJECT_ID ^ --member=PRINCIPAL --role=ROLE_NAME ^ --condition=CONDITION
响应中包含更新后的 IAM 政策。
-
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。 如需了解详情,请参阅 Terraform 提供程序参考文档。
如果您使用 Terraform 设置 IAM 政策,可以在 google_project_iam_member 资源中添加条件,以限制成员对会话的访问权限。
resource "google_project_iam_member" "example" { project = "PROJECT_ID" role = "ROLE" member = "MEMBER" condition { title = "Session Access Condition" description = "IAM condition for Session" expression = "CONDITION" } }
替换以下变量:
用户 ID 级权限的最佳实践
在为会话构建条件时,请遵循以下最佳实践:
- 使用专门的会话 IAM 角色:会话 IAM 条件应仅用于适用于会话和会话事件的角色。您可以使用
aiplatform.googleapis.com/sessionViewer、aiplatform.googleapis.com/sessionEditor和aiplatform.googleapis.com/sessionUser等专业角色来防止访问权限过于宽松。如需了解详情,请参阅专用会话 IAM 角色部分。 - 使用肯定条件:建议对
aiplatform.googleapis.com/sessionUserId使用肯定条件(例如检查是否相等或是否存在前缀),以提高准确性。由于不受支持的类型和服务由空用户 ID 表示,因此否定条件(例如不相等性检查)可能会无意中匹配各种资源,这可能会过于宽松,并允许意外授予权限。 - 尽可能缩短条件:我们建议在 IAM 条件表达式中使用最短、最简单的逻辑,尤其是在您计划使用大量条件的情况下。IAM 允许政策的大小有限制,简化条件有助于避免遇到 IAM 限制。如需了解详情,请参阅限制。例如,您可以合并复合语句
api.getAttribute('aiplatform.googleapis.com/sessionUserId', '') == 'sessionA' || api.getAttribute('aiplatform.googleapis.com/sessionUserId', '') == sessionB',从而简化对两个不同用户 ID 的检查,因为该语句的评估结果与较短的语句api.getAttribute('aiplatform.googleapis.com/sessionUserId', '') in ['sessionA', 'sessionB']相同。
专用会话 IAM 角色
使用 IAM 条件时,务必要防止 IAM 政策过于宽松。下表列出了在为会话 API 授予有条件 IAM 角色时可以使用的专用角色:
| 角色名称 | 说明 | 包含的权限 |
|---|---|---|
roles/aiplatform.sessionViewer |
授予对会话和商品详情事件的只读权限。 |
|
roles/aiplatform.sessionEditor |
授予对会话和附加事件的写入权限。 |
|
roles/aiplatform.sessionUser |
授予对会话和活动的完整访问权限,包括所有查看者和编辑者权限。 | 包含 sessionEditor 和 sessionViewer 的所有权限。 |
将 IAM 条件与会话搭配使用
本部分介绍了以下将 IAM Conditions 与会话搭配使用的示例:
授予对用户 ID 完全匹配的会话的读取权限
以下条件仅向个人用户 userA@gmail.com 授予对具有确切用户 ID userA 的会话的查看权限。
这意味着,只要用户 ID 完全是 userA,该个人就可以获取会话并列出相应会话事件。用户无权访问具有 userB 等用户 ID 的会话。
{ "members": ["user:userA@gmail.com"], "role": "roles/aiplatform.sessionViewer", "condition": { "title": "Session Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/sessionUserId', '') == 'userA'" } }
向用户 ID 中包含特定前缀的会话授予写入权限
以下条件授予个人 developerA@corp.com 对包含以 user 开头的用户 ID 的任何会话的编辑权限。您可以使用 startsWith 进行前缀检查,使用 endsWith 进行后缀检查。
这意味着,开发者能够使用 userA 或 user1234 等用户 ID 创建、更新和删除会话,以及附加事件。
{ "members": ["user:developerA@corp.com"], "role": "roles/aiplatform.sessionEditor", "condition": { "title": "Session Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/sessionUserId', '').startsWith('user')" } }
授予对包含两个用户 ID 之一的会话的完整访问权限
以下条件可授予群组 group:engineering@corp.com 用户(查看者和编辑者)对仅包含用户 ID userA 或 user123 的会话的访问权限。
{ "members": ["group:engineering@corp.com"], "role": "roles/aiplatform.sessionUser", "condition": { "title": "Session Access Condition", "expression": "api.getAttribute('aiplatform.googleapis.com/sessionUserId', '') in ['userA', 'user123']" } }
限制
- 主账号数量限制:IAM 政策最多只能包含 1,500 个唯一主账号。您可以使用 Google 群组来管理此限制。如需了解详情,请参阅针对所有主账号的限制。
ListSessionsAPI 支持:ListSessions API 不支持 IAM 条件。如需授予 ListSessions 权限,您必须向正文授予无条件角色,例如aiplatform.googleapis.com/sessionViewer、aiplatform.googleapis.com/sessionUser或相关的无条件 Vertex AI 角色。