限制遠端存放區

本文說明如何使用組織政策服務,限制 Dataform 存放區可連線的第三方遠端 Git 存放區集區。

事前準備

設定或編輯 dataform.restrictGitRemotes 政策前,請找出要加入允許清單的遠端 Git 存放區完整網址。

如要找出已連線至 Dataform 存放區的遠端 Git 存放區完整網址,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Dataform」頁面。

    前往 Dataform

  2. 選取存放區,然後按一下「設定」

    請注意,Dataform 頁面顯示的遠端存放區網址會經過縮短,無法用於 dataform.restrictGitRemotes 政策。

  3. 在「設定」頁面的「Git 連線設定」下方,複製「存放區來源」值。

    「存放區來源」值是遠端存放區的完整網址。 您可以在「dataform.restrictGitRemotes」政策中使用這個網址。

必要的角色

如要取得管理機構政策所需的權限,請要求管理員為您授予機構的機構政策管理員 (roles/orgpolicy.policyAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備管理機構政策所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要管理組織政策,您必須具備下列權限:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

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

關於限制遠端 Git 存放區

您可以將 Dataform 存放區連結至 GitHub 或 GitLab 存放區。

您可能想限制 Dataform 存放區可連線的遠端存放區集區,避免惡意行為者透過存放區的未受保護副本,存取您的 Dataform 程式碼庫和存取權杖。

您可以使用 Organization Policy Service 建立機構政策,限制 Dataform 可連線的 Git 存放區網址。

限制 Dataform 中遠端 Git 存放區的限制條件為:

constraints/dataform.restrictGitRemotes

如要使用這項限制,請建立機構政策,並提供可連線至 Dataform 存放區的遠端 Git 存放區網址 allowedValues 清單。遠端 Git 存放區會以完整網址識別。

這項dataform.restrictGitRemotes政策具有追溯效力,因此限制會影響現有的 Dataform 存放區。

如果已設定機構政策,Dataform 存放區只能連線至 allowedValues 清單中列出的遠端 Git 存放區。如果遠端 Git 存放區未在機構政策中明確定義,就無法連線至 Dataform 存放區。

如未設定 dataform.restrictGitRemotes 政策,Dataform 存放區和遠端 Git 存放區之間的通訊就不會受到限制。

您可以透過下列方式使用 dataform.restrictGitRemotes 政策:

Allow all
Dataform 存放區可連線至所有遠端存放區網址。如果貴機構不想封鎖與遠端存放區的任何通訊,請選取這個選項。或者,如要允許所有遠端存放區網址,可以將組織政策設為未設定。
allowedValues 網址清單
Dataform 存放區只能連線至允許清單中的遠端存放區。選取這個選項可防止資料外洩。
Deny all
Dataform 存放區不得連線至任何遠端網址。 如果貴機構想封鎖所有通訊並使用 Dataform 存放區,請選取這個選項。

允許清單中遠端 Git 存放區的規格

  • 您只能將此清單限制套用至 GitHub 和 GitLab 存放區。

  • 機構政策會追溯套用,並影響現有的 Dataform 存放區。

  • 這項限制接受 allowedValues,可封鎖與所有其他遠端 Git 存放區的連線,或接受 Deny all。預設值為 Allow all,如果未設定機構政策,即可與所有遠端 Git 存放區通訊。建議您將機構政策設為 allowedValues

  • 政策必須由您或具有必要權限的管理員來管理和維護。確保貴機構內已發布政策管理員的相關資訊。

在機構層級設定機構政策限制

主控台

  1. 前往「/Organizational Policies/Organization Policies」(/機構政策/機構政策) 頁面。

    前往機構政策

  2. 如有必要,請從專案下拉式選單中選取所需機構。
  3. 按一下「限制在 Dataform 中對存放區使用 Git 遠端指令」
  4. 按一下「管理政策」。如果無法點選「管理政策」按鈕,表示您沒有適當的權限
  5. 選取「自訂」,即可針對特定遠端 Git 存放區設定機構政策。

    編輯機構政策頁面上的「自訂」選項。

  6. 選取所需的「政策強制執行」和「政策類型」

  7. 在「政策值」部分,選取「自訂」

  8. 輸入遠端 Git 存放區的完整網址。

  9. 按一下「新政策值」,然後視需要輸入遠端 Git 存放區的完整網址。

  10. 按一下「儲存」即可套用限制。

gcloud

如要為遠端 Git 存放區設定限制,您必須先取得機構 ID。執行 organizations list 指令,並在回應中尋找數字 ID,即可找到機構 ID:

gcloud organizations list

gcloud CLI 會傳回組織清單,格式如下:

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

使用 gcloud resource-manager org-policies set-policy 指令設定機構政策。您必須以 JSON 或 YAML 檔案格式來提供政策。 以以下格式建立 JSON 檔案:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

ORGANIZATION_ID 替換為機構的數字 ID。

如果您不希望 Dataform 存放區連線至任何遠端 Git 存放區,可以將 denyAll 設為 true,藉此設定機構政策:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}

