OCI Bastionサービスでプライベートサブネット内のComputeインスタンス (VM) に接続する方法

OCI Core Services

初めに

プライベートサブネットに配置されているOCI Computeインスタンスに接続する方法はいくつかあります。インターネット経由で接続する場合は、一般的にパブリックサブネットに設置した踏み台サーバーを経由します。

一方、OCI Bastion サービスを利用すれば、踏み台サーバーを構築や管理を行わずに、直接プライベートサブネット内のComputeインスタンスへ接続することができます。

メリット:
✅ 踏み台サーバを立てる必要がないため、コストを節約できる。
✅ SSHトンネルで通信するので、セキュアな接続を確保できる。
✅ OCI Bastion自体は無料で利用できる。
✅ 設定方法は比較的やりやすい。

Connect OCI Compute instance via OCI Bastion service

Bastionサービスを経由する方法以外にも、さまざまな手段があります。詳細については、次の記事をご参照ください。
プライベートサブネット内の OCI Compute (VM) に接続する方法まとめ

では、OCI Bastion を介してプライベートな Windows/Linux インスタンス(VM) に接続する方法を紹介したいと思います。

1. 事前準備

1-1. 関連する OCI リソースの作成

タイプ項目コメント
VCNCIDR10.0.0.0/16
Private SubnetCIDR10.0.1.0/24接続先サーバ
サービスGW (※1)
ルート表ルールターゲット: サービスGW
宛先: All Services in Oracle Services Network
ターゲットVMのサブネットに紐づける (※1)
Security ListEgress0.0.0.0/0, 全てのプロトコル同上 (※1)
Compute (VM)OSOracle Linux 9プライベート IP: 10.0.1.8
OSWindows サーバ 2022プライベート IP: 10.0.1.138

※1、管理対象SSHセッションを指定する場合、作成必要。

1-2. OpenSSH のインストール

OCI Bastionサービスの本質はSSHトンネルです。クライアント側からSSHトンネルを経由して接続先サーバにアクセスするため、事前にSSHソフトのインストールが必要です。

この例ではOpenSSHを使用します。まだインストールされていない場合は、PowerShellを起動し、以下のコマンドでインストールしてください(管理者ユーザで実行)。

コマンド:Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

PS C:\windows\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'


Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent



PS C:\windows\system32>

2. Bastionの作成

Identity & Security → Bastion → Create Bastion
Bastion名を入力し、ターゲットVCNとサブネットを選択してから、CIDRブロック許可リストを入力します。
Create OCI Bastion

注意
1. このテストでは、CIDRブロックの許可リストを「0.0.0.0/0」に設定しています。運用時には範囲を絞り込むことが推奨されます。例えば、接続元(クライアント)のIPアドレス範囲のみを許可するのが良いでしょう。
2. OCI Bastionを作成する際には、ターゲットのVCNとサブネットを指定する必要がありますが、Bastion自体に対し、配置場所を指定する必要はありません(誤解されることがよくあります)。

Bastionがアクティブの状態になると、「プライベート・エンドポイントIP」は次の画面から確認できます。このIPはターゲット・サブネット内で自動的に割り当てられます。次のステップで、このIPをセキュリティ・リストの入力ルールに追加します。「CIDRブロック許可リスト」を編集したい場合は、「編集」ボタンをクリックすれば大丈夫です。

Check private endpoint IP address

3. セキュリティ・リストに入力ルールを追加

プライベート・サブネット内のインスタンスにアクセスするため、TCPポート(3389, 22)を入力ルールに追加するのは必要です。設定方法は、以下のどちらでもよいです:

  • プライベート・サブネットに紐づけられるセキュリティ・リストに、ルールを追加
  • Computeインスタンスに紐づけられるNSGに、ルールを追加

セキュリティ・リストを例にして設定します。
Add Ingress Rules

"Source CIDR"は、Bastionの「プライベート・エンドポイントIP」です(STEP-2の Bastionの詳細情報画面に表示されます)。

追加後
ポート 3389: Remote Desktop Protocol (Windows VM 接続用)
ポート 22: SSH (Linux VM 接続用)
Check added Ingress Rules

4. Linux VMに接続する

