使用存取權繫結將政策套用至使用者群組

您可以透過存取權繫結,控管使用者群組可存取哪些應用程式和資源。存取權繫結會指定如何將存取層級和工作階段控管套用至使用者群組。您可以對所有應用程式套用相同的存取層級和工作階段控制項,也可以為個別應用程式定義特定行為。

為確保設定正確無誤,您可以在強制執行政策前進行測試。

使用存取權繫結時,請注意下列行為:

  • 使用者群組只能有一個存取權繫結。
  • 如果使用者同時屬於多個群組,只要有任何政策允許存取 (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:套用標準登入程序,可能包含多重驗證或其他 Workspace 定義的因素。
    • PASSWORD:只要求輸入密碼,即使已定義其他因素也一樣。如果密碼是由外部 IdP 管理,使用者會重新導向至該 IdP。如果 IdP 工作階段處於有效狀態,系統會隱含地重新驗證使用者身分。如果 IdP 未上線,使用者必須透過 IdP 登入。
    • SECURITY_KEY:必須使用實體安全金鑰。

API

  1. 建立 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:必須使用實體安全金鑰。
  2. 傳送 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 物件的表示法。如有問題,系統會顯示錯誤訊息。

為特定應用程式定義設定

這個方法可讓您對不同應用程式套用不同存取層級和工作階段控制項。您也可以為沒有特定設定的應用程式設定預設規則。

您可以使用 OAuth 用戶端 ID,在存取權繫結中指定應用程式。您可以使用名稱指定下列應用程式:

如果您想執行下列操作,這個方法就非常實用:

  • 只對特定應用程式套用政策。
  • 建立一般政策,但排除部分應用程式。

gcloud

  1. 以 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)。

  2. 建立存取權繫結。

    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 物件的表示法,或是在發生問題時收到錯誤訊息。

使用模擬測試存取層級模擬強制執行

模擬測試存取層級可讓您測試存取權政策,而不必實際強制執行。這有助您瞭解政策生效前的影響。您可以查看模擬測試記錄,瞭解政策啟用後會發生什麼情況。

模擬測試模式只能使用存取層級。模擬測試模式不支援工作階段控制項。

建立模擬測試繫結

您可以在同一個繫結中定義模擬測試存取層級和一般存取層級,也可以使用個別的繫結進行模擬測試。

gcloud

  1. 設定存取權。

    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
  2. 建立存取權繫結。

    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

  1. 建立 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
  2. 傳送 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 有效存取權政策的評估結果。可能的值:GRANTEDDENIED
protoPayload.metadata.appliedAccessLevels 有效存取權政策要求的已套用存取層級。
protoPayload.metadata.appliedDryRunAccessLevels 模擬測試存取權政策要求的已套用存取層級。
protoPayload.metadata.dryRunEvaluationResult 模擬測試存取權政策的評估結果,指出強制執行存取權政策時的預期動作。可能的值:GRANTEDDENIED

如要瞭解如何建立記錄查詢,請參閱記錄查詢語言