はじめに
OCIでは、セキュリティを考慮し、ComputeインスタンスをPrivate Subnetへ配置する構成が一般的です。
Private Subnet内のインスタンスへ接続する方法としては、Public Subnetへ踏み台サーバーを配置する構成が広く利用されています。
一方で、OCIではマネージドサービスであるOCI Bastionも提供されており、接続用のComputeインスタンスを構築することなく、Private Subnet内のリソースへアクセスできます。
本記事では、OCI Bastionの概要と各セッションタイプの違いを紹介したうえで、管理対象SSHセッションおよびポート転送セッションを利用した接続方法を確認します。
OCI Bastionとは
OCI Bastionは、Private Subnet内のComputeインスタンスへSSHやRDPで安全に接続するためのマネージドサービスです。
Private Subnetへ配置されたインスタンスはインターネットから直接アクセスできないため、運用・保守を行うための接続経路を用意する必要があります。
接続方法としては、Public Subnetへ踏み台サーバーを配置する方法と、OCI Bastionを利用する方法があります。
OCI Bastionを利用する場合は、接続用のComputeインスタンスを別途構築・管理する必要がなく、有効期限付きのセッションを作成してPrivate Subnet内のリソースへ接続できます。
セッションタイプの違い
OCI Bastionでは、用途に応じて複数のセッションタイプを利用できます。
本記事で利用する「管理対象SSHセッション」と「ポート転送セッション」の違いは以下のとおりです。
| 項目 | 管理対象SSHセッション | ポート転送セッション |
|---|---|---|
| LinuxへのSSH接続 | ○(OCI Agent経由) | ○ |
| Windows(RDP)接続 | × | ○ |
| データベース接続 | × | ○ |
| OCI Agent(Bastionプラグイン) | 必須 | 不要 |
| 用途 | LinuxへのSSH接続 | 任意のTCP通信(RDP・DB・SSHトンネル等) |
LinuxインスタンスへSSH接続する場合は、OCI Agent(Bastionプラグイン)を利用して接続できる「管理対象SSHセッション」を利用するのが一般的です。
一方、WindowsインスタンスへのRDP接続やデータベース接続、またはOCI Agent(Bastionプラグイン)を利用できない環境では、任意のTCP通信に対応した「ポート転送セッション」を利用します。
注意事項
本記事ではIAMポリシーの作成手順は割愛しています。OCI Bastionを利用するには、Bastionおよび関連リソースを操作するためのIAMポリシーを事前に設定する必要があります。
また、管理対象SSHセッションを利用する場合はOCI Agent(Bastionプラグイン)を有効化しておく必要があります。本記事では後ほど設定方法を紹介します。
なお、OCI Bastionにはリージョンごとのサービス制限があります。詳細はOracleの公式ドキュメントをご参照ください。
参考1:https://docs.oracle.com/ja-jp/iaas/Content/Bastion/Tasks/managingbastions.htm#managingbastions_topic-Required_IAM_Policy
参考2:https://docs.oracle.com/ja-jp/iaas/Content/General/service-limits/default.htm#Bastion_Limits
前提条件
本検証を実施するにあたり、事前に以下の環境および設定を準備しています。
- VCNおよびPrivate Subnet作成済み
- Service Gatewayおよびルート表設定済み
- 接続対象となるComputeインスタンス(Linux/Windows)、BaseDB作成済み
- Security ListまたはNSGによる必要な通信許可設定済み
設定方法
OCI Bastion(要塞)作成
OCIコンソール上で「アイデンティティとセキュリティ」→「要塞」へ移動し、要塞を作成します。

- ネットワーキングの構成:対象インスタンスがあるVCNとサブネットを選択します
- CIDRブロックの許可リスト:本記事ではCIDRブロックの許可リストを「0.0.0.0/0」に設定していますが、実際の運用では接続元(クライアント)のIPアドレス範囲のみに制限することを推奨します
詳細画面で「プライベート・エンドポイントIPアドレス」を確認します。

Private Subnet内のリソースへ接続するため、Bastionのプライベート・エンドポイントIPアドレスから、接続先で使用するポートへの通信をSecurity ListまたはNSGで許可します。
- LinuxインスタンスへのSSH接続:22
- WindowsインスタンスへのRDP接続:3389
- Base DatabaseへのSQL*Net接続:1521
管理対象SSHでLinuxインスタンスに接続
対象のLinuxインスタンス詳細画面から「管理」へ移動します。
「Oracle Cloudエージェント」で「要塞」プラグインを有効化します。

※ ステータスが「実行中」になるまで5分ぐらいかかります
Bastionの詳細画面から「セッション」→「セッションの作成」をクリックします。


- セッション・タイプ:「管理対象SSHセッション」を選択します
- SSHキー:公開鍵をアップロードするか、新しくSSHキー・ペアを生成します
- セッション接続用として利用する公開鍵を指定します
接続元クライアントで、コピーしたSSHコマンドを実行します。
コマンド例:
|
1 |
ssh -i <instancePrivateKey> -o ProxyCommand="ssh -i <sessionPrivateKey> -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaazif6lvyakjdtahgbwiwboghmja7mahg7n6qjrjkdg3rqr5fkphia@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.2.2 |
- <instancePrivateKey>に接続先インスタンスに登録されている公開鍵に対応する秘密鍵を指定します
- <sessionPrivateKey>にセッション作成時に指定した公開鍵に対応する秘密鍵を指定します
- 対象インスタンスへ接続できることを確認します
ポート転送セッションでLinuxインスタンスに接続
Bastionの詳細画面から「セッション」→「セッションの作成」をクリックします。
必要な項目を入力し、「作成」をクリックします。

