LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

サービス・製品 | 

無料でセキュアなシステムを構築できる、OCIの要塞(Bastion)サービスとは

こんにちは。クラウドインテグレーションサービス部の石井です。

私が所属する部門では、Oracle Cloud Infrastructure(以下、OCI)導入の推進を行っており、OCIの様々な機能を検証しています。日々OCIに触れている中で、セキュアなシステムを構築する際に特に有用だと感じた、「要塞(Bastion)サービス」について紹介します。

要塞(Bastion)サービスとは

要塞(Bastion)サービスとは、インターネット上で直接アクセスできないプライベートネットワーク内にあるリソースに対して、制限付きアクセスを提供するサービスです。

例えばOCIの場合はデータベースを作成することが多く、主に本番環境ではプライベートネットワークにデータベースを作成します。このプライベートネットワーク内に作成したデータベースにアクセスする場合、通常は踏台となるサーバーを経由して接続します。そして、この踏台となるサーバーのためだけに、パブリックなネットワークにサーバーを作成する必要があります。

しかし、要塞を使用するとパブリックなネットワークに踏台用のサーバーを作成せず、データベースへ直接アクセスできます。要塞は踏台サーバーと似た役割を果たしますが、プライベートネットワークへアクセスする手段として、踏台サーバーよりも多くのメリットがあります。

踏台サーバーと比較した要塞のメリット

踏台サーバーと比較した場合、要塞には以下4つのメリットがあります。

指定時間のみ有効なワンタイムセッションを使用して接続を行う

要塞の作成後、接続に使用するワンタイムセッションを作成し、そのセッションを使用してプライベートネットワーク内のリソースにアクセスします。ワンタイムセッションは最大3時間までを有効な時間として指定して、セッションを作成できます。

万が一、ログインに必要なセッション情報やSSHキーが盗まれたとしても、指定時間を超えた後はセッションが切れてしまうため、踏台サーバーよりもセキュアに使用できます。

接続元のネットワークを制限可能

要塞への接続を許可するネットワークを指定できます。セキュリティ・リストやネットワーク・セキュリティ・グループを使わず要塞に設定するので、既存のセキュリティ・リストやネットワーク・セキュリティ・グループに影響を及ぼすことなく、個別に定義できます。

接続先が固定される

踏台サーバーの場合、設定によっては複数のサーバーへの接続が可能になります。そのため、踏台サーバーから予定していなかったサーバーへアクセスしてしまい、誤って違うサーバーで作業を行ってしまうリスクがあります。

要塞はセッションを作成する際に接続先のサーバーを直接指定するため、誤ったサーバーへ接続するリスクがありません。

利用料金が無料

踏台サーバーを使用する場合、そのサーバーの起動中は利用料金がかかってしまいます。要塞は利用料が無料のため、プライベートネットワークに接続する目的であれば、踏台サーバーを作成するよりコストを抑えられます。

要塞の作成

今回は、以下の構成における要塞の作成手順、接続方法についてご紹介していきます。

要塞を除くネットワーク周りや接続先のリソースは事前に作成済みとします。また、要塞への接続は自身のPCから接続するものとします。

作成する要塞の構成例
接続種別 リソース セッション・タイプ
①コンピュートVM(Linux)への接続
(管理対象SSHセッション)
コンピュートVM(Linux) 管理対象SSHセッション
②コンピュートVM(Linux)への接続
(SSHポート転送セッション)
コンピュートVM(Linux) SSHポート転送セッション
③コンピュートVM(Windows)への接続 コンピュートVM(Windows) SSHポート転送セッション
④BaseDBへの接続(OSへの接続) BaseDB SSHポート転送セッション
⑤BaseDBへの接続(DBへの接続) BaseDB SSHポート転送セッション
⑥Autonomous DBへの接続 Autonomous DB SSHポート転送セッション
①コンピュートVM(Linux)への接続
(管理対象SSHセッション)
リソース コンピュートVM(Linux)
セッション・タイプ 管理対象SSHセッション
②コンピュートVM(Linux)への接続
(SSHポート転送セッション)
リソース コンピュートVM(Linux)
セッション・タイプ SSHポート転送セッション
③コンピュートVM(Windows)への接続
リソース コンピュートVM(Windows)
セッション・タイプ SSHポート転送セッション
④BaseDBへの接続(OSへの接続)
リソース BaseDB
セッション・タイプ SSHポート転送セッション
⑤BaseDBへの接続(DBへの接続)
リソース BaseDB
セッション・タイプ SSHポート転送セッション
⑥Autonomous DBへの接続
リソース Autonomous DB
セッション・タイプ SSHポート転送セッション

