1. はじめに
クラウドでDatabase as a Serviceを利用する際、DBに接続できるアクセス元を制限したいという要件がよくあります。
IBM Cloudでは、context-based restriction(CBR)という機能を利用して、DBへのアクセス元を特定のIP範囲またはリソースに絞ることができます。
context-based restrictionの詳しい説明はこちら
- Qiita記事:Context-base Restrictionとは
- IBM Cloud Docs:コンテキスト・ベースの制限とは
本記事では、CBRでDatabases for PostgreSQLへのアクセス制限を実施する手順をご紹介します。
PostgreSQLへのアクセス元を以下の3つに限定する設定を試していきます。
① アクセス元をCode Engineの特定のリージョンに限定する
② アクセス元を特定のVPC上にある仮想サーバに限定する
③ アクセス元をVPNユーザーに限定する
2. アーキテクチャ概要
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範囲を設定するためにネットワーク・ゾーンを作成します。
今回は3種類のアクセス元を設定したいので、以下3つのネットワークゾーンを作成します。
① アクセス元をCode Engineの特定のリージョンに限定するためのネットワークゾーン
Code Engine大阪リージョンのSource IPを許可するネットワーク・ゾーンを作成します。
- ネットワークゾーン「code-engine-osa」
② アクセス元を特定のVPC上にある仮想サーバに限定するためのネットワークゾーン
大阪リージョンのVPC上にある仮想サーバからのアクセスを許可するネットワーク・ゾーンを作成します。
- ネットワークゾーン「osa-vpc-vsi」
- 許可されたIPアドレス:仮想サーバのIPアドレス
- 許可されたVPC:仮想サーバ(VSI)が存在するVPCを選択して追加
③ アクセス元をVPNユーザーに限定するためのネットワークゾーン
クライアントVPNを使用しているユーザーからのアクセスを許可するネットワーク・ゾーンを作成します。
- ネットワークゾーン「vpn-client」
- 許可されたIPアドレス:VPNサーバがクライアントに割り振るIP範囲
- 許可されたVPC:VPNサーバがあるVPCを選択して追加
4-2. ルールの作成
次に、PostgreSQLにアクセス制限をするためのルールを作成します。
- ステップ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に適用することもできますが、今回は特定のインスタンスを選択しました。)
- ステップ2:コンテキストの追加
- Endpoints:デフォルトではすべてのエンドポイント・タイプへのアクセスが許可される。パブリックまたはプライベートを選択することも可能。(今回はデフォルトのまま作成しました。)
- ネットワークゾーン:先ほど作成した①〜③のネットワークゾーンを選択して追加。
- ステップ3:ルールの説明
ルールが作成できました。
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]を押してデータベースの画面が表示されればアクセス成功です。
結果:成功
東京にあるCode Engine ProjectのアプリからPostgreSQLにアクセスします。
結果:失敗

② アクセス元を特定のVPC上にある仮想サーバに限定できているか確認
アクセス許可したVPC上にある仮想サーバからPostgreSQLにアクセスします。
結果:成功

別のVPC上にある仮想サーバからPostgreSQLにアクセスします。
結果:失敗

③ アクセス元をVPNユーザーに限定できているか確認
VPNに接続した状態でクライアントPCからPostgreSQLにアクセスします。
結果:成功

VPNに接続しない状態でPostgreSQLにアクセスします。
結果:失敗

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













