【Explanation】GCP Security— 如何創建出色 GCP 組織政策

Kellen
11 min readJan 21, 2024

--

🏢 GCP 組織政策介紹

如果您身為組織政策管理員,可以透過組織政策服務,對組織的雲端資源進行集中控制,常見的用法包括以下:

  • 集中控制並限制對組織資源使用方式(限制或約束)
  • 為組織制定明確政策,同時為開發團隊建立一個保護護欄,以提高資安防護(避免可能的作業風險)確保大家在組織訂定的規範內的範圍工作
  • 幫助專案擁有者及其團隊快速行動,不必擔心違反合規性
  • 限制身分和存取管理服務帳戶的使用或是僅限於相同 domain 下的 identities 才能進行資源共享

📁 資源層次結構規劃

運作上可以設定整個資源層級結構的限制條件,Google Cloud 使用的資源層次結構在概念上類似傳統檔案系統,這種層次結構允許你將資源分類為父級和子級,形成一個層次性的結構,這樣的組織方式使得管理和控制資源變得更加有序。

Organization
--> Folders
--> Projects
--> Resources

基於這個層次結構中,你可以將特定的政策和權限附加到特定的節點或資源,這樣可以更精確地控制和管理對這些資源的訪問和操作權限。就像你可以在電腦上對檔案夾或文件應用特定的訪問權限一樣,你也可以在 Google Cloud 的資源層次結構中對資源應用類似的管理控制。

常見 Policies 有那些