要塞の作成

今回は、接続先のリソースがすべて同じサブネットに存在するため1つだけ要塞を作成します。

※ 大規模なネットワークを小さく分割したネットワーク。

要塞の作成画面に遷移

OCIコンソールにログインし、「アイデンティティとセキュリティ」 -> 「要塞」を選択し、要塞の一覧ページに遷移します。遷移後、左下のコンパートメントの設定について要塞を作成したいコンパートメントにします。

要塞の情報を入力

「要塞の作成」ボタンをクリックすると、要塞の作成画面が表示されます。必要事項を入力したら「要塞の作成」ボタンをクリックし、要塞を作成します。

要塞名 要塞の名前、英数字で255文字以内、リージョン内で一意である必要がある
ターゲット仮想クラウド・ネットワーク 要塞を使って接続したいリソースが存在するVCN、または接続したいリソースが存在するサブネットと疎通できるVCNを指定
ターゲット・サブネット 要塞を使って接続したいリソースが存在するサブネット、または接続したいリソースが存在するサブネットと疎通できるサブネットを指定
CIDRブロック許可リスト 要塞への接続を許可するCIDRブロックを指定
最大セッション存続時間(TTL) 要塞で作成可能なセッション時間を指定、最大3時間まで指定可能
要塞の作成画面

作成した要塞の状態が「Active」となっていれば作成完了です。

要塞の作成が完了したら、作成した要塞名をクリックし要塞の詳細ページに移動します。

作成した要塞の詳細説明画面

セキュリティ・リストまたはネットワーク・セキュリティ・グループの更新

要塞の詳細ページに作成した、要塞が使用するプライベート・エンドポイントIPアドレスが記載されているため、このIPアドレスが接続先のリソースに接続できるよう、セキュリティ・リストまたはネットワーク・セキュリティ・グループのイングレス・ルールを更新します。

今回はセキュリティ・リスト、ネットワーク・セキュリティ・グループの更新方法については割愛します。

セッションの作成

要塞から接続先のリソースへ接続するネットワークの設定が終わったら、いよいよ接続用のセッションを作成し、要塞経由でリソースに接続していきます。どの接続方法においても大まかな接続方法は同じで、セッションを作成しSSHコマンドを準備、SSHコマンドを実行したあと接続します。

セッションは3種類あり、接続先のリソースのタイプによって使用するセッションの種類を決めます。今回は主に利用される「管理対象SSHセッション」と「SSHポート転送セッション」について紹介します。

管理対象SSHセッション

以下のすべての要件を満たすコンピュート・インスタンスに、SSHアクセスできるセッションです。

  • コンピュート・インスタンスのイメージがLinuxである
  • インスタンスでOpenSSHサーバーが実行されている
  • インスタンスでOracle Cloud Agentが実行されている
  • Oracle Cloud Agentで要塞プラグインが有効化されている

Oracle Cloud Agentは、主にオラクル社が提供するイメージから作成されたコンピュート・インスタンスではデフォルトで有効になっています。要塞プラグインはデフォルトでは無効となっているため、セッションを作成する前に有効にする必要があります。

SSHポート転送セッション

