コンテキスト・ベースの制限のシナリオ例

コンテキストベースの制限を使用すると、 アカウント所有者と管理者は、アクセス要求のコンテキストに基づいて、 IBM Cloud® リソースのアクセス制限を定義し、実施することができます。 IBM Cloud Kubernetes Service リソースへのアクセスは、コンテキストベースの制限とアイデンティティおよびアクセス管理ポリシーで制御できる。 詳しくは、 コンテキストベースの制限で IBM Cloud Kubernetes Service リソースを保護するを 参照してください。

Kubernetes LoadBalancer, によって公開されるウェブ・サーバーなど、 IBM Cloud Kubernetes Service クラスター上で実行されるアプリケーションは、CBR ルールによって制限されない。

シナリオについて

このシナリオ例では、コンテキスト・ベースの制限を使用して、個々の IP アドレスのみがパブリック・ネットワークを介して cluster API に接続することを許可し、すべてのプライベート・トラフィックを許可することにより、クラスターへのトラフィックを制限します。

以下のステップでは、単一の IP アドレスを含むネットワーク・ゾーンまたは許可リストを作成することから始めます。 次に、すべてのプライベート・ネットワーク・アクセスを許可し、個々の IP アドレスを含むネットワーク・ゾーンを許可リストに登録する、クラスターのコンテキスト・ベースの制限ルールを作成します。 ルールを作成するときに、そのルールを、個々の IP アドレスを含むネットワーク・ゾーンに関連付けます。

前提条件

このチュートリアルを始める前に、以下のリソースとツールを作成またはインストールしていることを確認してください。

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

アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  1. 以下のコマンド例を実行して、使用するクライアント IP を 1 つだけ含むネットワークを作成します。

    ibmcloud cbr zone-create --addresses 129.XX.XX.XX --description "Allow only client IP" --name allow-client-ip
    
  2. ネットワーク・ゾーンが作成されたことを確認します。

    ibmcloud cbr zones
    

CBR ルールの作成

  1. ネットワーク・ゾーン (許可リスト) を作成した後、CBR ルールを作成し、前のステップで作成したネットワーク・ゾーンを追加します。 以下の例では、 cluster API タイプを使用するルールを作成します。 NETWORK-ZONE-ID を、ステップ 1 で作成した allow-client-ip ネットワーク・ゾーンの ID に置き換えます。

    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=NETWORK-ZONE-ID
    

    コマンド・オプションについて説明します。

    --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster
    crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster API を設定して、以前に作成したネットワーク・ゾーン内のリソースのみが cluster API (各種 kubectl コマンド用の API を含む) にアクセスできるようにします。
    --service-instance CLUSTER-ID
    ルールのスコープを単一のクラスターに設定して、前に作成したネットワーク・ゾーン内のリソースのみが CLUSTER-ID にアクセスできるようにします。
    --context-attributes endpointType=private
    ネットワーク・ゾーンを関連付けずにコンテキスト属性 endpointType=private を設定すると、クラスターへのすべてのプライベート・トラフィックが許可されます。
    --context-attributes endpointType=public,networkZoneId=all-client-ip
    コンテキスト属性 endpointType=public を設定し、以前に作成した networkZoneId=allow-client-ip を関連付けて、 allow-client-ip ゾーン内のリソースのみがパブリック・ネットワークを介してクラスターにアクセスできるようにします。
  2. ルールが作成されたことを確認する。

    ibmcloud cbr rules
    

コンテキスト・ベースの制約事項のテスト

コンテキスト・ベースの制限のセットアップをテストするには、例えば、ネットワーク・ゾーンで許可リストに登録した個々の IP アドレス以外の IP アドレスからパブリック・ネットワークを介してポッドをリストするなどして、クラスターのクラスター API を呼び出すことができます。 このセットアップでは、すべてのプライベート接続が許可されますが、パブリック・ネットワークを介してクラスター API に接続できるのは、ネットワーク・ゾーン内の個々の IP アドレスのみです。

その他のシナリオ

単純な CBR ネットワーク・ゾーンおよびルールを作成したので、以下のより高度な例を検討して、 IBM Cloud Kubernetes Service リソースへのアクセスをさらに制御します。

さまざまな IP がパブリック・サービス・エンドポイントとプライベート・サービス・エンドポイントにアクセスできるようにする

