您可以透過存取權繫結,控管使用者群組可存取哪些應用程式和資源。存取權繫結會指定如何將存取層級和工作階段控管套用至使用者群組。您可以對所有應用程式套用相同的存取層級和工作階段控制項,也可以為個別應用程式定義特定行為。
為確保設定正確無誤,您可以在強制執行政策前進行測試。
使用存取權繫結時,請注意下列行為:
- 使用者群組只能有一個存取權繫結。
- 如果使用者同時屬於多個群組,只要有任何政策允許存取 (
OR而非AND),系統就會授予使用者存取權。 - 工作階段控制項只會套用最近建立的存取權繫結。
為所有應用程式使用單一設定
這個方法會對使用者群組存取的所有應用程式,套用相同的存取層級和工作階段控制項。
建議您先進行模擬執行或套用至小型測試群組,再將政策套用至正式環境。
主控台
在 Google Cloud 控制台中,開啟「控制台和 API 存取權政策」頁面。
如果系統提示,請選取機構。
按一下「新增存取政策」。
選取要套用政策的群組。
在「選取存取 Google Cloud 的應用程式」部分,選取「所有應用程式」。
按一下 [儲存]。
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:套用標準登入程序,可能包含多重驗證或其他 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:套用標準登入程序,可能包含多重驗證或其他 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 Admin 角色的機構 ID。如果尚未設定
access-context-manager/organization屬性,請將選用--organization旗標中的ORG_ID替換為您建立 Cloud Access Binding 管理員角色時使用的機構 ID。
如果成功,您應該會收到 JSON 物件的表示法。如有問題,系統會顯示錯誤訊息。
為特定應用程式定義設定
您可以使用這個方法,對不同應用程式套用不同的存取層級和工作階段控制項。您也可以為沒有特定設定的應用程式設定預設規則。
您可以使用應用程式的 OAuth 用戶端 ID,在存取權繫結中指定應用程式。您可以依名稱指定下列應用程式:
- Google 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代表兩小時。 SESSION_REAUTH_METHOD:選用方法,可要求使用者重新驗證身分,必須是下列其中一種:
LOGIN:套用標準登入程序,可能包含多重驗證或其他 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:套用標準登入程序,可能包含多重驗證或其他 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。 - ACCESS_LEVEL_A:存取層級名稱,格式為
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME。 - SESSION_LENGTH:以 ISO 8601 時長格式表示的課程時間長度,例如
30m代表 30 分鐘,2h代表兩小時。 SESSION_REAUTH_METHOD:挑戰使用者重新驗證身分的可選方法,必須是下列其中一種:
LOGIN:套用標準登入程序,可能包含多重驗證或其他 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 存取權繫結管理員角色的機構 ID。如果尚未設定 access-context-manager/organization 屬性,請將選用 --organization 旗標中的 ORG_ID 替換為您建立 Cloud Access Binding 管理員角色時使用的機構 ID。
如果成功,您應該會收到 JSON 物件的表示法;如有問題,則會收到錯誤訊息。
使用模擬測試存取層級模擬強制執行
模擬測試存取層級可讓您測試存取權政策,而不必實際強制執行。這有助您瞭解政策生效前的影響。您可以查看模擬測試記錄,瞭解政策啟用後會發生什麼情況。
模擬測試模式僅適用於存取層級。模擬測試模式不支援工作階段控制項。
建立模擬測試繫結
您可以在同一個繫結中定義模擬測試存取層級和一般存取層級,也可以使用個別繫結進行模擬測試。
主控台
在 Google Cloud 控制台中,開啟「控制台和 API 存取權政策」頁面。
如果系統提示,請選取機構。
按一下「新增存取政策」。
選取要套用政策的群組。
在「選取存取 Google Cloud 的應用程式」部分,選取要套用這些限制的應用程式。
針對所選應用程式,使用現有或新的存取層級設定模擬測試存取層級。
按一下 [儲存]。
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/gcpUserAccessBindingsORG_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 查詢語言」。