APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【OCI】Bastion(要塞)の使い方|プライベートインスタンスに踏み台なしでSSH接続する方法

はじめに

こんにちは~、クラウド事業部の木村です。

今回は、Oracle Cloud Infrastructure(OCI)でBastion(要塞)の使い方を解説します。

OCIを利用する際、プライベートサブネットに配置したインスタンスにどのようにSSH接続していますか?
セキュリティ強化のためにパブリックIPを付与しない設計を採用する場合、どのように外部からアクセスすればよいのかが課題になりますよね。

「踏み台サーバ」を構築し、そこを経由してプライベートインスタンスへアクセスが一般的でしょうか。
でも踏み台サーバだとコストもかかるし、管理がめんどうですよね。

このような課題を解決するのが、OCI Bastionサービスです。
Bastionを使えば、踏み台サーバを用意することなく、プライベートインスタンスにSSH接続が可能になります。
しかも、無料で利用できるため、コストをかけたくないあなたもすぐに試せますよ。


目次


OCI Bastionとは?

OCI Bastionとは

まず、OCI Bastionは、OCIが提供するマネージド踏み台サービスです。
これを使うことで、パブリックIPを持たないプライベートインスタンスへ安全に接続できます。

従来、パブリックIPなしのインスタンスへアクセスするには、踏み台サーバを構築する必要がありました。
この方法には以下のようなデメリットがあります。

  • 踏み台サーバの構築・管理が必要(セキュリティ更新、ログ管理、障害対応など)
  • 追加のコストがかかる(常時稼働する踏み台サーバのインスタンス費用)
  • SSH鍵の管理が煩雑(踏み台を経由するため、二重の鍵管理が必要)

今回のようにBastionを活用すれば踏み台サーバの管理・運用が不要になりますよ。

接続イメージは↓のような感じです。

引用元:要塞の概要

OCI Bastionのメリット

メリット 説明
踏み台サーバ不要 自前で踏み台サーバを構築・運用する必要なし
パブリックIP不要 インスタンスのセキュリティを向上
無料で使える OCIの無料枠でも利用可能

OCI Bastionは、セキュリティを向上させつつ、運用負荷を減らせる、無料なのに非常に便利な機能ですね。


【実践】Bastionを設定しプライベートインスタンスにSSH接続してみた

ここからは、OCIコンソールを使ってBastionを作成し、プライベートインスタンスにSSH接続する手順を詳しく解説します。
今回はLinuxを対象にして実施してみました。

前提

以下の前提でBastionを使っていきます。

  • 必要なIAMポリシーは付与済み
  • VCN作成済み
  • プライベートサブネットを作成済み

OCI Bastionを利用するには、適切なIAMポリシーを設定し、Bastionの作成やSSH接続ができるようにする必要があります。
必要に応じて、以下を参考にポリシーを付与してください。

Allow group SecurityAdmins to manage bastion-family in tenancy
Allow group SecurityAdmins to manage virtual-network-family in tenancy
Allow group SecurityAdmins to read instance-family in tenancy
Allow group SecurityAdmins to read instance-agent-plugins in tenancy
Allow group SecurityAdmins to inspect work-requests in tenancy

引用元:要塞の管理

Bastion利用の手順

以下のような4ステップで進めていきます。

  1. プライベートサブネット内にLinuxのインスタンスを作成
  2. サービスゲートウェイとルートテーブルの設定
  3. 要塞とセッションの作成
  4. LinuxインスタンスにSSH接続

1. プライベートサブネット内にLinuxインスタンスを作成

はじめに、SSH接続するためのLinuxインスタンスをプライベートサブネットに作成していきます。

OCIコンソール > 「コンピュート」 > 「インスタンス」 をクリック

「インスタンスの作成」 をクリック

基本設定
- 名前: 任意の名前
- コンパートメント: 既存のものを選択
- イメージ: Oracle Linux 8(今回はLinuxへの接続を試してみます)

プライマリVNIC情報
- VCN: VCNを選択
- サブネット: プライベートサブネットを選択

SSHキーの追加
- 「キー・ペアを自動」を選択して、ダウンロード

「作成」ボタンをクリック

インスタンスが作成できたら、「Oracle Cloudエージェント」タブをクリック

「要塞」トグルを有効に設定


2. サービスゲートウェイの設定

次に、OCI サービス上の要塞プラグインをインスタンスにダウンロードするためにサービスゲートウェイを設定していきます。
OCIサービスはインスタンスが存在するプライベートネットワーク外にあるため、サービスゲートウェイと適切なルートテーブル設定が必要になります。

