コンテキスト・ベースの制限のシナリオ例
コンテキストベースの制限を使用すると、 アカウント所有者と管理者は、アクセス要求のコンテキストに基づいて、 IBM Cloud® リソースのアクセス制限を定義し、実施することができます。 IBM Cloud Kubernetes Service リソースへのアクセスは、コンテキストベースの制限とアイデンティティおよびアクセス管理ポリシーで制御できる。 詳しくは、 コンテキストベースの制限で IBM Cloud Kubernetes Service リソースを保護するを 参照してください。
Kubernetes LoadBalancer, によって公開されるウェブ・サーバーなど、 IBM Cloud Kubernetes Service クラスター上で実行されるアプリケーションは、CBR ルールによって制限されない。
シナリオについて
このシナリオ例では、コンテキスト・ベースの制限を使用して、個々の IP アドレスのみがパブリック・ネットワークを介して cluster API に接続することを許可し、すべてのプライベート・トラフィックを許可することにより、クラスターへのトラフィックを制限します。
以下のステップでは、単一の IP アドレスを含むネットワーク・ゾーンまたは許可リストを作成することから始めます。 次に、すべてのプライベート・ネットワーク・アクセスを許可し、個々の IP アドレスを含むネットワーク・ゾーンを許可リストに登録する、クラスターのコンテキスト・ベースの制限ルールを作成します。 ルールを作成するときに、そのルールを、個々の IP アドレスを含むネットワーク・ゾーンに関連付けます。
前提条件
このチュートリアルを始める前に、以下のリソースとツールを作成またはインストールしていることを確認してください。
- IBM Cloud アカウント。 詳しくは、 アカウントの作成 を参照してください。
- CLI ツールには、 IBM Cloud CLI、コンテナー・サービス CLI プラグイン、および CBR プラグインが含まれます。 詳しくは、IBM Cloud CLI の概要を参照してください。
- クラスターを作成します。
- ネットワーク・ゾーンとルールについて理解するには、「 What are context-based restrictions 」資料を参照してください。
- コンテキスト・ベースの制限によるクラスター・リソースの保護 の資料を参照して、 IBM Cloud Kubernetes Service リソースに CBR を活用する方法を理解してください。
- IBM Cloud Kubernetes Serviceで CBR を使用する場合の の制限事項 を確認してください。
ネットワーク・ゾーンの作成
アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
以下のコマンド例を実行して、使用するクライアント IP を 1 つだけ含むネットワークを作成します。
ibmcloud cbr zone-create --addresses 129.XX.XX.XX --description "Allow only client IP" --name allow-client-ip -
ネットワーク・ゾーンが作成されたことを確認します。
ibmcloud cbr zones
CBR ルールの作成
-
ネットワーク・ゾーン (許可リスト) を作成した後、CBR ルールを作成し、前のステップで作成したネットワーク・ゾーンを追加します。 以下の例では、
clusterAPI タイプを使用するルールを作成します。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:clustercrn:v1:bluemix:public:containers-kubernetes::::api-type:clusterAPI を設定して、以前に作成したネットワーク・ゾーン内のリソースのみがclusterAPI (各種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ゾーン内のリソースのみがパブリック・ネットワークを介してクラスターにアクセスできるようにします。
-
ルールが作成されたことを確認する。
ibmcloud cbr rules
コンテキスト・ベースの制約事項のテスト
コンテキスト・ベースの制限のセットアップをテストするには、例えば、ネットワーク・ゾーンで許可リストに登録した個々の IP アドレス以外の IP アドレスからパブリック・ネットワークを介してポッドをリストするなどして、クラスターのクラスター API を呼び出すことができます。 このセットアップでは、すべてのプライベート接続が許可されますが、パブリック・ネットワークを介してクラスター API に接続できるのは、ネットワーク・ゾーン内の個々の IP アドレスのみです。
その他のシナリオ
単純な CBR ネットワーク・ゾーンおよびルールを作成したので、以下のより高度な例を検討して、 IBM Cloud Kubernetes Service リソースへのアクセスをさらに制御します。
さまざまな IP がパブリック・サービス・エンドポイントとプライベート・サービス・エンドポイントにアクセスできるようにする
このシナリオでは、IP アドレスごとに別々のネットワーク・ゾーンを作成することで、異なる IP アドレスまたは CIDR が IBM Cloud Kubernetes Service クラスターのパブリック・サービス・エンドポイントおよびプライベート・サービス・エンドポイントにアクセスできるようにします。 次に、各ネットワーク・ゾーンがパブリック・サービス・エンドポイントまたはプライベート・サービス・エンドポイントにアクセスできるようにするルールを作成します。
-
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" -
前のステップで作成した
private-ip-zoneゾーンとpublic-ip-zoneゾーンの ID を取得します。ibmcloud cbr zones -
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 の保護 を参照してください。
-
パブリックまたはプライベート
clusterAPI、あるいはパブリックまたはプライベートmanagementAPI へのアクセスを許可する 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" -
前のステップで作成したゾーンの 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 -
以前に作成したゾーンを使用して、パブリックおよびプライベートの
clusterおよびmanagementAPI へのアクセスを保護するルールを作成します。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-kubernetesibmcloud 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