OCI Bastionの使い方を図解:マネージドSSHとポート転送の違い、接続元の制限、DBへの接続手順

※当ページにはAmazonアソシエイト等の広告リンクを含みます。

公式ドキュメントで検証最終検証 2026-11-01編集部出典 14件

当ページの解説・制限値・構成図は、一般公開されている Oracle Cloud Infrastructure (OCI) 公式ドキュメント、Oracle Cloud Price List、および Oracle University 公開試験ガイドを一次根拠として検証し、独自のSVG視覚図解として作成しています。

1. Bastionの全体像:入口を接続元と時間で絞る

Bastionは、公開エンドポイントのない対象へ、時間を限って接続するためのサービスです。Oracleが管理するので、自分でOSを更新する踏み台サーバーとは違い、Bastion自体にSSHでログインして管理することはありません。1つのBastionは1つのVCNに対応し、別のVCNの対象には届きません。

図1は、今回の経費申請アプリに当てはめた経路です。Bastionの接続先サブネットを private-app にして、Compute 2台と private-db のAutonomous AI Databaseへ届く形にしました。

Bastion Access Path管理者がComputeとDBへ届くまでの経路
東京リージョンVCN 10.0.0.0/16private-appprivate-db管理者のPC許可したIP許可外のIP許可リストCIDRBastionOracleが管理プライベートエンドポイントCompute 1公開IPなしCompute 2公開IPなしAutonomousプライベートエンドポイントここで止まるTCP 22TCP 1521NSGでBastionのIPからだけ受ける1234
  1. 接続元の確認:許可リストにないIPからはセッションに接続できません。
  2. 期限つきのセッション:作成したセッションの秘密鍵を持ち、有効な時間内だけ通れます。
  3. Computeへ:受ける側のNSGで、BastionのプライベートIPからのTCP 22を許可します。
  4. DBへ:ポート転送のセッションを使い、DB側のNSGでBastionのIPからの受信を許可します。
図1:許可リストで接続元を確かめ、private-appのプライベートエンドポイントから対象へ届く

AWSのSession Managerとの違い

AWSのSession Managerは、受信ポートを開けず、SSH鍵も管理せずに接続できる点を特長としています。OCI Bastionの方式はこれと異なり、セッションごとのSSH鍵と、対象側の受信ルールが必要です。同じ感覚で設定すると、受信ルールの不足でつまずきます。

2. セッションの方式:マネージドSSHとポート転送

セッションの方式は3つあります。対象の種類で選びます。Computeへログインするならマネージドセッション、DBへ接続するならポート転送です。

Session TypesマネージドSSHとポート転送の違い
マネージドSSHセッション:Computeへログインする管理者のPCSSHクライアントBastionComputeLinuxのシェルへ秘密鍵でSSHSSH(既定は22)接続先に必要なものLinuxのプラットフォーム・イメージOpenSSHサーバーOracle Cloud AgentBastionプラグインを有効化SSHポート転送セッション:手元のポートを接続先へつなぐ管理者のPClocalhost:1521BastionAutonomous10.0.2.x:1521SSHトンネル指定したIPとポート接続先に必要なものOpenSSHサーバーは不要Oracle Cloud Agentは不要接続先のIPとポートを指定TCPのサービスに使える
  1. 共通:どちらも鍵と接続元のIPの両方が要り、接続先はBastionのIPからの受信を許可します。
  2. SOCKS5:3つ目の方式です。接続先をクライアント側で動的に決めるので、小規模な構成では必要になるまで有効にしません。
図2:経路は似ているが、接続先に必要なものが違う

表1:Bastionのセッション方式の比較

方式主な用途対象に必要なもの今回の構成での使い方
マネージドSSHLinuxのインスタンスへログインLinuxのプラットフォーム・イメージ、OpenSSHサーバー、Oracle Cloud Agent、BastionプラグインCompute 2台の保守
SSHポート転送特定のIPとポートへTCPをつなぐ。RDP、Oracle Net Services、MySQLなどOpenSSHサーバーとOracle Cloud Agentは不要管理者のPCからDBへ接続
動的ポート転送(SOCKS5)クライアント側で接続先とポートを決めるBastion作成時に Enable FQDN Support and SOCKS5 を有効にする今回は使わない

3. 接続元のCIDRとセッション時間の上限

Bastionの守りは、接続元と時間の2つです。鍵を持っているだけでは接続できず、許可されたIPから接続する必要があります。

表2:Bastionで絞る設定(2026-11-01確認。最新は公式で確認)

設定決まり今回の決め方
CIDR block allowlistCIDR形式で最大20個。狭いほど安全管理者の接続元だけを /32 などで書く。例:203.0.113.10/32
Maximum session time-to-live(Bastion)30分以上180分以下。このBastionのセッションの上限になる作業に足りる短い時間にする。例:60分
Maximum session time-to-live(セッション)30分以上180分以下で、Bastionの上限を超えられない。作成後は変更できない作業ごとに作り、終わったら期限前でも削除する

4. 作る前に確認するもの:権限、ルート、エージェント

つながらない原因の多くは、この節の4点にあります。セッションを作る前に順に確かめます。

管理者の権限

Bastionは security、Computeは app、サブネットは network に置く想定です。公式の例は同じコンパートメントに置く前提なので、次のように置き場所を分けて書きました。グループ名の ops-admins は例です。