OCIコンソール > 「ネットワーキング」 > 「仮想クラウド・ネットワーク」をクリック

「サービス・ゲートウェイ」 > 「サービス・ゲートウェイの作成」をクリック

  • 名前: 任意の名前
  • コンパートメントに作成: 既存コンパートメントを選択
  • サービス: ALL NRT Services In Oracle Services Network

「サービス・ゲートウェイの作成」をクリック

「ルート表」 > 「ルート表を作成」をクリック

  • 名前: 任意の名前
  • コンパートメントに作成: 既存コンパートメントを選択
  • ターゲット・タイプ: サービス・ゲートウェイ
  • 宛先サービス: ALL NRT Services In Oracle Services Network
  • ターゲット・サービス・ゲートウェイ: 先ほど作成したサービス・ゲートウェイを選択

「作成」クリック

「サブネット」 > 「インスタンスを作成したプライベートサブネット名」をクリック

「編集」をクリック

「ルート表」を先ほど作成したルート表に変更し、「変更の保存」をクリック


3. Bastion(要塞)とセッションの作成

次に、Bastion(要塞)とセッションを作成していきます。

OCIコンソール > 「アイデンティティとセキュリティ」 > 「要塞」をクリック

「要塞の作成」 をクリック

  • 要塞名: 任意の名前
  • ターゲット仮想クラウド・ネットワーク: 該当のVCNを選択
  • ターゲット・サブネット: プライベートサブネットを選択
  • CIDRブロック許可リスト: 接続を許可したいネットワークを指定

「要塞の作成」をクリック

続けてセッションを作成していきます。
「セッションの作成」をクリック

  • セッション・タイプ: 管理対象SSHセッション
  • セッション名: 任意の名前
  • ユーザー名: インスタンスログイン時のユーザー名(今回はopc)
  • コンピュート・インスタンス: SSH接続したいインスタンス
  • SSHキーの追加: SSHキー・ペアの生成(インスタンス作成時に作成したキーを選択してもOKです)

「セッションの作成」をクリック

以下のエラーが出た場合、手順1,2を参考にインスタンスの要塞プラグインが有効になっているか、ルート表は正しく設定されているかもう一度確認してください。
わたしはココがうまくいかなくてつまずきました。


4. LinuxインスタンスにSSH接続

最後に、Bastionを経由してプライベートサブネット内のインスタンスにSSH接続します。

作成したセッションの右側の「ケバブメニュー」 > 「SSHコマンドのコピー」をクリック

以下のようなコマンドがコピーされます。

ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.1.97

<privateKey>2箇所をセッション作成時にダウンロードした秘密鍵ファイル名に置き換えてください。

ssh -i ssh-key-2025-03-19.key -o ProxyCommand="ssh -i ssh-key-2025-03-19.key -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.1.97

コマンドプロンプトを起動

秘密鍵ファイルが存在するディレクトリに移動

先ほどのSSHコマンドを入力し、yesを入力

無事Bation経由でインスタンスに接続できました~!

でもなんでインスタンス作成時のSSH Keyを使わずに、Bastion作成時のSSH Keyのみで接続できたんだろうと疑問に思いました。
調べてみると、インスタンスの.ssh/authorized_keysにセッション作成時の公開鍵が登録されてました。
セッション作成時に作成した公開鍵をインスタンスに配置するようですね。


OCI Bastion利用時の注意点

今回やってみて以下の2回つまずきました。

  • インスタンスの要塞プラグインを有効化していない
  • ルート表でサービス・ゲートウェイを設定していない

こちらを参考にして無事問題は解決しました。今回ご紹介した手順を踏めば問題ない想定です。
Bastion Host Error: Plugin Bastion not present (Service Setup in OCI)

他のトラブルとしては、接続先インスタンス宛のSSHポート(22番)がセキュリティ・リストやネットワーク・セキュリティ・グループで許可されているか、などが考えられるかなと思います。

うまくいかない場合は上記のようなポイントを確認してみてくださいね。


おわりに

OCI Bastionを使うことで、踏み台サーバなしでプライベートインスタンスにSSH接続できました。
無料枠で利用できるので、ぜひ試してみてくださいね~!


関連リンク

公式ドキュメント(Bastion概要)


お知らせ

APCはAWS Advanced Tier Services(アドバンストティアサービスパートナー)認定を受けております。

その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp


本記事の投稿者: きむら
主にDatadog・OCIについて発信していきます!