コンテキスト・ベースの制限を使用して、アプリケーションや機能へのインバウンド・トラフィックを制限する

IBM Cloud® Code Engine アプリケーションや機能へのインバウンド・ネットワーク・トラフィックを制御するために、 IBM Cloud® コンテキスト・ベースの制限(CBR)を使用することができます。 CBRでは、プライベート・エンドポイント、パブリック・エンドポイント、またはその両方を通じてアクセスを制限することができ、ワークロードに柔軟なネットワーク・レベルのセキュリティを提供します。 コンテキストベースの制限は、ID に基づいてアクセスを割り当てる代わりに、アクセ ス要求が構成した許可されたコンテキストから来たものであることを検証する。 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. Context-based restrictions Rulesのページに 行く。

  2. Create(作成)]をクリックして、コンテキストベースの制限の新しいルールを、サービスから順に作成します。

  3. を選択します。 Code Engine****を選択し、 Nextをクリックして保護するサービスAPIを選択します。

  4. サービスAPIの データプレーンオプションを選択することで、 Code Engine アプリケーションまたは機能のワークロードを保護するためにアクセスを制限します。

    データプレーンレベルでワークロードの制限を定義するので、少なくともデータプレーンサービスを選択する。 他のサービスやプラットフォームのAPIを選択することもできる。

    次へ] をクリックして、リソースの制限範囲を設定します。

  5. 単一のプロジェクト、リソースグループ全体、または複数のプロジェクトがある場所(リージョン)に制限を適用します。 このスコープを Resources セクションに適用し、 Reviewをクリックして次に進みます。

  6. ルールにコンテキストを追加するには、 Continueをクリックします。

  7. どのエンドポイントを制限するかを定義するためにコンテキストを設定する。 セキュリティ要件に基づいて、以下のシナリオのいずれかを選択します:

    • ユースケースA:パブリック・インバウンドを完全にブロックする

      このユースケースを利用して、アプリケーションや機能をプライベート・エンドポイントからのみアクセスできるようにし、ネットワーク・レベルでのパブリック・インターネット・アクセスを排除する。

      1. エンドポイントをオンに設定する。
      2. プライベート (トラフィックを許可する)を選択します。
      3. パブリックを選択しない(トラフィックをブロックする)。
      4. ネットワークゾーンは空のままにしておきます。 このセクションでネットワークゾーンが有効になっていないことを確認し、すべてのプライベートエンドポイントがアクセス可能な状態を維持する。
      5. 追加 」をクリックして、新しいコンテキストを作成します。
    • 使用例B:公開をブロックし、IPでプライベートを制限する

      このユースケースを使用して、すべてのパブリック・インターネット・アクセスをブロックし、プライベート・エンドポイント・アクセスを特定のIPアドレスまたはネットワーク・ゾーンに制限することにより、最大限のコントロールを実現します。

      1. エンドポイントをオンに設定する。
      2. プライベート (トラフィックを許可する)を選択します。
      3. パブリックを選択しない(トラフィックをブロックする)。
      4. プライベートアクセスを許可するネットワークゾーンを選択します(特定のVPCやIP範囲など)。
      5. 追加 」をクリックして、新しいコンテキストを作成します。
    • 使用例C:ワークロードを完全に分離する

      このユースケースは、プライベート・エンドポイントとパブリック・エンドポイントの両方をブロックすることで、ネットワーク・レベルでアプリケーションと機能を完全に分離するために使用する。 これは、アウトバウンド接続のみを行うバッチ処理ワークロード、メッセージキューまたはイベントを通じてのみ通信を行う内部マイクロサービス、またはメンテナンス中のワークロードに便利です。

      1. エンドポイントをオンに設定する。
      2. Privateを選択しない(トラフィックをブロックする)。
      3. パブリックを選択しない(トラフィックをブロックする)。
      4. ネットワークゾーンは空のままにしておきます。 ネットワーク・ゾーンを持たない空のパブリック・コンテキストは、すべてのパブリック・アクセスをブロックする。
      5. 追加 」をクリックして、新しいコンテキストを作成します。
  8. Continue(続行 )」をクリックして、ルールの詳細を入力する。

  9. ルールの説明を入力してください。

  10. Enforcementには Enabledを選択する。

  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(仮想プライベートクラウド)を指すネットワークゾーンを選択した場合は、VPCがプライベートワークロードにアクセスできるように、VPE(仮想プライベートエンドポイント)ゲートウェイも作成する必要があります。 ゲートウェイを作成した後、PDNS解決による一時的な遅延が発生する場合があります。 最初は RBAC Access Denied のエラーメッセージが表示されますが、少し時間が経てばアクセスできるようになります。