コンテキスト・ベースの制限によるクラスター・リソースの保護

コンテキストベースの制限により、 アカウント所有者と管理者は、アクセス要求のコンテキストに基づいて、 IBM Cloud® リソースに対するアクセス制限を定義し、実施することができます。 Red Hat OpenShift on IBM Cloud リソースへのアクセスは、コンテキストベースの制限とアイデンティティおよびアクセス管理ポリシーで制御できる。

これらの制限は、ID に基づく従来の IAM ポリシーと連携して、追加の保護レイヤーを提供します。 IAM ポリシーとは異なり、コンテキスト・ベースの制限はアクセス権限を割り当てません。 コンテキスト・ベースの制限は、アクセス要求が、構成された許可されるコンテキストからのものであるかどうかを検査します。 IAM アクセスとコンテキスト・ベースの制限の両方によってアクセスが強制されるので、資格情報が漏洩した場合や適切に管理されなかった場合でも、コンテキスト・ベースの制限によって保護が提供されます。 詳しくは、コンテキスト・ベースの制限とはを参照してください。

ルールの作成、更新、削除を行うには、 Red Hat OpenShift on IBM Cloud サービスで Administrator ロールを持つ必要があります。 また、ユーザーがネットワーク・ゾーンを作成、更新、または削除するには、コンテキスト・ベースの制限サービスに対する編集者または管理者の役割を持っている必要があります。

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 へのアクセスを保護します。 例えば、 Kubernetes ネームスペースを作成するためにAPIを保護することができます。
管理 API
特定のクラスタの Red Hat OpenShift on IBM Cloud API へのアクセスを保護します。 例えば、APIを保護してクラスタを作成することができる。

Kubernetes LoadBalancer によって公開されるウェブ・サーバーなど、 Red Hat OpenShift on IBM Cloud クラスター上で実行されるアプリケーションは、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 など、クラスター内の API へのアクセスを保護します。 クラスター API タイプに適用される CBR ルールは、クラスター API サーバーへのアクセスを制御します。これには、そのクラスターに対するすべての 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 ルールは、 ibmcloud oc clustersibmcloud oc cluster create などのすべての ibmcloud oc コマンド呼び出しを含む Red Hat OpenShift on IBM Cloud API へのアクセスを制御します。 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 コマンドを実行します。

CBR が有効になっているとき、 Red Hat OpenShift on IBM Cloud が他の IBM Cloud リソースへのアクセスを維持できるようにする

以下のサービスに対して作成されたルールについては、ネットワーク・ゾーンに containers-kubernetes を追加する必要があります。

IAM Identity サービス
Red Hat OpenShift on IBM Cloud がクラスター API キーや IBM Cloud Container Registry トークンや API キーなどのトークンおよび API キーを作成できるようにします。
IAM アクセス管理サービス
Red Hat OpenShift on IBM Cloud が IBM Cloud Container Registryへのリーダー・サービス・アクセス役割の IAM アクセス・ポリシーを作成できるようにします。
IAM アクセス・グループ・サービス
クラスター内の RBAC を使用して IAM アクセス・ポリシーを同期するときに、 Red Hat OpenShift on IBM Cloud がアクセス・グループを検索できるようにします。
ユーザー管理
クラスター内の RBAC と IAM アクセス・ポリシーを同期するときに、 Red Hat OpenShift on IBM Cloud がユーザー情報にアクセスできるようにします。
IBM Cloud Object Storage
Red Hat OpenShift on IBM Cloud が VPC クラスター内の内部レジストリー・イメージをバックアップできるようにします。
Key Protect:
Red Hat OpenShift on IBM Cloud がクラスターで暗号化を有効にできるようにします。
Block Storage for VPC (サーバープロテクト)
Red Hat OpenShift on IBM Cloud が Block Storage for VPC ボリュームにアクセスし、暗号化できるようにする。
VPC
VPC内のリソースに Red Hat OpenShift on IBM Cloud。

ネットワーク・ゾーンの作成

ネットワーク・ゾーンは、CBR ルールの作成時に定義するターゲット・リソースの許可リストとして機能します。 ネットワーク・ゾーンまたは許可リストを作成した後、ネットワーク・ゾーンがアクセスできるリソースを定義するルールを作成できます。

他の IBM Cloud リソースに適用されるルール( IBM Cloud Object Storage を保護するルールや、一部のクラスタ操作が失敗する可能性があるルールなど)については、必ず containers-kubernetes サービスをネットワークゾーンに追加してください。 詳しくは、 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 アドレスにアクセスを許可するネットワーク・ゾーンを作成します。 この例は、 1 つの 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 ゾーン内のリソースは cluster API と management 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
    • プライベート・ルールでは200IP/サブネット以下、パブリック・ルールでは500IP/サブネット以下に制限される。
  • パブリック・サービス・エンドポイントを使用する VPC 上の Red Hat OpenShift on IBM Cloud クラスターでは、クラスターにパブリック CBR ルールを追加する場合は、必ず、VPC サブネットのパブリック・ゲートウェイ IP アドレスも CBR ルールに追加してください。 パブリック・ゲートウェイ IP を含めない場合、 Red Hat OpenShift コンソール・ポッドは、パブリック・ネットワークを使用してクラスター・マスターの 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 は任意の 3 桁の数字) で始まる場合、クラスターは公開 CBR ルールをサポートします。 サービス・エンドポイント URL が https://cX ( c の後の数字は 1 桁) で始まる場合、クラスターは、クラスターの APIserver に対してパブリック CBR ルールを適用できません。 パブリック CBR ルールを使用するには、新規クラスターを作成する必要があります。