このシナリオでは、IP アドレスごとに別々のネットワーク・ゾーンを作成することで、異なる IP アドレスまたは CIDR が IBM Cloud Kubernetes Service クラスターのパブリック・サービス・エンドポイントおよびプライベート・サービス・エンドポイントにアクセスできるようにします。 次に、各ネットワーク・ゾーンがパブリック・サービス・エンドポイントまたはプライベート・サービス・エンドポイントにアクセスできるようにするルールを作成します。

  1. IBM Cloud Kubernetes Service クラスターへのアクセスを許可するパブリック IP アドレスまたは CIDR 用のネットワーク・ゾーンと、プライベート IP アドレスまたは CIDR 用のネットワーク・ゾーンを作成します。

    public-IP-zone および private-IP-zone という名前の別個のネットワーク・ゾーンを作成するコマンドの例。 この例では、各ゾーンには、クラスターへのアクセスを許可する複数の IP アドレスまたは CIDR がコンマで区切られて含まれています。

    ibmcloud cbr zone-create --addresses 1.2.3.4,12.12.12.0/24 --description "Allowed Public IP Addresses Zone" --name "public-ip-zone"
    
    ibmcloud cbr zone-create --addresses 10.20.20.20,10.10.10.0/24 --description "Allowed Private IP Addresses Zone" --name "private-ip-zone"
    
  2. 前のステップで作成した private-ip-zone ゾーンと public-ip-zone ゾーンの ID を取得します。

    ibmcloud cbr zones
    
  3. private-ip-zone がクラスターのプライベート・サービス・エンドポイントに接続し、 public-ip-zone がクラスターのパブリック・サービス・エンドポイントにのみ接続できるようにするルールを作成します。 この規則は、 --service-instance オプションで指定されたクラスターに適用されます。 アカウント内のすべてのクラスターにルールを適用する場合は、クラスターを指定しないでください。

    ibmcloud cbr rule-create --context-attributes "endpointType=public,networkZoneId=PUBLIC-IP-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-IP-ZONE-ID" --description "Separate private and public IPs for cluster and management rule" --service-name containers-kubernetes --service-instance CLUSTER-ID
    

パブリック・サービス・エンドポイントとプライベート・サービス・エンドポイントを介して異なる IP が異なる API タイプにアクセスできるようにする

前のシナリオと同様に、このシナリオでは、 IBM Cloud Kubernetes Service クラスタのパブリックまたはプライベート・サービス・エンドポイントに異なる IP アドレスからのアクセスを許可します。 ただし、このシナリオでは、 cluster API および management API の特定の API タイプによってアクセスがさらに制限されます。 API タイプについて詳しくは、 特定の API の保護 を参照してください。

  1. パブリックまたはプライベート cluster API、あるいはパブリックまたはプライベート management API へのアクセスを許可する IP アドレスごとに 1 つずつ、4 つのネットワーク・ゾーンを作成します。 クラスターへのアクセスを許可する複数の IP アドレスまたは CIDR をコンマで区切って含めることができることに注意してください。

    ibmcloud cbr zone-create --addresses 1.2.3.4,12.12.12.0/24 --description "Allowed Public IP Addresses for IKS and ROKS APIs" --name "public-mgmt-zone"
    
    ibmcloud cbr zone-create --addresses 10.20.20.20,10.10.10.0/24 --description "Allowed Private IP Addresses IKS and ROKS APIs" --name "private-mgmt-zone"
    
    ibmcloud cbr zone-create --addresses 11.11.11.0/24 --description "Allowed Public IP Addresses for cluster apiserver" --name "public-cluster-zone"
    
    ibmcloud cbr zone-create --addresses 10.30.30.30 --description "Allowed Private IP Addresses for cluster apiserver" --name "private-cluster-zone"
    
  2. 前のステップで作成したゾーンの ID を取得します。

    ibmcloud cbr zones
    

    出力例

    OK
    id                                 name                   address_count   
    c14c0839c13d8aa0afa8383e2be2e124   public-mgmt-zone       2   
    f9676ca6ef37685315fa254b89d73159   public-cluster-zone    1   
    c14c0839c13d8aa0afa8383e2be2e843   private-cluster-zone   1   
    b53353de929de39ac2381f9b4cde8507   private-mgmt-zone      2
    
  3. 以前に作成したゾーンを使用して、パブリックおよびプライベートの cluster および management API へのアクセスを保護するルールを作成します。

    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:management --context-attributes "endpointType=public,networkZoneId=PUBLIC-MGMT-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-MGMT-ZONE-ID" --description "Separate private and public IPs for the management APIs" --service-name containers-kubernetes
    
    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --context-attributes "endpointType=public,networkZoneId=PUBLIC-CLUSTER-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-CLUSTER-ZONE-ID" --description "Separate private and public IPs for cluster APIs" --service-name containers-kubernetes