您可以使用访问权限绑定来控制用户群组可以访问哪些应用和资源。访问权限绑定指定了如何将访问权限级别和会话控制措施应用于用户群组。您可以对所有应用应用相同的访问权限级别和会话控制,也可以为个别应用定义特定行为。
为确保您已正确配置所有内容,您可以在强制执行政策之前对其进行测试。
使用访问权限绑定时,请注意以下行为:
- 一个用户群组只能有一个访问权限绑定。
- 如果用户同时属于多个群组,则系统会在任何政策允许的情况下(
OR
,而非AND
)向用户授予访问权限。 - 对于会话控制,系统只会应用最近创建的访问权限绑定。
为所有应用使用单个配置
此方法会将相同的访问权限级别和会话控制应用于用户群组访问的所有应用。
我们建议您先通过试运行来测试政策,或将其应用于一小部分测试组,然后再将其部署到生产环境。
gcloud
创建访问权限绑定。
gcloud access-context-manager cloud-bindings create \ --group-key GROUP_ID --organization ORG_ID --level DEFAULT_ACCESS_LEVEL [ --session-length=DEFAULT_SESSION_LENGTH ] [ --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD ]
替换以下内容:
-
GROUP_ID:组 ID。如果您不知道组 ID,可以通过对组资源调用
get
方法来获取。 - ORG_ID:您的组织 ID。
-
DEFAULT_ACCESS_LEVEL:可选的访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。将POLICY_ID
替换为访问权限政策 ID,将ACCESS_LEVEL_NAME
替换为访问权限级别名称。 -
DEFAULT_SESSION_LENGTH:可选的会话时长,采用 ISO 8601 时长格式,例如
30m
(30 分钟)或2h
(两小时)。 -
DEFAULT_SESSION_REAUTH_METHOD:用于要求用户重新验证其身份的可选方法,必须是以下方法之一:
LOGIN
:应用标准登录,其中可能包括多重身份验证 (MFA) 或 Workspace 定义的其他因素。PASSWORD
:仅要求输入密码,即使定义了其他因素也是如此。如果密码是使用外部 IdP 进行管理的,系统会将用户重定向到该 IdP。如果 IdP 会话有效,系统会隐式重新对用户进行身份验证。如果 IdP 未启用,用户必须通过 IdP 登录。SECURITY_KEY
:需要使用硬件安全密钥。
API
创建 JSON 正文:
{ "groupKey": "GROUP_ID", "accessLevels": [ "DEFAULT_ACCESS_LEVEL" ], // optional: "sessionSettings": { "sessionLength": "DEFAULT_SESSION_LENGTH", "sessionReauthMethod": "DEFAULT_SESSION_REAUTH_METHOD" } }
替换以下内容:
-
GROUP_ID:组 ID。如果您不知道组 ID,可以通过对组资源调用
get
方法来获取。 -
DEFAULT_ACCESS_LEVEL:可选的访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。将POLICY_ID
替换为访问权限政策 ID,将ACCESS_LEVEL_NAME
替换为访问权限级别名称。 -
DEFAULT_SESSION_LENGTH:可选的会话时长,采用 ISO 8601 时长格式,例如
30m
(30 分钟)或2h
(两小时)。 -
DEFAULT_SESSION_REAUTH_METHOD:用于要求用户重新验证其身份的可选方法,必须是以下方法之一:
LOGIN
:应用标准登录,其中可能包括多重身份验证 (MFA) 或 Workspace 定义的其他因素。PASSWORD
:仅要求输入密码,即使定义了其他因素也是如此。如果密码是使用外部 IdP 进行管理的,系统会将用户重定向到该 IdP。如果 IdP 会话有效,系统会隐式重新对用户进行身份验证。如果 IdP 未启用,用户必须通过 IdP 登录。SECURITY_KEY
:需要使用硬件安全密钥。
-
GROUP_ID:组 ID。如果您不知道组 ID,可以通过对组资源调用
发送 POST 请求:
POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
ORG_ID 是您用于创建 Cloud Access Binding Admin 角色的组织的 ID。如果尚未设置
access-context-manager/organization
属性,请将可选--organization
标志中的ORG_ID
替换为您在创建 Cloud Access Binding 管理员角色时使用的组织的 ID。
如果成功,您应该会收到 JSON 对象的表示形式。如果出现问题,您会收到错误消息。
为特定应用定义配置
通过这种方法,您可以对不同的应用应用不同的访问权限级别和会话控制。您还可以为没有特定配置的应用设置默认规则。如果您想执行以下操作,此方法非常有用:
- 仅将政策应用于特定应用。
创建一般政策,但从中排除某些应用。
gcloud
创建一个 YAML 格式的绑定文件,其中包含
scopedAccessSettings
列表中的范围条目列表。对于要映射到特定访问权限级别的每个应用,请添加clientScope
条目。scopedAccessSettings: - scope: clientScope: restrictedClientApplication: clientId: CLIENT_ID activeSettings: accessLevels: - ACCESS_LEVEL_A sessionSettings: - sessionLength: SESSION_LENGTH sessionReauthMethod: SESSION_REAUTH_METHOD sessionLengthEnabled: true - scope: clientScope: restrictedClientApplication: # # because this app is specified by `name`, # it won't work with sessionSettings. # # if you add sessionSettings, make sure to # replace the `name` key with `clientId`, # and use the OAuth client ID as the value. # name: CLIENT_NAME activeSettings: accessLevels: - ACCESS_LEVEL_B
替换以下内容:
- CLIENT_ID:OAuth 客户端 ID。如果应用包含
sessionSettings
,则必须使用clientId
。 - ACCESS_LEVEL_A:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。 - SESSION_LENGTH:使用 ISO 8601 时长格式表示的会话时长,例如
30m
表示 30 分钟,2h
表示 2 小时。 SESSION_REAUTH_METHOD:可选的方法,用于要求用户重新验证其身份,必须是以下方法之一:
LOGIN
:应用标准登录,其中可能包括多重身份验证 (MFA) 或 Workspace 定义的其他因素。PASSWORD
:仅要求输入密码,即使定义了其他因素也是如此。如果使用外部 IdP 管理密码,系统会将用户重定向到该 IdP。如果 IdP 会话有效,系统会隐式重新对用户进行身份验证。如果 IdP 未启用,用户必须通过 IdP 登录。SECURITY_KEY
:需要使用硬件安全密钥。
CLIENT_NAME:客户端名称。如果应用包含
sessionSettings
,则无法使用客户端名称。而应改为使用 OAuth 客户端 ID。ACCESS_LEVEL_B:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。
如需为 YAML 文件中未定义的应用设置默认访问权限级别,请使用
--level
参数。YAML 文件仅支持应用专用设置 (scopedAccessSettings
)。- CLIENT_ID:OAuth 客户端 ID。如果应用包含
创建访问权限绑定。
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=DEFAULT_SESSION_LENGTH ] [ --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD ]
替换以下内容:
- ORG_ID:您的组织 ID。
-
GROUP_ID:组 ID。如果您不知道组 ID,可以通过对组资源调用
get
方法来获取。 -
BINDING_FILE_PATH:包含访问绑定方案的 YAML 文件的路径。绑定文件仅支持
scopedAccessSettings
。 -
DEFAULT_ACCESS_LEVEL:可选的访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。将POLICY_ID
替换为访问权限政策 ID,将ACCESS_LEVEL_NAME
替换为访问权限级别名称。 -
DEFAULT_SESSION_LENGTH:可选的会话时长,采用 ISO 8601 时长格式,例如
30m
(30 分钟)或2h
(两小时)。 -
DEFAULT_SESSION_REAUTH_METHOD:用于要求用户重新验证其身份的可选方法,必须是以下方法之一:
LOGIN
:应用标准登录,其中可能包括多重身份验证 (MFA) 或 Workspace 定义的其他因素。PASSWORD
:仅要求输入密码,即使定义了其他因素也是如此。如果密码是使用外部 IdP 进行管理的,系统会将用户重定向到该 IdP。如果 IdP 会话有效,系统会隐式重新对用户进行身份验证。如果 IdP 未启用,用户必须通过 IdP 登录。SECURITY_KEY
:需要使用硬件安全密钥。
--level
和 --binding-file
实参如何协同发挥作用
- 如果您仅使用
--binding-file
,则只有文件中的应用会应用相应政策。 - 如果您仅使用
--level
,则该访问权限级别会应用于所有应用。 - 如果您同时使用这两种方式,则 YAML 文件中的规则优先。
--level
值适用于文件中未列出的任何应用。
使用会话控件
- 如需为所有应用设置默认会话控制,请使用
--session-length
和--session-reauth-method
。 - 如果您还在 YAML 文件中定义了会话控制,这些会话控制会替换这些特定应用的默认设置。
- 您必须同时使用
--session-length
和--session-reauth-method
。
API
创建 JSON 正文:
{
"groupKey": "GROUP_ID",
//
// Optional; if specified, all applications that aren't defined in
// scopedAccessSettings have these access levels applied.
//
// If more than one access level is specified, the user is
// granted access if any one resolves to TRUE (OR logic, not AND).
//
// If you omit this key entirely, then no policy enforcement is
// applied by default.
//
"accessLevels": [
"DEFAULT_ACCESS_LEVEL"
],
"scopedAccessSettings": [
{
"scope": {
"clientScope": {
"restrictedClientApplication": {
"clientId": "CLIENT_ID"
}
}
},
"activeSettings": {
"accessLevels": [
"ACCESS_LEVEL_A"
],
"sessionSettings": [
{
"sessionLength": "SESSION_LENGTH",
"sessionReauthMethod": "SESSION_REAUTH_METHOD",
"sessionLengthEnabled": true
}
]
}
},
{
"scope": {
"clientScope": {
"restrictedClientApplication": {
"name": "CLIENT_NAME"
}
},
"activeSettings": {
"accessLevels": [
"ACCESS_LEVEL_B"
]
}
}
}
]
}
替换以下内容:
-
GROUP_ID:组 ID。如果您不知道组 ID,可以通过对组资源调用
get
方法来获取。 -
DEFAULT_ACCESS_LEVEL:可选的访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。将POLICY_ID
替换为访问权限政策 ID,将ACCESS_LEVEL_NAME
替换为访问权限级别名称。 - CLIENT_ID:OAuth 客户端 ID。如果应用包含
sessionSettings
,则必须使用clientId
。 - ACCESS_LEVEL_A:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。 - SESSION_LENGTH:使用 ISO 8601 时长格式表示的会话时长,例如
30m
表示 30 分钟,2h
表示 2 小时。 SESSION_REAUTH_METHOD:可选的方法,用于要求用户重新验证其身份,该方法必须是以下方法之一:
LOGIN
:应用标准登录,其中可能包括多重身份验证 (MFA) 或 Workspace 定义的其他因素。PASSWORD
:仅要求输入密码,即使定义了其他因素也是如此。如果使用外部 IdP 管理密码,系统会将用户重定向到该 IdP。如果 IdP 会话有效,系统会隐式重新对用户进行身份验证。如果 IdP 未启用,用户必须通过 IdP 登录。SECURITY_KEY
:需要使用硬件安全密钥。
CLIENT_NAME:客户端名称。如果应用包含
sessionSettings
,则无法使用客户端名称。请改用 OAuth 客户端 ID。ACCESS_LEVEL_B:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。
发送 POST 请求:
POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
ORG_ID 是您用于创建 Cloud Access Binding Admin 角色的组织的 ID。如果尚未设置 access-context-manager/organization
属性,请将可选 --organization
标志中的 ORG_ID
替换为您在创建 Cloud Access Binding 管理员角色时使用的组织的 ID。
如果成功,您应该会收到 JSON 对象的表示法;如果出现问题,则会收到错误消息。
使用试运行访问权限级别来模拟强制执行
通过试运行访问权限级别,您无需实际强制执行访问权限政策,即可测试这些政策。这有助于您在政策生效之前了解其影响。您可以查看模拟运行日志,了解如果政策生效会出现什么情况。
在试运行模式下,只能使用访问权限级别。在试运行模式下无法使用会话控制功能。
创建试运行绑定
您可以在同一绑定中定义试运行访问权限级别和常规访问权限级别,也可以为试运行使用单独的绑定。
gcloud
配置访问权限设置。
scopedAccessSettings: - scope: clientScope: restrictedClientApplication: name: CLIENT_NAME activeSettings: accessLevels: - ACCESS_LEVEL_A dryRunSettings: accessLevels: - DRY_RUN_ACCESS_LEVEL_1 - scope: clientScope: restrictedClientApplication: clientId: CLIENT_ID dryRunSettings: accessLevels: - DRY_RUN_ACCESS_LEVEL_2
替换以下内容:
- CLIENT_NAME:客户端名称。如果应用包含
sessionSettings
,则无法使用客户端名称。而应改为使用 OAuth 客户端 ID。 - ACCESS_LEVEL_A:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。 - DRY_RUN_ACCESS_LEVEL_1:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。 - CLIENT_ID:OAuth 客户端 ID。如果应用包含
sessionSettings
,则必须使用clientId
。 - DRY_RUN_ACCESS_LEVEL_2:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。
- CLIENT_NAME:客户端名称。如果应用包含
创建访问权限绑定。
gcloud access-context-manager cloud-bindings create --organization ORG_ID --group-key GROUP_ID --binding-file BINDING_FILE_PATH --dry-run-level DEFAULT_DRY_RUN_ACCESS_LEVEL
替换以下内容:
- ORG_ID:您的组织 ID。
-
GROUP_ID:组 ID。如果您不知道组 ID,可以通过对组资源调用
get
方法来获取。 -
BINDING_FILE_PATH:包含访问绑定方案的 YAML 文件的路径。绑定文件仅支持
scopedAccessSettings
。 - DEFAULT_DRY_RUN_ACCESS_LEVEL_2:可选的访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。
添加此标志可默认将指定的试运行访问权限级别应用于所有应用(如果 YAML 中未指定)。
API
创建 JSON 正文:
{ "group_key": "GROUP_ID", // // Optional; if specified, all applications that aren't defined in // scopedAccessSettings have these access levels applied. // // If more than one access level is specified, the user is // granted access if any one resolves to TRUE (OR logic, not AND). // // If you omit this key entirely, then no policy enforcement is // be applied by default. // "access_levels": [ "DEFAULT_ACCESS_LEVEL" ], // // Optional; if specified, all applications that aren't defined in // scopedAccessSettings will have these dry run access levels applied. // "dry_run_access_levels": [ "DEFAULT_DRY_RUN_ACCESS_LEVEL" ], "scoped_access_settings": [ { "scope": { "client_scope": { "restricted_client_application": { "name": "CLIENT_NAME" } } }, "active_settings": { "access_levels": [ "ACCESS_LEVEL_A" ] }, "dry_run_settings": { "access_levels": [ "DRY_RUN_ACCESS_LEVEL_1" ] } }, { "scope": { "client_scope": { "restricted_client_application": { "client_id": "CLIENT_ID" } } }, "active_settings": { "access_levels": [ "DRY_RUN_ACCESS_LEVEL_2" ] } } ] }
替换以下内容:
-
GROUP_ID:组 ID。如果您不知道组 ID,可以通过对组资源调用
get
方法来获取。 -
DEFAULT_ACCESS_LEVEL:可选的访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。将POLICY_ID
替换为访问权限政策 ID,将ACCESS_LEVEL_NAME
替换为访问权限级别名称。 - DEFAULT_DRY_RUN_ACCESS_LEVEL:可选的访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。 - CLIENT_NAME:客户端名称。如果应用包含
sessionSettings
,则无法使用客户端名称。而应改为使用 OAuth 客户端 ID。 - ACCESS_LEVEL_A:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。 - DRY_RUN_ACCESS_LEVEL_1:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。 - CLIENT_ID:OAuth 客户端 ID。如果应用包含
sessionSettings
,则必须使用client_id
。 - DRY_RUN_ACCESS_LEVEL_2:访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。
-
GROUP_ID:组 ID。如果您不知道组 ID,可以通过对组资源调用
发送 POST 请求:
https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
ORG_ID 是您用于创建 Cloud Access Binding Admin 角色的组织的 ID。如果尚未设置
access-context-manager/organization
属性,请将可选--organization
标志中的ORG_ID
替换为您在创建 Cloud Access Binding 管理员角色时使用的组织的 ID。如果成功,您应该会收到 JSON 对象的表示形式。如果出现问题,您会收到错误消息。
查看试运行日志
设置试运行后,您可以查看日志,了解哪些访问尝试会被拒绝。
下表列出了可用于创建和运行查询以获取日志的日志字段:
字段名称 | 说明 |
---|---|
protoPayload.authenticationInfo.principalEmail |
被拒绝访问权限的主账号的电子邮件 ID。 |
protoPayload.metadata.deniedApplications |
被拒绝访问权限的应用的名称。 |
protoPayload.metadata.evaluationResult |
有效访问权限政策的评估结果。可能的值:GRANTED 或 DENIED 。 |
protoPayload.metadata.appliedAccessLevels |
有效访问权限政策要求的已应用访问权限级别。 |
protoPayload.metadata.appliedDryRunAccessLevels |
试运行访问权限政策所要求的已应用访问权限级别。 |
protoPayload.metadata.dryRunEvaluationResult |
试运行访问权限政策的评估结果,表示强制执行访问权限政策时的预期操作。
可能的值:GRANTED 或 DENIED 。 |
如需详细了解如何针对日志创建查询,请参阅 Logging 查询语言。