4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OCI Bastionを少し楽に使う方法

Last updated at Posted at 2024-07-11

概要

パブリッククラウドに立てたサーバーへアクセスするため、VPNを利用したり踏み台サーバーを立てたりするかと思います。
Oracle Cloud Infrastructure (OCI)にはBastionサービスというセキュアなリモートアクセスサービスがあり、SSH/RDP以外の通信を含めリモートからサーバーへのアクセスが可能です。

OCI Bastion

よくある質問

ただ、このサービスを使うためにSSHポートフォワーディングのセッションの生成とコマンド取得する作業があり煩わしいので、少し楽に使えるようWindowsバッチを作成しました。

何がいいの?

  • セキュアなBastionサービスが利用できます
    • Bastionサービスは無料です
    • コマンドの有効期間は最長3時間なので有効期間後は紛失や漏洩しても悪用リスクがありません(一日中接続する必要のある用途には向きません)
    • SSH/RDP以外にも対応しており、例えばOracle Client(Port:1521)も可能です
  • リモートアクセスしたいときにバッチを実行すればBastionサービス利用に必要なコマンドが出力されますので、そのまま実行すればリモートアクセス環境を確立できます

構成

PC内のクライアントソフトは同じPC内のSSHポートフォワードと通信します。
PC内のSSHポートフォワードはOCIのBastionとSSHセッションを確立し通信を転送します。
OCI内VMから見るとBastion Endpointから接続したように見えます。

Bastion利用

ハンズオン

以下のサイトを参考にBastion経由の接続を行ってください。
セッションタイプはSSHポート転送セッションを使用します。管理対象SSHセッションは使用しません。
BastionサービスでパブリックIPを持たないリソースにアクセスする

バッチ作成

ハンズオンで実施したセッションの作成とSSHコマンドのコピーは、リモートアクセスするたびに必要となります。この部分をバッチ実行で省力化したいと思います。
今回はクライアント側はWindowsを前提としています。

初回のみ実行

  • OCI CLIインストール
    以下のサイトを参考にOCI CLIインストールします

 OCIコマンドライン・インタフェース(CLI)をすばやくインストールして構成

インストールの確認には以下のコマンドを実行してエラーにならないことを確認するとよいかと思います。

oci os ns get
  • jqダウンロード
    OCI CLIのJSON形式のOutputから抽出するためにjqを使用します。
    https://jqlang.github.io/jq/
    jq-windows-amd64.exeは、jq.exeに名前変更してください。

  • 各パラメータ確認
    以下のパラメータを確認します。

    • Bastion OCID
      OCIコンソールナビゲーションメニューからアイデンティティとセキュリティ>>要塞>>対象要塞>>要塞情報内のOCIDをコピー
    • 接続先サーバーPrivate IP
    • 接続先サーバーOCID
      • Linux/Windows:
        OCIコンソールナビゲーションメニューからコンピュート>>インスタンス>>対象インスタンス>>インスタンス情報内のOCIDをコピー
      • Oracle DBサーバー(DBCS):
        OCIコンソールナビゲーションメニューからOracle Database>>Oracleベース・データベース>>対象インスタンス>>DBシステム情報内のOCIDをコピー

リモートアクセス時に実行

以下の環境情報に必要な情報を設定します

  • TARGETSERVER=接続先サーバーPrivate IP 接続先サーバーOCID
  • TARGETPORT=接続先サーバーポート
  • TARGETPORTL=クライアントから接続先ポートに指定するローカルポート
    Windows側で使っていないポートを指定します
  • PUBKEYF=Bastion側に設定するSSHパブリックキー
  • PRIKEYF=上記SSHキーに対応するプライベートキー
  • BASTIONID=Bastion OCID

LinuxにSSHで接続する場合の例です。

oci bastion session create-port-forwardingの--target-resource-idを--target-private-ipに変更しました

bastion-session-create.bat
@echo off
rem Bastion session作成およびコマンド情報取得

echo Set environment
rem 環境情報
set TARGETSERVER=【接続先サーバーPrivate IPset TARGETPORT=22
set TARGETPORTL=3222
set PUBKEYF=c:\path\to\ssh-key.key.pub
set PRIKEYF=c:\path\to\ssh-key.key

set BASTIONID=【Bastion OCIDset DATASTATUS=FAIL

echo Step1
rem Bastion session作成
oci bastion session create-port-forwarding --bastion-id %BASTIONID% --ssh-public-key-file %PUBKEYF% --target-port %TARGETPORT% --target-private-ip %TARGETSERVER% --session-ttl 10800 --wait-for-state SUCCEEDED > %temp%create-port-forwarding-result.json

for /f "usebackq" %%A in (`type %temp%create-port-forwarding-result.json ^| jq -r ".data.status"`) do set DATASTATUS=%%A

if not %DATASTATUS%==SUCCEEDED (
    echo Try again
    exit /b
)

echo Step2
rem Bastion sessionコマンド情報取得
for /f "usebackq" %%B in (`type %temp%create-port-forwarding-result.json ^| jq -r ".data.resources[0].identifier"`) do set IDENTIFIER=%%B

oci bastion session get --session-id %IDENTIFIER% >%temp%bastion-session-result.json
for /f "usebackq delims=" %%C in (`type %temp%bastion-session-result.json ^| jq -r ".data.\"ssh-metadata\".command"`) do set COMMANDTEMP=%%C

set LINE0=%PRIKEYF% -N -L %TARGETPORTL%
call echo %%COMMANDTEMP%:^<privateKey^> -N -L ^<localPort^>=%LINE0%%%

バッチを実行して正常完了するとコマンドが作成されます。

C:\Path\to>bastion-session-create.bat
Set environment
Step1
Action completed. Waiting until the work request has entered state: ('SUCCEEDED',)
Step2
ssh -i c:\path\to\ssh-key.key -N -L 3222:【接続先サーバーIP】:22 -p 22 ocid1.bastionsession.oc..@host.bastion.ap-tokyo-1.oci.oraclecloud.com
↑このコマンドを実行します

作成されたコマンドを実行するとBastion間をのSSHセッションが確立しますので、その後にクライアントソフト(SSH,RDPやOracle Client等)にて

  • 宛先サーバー:localhost
  • 宛先ポート:ローカルポート(この例では3222)

を指定して接続します。

TCP/IP通信状態は以下のようになります。

C:\path\to>netstat -an
....
PCとBastion間のSSH Forwardingセッション
  TCP         (PCのIP):56977   (BastionのIP):22      ESTABLISHED
....
PCクライアントソフトとPC内Forwardingポート間セッション
  TCP         127.0.0.1:3222         0.0.0.0:0              LISTENING
  TCP         127.0.0.1:3222         127.0.0.1:56994        ESTABLISHED
  TCP         127.0.0.1:56994        127.0.0.1:3222         ESTABLISHED
....

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?