- セッション・タイプ:「SSHポート転送セッション」を選択します
- ポート:22を入力します
- SSHキー:公開鍵をアップロードするか、新しくSSHキー・ペアを生成します
- セッション接続用として利用する公開鍵を指定します
接続元クライアントで、コピーしたSSHコマンドを実行します。
コマンド例:
|
1 |
ssh -i <sessionPrivateKey> -N -L <localPort>:10.0.2.2:22 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaazif6lvyawz4djfrfca4dskwsjkkessfuwagmbiixvvxohk3cxn4a@host.bastion.ap-tokyo-1.oci.oraclecloud.com |
- <sessionPrivateKey>にセッション作成時に指定した公開鍵に対応する秘密鍵を指定します
- <localPort>に22を入力します
- 本コマンドはSSH接続を行うものではなく、ローカルPCと対象インスタンス間にSSHトンネルを作成します
- コマンド実行後は何も表示されませんが、正常な動作です。SSHトンネルが維持されているため、このターミナルは閉じずにそのまま開いた状態にします
別のターミナルを開き、ローカルポートを指定してSSH接続します。
コマンド例:
|
1 |
ssh -i <instancePrivateKey> <userName>@localhost -p <localPort> |
- <instancePrivateKey>に接続先インスタンスに登録されている公開鍵に対応する秘密鍵を指定します
- <userName>にログインするユーザー名を入力します
- <localPort>に22を入力します
- 対象インスタンスへ接続できることを確認します
ポート転送セッションでWindowsインスタンスに接続
Bastionの詳細画面から「セッション」→「セッションの作成」をクリックします。
必要な項目を入力し、「作成」をクリックします。

- セッション・タイプ:「SSHポート転送セッション」を選択します
- ポート:3389を入力します
- SSHキー:公開鍵をアップロードするか、新しくSSHキー・ペアを生成します
- セッション接続用として利用する公開鍵を指定します
接続元クライアントで、コピーしたSSHコマンドを実行します。
コマンド例:
|
1 |
ssh -i <sessionPrivateKey> -N -L <localPort>:10.0.2.2:3389 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaazif6lvyafy5rtdlsywafyceupfcu4plhc735zrbrt34mjhlm74cq@host.bastion.ap-tokyo-1.oci.oraclecloud.com |
- <sessionPrivateKey>にセッション作成時に指定した公開鍵に対応する秘密鍵を指定します
- <localPort>に13389を入力します
- 本コマンドは、ローカルPCと対象Windowsインスタンス間にRDP接続用のSSHトンネルを作成します
- コマンド実行後は何も表示されませんが、正常な動作です。SSHトンネルが維持されているため、このターミナルは閉じずにそのまま開いた状態にします
リモートデスクトップ接続(mstsc)を起動し、localhost:


- 対象インスタンスへ接続できることを確認します
ポート転送セッションでBase Databaseに接続
対象Base Databasの詳細画面に移動します。
「データベース」タブから「DB接続の表示」をクリックします。

- 「~1521/」の後ろにある文字列が接続先データベースのサービス名です
Bastionの詳細画面から「セッション」→「セッションの作成」をクリックします。
必要な項目を入力し、「作成」をクリックします。

- セッション・タイプ:「SSHポート転送セッション」を選択します
- IPアドレス:接続先baseDBのIPアドレスを入力します
- ポート:1521を入力します
- SSHキー:公開鍵をアップロードするか、新しくSSHキー・ペアを生成します
- 生成した鍵、または既存の鍵のどちらでも利用できます
接続元クライアントで、コピーしたSSHコマンドを実行します。
コマンド例:
|
1 |
ssh -i <sessionPrivateKey> -N -L <localPort>:10.0.2.6:1521 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaazif6lvyagagmqyg7wpafdxlahjul7ciumr5fx2sunth4xlqbgwra@host.bastion.ap-tokyo-1.oci.oraclecloud.com |
- <sessionPrivateKey>にセッション作成時に指定した公開鍵に対応する秘密鍵を指定します
- <localPort>に1521を入力します
- 本コマンドは、ローカルPCとBase Databaseインスタンス間のSSHトンネルを作成します
- コマンド実行後は何も表示されませんが、正常な動作です。SSHトンネルが維持されているため、このターミナルは閉じずにそのまま開いた状態にします
別のターミナルを開き、ローカルポートを指定してSQL*Plusでデータベースへ接続します。
コマンド例:
|
1 |
sqlplus <userName>/<password>@localhost:<localPort>/<serviceName> |
- <userName>にユーザー名を入力します
- <password>に接続ユーザーのパスワードを入力します
- <localPort>に1521を入力します
- <serviceName>に接続先データベースのサービス名を入力します
- データベースへ接続できることを確認します
まとめ
本記事では、OCI Bastionの概要と各セッションタイプの違い、および接続方法について紹介しました。
管理対象SSHセッションはLinuxインスタンスへのSSH接続に適しており、ポート転送セッションはWindows(RDP)やBase Databaseなど、さまざまなTCP通信に利用できます。
それぞれ利用できる接続先や用途が異なるため、特徴を理解したうえで適切に使い分けることが重要です。
本記事がOCI Bastionを利用したPrivate Subnet環境の運用・保守を行う際の参考になれば幸いです。
















