使用環境定義型限制來保護叢集資源

基於情境的限制讓帳戶擁有者和管理員能夠根據存取請求的情境,定義並強制執行 IBM Cloud® 資源的存取限制。 Red Hat OpenShift on IBM Cloud 資源的存取可透過情境限制以及身分和存取管理政策來控制。

這些限制與基於身分的傳統 IAM 原則搭配使用,以提供額外的保護層。 與 IAM 原則不同,環境定義型限制不會指派存取權。 環境定義型限制會檢查存取要求是否來自您配置的容許環境定義。 因為 IAM 存取及環境定義型限制都強制執行存取,所以環境定義型限制即使面對已受損或管理錯誤的認證也會提供保護。 如需相關資訊,請參閱 何謂環境定義型限制

使用者必須在 Red Hat OpenShift on IBM Cloud 服務上具有管理員角色,才能建立、更新或刪除規則。 使用者必須具有環境定義型限制服務的「編輯者」或「管理者」角色,才能建立、更新或刪除網路區域。

任何產生的 Activity Tracker 或審核日誌事件都來自環境定義型限制服務,而不是 Red Hat OpenShift on IBM Cloud。 如需相關資訊,請參閱 監視環境定義型限制

嘗試存取群集控制平面(可使用 Cluster API 類型加以限制)不會產生 Activity Tracker 或稽核記錄事件。

Red Hat OpenShift on IBM Cloud 如何與環境定義型限制整合

您可以為群集控制平面 API 或 IBM Cloud 群集管理 API 建立基於上下文的限制 (CBR)。 使用環境定義型限制,您可以保護下列資源。

群集控制平面 API
保護群集或群集中特定命名空間對 Red Hat OpenShift on IBM Cloud API 的存取。 例如,您可以保護 API 以建立 Kubernetes 命名空間。
管理 API
保護特定群集對 Red Hat OpenShift on IBM Cloud API 的存取。 例如,您可以保護 API 以建立群集。

在 Red Hat OpenShift on IBM Cloud 叢集上執行的應用程式,例如由 Kubernetes LoadBalancer 揭露的 Web 伺服器,不受 CBR 規則的限制。

保護叢集資源

您可以建立 CBR 規則來保護特定地區和叢集。

叢集
保護特定的 Red Hat OpenShift on IBM Cloud 叢集。 如果您在 CBR 規則中選取叢集,則只有來自與規則相關聯之網路區域中資源的資料流量才能與該叢集互動。
如果使用 CLI,可以指定 --service-instance CLUSTER-ID 選項來保護特定群集。
如果使用 API,您可以在資源屬性中指定 "name": "serviceInstance","value": "CLUSTER-ID"
地區
保護特定地區中的 Red Hat OpenShift on IBM Cloud 資源。 如果您在 CBR 規則中選取地區,則只有來自與規則相關聯之網路區域中資源的資料流量,才能與該地區中的資源互動。
如果使用 CLI,您可以指定 --region REGION 選項來保護特定區域中的資源。
如果使用 API,您可以在資源屬性中指定 "name": "region","value": "REGION" 欄位。
資源群組
保護特定資源群組中的 Red Hat OpenShift on IBM Cloud 資源。
如果使用 CLI,可以指定 --resource-group-id RESOURCE-GROUP-ID 選項來保護特定資源群組中的資源。
如果使用 API,您可以在資源屬性中指定 "name": "resourceGroupId","value": "RESOURCE-GROUP-ID" 欄位。

保護特定 API

您可以建立 CBR 規則來保護 Red Hat OpenShift on IBM Cloud的下列 API 類型。

