您可以使用访问权限绑定来控制用户群组可以访问哪些应用和资源。访问权限绑定用于指定如何将访问权限级别和会话控制应用于用户群组。您可以将相同的访问权限级别和会话控制设置应用于所有应用,也可以为各个应用定义特定的行为。
为确保您已正确配置所有内容,您可以在强制执行政策之前对其进行测试。
使用访问权限绑定时,请注意以下行为:
- 一个用户群组只能有一个访问权限绑定。
- 如果用户属于多个群组,只要有任何政策允许,用户即可获得访问权限(
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
方法来获取该 ID。 - ORG_ID:您的组织 ID。
-
DEFAULT_ACCESS_LEVEL:可选的访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。将POLICY_ID
替换为访问权限政策 ID,并将ACCESS_LEVEL_NAME
替换为访问权限级别名称。 -
DEFAULT_SESSION_LENGTH:可选会话时长,采用 ISO 8601 时长格式,例如 30 分钟为
30m
,2 小时为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
方法来获取该 ID。 -
DEFAULT_ACCESS_LEVEL:可选的访问权限级别名称,格式为
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
。将POLICY_ID
替换为访问权限政策 ID,并将ACCESS_LEVEL_NAME
替换为访问权限级别名称。 -
DEFAULT_SESSION_LENGTH:可选会话时长,采用 ISO 8601 时长格式,例如 30 分钟为
30m
,2 小时为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 Admin 角色时使用的组织的 ID。
如果成功,您应该会收到 JSON 对象的表示形式。如果出现问题,您会收到一条错误消息。
为特定应用定义配置
通过此方法,您可以为不同的应用应用不同的访问权限级别和会话控制。您还可以为没有特定配置的应用设置默认规则。
您可以使用应用的 OAuth 客户端 ID 在访问权限绑定中指定应用。您可以使用以下应用的名称来指定这些应用:
- Cloud Console
- Google Cloud SDK
- Google Auth 库 如果您使用 gcloud CLI 生成的应用默认凭据 (ADC),并且想要使用名称,则必须使用内置于 gcloud CLI 中的默认客户端 ID。您无法向 gcloud CLI 提供客户端 ID 文件。
- Firebase 控制台
如果您想执行以下操作,此方法非常有用:
- 仅对某些应用应用政策。
创建一般政策,但排除某些应用。
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
方法来获取该 ID。 -
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 时长格式,例如 30 分钟为
30m
,2 小时为2h
。 -
DEFAULT_SESSION_REAUTH_METHOD:用于提示用户重新验证身份的可选方法,必须是以下方法之一:
LOGIN
:应用标准登录方式,其中可能包括 MFA 或其他 Workspace 定义的因素。PASSWORD
:仅要求输入密码,即使定义了其他因素也是如此。如果密码是使用外部 IdP 管理的,则用户会被重定向到该 IdP。如果 IdP 会话处于有效状态,系统会隐式重新验证用户身份。如果 IdP 未处于有效状态,用户必须通过该 IdP 登录。SECURITY_KEY
:需要使用硬件安全密钥。
--level
和 --binding-file
实参如何协同运作
- 如果您仅使用
--binding-file
,则只有文件中的应用会应用相应政策。 - 如果您仅使用
--level
,则该访问权限级别适用于所有应用。 - 如果您同时使用这两个参数,系统会将规则合并。
--level
值适用于所有应用,而--binding-file
指定的 YAML 文件中的政策仅适用于该文件中定义的应用。
使用会话控制
- 如需为所有应用设置默认会话控制,请使用
--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
方法来获取该 ID。 -
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 Admin 角色时使用的组织的 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
方法来获取该 ID。 -
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
方法来获取该 ID。 -
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 Admin 角色时使用的组织的 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 。 |
如需详细了解如何创建日志查询,请参阅日志记录查询语言。