管理対象SSHセッションとは異なり、接続先リソースでOpenSSHサーバーやOracle Cloud Agentを実行する必要はありません。

ポート転送はリモート・デスクトップ・プロトコル(RDP)やOracle Net Servicesなど、ほとんどのTCPサービスおよびプロトコルに対応しているため、Autonomous Databaseのプライベート・エンドポイントなどに接続できます。接続はSSHを使用して暗号化されるため、ポート転送は暗号化されていないプロトコルを使用する情報の転送にも便利です。

それでは各接続方法の細かい手順について説明していきます。

コンピュートVM(Linux)への接続(管理対象SSHセッション)

セッションの作成

セッションの作成画面において必要事項を入力し、「セッションの作成」ボタンをクリックします。

セッション・タイプ 管理対象SSHセッション
セッション名 任意のセッション名
ユーザー名 ターゲット・ホストのログインに使用するユーザー名を指定
コンピュート・インスタンス 要塞プラグインが有効なインスタンスを選択可能、要塞プラグインが無効なインスタンスに接続する場合は未選択で構わない
SSHキーの追加 持っているSSHキーをアップロードするか、SSHキー・ペアを作成
最大セッション存続時間 要塞の作成時に指定した「最大セッション存続時間」以下の時間を指定可能
ターゲット・コンピュート・
インスタンスのポート
接続する際に使用するポート番号を指定、SSH接続のため22を入力
ターゲット・コンピュート・
インスタンスのIPアドレス
「コンピュート・インスタンス」でインスタンスを選択している場合は指定不要、インスタンスを選択していない場合は接続先のインスタンスのIPアドレスを入力
セッションの作成画面

SSHコマンドの準備

作成したセッションの状態が「Active」となったら、右の三点リーダーメニューをクリックします。「SSHコマンドのコピー」をクリックし、コマンドをコピーします。コピーしたコマンドはテキストエディタなどに貼り付けて編集します。

コピーしたコマンドの例

ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaaw6ezxmyazrk7ypbo25utgjcwejyrb3sjti6fbf4li7bmye2zngaa@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.9.205
<privateKey> セッション作成時に指定したSSHキーの秘密鍵の名前に変更します。ここで秘密鍵の名前をファイル名だけにしておくと、秘密鍵を置いているフォルダでコマンドを実行しなければならなくなるため、秘密鍵の名前は絶対パスで記載することをお勧めします。

SSHコマンドの実行

自身のPCでコマンドプロンプトを起動し、上記で準備したコマンドを実行します。

実行するコマンドの例

ssh -i C:¥Users¥user1¥Downloads¥ssh-key.key -o ProxyCommand="ssh -i C:¥Users\user1¥Downloads\ssh-key.key -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaaw6ezxmyazrk7ypbo25utgjcwejyrb3sjti6fbf4li7bmye2zngaa@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.9.205

接続

初めて接続する場合は、サーバーへ接続して良いか聞かれるため「yes」と入力します。その後、プライベート・サブネット上にあるインスタンスへの接続が完了します。

C:¥Users¥user1>ssh -i C:¥Users¥user1¥Downloads¥ssh-key.key -o ProxyCommand="ssh -i
C:¥Users¥user1¥Downloads¥ssh-key.key -W %h:%p -p 22
ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaaw6ezxmyazrk7ypbo25utgjcwejyrb3sjti6fbf4li7bmye2zngaa@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.9.205
The authenticity of host '10.0.9.205 (<no hostip for proxy command>)' can't be established.
ED25519 key fingerprint is SHA256:/izy/kbIKW2eWxJsybS1VNX/6jLb/b954MZzmxGMqGk.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.9.205' (ED25519) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket
 
[opc@privatelinux ~]$

コンピュートVM(Linux)への接続(SSHポート転送セッション)

セッションの作成

セッションの作成画面において必要事項を入力し、「セッションの作成」ボタンをクリックします。