叢集控制平面 API
保護對叢集內 API 的存取權,例如用於建立名稱空間、Pod 等的 API。 適用於叢集 API 類型控制存取叢集 API 伺服器的 CBR 規則,其中包括該叢集的所有 oc 指令。 如果您在 CBR 規則中選取叢集控制平面 API,則只有來自與該規則相關聯之網路區域中資源的資料流量,才能與叢集控制平面 API 互動。 所有其他要求都已封鎖。
如果使用 CLI,可以指定 --api-types 選項和 crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster 類型。
如果您使用 API,可以在 "operations" 規格中指定 "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster"
管理 API
保護對 API 的存取權,以佈建及管理叢集、工作者節點儲存區等。 適用於管理 API 類型控制項的 CBR 規則會存取 Red Hat OpenShift on IBM Cloud API,其中包括所有 ibmcloud oc 指令呼叫,例如 ibmcloud oc clustersibmcloud oc cluster create 等。 如果您在 CBR 規則中選取管理 API,則與規則相關聯的網路區域中的資源可以與管理 API 互動。
如果使用 CLI,可以指定 --api-types 選項和 crn:v1:bluemix:public:containers-kubernetes::::api-type:management 類型。
如果您使用 API,可以在 "operations" 規格中指定 "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:management"

如果要遵循 CBR 實務範例,請參閱 設定環境定義型限制

若要在 CLI 中取得服務參考目標清單,請執行 ibmcloud cbr service-ref-targets 指令。

確保 Red Hat OpenShift on IBM Cloud 在啟用 CBR 時,可維持對其他 IBM Cloud 資源的存取

您必須針對針對下列服務建立的規則,將 containers-kubernetes 新增至網路區域。

IAM 身分服務
容許 Red Hat OpenShift on IBM Cloud 建立記號和 API 金鑰,例如叢集 API 金鑰和 IBM Cloud Container Registry 記號和 API 金鑰。
IAM 存取管理服務
容許 Red Hat OpenShift on IBM Cloud 針對 IBM Cloud Container Registry的「讀者」服務存取角色建立「IAM 存取原則」。
IAM 存取群組服務
在叢集裡將 IAM 存取原則與 RBAC 同步時,容許 Red Hat OpenShift on IBM Cloud 查閱存取群組。
使用者管理
在叢集裡同步 IAM 存取原則與 RBAC 時,容許 Red Hat OpenShift on IBM Cloud 存取使用者資訊。
IBM Cloud Object Storage
容許 Red Hat OpenShift on IBM Cloud 備份 VPC 叢集裡的內部登錄映像檔。
金鑰保護:
容許 Red Hat OpenShift on IBM Cloud 在叢集上啟用加密。
Block Storage for VPC (伺服器保護)
允許 Red Hat OpenShift on IBM Cloud 存取和加密 Block Storage for VPC 磁碟區。
VPC
允許 Red Hat OpenShift on IBM Cloud 存取 VPC 中的資源。

建立網路區域

網路區域充當您在建立 CBR 規則時所定義之目標資源的允許清單。 建立網路區域或允許清單之後,您可以建立規則來定義網路區域可以存取哪些資源。

確保將 containers-kubernetes 服務新增至適用於其他 IBM Cloud 資源的規則的網路區域,例如保護 IBM Cloud Object Storage 的規則,否則某些群集作業可能會失敗。 如需詳細資訊,請參閱 使用 CBR 允許 Red Hat OpenShift on IBM Cloud 存取其他 IBM Cloud 資源

在建立網路區域之前,請先檢閱 限制

從 API 建立網路區域

您可以使用 /v1/zones API 來建立網路區域。 如需相關資訊,請參閱 API 文件。 您可以將 containers-kubernetes 服務新增至網路區域,以容許 Red Hat OpenShift on IBM Cloud 存取帳戶中的資源及服務。

您可以在網路區域有效負載中包含多個位址類型。 如需相關資訊,請參閱 API 文件 中的有效負載範例。

將 Red Hat OpenShift on IBM Cloud 新增至網路區域的有效負載範例。 Red Hat OpenShift on IBM Cloud 的 serviceRef 屬性是 containers-kubernetes

{
  "name": "Example zone 1",
  "description": "",
  "addresses": [
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "containers-kubernetes",
        "account_id": "ACCOUNT-ID"
      }
    }
  ]
}

