拒絕存取資源

本頁說明如何禁止主體使用特定 Identity and Access Management (IAM) 權限,藉此拒絕主體存取。

在 IAM 中,您可以使用「拒絕政策」拒絕存取要求。每項拒絕政策都會附加至 Google Cloud 機構、資料夾或專案。拒絕政策包含拒絕規則,可識別主體並列出主體無法使用的權限。

拒絕政策與允許政策 (又稱 IAM 政策) 不同。允許政策會將 IAM 角色授予主體,藉此提供資源存取權。

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 IAM v2 REST API 管理拒絕政策。

事前準備

  • 啟用 IAM API。

    啟用 API 時所需的角色

    如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色

    啟用 API

  • 設定驗證方法。

    選取這個頁面上您打算如何使用範例的分頁:

    控制台

    使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,無須設定驗證。

    gcloud

    在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。

    Terraform

    如要在本機開發環境中使用本頁的 Terraform 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

    1. 安裝 Google Cloud CLI。

    2. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    3. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

      gcloud auth application-default login

      如果您使用 Cloud Shell,則不需要執行這項操作。

      如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

    Go

    如要在本機開發環境中使用本頁的 Go 範例,請安裝並初始化 gcloud CLI,然後使用您的使用者憑證設定應用程式預設憑證。

    1. 安裝 Google Cloud CLI。

    2. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    3. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

      gcloud auth application-default login

      如果您使用 Cloud Shell,則不需要執行這項操作。

      如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

    Java

    如要在本機開發環境中使用本頁面的 Java 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

    1. 安裝 Google Cloud CLI。

    2. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    3. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

      gcloud auth application-default login

      如果您使用 Cloud Shell,則不需要執行這項操作。

      如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

    Node.js

    如要在本機開發環境中使用本頁的 Node.js 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。

    1. 安裝 Google Cloud CLI。

    2. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    3. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

      gcloud auth application-default login

      如果您使用 Cloud Shell,則不需要執行這項操作。

      如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

    Python

    如要在本機開發環境中使用本頁的 Python 範例,請安裝並初始化 gcloud CLI,然後使用您的使用者憑證設定應用程式預設憑證。

    1. 安裝 Google Cloud CLI。

    2. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    3. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

      gcloud auth application-default login

      如果您使用 Cloud Shell,則不需要執行這項操作。

      如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「 為本機開發環境設定 ADC」。

    REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI。

      若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

  • 請參閱拒絕政策總覽

必要的角色

如要取得管理拒絕政策所需的權限,請要求管理員授予您組織的下列 IAM 角色:

  • 如要查看拒絕政策:拒絕審查者 (roles/iam.denyReviewer)
  • 如要查看、建立、更新及刪除拒絕政策:拒絕管理員 (roles/iam.denyAdmin)

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備管理拒絕政策所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

必須具備下列權限,才能管理拒絕政策:

  • 如要查看拒絕政策,請按照下列方式操作:
    • iam.denypolicies.get
    • iam.denypolicies.list
  • 如要建立、更新及刪除拒絕政策,請按照下列步驟操作:
    • iam.denypolicies.create
    • iam.denypolicies.delete
    • iam.denypolicies.get
    • iam.denypolicies.update

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

找出要拒絕的權限

建立拒絕政策前,請先決定要拒絕哪些權限,以及要拒絕哪些主體使用這些權限。

只有部分權限可以拒絕。如需可拒絕的權限清單,請參閱「拒絕政策支援的權限」。

在某些情況下,您也可以使用權限群組拒絕一組權限。 詳情請參閱「權限群組」。

您可以使用 v2 REST API 管理拒絕政策,但權限名稱必須採用特殊格式。舉例來說,建立 IAM 自訂角色的權限名稱如下:

  • v1 API:iam.roles.create
  • v2 API:iam.googleapis.com/roles.create

建立拒絕政策

您可以為機構、資料夾和專案新增拒絕政策。每個資源最多可有 500 項拒絕政策。

拒絕政策包含拒絕規則,可指定下列項目:

  • 要拒絕的權限。
  • 遭拒這些權限的主體。
  • 選用:可免除權限遭拒的主體。

    舉例來說,您可以拒絕群組的權限,但豁免屬於該群組的特定使用者。

  • 選用:條件運算式,指定主體無法使用權限的時間。在拒絕政策中,條件運算式只能使用資源標記的函式,不支援其他函式和運算子。

每項資源在所有附加的拒絕政策中,最多可有 500 項拒絕規則。

拒絕政策是透過資源階層沿用上層資源的設定。舉例來說,如果您在機構層級拒絕某項權限,該機構內的資料夾和專案,以及每個專案中的服務專屬資源,也會拒絕這項權限。

拒絕政策會覆寫允許政策。如果主體獲派的角色包含特定權限,但拒絕政策規定主體不得使用該權限,則主體無法使用該權限。