セッション・タイプ SSHポート転送セッション
セッション名 任意のセッション名
次を使用してターゲット・ホストに接続します IP addressまたはInstance nameを選択
IPアドレス ターゲット・ホストへの接続方法に「IP address」を選択した場合ターゲット・ホストのIPアドレスを入力
コンピュート・インスタンス ターゲット・ホストへの接続方法に「Instance name」を選択した場合接続先のインスタンスを選択、ただし選択肢にでてくるインスタンスは要塞プラグインが有効なインスタンスのみ
ポート 要塞から接続する際に使用するポート番号、SSH接続のため22を入力
SSHキーの追加 持っているSSHキーをアップロードするか、SSHキー・ペアを作成
最大セッション存続時間 要塞の作成時に指定した「最大セッション存続時間」以下の時間を指定可能
ターゲット・コンピュート・インスタンスのIPアドレス 「Instace name」でインスタンスを選択している場合は選択可能、選択しなくてもよい
ターゲット・ホストを「IP address」にした画面
ターゲット・ホストを「IP address」にした画面
ターゲット・ホストを「Instance name」にした画面
ターゲット・ホストを「Instance name」にした画面

SSHコマンドの準備

作成したセッションの状態が「Active」となったら右の三点リーダーメニューをクリックします。「SSHコマンドのコピー」をクリックし、コマンドをコピーします。コピーしたコマンドはテキストエディタなどに貼り付けて編集します。

コピーしたコマンドの例

ssh -i <privateKey> -N -L <localPort>:10.0.9.205:22 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaaw6ezxmyabyhdjo5f4hjly2wbvdva3z7z7nm5dmdgsb3czth6zeoq@host.bastion.ap-tokyo-1.oci.oraclecloud.com
<privateKey> SSHキーの秘密鍵の名前に変更します。ここで秘密鍵の名前をファイル名だけにしておくと、秘密鍵を置いているフォルダでコマンドを実行しなければならなくなるため、秘密鍵の名前は絶対パスで記載することをお勧めします。
<localPort> 任意のローカルポートを指定します。ただし、使用中のポートは使用できないため、事前に使用されていないポートであることを確認してください。例えばコマンドプロンプトを使用する場合、以下のコマンドを実行して結果のレコードがない場合は使用されていないことが確認できます。

コマンドプロンプトにおけるポートの使用状況の確認例

netstat -nao | findstr <使用したいポート番号>

SSHポート転送セッションの場合、コピーしたSSHコマンドのままでは詳細が表示されないため、秘密鍵の後ろに「-v」をつけてください。

SSHコマンドの実行

自身のPCでコマンドプロンプトを起動し、上記で準備したコマンドを実行します。

実行するコマンドの例

ssh -i C:¥Users¥user1¥Downloads¥ssh-key.key -v -N -L 12344:10.0.9.205:22 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaaw6ezxmyabyhdjo5f4hjly2wbvdva3z7z7nm5dmdgsb3czth6zeoq@host.bastion.ap-tokyo-1.oci.oraclecloud.com

接続

コマンドに問題がなければ「debug1: pledge: network」と表示され出力が止まります。要塞へ接続する間はこの画面を閉じないでください。

C:¥Users¥user1>ssh -i C:¥Users¥user1¥Downloads¥ssh-key.key -v -N -L 12344:10.0.9.205:22 -p 22
ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaaw6ezxmyabyhdjo5f4hjly2wbvdva3z7z7nm5dmdgsb3czth6zeoq@host.bastion.ap-tokyo-1.oci.oraclecloud.com
OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3
debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
debug1: Connecting to host.bastion.ap-tokyo-1.oci.oraclecloud.com [192.29.38.223] port 22.
debug1: Connection established.
~中略~
debug1: pledge: network

今回はTera Termを使った接続方法をご紹介します。他のターミナルソフトを使用される方は適宜読み替えてください。