將多個服務、IP 位址及 VPC 新增至網路區域的有效負載範例。

{
  "name": "zone",
  "description": "",
  "addresses": [
    {
      "type": "ipAddress",
      "value": "192.168.0.0"
    },
    {
      "type": "vpc",
      "value": "crn:v1:bluemix:public:is:us-east:a/CRN"
    },
    {
      "type": "vpc",
      "value": "crn:v1:bluemix:public:is:us-south:a/CRN"
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "cloud-object-storage",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "codeengine",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "containers-kubernetes",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_type": "platform_service",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "iam-groups",
        "account_id": "ACCOUNT-ID"
      }
    }
  ],
  "excluded": []
}

從 CLI 建立網路區域

  1. 若要從 CLI 建立網路區域,請 安裝 CBR CLI 外掛程式

  2. 您可以使用 cbr-zone-create 指令,將資源新增至網路區域。 如需相關資訊,請參閱 CBR CLI 參考資料。 請注意,Red Hat OpenShift on IBM Cloud 的 service_namecontainers-kubernetes

    若要尋找可用服務參照的清單,請執行 ibmcloud cbr service-ref-targets 指令

    containers-kubernetes 服務新增至網路區域的範例指令。

    ibmcloud cbr zone-create --name example-zone-1 --description "Example zone 1" --service-ref service_name=containers-kubernetes
    

    下列範例會建立網路區域,以容許存取單一公用 IP 位址。 您也可以將此範例與 一個 IP 範例規則 一起使用。 如需此實務範例的相關資訊,請參閱 設定環境定義型限制

    ibmcloud cbr zone-create --addresses 129.41.86.7 --description "Allow only client IP" --name allow-client-ip
    

從主控台建立網路區域

  1. 決定您要新增至允許清單的資源。
  2. 請遵循 在主控台中建立環境定義型限制 的步驟。 將 Kubernetes 服務新增至網路區域,以容許 Red Hat OpenShift on IBM Cloud 存取帳戶中的服務及資源。

建立規則

定義規則以保護對帳戶中資源的存取權。 您在規則中定義的環境定義會決定網路區域 (允許清單) 中的資源如何與規則中定義的資源互動。

在建立規則之前,請先檢閱 限制

使用 API 建立規則

請檢閱下列範例要求,以建立規則。 如需 v1/rules API 的相關資訊,請參閱 API 文件

建立規則之後,由於 IAM TTL 回應快取,您可能需要 10 分鐘才能更新該規則。

下列範例有效負載會建立規則來保護 CLUSTER-ID 叢集。 只有 NETWORK-ZONE-ID 區域中的資源才能存取叢集。 由於未指定 operations,因此 NETWORK-ZONE-ID 區域中的資源可以同時存取 clustermanagement API。

{
  "description": "Example rule 1",
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT-ID"
        },
        {
          "name": "serviceName",
          "value": "containers-kubernetes"
        },
        {
          "name": "serviceInstance",
          "value": "CLUSTER-ID"
        }
      ]
    }
  ],
  "contexts": [
    {
      "attributes": [
        {
          "name": "networkZoneId",
          "value": "NETWORK-ZONE-ID"
        },
        {
          "name": "endpointType",
          "value": "private"
        }
      ]
    }
  ]
}

下列範例有效負載會建立規則來保護 CLUSTER-ID 叢集。 只有 NETWORK-ZONE-ID 區域中定義的資源才能存取叢集。 由於指定 cluster API 類型,因此 NETWORK-ZONE-ID 區域中的資源可以透過專用網路上的叢集 API 來存取叢集。

{
  "description": "Example rule 2",
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT-ID"
        },
        {
          "name": "serviceName",
          "value": "containers-kubernetes"
        },
        {
          "name": "serviceInstance",
          "value": "CLUSTER-ID"
        }
      ]
    }
  ],
  "operations": {
    "api_types": [
      {
        "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster"
      }
    ]
  },
  "contexts": [
    {
      "attributes": [
        {
          "name": "networkZoneId",
          "value": "NETWORK-ZONE-ID"
        },
        {
          "name": "endpointType",
          "value": "private"
        }
      ]
    }
  ]
}