ORGANIZATION_ID 替換為機構的數字 ID。

API

使用 setOrgPolicy() API 定義限制。Dataform 可以連線至您指定 allowedValue 清單中的遠端 Git 存放區網址。

舉例來說,以下要求會將 dataform.restrictGitRemotes 限制套用至機構,允許 Dataform 存放區連線至所選遠端 Git 存放區:

POST https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies

其中 ORGANIZATION_ID 是機構的數字 ID。

請在要求主體中,提供這項限制的所需組織政策:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

如果您不希望 Dataform 存放區連線至任何遠端 Git 存放區,可以將具有 denyAll 的機構政策設為 true

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}
 
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

如果已設定機構政策,您需要以機構政策定義做為要求主體,執行下列要求:

PATCH https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes

在專案層級設定機構政策

在專案層級設定的機構政策會覆寫或合併機構層級的機構政策。如果發生合併,denyAll 的優先順序會高於 allowedValues。舉例來說,如果機構層級的機構政策設為 denyAll,且專案層級的合併政策在 allowedValues 清單中列出遠端存放區網址,則 Dataform 無法連線至遠端存放區。在這種情況下,專案層級的機構政策必須覆寫機構層級的政策,Dataform 才能連線至遠端存放區。如要進一步瞭解機構政策階層,請參閱「瞭解階層評估」。

主控台

按照在機構層級設定機構政策限制所記錄的相同程序進行,但要從專案選取器 (而不是從機構中) 選擇所需的專案。

專案選取器。

gcloud

使用 gcloud resource-manager org-policies set-policy 指令設定機構政策。您必須以 JSON 或 YAML 檔案格式來提供政策。

以以下格式建立 JSON 檔案:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

PROJECT_ID_OR_NUMBER 替換為這個機構政策的專案 ID 或專案編號。

接著,使用要求傳入檔案:

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=PROJECT_ID

API

使用 setOrgPolicy() API 定義限制。Dataform 可以連線至您指定 allowedValue 清單中的遠端 Git 存放區網址。

舉例來說,以下要求會將 dataform.restrictGitRemotes 限制套用至機構,讓 Dataform 存放區只能連線至所選的遠端 Git 存放區,且尚未設定 constraints/dataform.restrictGitRemotes 政策:

POST https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies

要求內容中包含這項限制的所需機構政策:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

PROJECT_ID_OR_NUMBER 替換為這項要求的專案 ID 或專案編號。

以下是要求對機構套用 dataform.restrictGitRemotes 限制的範例,其中 Dataform 存放區只能連線至選取的遠端 Git 存放區,且已設定 constraints/dataform.restrictGitRemotes 政策:

PATCH https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes

要求內容中包含這項限制的所需機構政策:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

PROJECT_ID_OR_NUMBER 替換為這項要求的專案 ID 或專案編號。

將 Git 遠端項目加入許可清單的最佳做法

  • 為降低資料竊取風險,請明確設定 dataform.restrictGitRemotes 限制,將選定的可信遠端 Git 存放區加入允許清單。

  • 如果您只使用未連線至遠端 Git 存放區的 Dataform 存放區,請將 dataform.restrictGitRemotes 限制設為 Deny All

  • 如有這項限制,請避免使用 deniedValues 清單。如果您在 deniedValues 清單中定義值,這表示只有 deniedValues 清單中的遠端 Git 存放區禁止連線。如果您想要精確控制 Dataform 可連線至哪些遠端 Git 存放區,這可能會是安全疑慮。如要從 allowedValues 清單移除特定遠端 Git 存放區,請更新現有機構政策,從 allowedValues 清單移除這些存放區,而不是從較低階層將遠端存放區納入 deniedValues 清單。

  • 如果您想對大部分的資源階層設定機構政策,但要豁免某些專案,請透過指定 restoreDefault 物件使用 setOrgPolicy 方法還原預設機構政策,允許專案中的所有 Dataform 存放區連線至遠端 Git 存放區。專案當前的政策不會受到預設設定影響。

  • 搭配使用機構政策身分與存取權管理角色,進一步控管 Dataform 程式碼集的存取權。

  • 在已啟用機構政策的機構或專案中,任何 Dataform 存放區都必須符合此政策。如果這會造成問題,建議您在未套用機構政策的不同專案中設定其他服務和產品,並在需要時使用共用 VPC

  • 設定 dataform.restrictGitRemotes 政策前,請確保貴機構已發布機構政策和管理員的相關公告。政策必須由您或具有必要權限的管理員來管理和維護。

後續步驟