控制台

  1. 前往 Google Cloud 控制台的「IAM」頁面,然後點選「拒絕」分頁標籤。

    前往 IAM

  2. 選取專案、資料夾或機構。

  3. 按一下 「建立拒絕政策」

  4. 在「政策名稱」部分,透過下列任一方式定義政策 ID:

    • 在「顯示名稱」欄位中,輸入政策的顯示名稱。 填寫這個欄位後,系統會自動填寫「ID」欄位。如要變更政策 ID,請更新「ID」欄位中的文字。
    • 在「ID」欄位中,輸入政策 ID。
  5. 在「拒絕規則」部分定義政策的拒絕規則。每項拒絕政策至少須有一項拒絕規則。如要新增其他拒絕規則,請按一下「新增拒絕規則」

    針對每項拒絕規則,執行下列操作:

    1. 在「Denied principals」(遭拒主體) 欄位中,新增一或多個您要禁止使用指定權限的主體。主體可以是「拒絕政策的主體 ID」中的任何主體類型,但 ID 開頭為 deleted: 的主體除外。
    2. 選用:在「Exception principals」(例外主體) 欄位中,新增您希望能夠使用指定權限的主體,即使這些主體包含在「Denied principals」(遭拒主體) 部分也一樣。舉例來說,如果特定使用者屬於遭拒群組,您可以使用這個欄位將他們設為例外狀況。

    3. 在「Denied permissions」(拒絕的權限) 區段中,新增要拒絕的權限。權限必須支援拒絕政策

      在某些情況下,您也可以使用權限群組拒絕一組權限。詳情請參閱「權限群組」。

    4. 選用:新增例外狀況權限。例外權限是指您不希望這項拒絕規則拒絕的權限,即使這些權限包含在遭拒權限清單中,舉例來說,您可以使用這個欄位,在權限群組中為特定權限設定例外狀況。

      如要新增例外狀況權限,請按一下「例外狀況權限」,然後按一下「新增其他權限」圖示 ,並在「權限 1」欄位中輸入權限。繼續新增權限,直到您新增所有要從拒絕政策中排除的權限為止。

    5. 選用:新增拒絕條件,指定主體何時無法使用權限。如要新增拒絕條件,請按一下 「新增拒絕條件」,然後定義下列欄位:

      • 標題:選填。簡短說明條件的用途。
      • 說明:選填。狀況的詳細說明。
      • 條件運算式:您可以使用「條件建構工具」或「條件編輯器」新增條件運算式。條件建構工具提供互動式介面,可供您選取所需的條件類型、運算子,以及運算式的其他適用詳細資料。條件編輯器提供文字型介面,可使用一般運算語言 (CEL) 語法手動輸入運算式。

        拒絕條件必須以資源標記為依據。不支援其他函式和運算子。

  6. 點選「建立」

gcloud

如要為資源建立拒絕政策,請先建立內含政策的 JSON 檔案。拒絕政策的格式如下:

{
  "displayName": "POLICY_NAME",
  "rules": [
    {
      "denyRule": DENY_RULE_1
    },
    {
      "denyRule": DENY_RULE_2
    },
    {
      "denyRule": DENY_RULE_N
    }
  ]
}

提供以下這些值:

  • POLICY_NAME:拒絕政策的顯示名稱。
  • DENY_RULE_1DENY_RULE_2...DENY_RULE_N:政策中的拒絕規則。每項拒絕規則可包含下列欄位:

    • deniedPermissions:指定主體無法使用的權限清單。權限必須支援拒絕政策

      在某些情況下,您也可以使用權限群組拒絕一組權限。 詳情請參閱「權限群組」。

    • exceptionPermissions:指定主體可使用的權限清單,即使這些權限已納入 deniedPermissions 也是如此。舉例來說,您可以使用這個欄位,為一組權限中的特定權限設定例外狀況。
    • deniedPrincipals:無法使用指定權限的主體清單。如要瞭解如何設定主體 ID 格式,請參閱「拒絕政策的主體 ID」。
    • exceptionPrincipals:選用。可使用指定權限的主體清單,即使這些主體已納入 deniedPrincipals 也一樣。舉例來說,您可以透過這個欄位,為遭拒群組中的特定使用者設定例外狀況。如要瞭解如何設定主體 ID 格式,請參閱「拒絕政策的主體 ID」。

    • denialCondition:選用。條件運算式,指定主體何時無法使用權限。包含下列欄位:

    如需拒絕規則範例,請參閱「常見用途」。

舉例來說,下列拒絕政策包含一項拒絕規則,會拒絕 Lucian 的一項權限:

{
  "displayName": "My deny policy.",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create"
        ]
      }
    }
  ]
}

接著執行 gcloud iam policies create 指令:

gcloud iam policies create POLICY_ID \
    --attachment-point=