Policy 目前已支援到 100 多種,可以依不同產業別或是組織在資安或是使用需求進行設定,以下列舉自己曾經使用過一些滿值得引入的政策

  • Limit resource sharing based on domain.
  • Limit the usage of Identity and Access Management service accounts.
  • Restrict the physical location of newly created resources.
  • Google Cloud Platform Resource Location Restriction(資源位置限制)
    constraints/gcp.resourceLocations
    以上兩個限制在 GCP 中新建資源的物理位置或開資源的區域,特別是 TW 金融業使用雲端時,監管單位會先管你是否在境內還是境外,或是在歐盟的《一般資料保護規範》(GDPR),這些資源限制佈署在歐洲區域,此政策可能是必要的
  • Restrict Public IP access on Cloud SQL instances
    盡可能讓您的系統遠離公開的存取
  • Enforce Public Access Prevention
  • Enforce uniform bucket-level access
    確保您的所有 Cloud Storage 物件都套用 Uniform bucket-level access
  • Domain restricted sharing
  • Disable service account key creation
  • Disable service account key upload
  • Require OS Login
    OS Login 是一種比 SSH 更好的登入機器的機制(寫過一篇相關文章
  • Restrict Cloud NAT usage
    少了 external IPs 要連網際網路需求改用 NAT 吧(寫過一篇相關文章
  • Define trusted image projects
    只有 IMAGE 掃完 OK 才能送到 GKE(無論是來自您的還是由 Google 提供和維護的),這是提高穩定性和安全性的一種方法
  • Define allowed external IPs for VM instances
    請盡可能避免使用公用 IP,定義允許那些 VM 執行個體可以設置外部 IP ,使不需要的系統可以遠離公開存取
  • Skip default network creation(跳過建立 default VPC)
    constraints/compute.skipDefaultNetworkCreation
https://cloud.google.com/blog/topics/developers-practitioners/limiting-public-ips-google-cloud

在你開始設定前

請看一下是否在 IAM 權限有【機構政策管理員】 (Organization Policy Administrator),如果層級要到 Organization 或 Folder 層,給予設定者權限即可!

The Identity and Access Management role roles/orgpolicy.policyAdmin

並熟悉相關 Policy,一來是要進行溝通、解釋這樣作的良善之意,若日後有影響到服務面使用狀況,就得跟使用者或開發團隊說明!部份是資安框架的訂定,部份也要雙邊合意這份組織共同的政策。

🚀 Example — Disable Automatic IAM Grants for Default Service Accounts 或 Service Account Key Creation 等

先切換至 Organization 層級,找到 Organization Policy 並選擇此 Policies 後,進行啟用

或是自行輸入 JSON 表示法

https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints

套用 Disable service account key creation 政策,並觀察一下 Service Account Policies

🚀 Example — 拒絕沒有啟用 OS Login 的 VM 實例

{
"spec": {
"rules": [
{
"action": "deny",
"description": "Deny VM instances without OS Login",
"expression": "resource.type == 'compute.googleapis.com/Instance' && !('enable-oslogin' in resource.labels)",
"title": "DenyVMWithoutOSLogin"
}
]
}
}

這個 JSON 表示法中的規則會拒絕沒有啟用 OS Login 的 VM 實例。以下是參數的說明:

  • action: 設定為 "deny",表示如果規則條件符合,將拒絕該資源的存取。
  • description: 提供對這個規則的簡短描述,有助其他人理解此規則
  • expression: 包含了一個布林表達式,指定了要拒絕的資源。這裡我們檢查資源類型是否是 compute.googleapis.com/Instance 並且是否沒有 enable-oslogin 標籤。
  • title: 提供了規則的名稱,使其易於識別。

並請替換 compute.googleapis.com/Instance 為實際的資源類型(如果您希望檢查其他資源),以及根據實際情況適應標籤名稱和值。

🚀 Example — Cloud Cloud Storage 資料保護的建議做法

要進行 Google Cloud Storage(GCS)政策設定前,要先了解 GCS 提供了兩種存取控制的差異,分別為

  • ACL 存取控制清單(Access Control List)
  • 統一 Bucket 層級存取權限控制(Uniform bucket-level access)
Cloud Storage 提供了 Uniform bucket-level access 與精細 Fine-grained ACLs 兩個方式

由於 ACL 屬於物件層級(object-level),可對單個物件授予使用者存取權限,進行較精細的權限控制,而 Uniform bucket-level acces 僅允許授予對單一 Bucket 權限。例如,假設 GCS 上 Bucket 有 a.pngdog.png。借助 ACL,我們可以在將 a.png 其設為私有的同時讓 b.png公開存取。相較之下,Uniform bucket-level access 僅允許您將 Bucket 下的所有物件設為 Public 或是 Private 兩者擇一。

如右圖所示:一旦我們啟用 Uniform bucket-level acces 並經過有效期 90 天後,那麼此設置將成為永久性,無法更改成 ACL 方式,若還在效期則會提醒您剩餘天數,並可以點選「switch to Fine-grained」

📌註:ACL 和 Uniform bucket-level acces 不能同時使用

Uniform bucket-level access 可由 IAM 控制,但 ACL 無法

IAM(身分和存取管理)用於管理誰可以使用這些服務,以及他們可以使用這些服務的權限。GCP 為了允許在物件層級進行精細的權限設置,引入了 ACL,這也代表著角色和服務帳戶等 IAM 功能可用於 Uniform bucket-level acces,但不能用於 ACL。在 Bucket 層級執行 IAM 策略可以幫助防止意外公開,如果客戶將單個物件公開,在沒有此功能的情況下,可能會發生這類的資料外洩風險。

什麼時候應該使用 ACL,什麼時候應該使用統一的桶級存取?

一般來說,Google 建議使用 Uniform bucket-level acces,因為這大大簡化了管理物件層級的細粒度權限。此外, Uniform bucket-level acces 存取是 IAM 的一部分,而 ACL 不是,因此創建桶時預設啟用 Uniform bucket-level acces 而不是 ACL。

建議在 Cloud Cloud Storage Policy 可以啟用以下

  • 啟用限制網域外的分享(Domain-restricted sharing):透過啟用此政策,可有效防止將內容與組織外部人分享。舉例而言,若嘗試將儲存在儲存桶(bucket)中的資料提供給公開網際網路使用者,此政策將直接禁止執行此操作
  • Bucket 層級之統一存取控制Uniform bucket-level access):透過啟用此政策,可簡化權限管理流程,有助於更有效地控制大規模存取。所有新建立的 bucket 將以 bucket 層進行存取控制,以統一控制其底下所有基礎物件的存取權限,提高管理效率

現實狀況是來自於網路和駭客的攻擊面數量不斷增加,管理員必須從各個角度處理安全問題,同時最大限度地減少開發和安全營運的負擔。🔒 自訂 GCP 組織策略是確保雲端基礎架構的安全性、合規性和效率的關鍵步驟,對管理員來說是一個省力的工具,不然這麼多面向在自動化及滲透測試真的很難去一一實作出來😢😢😢。這些 Policy 的引入對資料保護來說也非常實用 🚀,尤其是金融服務和大型高科技行業的客戶,也要確保 workload 可以符合安全要求和行業的法規限制。

--

--

Kellen

Backend(Python)/K8s and Container eco-system/Technical&Product Manager/host Developer Experience/早期投入資料創新與 ETL 工作,近期堆疊 Cloud☁️ 解決方案並記錄實作與一些雲端概念💡