Allow group ops-admins to use bastion in compartment security
Allow group ops-admins to manage bastion-session in compartment security
Allow group ops-admins to read instances in compartment app
Allow group ops-admins to read instance-agent-plugins in compartment app
Allow group ops-admins to read vnic-attachments in compartment app
Allow group ops-admins to read vnics in compartment app
Allow group ops-admins to read vcn in compartment network
Allow group ops-admins to read subnets in compartment network

Bastion自体を作る人には、manage bastion-family に加えて、対象VCNのコンパートメントでネットワークの権限が要ります。公式の例は manage virtual-network-family です。特定のComputeと特定のOSユーザーに絞りたいときは、target.resource.ocid と target.bastion-session.username の条件を使えます。

ルートとゲートウェイ

Bastionの作成には、VCNのService Gatewayとそのルートが前提です。マネージドSSHセッションには、Service Gateway、Internet Gateway、NAT Gatewayのいずれかとルートが必要です。今回の private-app のルート表は、VCNの記事の表2のように次の2行を入れます。

  • All NRT Services in Oracle Services Network → Service Gateway
  • 0.0.0.0/0 → NAT Gateway

Bastionプラグイン

Bastionプラグインは、Oracle Cloud Agentが動いていても既定では有効になっていません。インスタンスの詳細にある Oracle Cloud Agent タブで、Bastionのスイッチを Enabled にします。反映に最大10分かかることがあります。ポート転送だけなら、この設定は不要です。

受信ルール

公式の手順はSecurity Listの例です。今回の構成はNSGで層ごとに絞るので、同じ内容をNSGの受信ルールに書きます。BastionのIPは、詳細画面の Private endpoint IP address で確かめます。

表3:対象側に足す受信ルール

対象送信元プロトコルとポート
Compute 2台のNSGBastionのプライベートIP/32TCP 22
Autonomous AI DatabaseのNSGBastionのプライベートIP/32TCP 1521(題材のTLS接続)。mTLSにした場合は1522

5. 手順:Computeへログインし、DBへポートを転送する

Bastionを作る

  1. Bastions の一覧で Create bastion を選びます。
  2. 名前を入れ、対象のVCNと、接続先サブネットに private-app を選びます。
  3. CIDR block allowlist に管理者の接続元を入れます。
  4. Advanced options で Maximum session time-to-live を設定します。
  5. Create bastion を選びます。

マネージドSSHでComputeへログインする

  1. 新しい鍵ペアを作ります。

    ssh-keygen -t rsa -b 4096 -f ./bastion-session-key

    OpenSSH 8以降のクライアントでは、既定でRSAの鍵ペアが使えません。公式の案内どおり、SSHの設定に次を足します。全ホストに効く例なので、作業後は外します。

    Host *
        HostkeyAlgorithms +ssh-rsa
        PubkeyAcceptedAlgorithms +ssh-rsa
  2. Bastionの詳細で Sessions を開き、Create session を選びます。

  3. Managed SSH session を選び、次を入れます。Username は opc(多くのプラットフォーム・イメージの既定)、Compute instance は対象の1台、Add SSH key は公開鍵です。

  4. 作成後、セッションの Actions メニューから Copy SSH command を選びます。

  5. コマンドの <privateKey> を秘密鍵のパスに置き換えて実行します。

ポート転送でDBへ接続する

Autonomous AI Databaseにはエージェントを置けないので、SSH port forwarding session を使います。DBのプライベートIPは詳細画面で確かめます。

  1. Create session で SSH port forwarding session を選びます。
  2. IP Address にDBのプライベートIP、ポートに 1521 を入れ、公開鍵を追加します。
  3. Copy SSH command でコマンドを取り、<privateKey> と <localPort> を置き換えて実行します。形は次のとおりです。
ssh -i <privateKey> -N -L 1521:<db_private_ip>:1521 -p 22 <bastionHost>

このコマンドは終了しません。開いたまま、別の画面でSQLクライアントから localhost の1521番へ接続します。題材はTLS接続なので1521です。mTLSなら1522にします。

つながらないときの確認

表4:よくある症状と確認する場所

症状確認する場所
マネージドSSHの作成が数分後に失敗し、プラグインが INVALIDVCNのゲートウェイと、サブネットのルート表
マネージドSSHの作成が失敗するOracle Cloud AgentとBastionプラグインの状態、OSユーザー名、sshd_config
SSHコマンドが接続できない自分のIPが許可リストにあるか、セッションの期限、秘密鍵
Bastionまでは通るが対象に届かない対象のNSGとSecurity Listの受信ルール、ポート番号

次に読むページ

よくある質問(FAQ)

OCI Bastionの利用料はかかりますか?
公式の説明では、Bastionに費用はかからず、無料のアカウントでも有料のアカウントでも使えます。ただしサービス制限はあります。2026-11-01に確認しました。最新は公式で確認してください。
セッションの時間は延ばせますか?
作成したセッションで編集できるのは表示名だけです。時間が足りないときは新しいセッションを作ります。設定できる時間は30分以上180分以下で、Bastion側の上限を超えられません。
Windowsのインスタンスにも使えますか?
マネージドSSHセッションはLinuxのプラットフォーム・イメージが対象で、Windowsには対応していません。ポート転送セッションならRDPの3389番へつなげます。
目次