通过会话控制,您可以配置用户在获得访问权限后必须重新进行身份验证的频率,以及是否需要完整登录、仅密码或硬件安全密钥。
您可以应用会话控制来执行以下操作:
- 强制要求特权用户频繁重新进行身份验证:要求拥有较高权限的用户(例如项目所有者和结算管理员)更频繁地重新进行身份验证。
- 为某些应用配置更长的会话时长:允许某些应用(例如 Gemini 等基于上下文的 AI 应用)拥有更长的会话时长,以保留实现最佳性能所需的大型上下文窗口。
定义会话时长和重新验证方法
您可以在创建 Access Context Manager 绑定时定义会话控制机制。如需详细了解会话控制,请参阅使用访问权限绑定将政策应用于用户群组。
gcloud
-
使用
--session-length标志设置会话时长。该值的范围可以从 0 到 24 小时。使用 ISO 8601 时长格式指定时长。 例如,使用“12H30M5S”可设置时长为 12 小时 30 分 5 秒的会话。使用--session-reauth-method标志指定重新验证方法。例如,您可以将会话时长设置为 30 分钟 (30m),并将重新身份验证方法设置为LOGIN、PASSWORD或SECURITY_KEY。此设置将应用于所有应用,除非被应用专用设置替换。
-
在 YAML 文件中定义
scopedAccessSettings,以使用clientId为特定应用指定会话控制。这样一来,您就可以替换这些应用的默认会话控制设置。然后,您可以使用--binding-file flag传递 YAML 文件。
API
在 POST 请求的 JSON 正文中,定义 sessionSettings 对象内的 sessionLength 和 sessionReauthMethod 字段,以创建或更新 GcpUserAccessBinding 绑定。
sessionLength是会话时长,介于 0 到 24 小时之间。该值必须是一个字符串,由 0 到 86400 之间的整数组成,后跟字母“s”。sessionReauthMethod可以是LOGIN、PASSWORD或SECURITY_KEY。- 使用
scopedAccessSettings定义特定于应用的会话控制变量。如需了解详情,请参阅为特定应用定义配置。
Terraform
在 Terraform Google Cloud 用户访问权限绑定资源中,填充 session_settings 实参以配置适用于所有用户流量的一般会话时长控制:
session_length:会话时长(以秒为单位)。例如,900 秒会将会话时长设置为 15 分钟。末尾的“s”是必需的。session_length_enabled:设置为 false 可停用指定的会话设置。session_reauth_method:用于刷新凭据的身份验证质询类型。选项包括LOGIN、PASSWORD或SECURITY_KEY。use_oidc_max_age:一个高级字段,用于配置会话是否遵循可选的 OIDC 最大期限参数(如果身份验证凭据是 OAuth 令牌,则指定此参数)。
定义会话控制变量时的主要注意事项:
- 在解析会话控制设置时,系统只会使用与请求匹配的最近创建的访问权限绑定。
政策配置示例
以下示例展示了如何创建会话控制,以使用 LOGIN 要求每 18 小时重新进行身份验证,并使用 SECURITY_KEY 要求每 2 小时重新进行特定应用 (SENSITIVE_APP_ID) 的身份验证。
默认设置
Google Cloud CLI 命令中的 --level、--session-length 和 --session-reauth-method 标志(或 API 调用的 JSON 正文中的相应字段)会为 scopedAccessSettings 中未明确定义的所有应用设置默认行为。
应用专属设置
您可以在 YAML 文件(或 JSON 正文)的 scopedAccessSettings 部分中替换特定应用的默认设置。在此示例中,我们使用 SECURITY_KEY 为客户端 ID 为 SENSITIVE_APP_ID 的应用设置了 2 小时的重新身份验证要求。
如需将某些应用从会话控制中排除,请将 sessionLength 字段设置为 0s 或 sessionLengthEnabled,以表示 false。然后,系统会忽略 sessionReauthMethod 方法。
gcloud
设置配置:
scopedAccessSettings:
scope:
clientScope:
restrictedClientApplication:
clientId: SENSITIVE_APP_ID
activeSettings:
sessionSettings:
sessionLength: 7200s
sessionReauthMethod: SECURITY_KEY
sessionLengthEnabled: true
创建访问权限绑定:
gcloud access-context-manager cloud-bindings create \
--organization ORG_ID \
--group-key GROUP_ID \
--binding-file BINDING_FILE_PATH \
--level DEFAULT_ACCESS_LEVEL
--session-length 18h \
--session-reauth-method LOGIN
API
JSON 正文:
{
"groupKey": "GROUP_ID",
"accessLevels": [
"accessPolicies/POLICY_ID/accessLevels/DEFAULT_ACCESS_LEVEL"
],
"scopedAccessSettings": [
{
"scope": {
"clientScope": {
"restrictedClientApplication": {
"clientId": "SENSITIVE_APP_ID"
}
}
},
"activeSettings": {
"accessLevels": [
"accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"
],
"sessionSettings": [
{
"sessionLength": "2h",
"sessionReauthMethod": "SECURITY_KEY",
"sessionLengthEnabled": true
}
]
}
}
]
POST 请求:
POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
Terraform
如需为来自所有应用中“群组密钥”的用户指定访问权限请求的会话时长,请执行以下操作:
resource "google_access_context_manager_gcp_user_access_binding" "gcp_user_access_binding" {
organization_id = "{Organization ID}"
group_key = "{Group Key}"
session_settings {
session_length = "1800s"
session_length_enabled = true
session_reauth_method = "LOGIN"
use_oidc_max_age = false
}
如需为来自特定 Google 群组的用户使用特定应用(例如 Google Cloud 控制台)发出的请求指定会话时长,请在 active_settings 中使用 session_settings 实参填充相应的 scoped_access_settings 实参。session_settings 中的子实参与顶级实参相同。
resource "google_access_context_manager_gcp_user_access_binding" "gcp_user_access_binding" {
organization_id = "{Organization ID}"
group_key = "{Group Key}"
scoped_access_settings {
scope {
client_scope {
restricted_client_application {
name = "Cloud Console"
}
}
}
active_settings {
session_settings {
session_length = "1800s"
session_length_enabled = true
session_reauth_method = "LOGIN"
use_oidc_max_age = false
}
}
}
}