0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM Cloud Databases for PostgreSQLへのアクセスをcontext-based restrictionで制限する

Last updated at Posted at 2025-12-25

1. はじめに

クラウドでDatabase as a Serviceを利用する際、DBに接続できるアクセス元を制限したいという要件がよくあります。

IBM Cloudでは、context-based restriction(CBR)という機能を利用して、DBへのアクセス元を特定のIP範囲またはリソースに絞ることができます。

context-based restrictionの詳しい説明はこちら

本記事では、CBRでDatabases for PostgreSQLへのアクセス制限を実施する手順をご紹介します。

PostgreSQLへのアクセス元を以下の3つに限定する設定を試していきます。
① アクセス元をCode Engineの特定のリージョンに限定する
② アクセス元を特定のVPC上にある仮想サーバに限定する
③ アクセス元をVPNユーザーに限定する

2. アーキテクチャ概要

アーキテクチャ図は以下の通りです。
スクリーンショット 2025-12-25 10.14.40.png

3. 環境

  • PostgreSQLのインスタンス(Private Endpointのみ有効)
  • VPC
  • 仮想サーバ(VSI for VPC)
  • クライアントVPN(VPN for VPC)
  • Code Engine上のアプリ
    • Code Engineでpgwebのアプリを動かし、アプリのUIでPostgreSQLの認証情報を入力してDBへの接続可否を確認できるようにする

4. CBRの設定

4-1. ネットワーク・ゾーンの作成

まず、アクセスを許可するIP範囲を設定するためにネットワーク・ゾーンを作成します。

スクリーンショット 2025-10-03 16.41.02.png

今回は3種類のアクセス元を設定したいので、以下3つのネットワークゾーンを作成します。

① アクセス元をCode Engineの特定のリージョンに限定するためのネットワークゾーン
Code Engine大阪リージョンのSource IPを許可するネットワーク・ゾーンを作成します。

  • ネットワークゾーン「code-engine-osa」
    • 許可されたIPアドレス:Code Engine大阪リージョンのSource IPs
      ※ Code Engine大阪リージョンのSource IPsは、IBM CloudポータルでCode Engineプロジェクトを選択し、プロジェクト設定 > 接続性のタブから確認できます。パブリックとプライベートがありますが、今回はプライベートエンドポイントのみを許可しているので、プライベートIPをコピーしてきます。
      スクリーンショット 2025-09-04 16.45.05-9477501.png

② アクセス元を特定のVPC上にある仮想サーバに限定するためのネットワークゾーン
大阪リージョンのVPC上にある仮想サーバからのアクセスを許可するネットワーク・ゾーンを作成します。

  • ネットワークゾーン「osa-vpc-vsi」
    • 許可されたIPアドレス:仮想サーバのIPアドレス
    • 許可されたVPC:仮想サーバ(VSI)が存在するVPCを選択して追加

スクリーンショット 2025-09-04 16.57.07-9477545.png

③ アクセス元をVPNユーザーに限定するためのネットワークゾーン
クライアントVPNを使用しているユーザーからのアクセスを許可するネットワーク・ゾーンを作成します。

  • ネットワークゾーン「vpn-client」
    • 許可されたIPアドレス:VPNサーバがクライアントに割り振るIP範囲
    • 許可されたVPC:VPNサーバがあるVPCを選択して追加

スクリーンショット 2025-09-04 16.58.57.png

4-2. ルールの作成

次に、PostgreSQLにアクセス制限をするためのルールを作成します。

スクリーンショット 2025-09-04 17.23.55.png

  • ステップ1:リソースの選択
    • Service: Databases for PostgreSQL
    • API: Data Plane(2025年12月現在、CBR適用できるのはData Planeのみ)
      • Data Plane: Data plane API operations support reading and writing to an instance. Please select this option to enforce the rule for your Cloud Databases context.
    • リソース:ルールの適用範囲を選択。(アカウント内の全てのPostgreSQLに適用することもできますが、今回は特定のインスタンスを選択しました。)

スクリーンショット 2025-09-04 17.26.06.png
スクリーンショット 2025-09-04 17.27.05.png
スクリーンショット 2025-09-04 17.27.45.png

  • ステップ2:コンテキストの追加
    • Endpoints:デフォルトではすべてのエンドポイント・タイプへのアクセスが許可される。パブリックまたはプライベートを選択することも可能。(今回はデフォルトのまま作成しました。)
    • ネットワークゾーン:先ほど作成した①〜③のネットワークゾーンを選択して追加。

スクリーンショット 2025-09-04 17.28.32.png

  • ステップ3:ルールの説明
    • ルールの説明(オプション):PostgreSQL用ルール(何のリソースに対する制約なのか書いておくと、ルール一覧を表示したときに分かりやすいです。)
    • 強制:有効
      • この規則を強制適用します。アクセス試行の拒否は、Activity Trackerに報告されます。
        スクリーンショット 2025-09-04 17.30.42.png

ルールが作成できました。

スクリーンショット 2025-09-04 17.45.05.png

5. アクセス確認

CBRでPostgreSQLへのアクセスを制限できているか確認します。

① アクセス元をCode Engineの特定のリージョンに限定できているか確認
大阪にあるCode Engine Projectで動いているアプリ(pgweb)から、PostgreSQLへのアクセスを試します。
今回は、Code Engine上のアプリのプライベートエンドポイントに、VPN経由でアクセスして確認しています(VPNを繋いだ状態で、ブラウザからプライベートエンドポイントのURL"xxx.private.jp-osa.codeengine.appdomain.cloud"にアクセス)。
pgwebのUIでPostgreSQLの認証情報を入力し、[Connect]を押してデータベースの画面が表示されればアクセス成功です。

結果:成功

スクリーンショット 2025-09-05 16.15.43-9472656.png
スクリーンショット 2025-09-05 16.16.54.png

東京にあるCode Engine ProjectのアプリからPostgreSQLにアクセスします。
結果:失敗
スクリーンショット 2025-09-05 16.20.47.png

② アクセス元を特定のVPC上にある仮想サーバに限定できているか確認
アクセス許可したVPC上にある仮想サーバからPostgreSQLにアクセスします。
結果:成功
スクリーンショット 2025-09-08 17.12.39のコピー.png

別のVPC上にある仮想サーバからPostgreSQLにアクセスします。
結果:失敗
スクリーンショット 2025-09-08 17.43.11のコピー.png

③ アクセス元をVPNユーザーに限定できているか確認
VPNに接続した状態でクライアントPCからPostgreSQLにアクセスします。
結果:成功
スクリーンショット 2025-09-05 16.30.12のコピー.png

VPNに接続しない状態でPostgreSQLにアクセスします。
結果:失敗
スクリーンショット 2025-09-05 16.38.50のコピー.png

意図した通りのアクセス制御ができていることが確認できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?