從 CLI 建立規則

  1. 若要從 CLI 建立規則,請 安裝 CBR CLI 外掛程式
  2. 您可以使用 ibmcloud cbr rule-create 指令 來建立 CBR 規則。 如需相關資訊,請參閱 CBR CLI 參考資料。 請注意,Red Hat OpenShift on IBM Cloud 的 service_namecontainers-kubernetes。 若要尋找服務名稱清單,請執行 ibmcloud cbr service-ref-targets 指令。 若要尋找服務的 API 類型清單,請執行 ibmcloud cbr api-types --service-name SERVICE 指令。

建立使用 addresses 金鑰及 cluster API 類型和 ipAddress 類型的規則的範例指令。

ibmcloud cbr rule-create my-rule-1 --service-name containers-kubernetes --api-type crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --zone-id ZONE-ID

下列指令會建立保護 CLUSTER-ID 叢集的規則。 只有 NETWORK-ZONE-ID 網路區域中的資源才能存取叢集。 此規則同時包含 clustermanagement API 類型。

ibmcloud cbr rule-create my-rule-2 --service-name containers-kubernetes --service-instance CLUSTER-ID --zone-id NETWORK-ZONE-ID

下列範例指令會建立一個規則,容許所有專用網路連線,但僅容許 allow-client-ip 網路區域中的資源透過公用網路連接至叢集。 有關這種情況的詳細資訊,請參閱 設定基於上下文的限制

ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "privateAccess=allowAll, publicAccess=oneIP" --service-name containers-kubernetes --service-instance CLUSTER-ID --context-attributes endpointType=private --context-attributes endpointType=public,networkZoneId=allow-client-ip

從控制台建立規則

  1. 檢閱可用的環境定義,並決定您要建立的規則。
  2. 請遵循 在主控台中建立環境定義型限制 的步驟。

限制

  • 建立、施行或停用強制執行規則之後,可能需要長達 10 分鐘,變更才會生效。
  • 下列限制適用於適用於所有 API 類型或 cluster API 類型的 Red Hat OpenShift on IBM Cloud CBR 規則:
    • 它們不得引用包含 IPv6 位址的網路區域。 cluster 類型中包含的 API 不支援 IPv6。
    • 它們不得引用應用網路區域中的其他服務,如 IBM Cloud Object Storage 或 Key Protect。
    • 它們不支援集群 API 類型的 Report-only 執行。
    • 私有規則的 IP 位址/子網路數量不得超過 200 個,公共規則的 IP 位址/子網路數量不得超過 500 個。
  • 對於具有「公用服務端點」之 VPC 上的 Red Hat OpenShift on IBM Cloud 叢集,如果您將公用 CBR 規則新增至叢集,請確保同時將 VPC 子網路的公用閘道 IP 位址新增至 CBR 規則。 如果您不包括公用閘道 IP,則 Red Hat OpenShift 主控台 Pod 將無法正常運作,因為這些 Pod 需要使用公用網路來存取叢集主節點的 Oauth 埠。
  • 部分在 2022 年 10 月 8 日之前建立的 Red Hat OpenShift on IBM Cloud 叢集無法對叢集的 APIserver 施行公用 CBR 規則。 若要檢查叢集是否支援這些公用叢集 API 類型 CBR 規則,請執行 ibmcloud ks cluster get -c <CLUSTER-ID> 指令。 如果任一「服務端點 URL」以 https://cXXX 開頭 (其中 XXX 是任何三位數數字),則叢集會支援公用 CBR 規則。 如果「服務端點 URL」以 https://cX 開頭 (其中 c 之後的數字是單一數字),則叢集無法對叢集的 APIserver 施行公用 CBR 規則。 若要使用公用 CBR 規則,您必須建立新的叢集。