您可以使用存取權繫結,控管使用者群組可存取的應用程式和資源。存取權繫結會指定如何將存取層級和工作階段控制項套用至使用者群組。您可以對所有應用程式套用相同的存取層級和工作階段控制項,也可以為個別應用程式定義特定行為。
為確保所有設定皆正確無誤,請先測試政策,再強制執行。
使用存取權繫結時,請注意下列行為:
- 一個使用者群組只能有一個存取權繫結。
- 如果使用者屬於多個群組,只要有任何政策允許 (
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:選用的工作階段持續時間,格式為小時,例如
15h代表 15 小時,2h代表 2 小時。 -
DEFAULT_SESSION_REAUTH_METHOD:要求使用者重新驗證身分的選用方法,必須是下列其中一項:
LOGIN:套用標準登入方式,其中可能包含多重驗證或其他 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:選用的工作階段持續時間,格式為小時,例如
15h代表 15 小時,2h代表 2 小時。 -
DEFAULT_SESSION_REAUTH_METHOD:要求使用者重新驗證身分的選用方法,必須是下列其中一項:
LOGIN:套用標準登入方式,其中可能包含多重驗證或其他 Workspace 定義的因素。PASSWORD:即使已定義其他因素,也只需密碼。如果密碼是由外部 IdP 管理,系統會將使用者重新導向至 IdP。如果 IdP 工作階段有效,系統會自動重新驗證使用者。如果 IdP 尚未上線,使用者必須透過 IdP 登入。SECURITY_KEY:必須使用實體安全金鑰。
-
GROUP_ID:群組 ID。如果沒有群組 ID,可以對群組資源呼叫
傳送 POST 要求:
POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindingsORG_ID 是您用來建立 Cloud Access Binding 管理員角色的組織 ID。如果尚未設定
access-context-manager/organization屬性,請將選用--organization旗標中的ORG_ID替換為您在建立 Cloud Access Binding 管理員角色時使用的組織 ID。
如果成功,您會收到 JSON 物件的表示法。如果發生問題,您會收到錯誤訊息。
定義特定應用程式的設定
這種方法可讓您對不同應用程式套用不同的存取層級和工作階段控制項。您也可以為沒有特定設定的應用程式設定預設規則。
您可以使用 OAuth 用戶端 ID,在存取權繫結中指定應用程式。您可以使用名稱指定下列應用程式:
- Google Auth Library 如果您使用 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: name: CLIENT_NAME activeSettings: accessLevels: - ACCESS_LEVEL_B更改下列內容:
- CLIENT_ID:OAuth 用戶端 ID。如果應用程式包含
sessionSettings,您可以使用clientId或name。 - ACCESS_LEVEL_A:存取層級名稱,格式為
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。 - SESSION_LENGTH:工作階段持續時間,以小時為單位,例如
15h代表 15 小時,2h代表 2 小時。 SESSION_REAUTH_METHOD:要求使用者重新驗證身分的選用方法,必須是下列其中一項:
LOGIN:套用標準登入程序,其中可能包含多重驗證 (MFA) 或其他 Workspace 定義的因素。PASSWORD:即使定義了其他因素,也只需要密碼。如果密碼是由外部 IdP 管理,系統會將使用者重新導向至 IdP。如果 IdP 工作階段有效,系統會自動重新驗證使用者。如果 IdP 尚未上線,使用者必須透過 IdP 登入。SECURITY_KEY:必須使用實體安全金鑰。
CLIENT_NAME:用戶端名稱。如果應用程式包含
sessionSettings,您可以使用name或clientId。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:選用的工作階段持續時間,格式為小時,例如
15h代表 15 小時,2h代表 2 小時。 -
DEFAULT_SESSION_REAUTH_METHOD:要求使用者重新驗證身分的選用方法,必須是下列其中一項:
LOGIN:套用標準登入方式,其中可能包含多重驗證或其他 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方法來擷取。 -
DEFAULT_ACCESS_LEVEL:選用的存取層級名稱,格式為
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。將POLICY_ID替換為存取權政策 ID,並將ACCESS_LEVEL_NAME替換為存取層級名稱。 - CLIENT_ID:OAuth 用戶端 ID。如果應用程式包含
sessionSettings,您可以使用clientId或name。 - ACCESS_LEVEL_A:存取層級名稱,格式為
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。 - SESSION_LENGTH:工作階段持續時間,格式為小時,例如
2h代表兩小時。 SESSION_REAUTH_METHOD:要求使用者重新驗證身分的選用方法,必須是下列其中一項:
LOGIN:套用標準登入方式,其中可能包含多重驗證或其他 Workspace 定義的因素。PASSWORD:即使定義了其他因素,也只需要密碼。如果密碼是由外部 IdP 管理,系統會將使用者重新導向至 IdP。如果 IdP 工作階段有效,系統會自動重新驗證使用者。如果 IdP 尚未上線,使用者必須透過 IdP 登入。SECURITY_KEY:必須使用實體安全金鑰。
CLIENT_NAME:用戶端名稱。如果應用程式包含
sessionSettings,您可以使用name或clientId。ACCESS_LEVEL_B:存取層級名稱,格式為
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。
傳送 POST 要求:
POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
ORG_ID 是您用來建立 Cloud 存取權繫結管理員角色的組織 ID。如果尚未設定 access-context-manager/organization 屬性,請將選用 --organization 旗標中的 ORG_ID 替換為您在建立 Cloud Access Binding 管理員角色時使用的組織 ID。
如果成功,您應該會收到 JSON 物件的表示法,如果發生問題,則會收到錯誤訊息。
使用模擬測試存取層級模擬強制執行
模擬測試存取層級可讓您測試存取政策,而不必實際強制執行。這有助於您在政策生效前瞭解其影響。您可以查看模擬測試記錄,瞭解政策啟用後會發生的情況。
模擬測試模式只能使用存取層級。模擬測試模式不提供工作階段控制項。
建立全面模擬測試政策
這個方法會將相同的模擬測試存取層級,套用至使用者群組存取的所有應用程式。
gcloud
使用 --dry-run-level 旗標建立存取權繫結。
gcloud access-context-manager cloud-bindings create \
--group-key=<var>GROUP_ID</var> \
--organization=<var>ORG_ID</var> \
--dry-run-level=<var>DEFAULT_DRY_RUN_ACCESS_LEVEL</var>
更改下列內容:
-
GROUP_ID:群組 ID。如果沒有群組 ID,可以對群組資源呼叫
get方法來擷取。 - ORG_ID:組織 ID。
- DEFAULT_DRY_RUN_ACCESS_LEVEL:模擬測試存取層級名稱,格式為
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。
API
建立包含
dry_run_access_levels的 JSON 主體。{ "group_key": "GROUP_ID", "dry_run_access_levels": [ "DEFAULT_DRY_RUN_ACCESS_LEVEL" ] }更改下列內容:
-
GROUP_ID:群組 ID。如果沒有群組 ID,可以對群組資源呼叫
get方法來擷取。 - DEFAULT_DRY_RUN_ACCESS_LEVEL:模擬測試存取層級名稱,格式為
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。
-
GROUP_ID:群組 ID。如果沒有群組 ID,可以對群組資源呼叫
傳送 POST 要求:
POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindingsORG_ID 是您用來建立 Cloud Access Binding 管理員角色的組織 ID。如果尚未設定
access-context-manager/organization屬性,請將選用--organization旗標中的ORG_ID替換為您在建立 Cloud Access Binding 管理員角色時使用的組織 ID。
為特定應用程式建立模擬測試政策
這個方法可讓您為不同應用程式套用不同的模擬測試存取層級。您也可以為未指定設定的應用程式設定預設規則。
gcloud
使用
dryRunSettings欄位,在 YAML 繫結檔案中設定存取權。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,您可以使用name或clientId。 - 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或name。 - 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:選用的模擬測試存取層級名稱,格式為
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 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" } } }, "dry_run_settings": { "access_levels": [ "DRY_RUN_ACCESS_LEVEL_2" ] } } ] }更改下列內容:
-
GROUP_ID:群組 ID。如果沒有群組 ID,可以對群組資源呼叫
get方法來擷取。 - DEFAULT_DRY_RUN_ACCESS_LEVEL:選用的模擬測試存取層級名稱,格式為
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。 - CLIENT_NAME:用戶端名稱。如果應用程式包含
sessionSettings,您可以使用name或clientId。 - 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或name。 - DRY_RUN_ACCESS_LEVEL_2:存取層級名稱,格式為
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。
-
GROUP_ID:群組 ID。如果沒有群組 ID,可以對群組資源呼叫
傳送 POST 要求:
POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindingsORG_ID 是您用來建立 Cloud Access Binding 管理員角色的組織 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。如果繫結中未套用任何有效的存取層級,這個欄位會設為 GRANTED。 |
protoPayload.metadata.appliedAccessLevels |
有效存取權政策要求的套用存取層級。 |
protoPayload.metadata.appliedDryRunAccessLevels |
模擬測試存取權政策要求的套用存取層級。 |
protoPayload.metadata.dryRunEvaluationResult |
模擬測試存取權政策的評估結果,指出強制執行存取權政策時的預期動作。可能的值:GRANTED 或 DENIED。如果繫結中未套用任何模擬測試存取層級,即使 evaluationResult 為 DENIED,這個欄位也會設為 GRANTED。 |
protoPayload.metadata.unsatisfiedAccessLevels |
要求不符合組織中的存取層級。這份清單可以包含未在存取權繫結中套用的存取層級。如要找出導致存取遭拒的存取層級,請將這個欄位與 appliedAccessLevels 或 appliedDryRunAccessLevels 進行比較。 |
如要瞭解如何建立記錄查詢,請參閱「Logging 查詢語言」。