使用上下文限制將入站流量限制為應用程式和功能

您可以使用 IBM Cloud® 上下文限制 (CBR) 來控制 IBM Cloud® Code Engine 應用程式和功能的入站網路流量。 有了 CBR,您可以透過私人端點、公共端點或兩者來限制存取,為您的工作負載提供彈性的網路層級安全性。 基於情境的限制並非根據身分指派存取,而是驗證存取請求是否來自您設定的允許情境。 您可以在 Code Engine 專案中限制應用程式和功能的入站流量,以保護專案免受不必要的入站流量影響。 這些基於情境的限制適用於帳戶、專案、資源群組或位置 (區域) 層級,並適用於限制範圍內的所有應用程式和功能。

Code Engine 應用程式和功能的情境式限制可支援下列用例:

  • 完全封鎖公共入站:限制您的應用程式和功能只能透過 CBR 的私人端點存取。 此方法不需要設定 應用程式端點可見度 設定,因為公共存取會在網路層級被封鎖。 您的工作負載仍可從專用網路 (例如 VPC) 以及同一專案中的其他 Code Engine 元件存取。

  • 透過 IP 封鎖公開和限制私人:透過封鎖所有公共網際網路存取,並將私人端點存取限制於特定 IP 位址或網路區域,以達到對入站流量的最大控制。 這結合了私有端點的 IP 限制功能,以及在網路層級完全封鎖公共端點的能力。

  • 完全隔離工作負載:封鎖私人和公共端點,在網路層級完全隔離您的應用程式和功能。 此用例非常適用於以下情況:只需進行出站連線的批次處理工作負載、僅透過訊息佇列或事件訂閱進行通訊的內部微服務,或正在進行維護的工作負載,您希望在保持部署應用程式的同時,暫時阻止所有入站流量。

基於情境的限制僅適用於應用程式和功能,因為這些工作負載會暴露網路端點。 基於情境的限制不適用於工作和車隊,因為它們沒有暴露任何網路端點。

當您使用基於上下文的限制來保護 Code Engine 資源時,除了以基於上下文的規則來限制連線到應用程式或功能的入站流量外,您還可以 限制 Code Engine 資源的上下文(網路路徑) 可以管理,例如部署或更新應用程式和機密。

Code Engine 基於情境的限制可涵蓋單一專案、整個資源群組或位置 (區域)。 如需進一步了解 IBM Cloud 的「基於情境的限制」相關資訊,請參閱 《透過基於情境的限制實現分層式安全性》

當基於上下文的限制規則涵蓋資源群組或位置(區域)時,限制適用於現有專案。 如果您在相同位置或資源群組中建立新專案,限制會自動套用至新專案。 新專案可能需要幾分鐘時間才能與限制相關聯。 若要觀察 CBR 規則是否已套用,請檢查 UI、CLI 或 API 中的專案狀態連線部分。

為您的 Code Engine 資源建立基於上下文的限制

您可以使用 IBM Cloud 主控台、CLI、API、SDK 或 Terraform 為 Code Engine 資源建立基於上下文的限制。 有關建立基於上下文的限制的詳細資訊,請參閱 建立基於上下文的限制。 以下各節提供為 Code Engine 應用程式和功能建立限制的具體指南。

IPv6 Code Engine 不支援限制。

使用主控台新增基於上下文的限制

