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

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

為確保設定正確無誤,您可以在套用政策前先測試。

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

  • 使用者群組只能有一個存取權繫結。
  • 如果使用者同時屬於多個群組,只要有任何政策允許 (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 時間長度格式,例如 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 方法來擷取群組 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:要求使用實體安全金鑰。
  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 方法來擷取群組 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 時間長度格式,例如 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 方法來擷取群組 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 代表兩小時。
  • 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 方法來擷取群組 ID。
    • 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 方法來擷取群組 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 格式表示的存取層級名稱。
  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

如要進一步瞭解如何建立記錄查詢,請參閱「Logging 查詢語言」。