Windows VMに接続する場合、このステップを飛ばして、次のステップを実施してください。

4-1. セッションの選択

セッション・タイプは、以下の2種類があります:

  • 管理対象SSHセッション (Managed SSH session)
  • ポート転送セッション (SSH port forwarding session)

セッション・タイプの差異比較

タイプ前提条件対応OSリソース・タイプ備考
管理対象SSHセッション1.Bastionプラグインは有効化(Enabled)されている、かつ稼働中(Running)になっている。
2.サービスGWが作成され、ルート表に追加済。
LinuxComputeセッションを立てる時点、ターゲットVMに接続できる。
ポート転送セッションBastionプラグインとサービスGWは不要Linux/WindowsCompute, Oracle Base DB, Autonomous AI DB, MySQL DB, OACSSHトンネルを立てた後、SSH/RDPで接続

※、Bastionラグインの状態は、インスタンスの詳細画面(Oracle Cloud Agentタブ)から確認できます。Oracle Linuxインスタンスを作成した直後、Bastionラグインの状態は"Disabled"となっています。管理対象SSHセッションを選択する場合、Bastionセッションを作成する前、次のBastionラグインを有効化にする必要があります。

Enable bastion plugin

4-2. 管理対象SSHセッションで接続

Bastion → Sessions → Create session

項目内容
セッション・タイプ"Managed SSH session"を選択
ユーザー名opc
Computeインスタンス対象コンパートメントの下から選択する
SSHキー既存のキーファイルを利用するか、新しいキーペアを作成する。
(秘密キーをクライアント側に保存してください)
Create managed SSH session (Linux)

セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。
Copy SSH command

SSHセッションの作成
接続元のクライアントでコピーしたコマンドを実行してセッションを作成します。

コマンド

ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 <OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@<Private_IP_of_Target_VM>

※、<privateKey>を秘密キーのパスとファイル名に置き換えます。

PowerShellでの接続例:

PS C:\users\opc> ssh -i $home\.ssh\id_rsa -o ProxyCommand="ssh -i $home\.ssh\id_rsa -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaakv6tzsaagj47utdtn5vqisr5bvin7yz3f5livaqjzi2e2k3oos6a@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.1.15
The authenticity of host '10.0.1.15 (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:<fingerprint>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.1.15' (ECDSA) to the list of known hosts.
[opc@linux9-private ~]$

4-3. ポート転送セッションで接続

Bastion → Sessions → Create session

項目内容
セッション・タイプ"SSH port forwarding session"を選択
ターゲット・ホストに接続する方法"IPアドレス"を選択 (デフォルト)
IPアドレス接続先VMのプライベートIP
ポート22
SSHキー既存のキーファイルを利用するか、新しいキーペアを作成する。(秘密キーをクライアント側に保存してください)
Create SSH port forwarding session

セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。
Copy SSH command

SSHトンネルの作成
接続元のクライアントでSSHコマンドを実行してトンネルを作成します。

コマンド

ssh -i <privateKey> -N -L <localPort>:<Private_IP_of_VM>:22 -p 22 <OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com
  • <privateKey>を秘密キーのパスとファイル名に置き換えます。
    Windowsの例(PowerShell):$home\.ssh\id_rsa
  • <localPort>22に置き換えます。
  • <Private_IP_of_VM>は自動に実のIPが埋められるので、変更する必要はありません。
PS C:\Users\opc> ssh -i $home\.ssh\id_rsa -N -L 22:10.0.1.8:22 -p 22 <OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com
The authenticity of host 'host.bastion.ap-tokyo-1.oci.oraclecloud.com (192.29.38.223)' can't be established.
RSA key fingerprint is SHA256:<fingerprint>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'host.bastion.ap-tokyo-1.oci.oraclecloud.com,192.29.38.223' (RSA) to the list of known hosts.

SSHトンネルができたら、セッションが保留されますので、リターンキーが戻りません。強制終了をしたい時、CTRL+Cを押してください。

SSHでログイン
もう一個PowerShell画面を起動して、次のコマンドでログインします。

コマンドssh -i <private_key> localhost -l <username>

例:ssh -i $home\.ssh\id_rsa localhost -l opc