若要建立基於上下文的限制,請參閱 建立基於上下文的限制。 以下步驟專為 Code Engine 資源建立。

  1. 前往「基於內容的限制 規則」頁面

  2. 按一下建立,以建立基於上下文限制的新規則,從服務開始。

  3. 選取 Code Engine****服務,然後按一下下一步以選取要保護的服務 API。

  4. 透過選擇服務 API資料平面選項,限制存取以保護您的 Code Engine 應用程式或功能工作負載。

    您在資料平面層級定義工作負載限制,因此至少要選擇資料平面服務。 您也可以選擇其他服務或平台 API。

    一下下一步,為您的資源設定限制範圍。

  5. 將限制套用到單一專案、整個資源群組或擁有多個專案的位置 (區域)。 在「資源」區段套用此範圍,然後按一下「檢閱」繼續。

  6. 按一下 Continue( 繼續 ),將上下文新增至規則。

  7. 設定上下文以定義哪些端點受到限制。 根據您的安全需求,選擇下列其中一個方案:

    • 使用情況 A:完全封鎖公共入站

      使用此用例可讓您的應用程式和功能只能透過其專用端點存取,消除網路層級的公用網際網路存取。

      1. Endpoints 設為開啟。
      2. 選擇「私人」(允許流量)。
      3. 不選取 Public (封鎖流量)。
      4. 網路區域留空。 請確定本節中沒有啟用網路區域,以便所有私人端點仍可存取。
      5. 點擊「新增」以建立新的情境。
    • 使用個案 B:依 IP 封鎖公用並限制私人使用

      使用此用例,可以封鎖所有公共網際網路存取,並將私人端點存取限制在特定 IP 位址或網路區域,以達到最大的控制效果。

      1. Endpoints 設為開啟。
      2. 選擇「私人」(允許流量)。
      3. 不選取 Public (封鎖流量)。
      4. 選擇您要允許私人存取的網路區域 (例如,特定 VPC 或 IP 範圍)。
      5. 點擊「新增」以建立新的情境。
    • 使用個案 C:完全隔離工作負載

      使用此用例,可透過封鎖私人和公共端點,在網路層級完全隔離您的應用程式和功能。 這對於只進行向外連線的批次處理工作負載、只透過訊息佇列或事件進行通訊的內部微服務,或正在進行維護的工作負載非常有用。

      1. Endpoints 設為開啟。
      2. 不選取「隱私」(封鎖流量)。
      3. 不選取 Public (封鎖流量)。
      4. 網路區域留空。 沒有網路區域的空白公用上下文會封鎖所有公用存取。
      5. 點擊「新增」以建立新的情境。
  8. 按一下 Continue( 繼續 )以提供規則詳細資訊。

  9. 為您的規則提供說明。

  10. 對於 「強制執行」,請選擇 「已啟用」

  11. 檢視摘要,然後點擊「建立」。

使用 CLI 新增基於上下文的限制

您可以使用 IBM Cloud CLI 為 Code Engine 資源建立基於上下文的限制。 在開始之前,請確認您 已安裝 IBM Cloud CLI,並透過執行 ibmcloud plugin install cbr 安裝了基於上下文的限制外掛程式。

  • 使用情況 A:完全封鎖公共入站

    使用此用例可讓您的應用程式和功能只能透過其專用端點存取,消除網路層級的公用網際網路存取。

    建立允許私人存取並封鎖公開存取的規則:

    ibmcloud cbr rule-create --description "Block public inbound entirely" \
    --service-name codeengine \
    --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane \
    --context-attributes endpointType=private
    
  • 使用個案 B:依 IP 封鎖公用並限制私人使用

    使用此用例,可以封鎖所有公共網際網路存取,並將私人端點存取限制在特定 IP 位址或網路區域,以達到最大的控制效果。 若要尋找可用的區域 ID,請執行 ibmcloud cbr zones。

    建立一個規則,限制私人存取特定區域,並阻止大眾存取:

    ibmcloud cbr rule-create --description "Block public and restrict private by IP" \
    --service-name codeengine \
    --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane \
    --context-attributes endpointType=private \
    --zone-id <zone-id>
    
  • 使用個案 C:完全隔離工作負載

    使用此用例,可透過封鎖私人和公共端點,在網路層級完全隔離您的應用程式和功能。 這對於只進行向外連線的批次處理工作負載、只透過訊息佇列或事件進行通訊的內部微服務,或正在進行維護的工作負載非常有用。

    若要封鎖所有入站流量,請建立一個沒有內容的規則 (空規則會封鎖所有存取):

    ibmcloud cbr rule-create --description "Isolate workloads entirely" \
    --service-name codeengine \
    --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane
    

基於情境的限制規則涵蓋整個帳戶、專案、資源群組或位置 (區域)。 使用 --resource-attributes 指定規則適用的層級,例如 --resource-attributes "projectId=<your-project-id>" 適用於專案層級。

測試您基於上下文的入站連線限制規則

建立基於上下文的限制規則後,您可以使用應用程式或函式來測試它:

  • 如果您封鎖了公用端點:嘗試透過其公開 URL 存取您的應用程式或函式,會導致 RBAC Access Denied 錯誤訊息。 您的工作負載仍可透過私有端點(來自 VPC 或同一專案中的其他 Code Engine 元件)存取。

  • 如果您以 IP 限制私人端點:透過私人端點的存取,只會允許列在允許清單上的網路區域或 IP 位址。 如果請求來自未列入允許清單的來源,您會看到 RBAC Access Denied 錯誤訊息。 例如,如果您只允許 9.9.9.9/32,那麼您的應用程式或功能只能從該 IP 範圍透過私有端點存取。 任何超出該範圍的內容都會遇到錯誤訊息。

如果您選擇指向 VPC(虛擬私有雲)的網路區域,則必須同時建立 VPE(虛擬私有端點)閘道,以允許 VPC 存取私有工作負載。 建立閘道後,您可能會因為 PDNS 解析而遇到暫時的延遲。 一開始您可能會看到 RBAC Access Denied 錯誤訊息,但經過一段時間後,您就會獲得存取權限。