套用環境定義型限制來加強雲端安全
本指導教學可能會產生成本。 使用「成本估算器」根據您的預計用量生成成本估算。
本指導教學將逐步引導您完成在 IBM Cloud 帳戶中實作 環境定義型限制 (CBR) 的程序。 CBRs 可協助您進一步保護雲端環境安全,並邁向 零信任安全模型。
指導教學討論如何建立網路區域及環境定義規則,以及如何驗證它們是否運作。 在指導教學中,您將學習如何在瀏覽器主控台中建立 CBR 物件,以及使用 Terraform 作為「基礎架構即程式碼」。 您也將瞭解如何定義雲端資源存取策略的準則。
目標
- 瞭解環境定義型限制,以保護您的雲端資源
- 定義網路區域以識別容許及拒絕存取的資料流量來源
- 建立規則以定義存取雲端資源的環境定義
- 知道如何測試及監視環境定義規則
下圖顯示 將端對端安全套用至雲端應用程式 指導教學中使用的解決方案架構。 Kubernetes Service 叢集、Container Registry、Key Protect及 Object Storage 表示作為環境定義規則實作的環境定義型限制。 請注意,Secrets Manager 也可能受到保護,但它只是選用服務,未在本指導教學中使用。
開始之前
本指導教學需要:
- IBM Cloud CLI,
docker用戶端以推送及取回容器映像檔。
您將在 開始使用解決方案指導教學 手冊中找到下載並安裝適用於您作業環境的這些工具的指示。
若要避免安裝這些工具,您可以從 IBM Cloud 主控台使用 Cloud Shell。
設定
在稍後的步驟中,使用 Terraform 來配置環境定義型限制,您將在 將端對端安全套用至雲端應用程式 指導教學中使用的資源之上部署 CBR 物件作為其他安全層。
-
如隨附 GitHub 儲存庫中所述,使用 Schematics 所管理的 Terraform 來部署資源。
-
必須將 IBM Cloud Activity Tracker Event Routing 配置為將審核事件路由到IBM Cloud Logs目標實例。 如果目前未在您的帳戶中進行配置,請依照 配置IBM Logs 目標 中所述路由審計事件。
概觀: 環境定義型限制
環境定義型限制(CBR) 可讓您根據網路位置及存取要求類型來定義及施行 IBM Cloud 資源的存取限制。 因為 IAM 原則及環境定義型限制都強制執行存取權,環境定義型限制即使面對已受損或管理錯誤的認證也會提供保護。
規則控管由其服務名稱和類型以及其他屬性所識別之資源的存取權。 它們可以包括地區、資源群組及其他服務特定內容。 規則中的屬性大部分是選用的,因此您可以一起控管所有 Key Protect 實例,或僅以已識別 Key Protect 實例中的特定金鑰環為目標。
限制的環境定義由網路區域及服務端點組成。 您可能想要根據特定 IP 位址或範圍來定義區域,或透過配置源自一個以上 VPC 或雲端服務的資料流量來定義區域。 因此,只能從範例 Key Protect 實例存取,例如,特定 Object Storage 實例、已知的 IP 位址範圍,以及僅透過專用端點。
網路區域可用於定義多個規則。 規則具有強制執行模式,其為已停用、僅報告或已啟用之一。
目前,並非所有雲端服務都支援僅限報告模式。 此外,當啟用時,這些服務也不會產生任何 CBR 相關日誌項目。 如需詳細資料,請檢查個別服務文件。
建立區域和規則
為了評估環境定義型限制的影響,您將在 Container Registry中建立控管名稱空間存取權的規則。 首先建立該名稱空間,然後建立網路區域以將 VPC 識別為資料流量來源。
- 到 Container Registry命名空間 並記下先前配置的命名空間的名稱。
- 在 IBM Cloud 主控台中,按一下 管理 功能表,然後選取 環境定義型限制。 在概觀頁面中,按一下 建立網路區域。
- 輸入 VPCzone 作為名稱。 在 容許的 VPC 下,選取具有 Kubernetes Service 叢集的 VPC。 按 下一步 以檢閱,然後 建立 區域。
- 接下來,按一下左側導覽中的 規則,然後按一下 建立,以使用區域來建立規則。
- 在「服務」區段中選取 Container Registry,然後按 下一步。
- 讓 API 區段保留 所有 服務 API 按 下一步。
- 然後在 資源下,選擇 特定資源。 挑選 資源類型 作為屬性,並指定 namespace 作為值。 新增另一個條件並將資源名稱配置為 NAMESPACE (與步驟 1 中的值相同)。 按一下 檢閱,然後按一下 繼續。
- 從清單中選取您先前建立的 VPCzone。 然後使用 新增 及 繼續,以進入對話框的最後一個步驟。 將 強制執行 標示為 僅報告。 之後,建立規則。
請注意,CBR 區域和規則會非同步部署。 它們可能需要幾分鐘才能變成作用中 (最終一致)。
測試規則及其強制執行模式
-
在新的瀏覽器標籤中,開啟 IBM Cloud Logs服務並選擇 Cloud Logs 選項卡,然後點選正在接收審核事件的實例的名稱。
-
在另一個瀏覽器標籤中啟動 IBM Cloud Shell 的新階段作業。
-
在 Shell 中,執行下列指令: 將環境變數設為您要用於 Container Registry的雲端區域,例如 us 或 de。
export REGION=us為Container Registry命名空間設定另一個變數:
export NAMESPACE=<YOUR_NAMESPACE>現在登入 Container Registry。
ibmcloud cr login接下來,將容器映像檔取回至 Shell 環境。
docker pull docker.io/library/hello-world:latest重新標記映像檔,以將它上傳至您的登錄名稱空間。
docker tag docker.io/library/hello-world $REGION.icr.io/$NAMESPACE/hello-world最後,將容器映像推送到註冊表。
docker push $REGION.icr.io/$NAMESPACE/hello-world -
切換到瀏覽器選項卡,其中IBM Cloud Logs顯示審核日誌。 在報告模式下,當規則符合時,無論決策結果如何,日誌條目都會寫入IBM Cloud Activity Tracker Event Routing。 日誌記錄具有要求的詳細資料。 在下圖中,允許存取在報告模式下匹配的Container Registry命名空間的規則。
在報告模式中符合的環境定義限制 如所討論,在報告模式中,所有符合的要求都會產生日誌項目。 在事件詳細資料中,您會看到屬性 decision,其值為 允許 或 拒絕。 在上方的擷取畫面中,它是 拒絕。
-
回到具有 Shell 的瀏覽器標籤,列出名稱空間中的容器映像檔。
ibmcloud cr images --restrict $NAMESPACE -
在第三個瀏覽器標籤中,導覽至 CBR 規則。 在您先前建立的登錄相關規則旁,按一下點功能表,然後選取 編輯。 移至 說明您的規則 (步驟 3),並將規則從 僅限報告 切換至 已啟用。 按 套用 按鈕來啟動變更。
-
回到具有 IBM Cloud Shell的瀏覽器標籤。 發出與之前相同的指令,以列出映像檔:
ibmcloud cr images --restrict $NAMESPACE這一次,應該會產生錯誤訊息,指出您未獲授權。
-
在含有日誌的瀏覽器標籤中,您應該會找到類似下列的新記錄:
環境定義限制呈現拒絕 已施行規則,並根據您嘗試存取登錄的方式,拒絕存取。 原因是規則僅容許從特定 VPC 存取。 這Cloud Shell環境及其 IP 位址,如日誌中記錄的 requestData->environment 領域,不同。 因此,會拒絕要求。
使用IBM Cloud Logs日誌時,您可以利用以下查詢字串輕鬆尋找相關日誌記錄:
- 處於報告模式時,
"context restriction" permit OR deny會傳回具有存取權的日誌行,這些存取權會呈現 允許 或 拒絕。 - 在報告模式中,您可以使用
"context restriction" permit來僅顯示已允許的存取權。 同樣地,使用"context restriction" deny表示拒絕存取。 - 最後,當處於 enforced 模式時,針對與拒絕存取相關的日誌行使用
context restriction rendered之類的查詢字串。
建議在強制執行新規則之前 30 天監視新規則。 在 CBR 文件中,以僅報告模式和已啟用模式進一步瞭解 監視環境定義型限制。
如果要準備部署 CBR 物件,並在更往下的區段中使用 Terraform,請移至瀏覽器標籤,並使用 CBR 規則。 在這裡,按一下先前建立的規則的點功能表,並選取 移除,然後確認 刪除,以刪除先前建立的規則。 然後,按一下 網路區域 並刪除先前建立的區域。
定義雲端資源的存取策略
若要設定環境定義型限制 (CBR) 的正確規則集,您應該已定義雲端資源的存取策略。 所有資源都應該受到 Identity and Access Management (IAM) 的保護。 這表示在使用者或服務 ID 存取資源之前,應該先執行鑑別及授權檢查。 CBR 會根據原始準則及其他規則來切斷網路存取權,以新增至保護,但它們不會取代適當的 IAM 配置。 此外,許多服務支援將網路資料流量限制為專用端點,因此已減少存取選項。
您可能會發現部分規則會影響管理資源的舒適程度,例如透過瀏覽器主控台。 此外,您還需要確保不會拒絕自己存取資源、管理儀表板和 API。 因此,您必須說明防禦主機、公司網路、閘道,甚至 Cloud Shell。 此外,部分服務支援精細區分資料平面及控制 CBR 配置的位置存取權,例如 Kubernetes Service 叢集及管理 API。
總之,應提出下列問題:
- 所有資源都受到 IAM 及類似的保護嗎?
- 如何存取資源,它們是否已盡可能限制為專用端點?
- 是否可以將資料平面與控制平面存取分開?
- 哪些資料流量與使用相關,哪些是管理工作? 如何處理緊急狀況?
- 上述交通是從哪裏來的?
使用報告模式可瞭解符合環境定義型限制的活動。 規則型決策是否呈現許可或拒絕? 這符合你的期望嗎? 若要瞭解活動並使用 CBR 規則正確處理它們,建議使用至少一個月的報告模式測試階段。 這容許對想要的網路區域及環境定義規則集使用反覆運算方法。
在本指導教學中,我們將定義下列網路區域:
- Kubernetes Service 叢集的區域
- Object Storage 的區域
- 適用於具有起始網路 (公司或防禦主機) 位址的 IP 範圍,以作為 homezone
此後,我們將定義環境定義規則如下:
- 以從區域存取 Key Protect 實例:
- Kubernetes Service 叢集
- Object Storage
- 以從區域存取 Object Storage 實例及其儲存區:
- Kubernetes Service 叢集
- 同鄉
- 以從區域存取 Container Registry 及具有容器映像檔 的名稱空間:
- Kubernetes Service 叢集
- 以從區域存取 Kubernetes Service 叢集及其管理 API:
- 同鄉
上述所有區域和規則都可以使用單一 Terraform 指令以僅報告或強制模式進行部署。 請注意,這些規則並非用於正式作業用途,而是作為範例來調查僅限報告模式中的使用情形及資料流量。
文件具有 支援作為服務參照的資源清單。 您也可以使用 CLI 指令 service-ref-targets 或相關 API 函數 列出可用的服務參照目標 來擷取清單。
使用 Terraform 來配置環境定義型限制
建議不要手動建立專案的網路區域及環境定義規則,而是自動化部署。 環境定義型限制可以利用「基礎架構即程式碼」(IaC) 來部署-即 Terraform 程式碼。 您可以先以僅報告模式部署區域及規則,以進行測試。 然後,在徹底測試之後,透過更新已部署的配置來切換至強制模式。
區域和規則的 Terraform 資源
在下列中,您將部署 Terraform 程式碼來建立一組基本網路區域和環境定義規則。 區域的程式碼使用 ibm_cbr_zone 資源。 下列顯示識別 Kubernetes 叢集的區域規格。 這類叢集是其中一個 支援的服務參照。
resource "ibm_cbr_zone" "cbr_zone_k8s" {
account_id = data.ibm_iam_account_settings.team_iam_account_settings.account_id
addresses {
type = "serviceRef"
ref {
account_id = data.ibm_iam_account_settings.team_iam_account_settings.account_id
service_instance = data.ibm_container_vpc_cluster.cluster.id
service_name = "containers-kubernetes"
}
}
description = "Zone with the Kubernetes cluster"
name = "cbr_zone_k8s"
}
規則的程式碼是使用 ibm_cbr_rule 資源。 下面顯示一般規則的 Terraform 配置。 類似於瀏覽器使用者介面,它具有下列元素:
- 用來指定區域的環境定義
- 強制執行模式
- 套用它的資源,由屬性識別
resource "ibm_cbr_rule" "cbr_rule_cos_k8s" {
contexts {
attributes {
name = "networkZoneId"
value = ibm_cbr_zone.cbr_zone_k8s.id
}
}
contexts {
attributes {
name = "networkZoneId"
value = ibm_cbr_zone.cbr_zone_homezone.id
}
}
description = "restrict COS access, limit to cluster"
enforcement_mode = var.cbr_enforcement_mode
resources {
attributes {
name = "accountId"
value = data.ibm_iam_account_settings.team_iam_account_settings.account_id
}
attributes {
name = "serviceInstance"
operator = "stringEquals"
value = var.cos.guid
}
attributes {
name = "serviceName"
operator = "stringEquals"
value = "cloud-object-storage"
}
}
}
部署 Terraform 資源
瞭解與 CBR 相關的 Terraform 資源之後,現在可以將它們部署在現有資源之上,以建立區域和規則。
- 在瀏覽器中,導覽至 IBM Cloud Schematics 工作區。 從先前的設定中選取具有現有資源的工作區。
- 按一下設定。 在 變數 清單中,找出含有 deploy_cbr 的列。 其值應為預設值 false。
- 在變數的點功能表中,選取 編輯。 然後,在蹦現表單中,取消勾選 使用預設值,以便能夠變更值。 在 變數值 deploy_cbr 欄位中輸入 true。 之後,按一下 儲存以完成更新。
- 更新設定頁面之後,繼續頂端的 產生計劃。 計劃輸出應該指出將建立 CBR 區域和規則。
- 使用 套用計劃 按鈕來建立 CBR 物件。
依預設,強制執行模式會配置為 僅報告。 您可以將變數 cbr_enforcement_mode 變更為值 enabled 以施行限制。
測試環境定義規則
部署環境定義型限制集之後,現在可以再次驗證及測試它們。 如果要驗證 CBR 物件,請移至 環境定義型限制概觀。 然後,檢查新的 區域 和 規則。
應該對 Container Registry、Object Storage 和 Key Protect 執行測試,並透過監視先前執行的日誌來驗證。 因為區域和規則包括 Container Registry的存取限制,您可以重複 測試規則及其強制執行模式 一節中所執行的測試。
若要測試新規則以存取 Object Storage,請遵循下列步驟:
- 在瀏覽器標籤中,移至 Object Storage 實例清單。 按一下指導教學的服務名稱,例如 secure-file-storage-cos。
- 在第二個瀏覽器標籤中,存取已使用的包含審核日誌的IBM Cloud Logs儀表板。
- 回到具有 Object Storage 概觀的標籤,在 儲存區清單中,按一下儲存體儲存區。
- 使用 上傳,將檔案匯入至儲存區。 將設定保留為 標準傳送,並使用 上傳檔案 (物件) 區域來選取檔案。 按一下上傳完成。
- 傳回帶有審核日誌的瀏覽器選項卡,應該有標題為
Context restriction matched while in report mode與 CBR 相關的日誌記錄。 這是因為規則已部署在 報告 模式中。 展開部分記錄,以檢查報告的 決策 和 isEnforced 資料。 視已配置的同區 IP 範圍而定,決策 可能是 允許 或 拒絕。 由於報告模式,isEnforced 的值應該為 false。
為了進一步測試,您可能想要變更 homezone 的 IP 範圍。 它是 Schematics 設定中的變數 homezone_iprange。
移除資源
若要移除資源,請使用瀏覽器並導覽至 IBM Cloud Schematics 工作區概觀。 選取工作區,然後在 動作 功能表中,先選取 毀損資源,然後使用 刪除工作區。