Tera Termを起動したらホスト名に「localhost」、TCPポートにSSHコマンドで指定したポート番号を入力し、「OK」をクリックします。

Tera Termの接続情報の設定画面

この後は接続したいインスタンスの情報となります。

ユーザー名に「opc」と入力し、インスタンスを作成する際に使用した秘密鍵を指定したら「OK」をクリックします。

SSH認証画面

ログイン情報に問題がなければインスタンスへの接続が完了します。

インスタンスへの接続を確認

コンピュートVM(Windows)への接続(SSHポート転送セッション)

セッションの作成

指定するポート番号以外は、LinuxのSSHポートセッション用のセッション作成と同じです。Windowsの場合はリモートデスクトップ接続となりますのでポート番号には3389を指定してください。

SSHコマンドの準備

コンピュートVM(Linux)への接続(SSHポート転送セッション)」と同じです。

SSHコマンドの実行

コンピュートVM(Linux)への接続(SSHポート転送セッション)」と同じです。

接続

コマンドプロンプトでSSHコマンドを実行するところまではLinuxと同じ手順です。

SSHコマンドを実行した画面を用意したら、リモートデスクトップ接続の画面を開きます。コンピューターには「localhost:<SSHコマンドで指定したポート番号>」、ユーザー名には「opc」と入力し接続します。

リモートデスクトップ接続でログオン設定を入力

ログイン画面が出てきますのでopcユーザーのパスワードを入力すると接続が完了します。

リモートデスクトップ接続のログイン画面
リモートデスクトップ接続のデスクトップ画面

BaseDBへの接続

今回は、SQL Developerを使ったBaseDBへの接続手順について説明します。

BaseDBのOSへの接続はLinuxのSSHポート転送セッションと同じなので、手順はコンピュートVM(Linux)への接続(SSHポート転送セッション)を参照してください。

BaseDBは要塞プラグインがないため、ターゲット・ホストはIP addressで指定する必要があることだけ注意が必要です。

セッションの作成

指定するポート番号以外はLinuxのSSHポートセッション用のセッション作成と同じです。DBへはリスナーを使用して接続するので、ポート番号にはリスナーのポート番号を指定してください。例えば、デフォルト・リスナーを使用する場合は1521となります。

SSHコマンドの準備

コンピュートVM(Linux)への接続(SSHポート転送セッション)」と同じです。

SSHコマンドの実行

コンピュートVM(Linux)への接続(SSHポート転送セッション)」と同じです。

接続

コマンドプロンプトでSSHコマンドを実行するところまではLinuxと同じ手順です。

今回はSQL Developerを使用して接続する例を紹介しますのでSQL Developerを起動します。「データベース接続の作成/選択」画面において以下の情報を入力し、「接続」をクリックします。

Name 任意の名前
ユーザー名 接続するデータベースのユーザー名
パスワード ユーザーのパスワード
ホスト名 localhost
ポート SSHコマンドで指定したポート番号
サービス名 <接続するBaseDBの一意のデータベース名>.<ホスト・ドメイン名>
SQL Developerのデータベース接続の作成/選択画面

接続が完了するとワークシートが表示されます。

SQL Developerのワークシート

Autonomous DBへの接続

セッションの作成

指定するポート番号以外は、LinuxのSSHポートセッション用のセッション作成と同じです。

DBへはリスナーを使用して接続するので、ポート番号には1521または1522を指定してください。

SSHコマンドの準備

コンピュートVM(Linux)への接続(SSHポート転送セッション)」と同じです。

SSHコマンドの実行

コンピュートVM(Linux)への接続(SSHポート転送セッション)」と同じです。

接続

コマンドプロンプトでSSHコマンドを実行するところまではLinuxと同じ手順です。

Autonomous DBの詳細画面から、「データベース接続」 -> 「接続文字列」を確認します。TLS認証で「TLS」を選択すると、TNS名と接続文字列の一覧が表示されるため、任意の接続文字列をコピーします。

