LoginSignup
1
0

OCI Bastion経由でプライベート・サブネット内のComputeインスタンスに接続

Last updated at Posted at 2022-12-01

初めに
冒頭ですが、この記事の位置付けは、次のシリーズ記事の1つです。
シリーズ1:OCI Bastion サービス
シリーズ2:プライベート・サブネット内の OCI Compute に接続

プライベート・サブネットに格納されるOCI Computeインスタンスに接続するのに、いろいろな方法があります。インターネットを利用する場合、パブリック・サブネット内の踏み台サーバを経由するのは一般的です。

OCI Bastion サービスを利用すれば、踏み台サーバを立てず、On-Pのクライアントから、プライベート・サブネット内の Compute インスタンスに接続できます。

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

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

目次

1. 事前準備

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

タイプ 項目 コメント
VCN CIDR 10.0.0.0/16
プライベート・サブネット CIDR 10.0.1.0/24 接続先サーバ
サービスGW (※1)
ルート表 (※1) ルール ターゲット: サービスGW
宛先: All <Region_Key> Services in Oracle Services Network
ターゲットVMのサブネットに紐づける
セキュリティ・リスト Egress
(※1)
0.0.0.0/0, 全てのプロトコル 同上
Compute インスタンス OS Oracle Linux 9 プライベート IP: 10.0.1.8
OS Windows サーバ 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ブロック許可リストを入力します。

注意

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

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

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

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

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

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

"Source CIDR"は、Bastionの「プライベート・エンドポイントIP」です(Bastionの情報ページに表示されます)。

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

4. Linux VMに接続する

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

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

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

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

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

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

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

image.png

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

Bastion -> Sessions -> Create session

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

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

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キー 既存のキーファイルを利用するか、新しいキーペアを作成する。(秘密キーをクライアント側に保存してください。)

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

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\Wei> 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\Wei> 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キー 既存のキーファイルを利用するか、新しいキーペアを作成する。(秘密キーをクライアント側に保存してください。)


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

デフォルトでは、セッションは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が埋められるので、変更する必要はありません。

ヒント:

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

5-3. RDPでログイン

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

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

付録

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

接続が失敗した場合、以下のような原因は一般的です。ご参考ください。

  • 秘密キーの中身或いは置き場所は不正。(例:C:\Users\<Username>\.ssh\id_rsa
  • Computeインスタンスは、まだ起動していない。
  • プライベート・サブネットのセキュリティ・リストに、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のセッション期限が切れた(デフォルトは3時間)。
    セッション期限が切れた後、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 Computeインスタンスに接続する方法のまとめ
ネットワーク・ロード・バランサ (NLB) の経由でプライベート・サブネット内の OCI VMに接続する
リモート・デスクトップ・ゲートウェイ経由で OCI Windows VM に接続する方法
OCI Bastion経由でプライベート・サブネット内のOracle DBに接続する
OCI Bastion経由でプライベート・サブネット内のAutonomous DBに接続
OCI Bastion経由でMySQL Cloud Serviceに接続

ドキュメント
要塞

1
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
1
0