PS C:\Users\opc> ssh -i $home\.ssh\id_rsa localhost -l opc
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:<fingerprint>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
[opc@linux9 ~]$

5. Windows VMに接続する

Windows VMの場合、"Managed SSH session"は適用できないのでご注意ください。

5-1. セッションの作成

Bastion → Sessions → Create session

項目内容
セッション・タイプ"SSH port forwarding session"を選択
ターゲット・ホストに接続する方法"IPアドレス"を選択 (デフォルト)
IPアドレス接続先VMのプライベートIP
ポート3389
SSHキー既存のキーファイルを利用するか、新しいキーペアを作成する。(秘密キーをクライアント側に保存してください)

Create managed SSH session (Windows)

セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。
Copy SSH command
デフォルトでは、セッションは3時間有効です。Bastionを作成する時に変更できます。

5-2. SSHトンネルの作成

接続元のクライアントでSSHコマンドを実行してトンネルを作成します。

SSHトンネルを作成するコマンド

ssh -i <privateKey> -N -L <localPort>:<Private_IP_of_VM>:3389 -p 22 OCID_of_Bastionsession@host.bastion.ap-tokyo-1.oci.oraclecloud.com
  • <privateKey>を秘密キーのパスとファイル名に置き換えます。
    Windowsの例(PowerShell):$home\.ssh\id_rsa
  • <localPort>13389に置き換えます。(3389を区別するため)
  • <Private_IP_of_VM>は自動に実のIPが埋められるので、変更する必要はありません。
PS C:\Users\opc> ssh -i $home\.ssh\id_rsa -N -L 13389:10.0.1.138:3389 -p 22 <OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com

上記のようにフォア・グラウンドとして実施した場合、セッションが保留されますので、リターンキーが戻りません。強制終了をしたい時、CTRL+Cを押してください。

バック・グラウンドで実行させたい場合:
 Windows (PowerShell): Start-Job { }でコマンドを囲む
 Linux OS: コマンドの最後に&を追加
※、出力メッセージを表示しませんので、ご注意ください。初回トンネル作成時、或いはトラブル・シューティングの時、フォア・グラウンド・プロセスとして実施してください。

5-3. RDPでログイン

クライアントでリモート・デスクトップを起動し、localhost:13389を入力してから接続ボタンをクリックします。
Enter localhost

次のように、ログイン画面が表示されます。
RDP login

付録

トラブル・シューティング

接続が失敗した場合、以下のような原因は一般的です:

  • Computeインスタンスは、まだ起動していない。
  • 秘密キーの中身或いは置き場所は不正。(例:C:\Users\<Username>\.ssh\id_rsa
  • プライベート・サブネットのセキュリティ・リストに、TCP 223389を公開していない。
  • Bastionのプライベート・エンドポイントIPが、Ingressルールに追加されていない。
    対策:セキュリティ・リストまたはNSGを確認してください。
  • サービス・ゲートウェイがない、或いはルート表に追加されていない時、セッションを作成しようとしたら、次のエラーが発生した。(管理対象SSHセッションの場合のみ)
    Plugin Bastion not present for instance ocid_of_instance
  • SSHトンネルは未作成か、作成が失敗した。
  • トンネル作成失敗、或いはタイムアウトの時、次のメッセージが表示される。
    Connection to host.bastion.ap-tokyo-1.oci.oraclecloud.com closed by remote host.
  • Bastionのセッション期限が切れた(デフォルトは時間)。
    セッション期限が切れた後、SSHトンネルを作成しようとしたら、次のエラーが発生した。<OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com: Permission denied (publickey)
    対策:セッションの再作成は必要。

Bastionの制限

項目内容
最大Bastion数テナンシ毎に5つ
最大セッション数Bastionあたり20セッション
セッション存続時間30分~3時間
データ転送制限データ転送の制限はありません。
ただし、SSH接続あたりの接続速度は16 Mbpsに制限されます。

以上

改訂歴
2022年12月:初版作成
2023年05月:管理対象SSHセッションの接続例を追加
2023年05月:セッション・タイプの差異比較を追加

OCIドキュメント
Bastion 英語 日本語

タイトルとURLをコピーしました