Autonomous DBのデータベース接続画面

コピーした接続文字列の例

(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=o64bizwg.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=g27707f62b9aca4_adb_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=no)))

このうち以下の内容を修正します。

(port=1521) (port=<SSHコマンドで指定したポート番号>)
(host=<プライベート・エンドポイントURL>) (host=localhost)

修正した接続文字列の例

(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=12344)(host=localhost))(connect_data=(service_name=g27707f62b9aca4_adb_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=no)))

こちらもBase DB同様、SQL Developerを使用して接続する例を紹介しますので、SQL Developerを起動します。

「データベース接続の作成/選択」画面において以下の情報を入力し、「接続」をクリックします。

Name 任意の名前
ユーザー名 接続するデータベースのユーザー名
パスワード ユーザーのパスワード
接続タイプ カスタムJDBC
カスタムJDBC URL jdbc:oracle:thin:@<上記で作成した接続文字列>
SQL Developerのデータベース接続の作成/選択画面

接続が完了するとワークシートが表示されます。

SQL Developerのワークシート

要塞の作成に失敗する例

要塞を作成するにあたりいくつか注意点があります。私が要塞を作成したとき、実際に起きたエラーをもとに紹介していきます。

要塞の名前がリージョン内で重複している

要塞の名前はリージョン内で一意である必要があります。心当たりがなく作成時にエラーが出た場合は、別のコンパートメントで既に使われている可能性があるので、名前を変更してリトライしてみてください。

こちらは作成ボタンを押した際にエラーメッセージが出るため分かりやすいと思います。

要塞の作成数の上限に達している

要塞サービスはデフォルトでは各リージョン最大5つまで作成できます。そのため、6つ目を作成しようとすると作成ボタンを押した際にエラーメッセージが出ます。

不要な要塞を削除するか、5つでは足りない場合は「制限の引上げのリクエスト」から上限を上げることも可能です。上限を上げる場合は、リクエストを出してから少し時間がかかるため、余裕をもってリクエストを出すようにしてください。

サブネットに払い出せるIPアドレスが存在しない

要塞を作成する際、要塞で接続する先のプライベート・サブネットに、要塞用のIPアドレスが2つ割り振られます。そのため、接続する先のプライベート・サブネットにおいて、すべてのIPアドレスが払い出されていると作成に失敗します。その場合は、リソースを削除して既に払い出されている不要なIPアドレスを開放するか、対象のプライベート・サブネットの範囲を広げ払い出せるIPアドレスを増やしてください。

こちらは作成ボタンを押してしばらく経ってから要塞の作成に失敗します。エラーメッセージが出力されないので気づきにくいですが、要塞の作成に失敗した際は払い出せるIPアドレスが残っていないか確認してみてください。

おわりに

予算と時間をかければ、セキュアなシステムを構築することは難しくないかもしれません。しかし、実際は限られたコストの中で構築しなくてはいけない場面が多くあると思います。

OCIは今回ご紹介した要塞のように、セキュアなシステムを作るために必要な機能が無料で多く提供されています。ぜひ今回紹介した要塞を始めとする、OCIのセキュリティ機能を使ったセキュアなシステム構築を試してみてください。

ラックでは、お客様のシステム環境の課題に合わせた、OCI、AWS、Azure、Google Cloudのご提案をしています。マルチクラウドやハイブリッドクラウドも含めたシステム構成に関するお悩みがございましたら、ぜひお気軽にお問い合わせください。

「クラウドインテグレーション」に関するお問い合わせ

この記事は役に立ちましたか?

はい いいえ

関連記事

LAC WATCH

関連記事をご紹介します

  • DBSATを使ってOCI Oracle ベース・データベースのセキュリティを診断してみよう!

  • AzureとOCIをマルチクラウドで使いたい!簡単設定・構築ガイド

  • 頭を悩ませるOracle Databaseのコスト課題、ラックが考える3つの対応策