2021年10月19日火曜日

要塞(Bastion)を使ってプライベート・ネットワーク上のコンピュート・インスタンスに接続する

 要塞(Bastion)を使って、プライベート・ネットワークにあるコンピュート・インスタンスに接続する方法を記述します。

以下の記述では、コンパートメント名MyAPEXDomain、仮想クラウド・ネットワークの名前もコンパートメント名と同じくMyAPEXDomain、その中に作成されているプライベート・ネットワークの名前がPrivate Subnet-MyAPEXDomainであると仮定します。記事中のそれらの名称は、それぞれの環境に合わせて読み直す必要があります。接続先となるコンピュート・インスタンスの名前はCMORDS1としています。

コンパートメント名と仮想クラウド・ネットワークに同じ名前MyAPEXDomainが付けられています。そのため、説明が若干わかりにくくなってしまいました。

要塞(Bastion)を作成する


Identity & Security要塞を開きます。要塞の作成をクリックします。

要塞名Bastion1とします。ネットワーキングの構成MyAPEXDomainのターゲット仮想クラウド・ネットワーク(このMyAPEXDomainはコンパートメント名)としてMyAPEXDomain(このMyAPEXDomainはVCNの名前)、MyAPEXDomainのターゲット・サブネットとして、接続するコンピュート・インスタンスが配置されているサブネットを選択します。ここではPrivate Subnet-MyAPEXDomainを選択しています。CIDRブロック許可リストには0.0.0.0/0を指定します。とりあえず、ネットワークのどこからでも要塞に接続できるようにしています。

CIDRブロック許可リストとして0.0.0.0/0を入力した後にEnterを入力すると0.0.0.0/0の入力が確定します。

要塞の作成をクリックします。

Bastion1状態アクティブになると、要塞の完成です。


コンピュート・インスタンスへファイルをアップロードする


要塞(Bastion)を通して、ファイルをコンピュート・インスタンスへアップロードします。そのために、要塞にてSSHポート転送セッションを作成します。

Identity & Security要塞のページを開きます。作成済みの要塞Bastion1を開きます。


Bastion1にて、セッションの作成をクリックします。


 ドロワーが開きます。セッション・タイプとしてSSHポート転送セッションを選びます。セッション名Session-年月日-時刻となるので、それはそのまま使います。作成したセッションの有効期間はデフォルトで3時間なので、セッション名から有効期間が分かります。ターゲット・ホストに接続する指定としてインスタンス名を使うように選択し、接続先となるコンピュート・インスタンスを指定します。今回はCMORDS1を指定しています。SSHのポート番号である22を転送先に選択します。

SSHキーの追加としてSSHキー・ファイルの選択を選び、コンピュート・インスタンスCMORDS1を指定または生成した公開鍵ファイル(スクリーンショットではssh-key-cmords1.key.pubというファイルを指定しています)をSSHキーとして指定します。

以上を設定して、セッションの作成をクリックします。


作成されたセッションが要塞の画面に一覧されます。


セッションの右端にあるハンバーガー・メニューを開き、SSHコマンドの表示を実行します。


SSH接続を確立するためのSSHコマンドが表示されます。クリップ・ボードにコピーし、ダイアログを閉じます


コピーしたsshコマンドは以下のような形式になります。

ssh -i <privateKey> -N -L <localPort>:10.0.1.82:22 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaawzoefcia4dtbwg5kixkgv3ixgsupn2625puytgcsvk6dyrch27bq@host.bastion.ap-tokyo-1.oci.oraclecloud.com


このコマンドに含まれる<privateKey><localPort>の部分を置き換えます。要塞のOCIDやホスト名は適切な値が入っているので変更はしません。秘密キーのファイルは、セッションの作成時に与えた証明書(公開鍵)と対になる秘密キーになります(ここではssh-key-cmords1.keyとしています)。ローカル・ポートとして10022を使うことにすると、上記のコマンドは次のようになります。

ssh -i ssh-key-cmords1.key -N -L 10022:10.0.1.82:22 -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaawzoefcia4dtbwg5kixkgv3ixgsupn2625puytgcsvk6dyrch27bq@host.bastion.ap-tokyo-1.oci.oraclecloud.com



上記コマンドは実行したままにしておきます。

別のターミナルよりファイルのアップロードを実行します。sftpコマンドでローカルのポートである10022に接続し、putコマンドを実行します。以下の実行例ではWallet_APEXDEV.zipおよびapexugj.dev.zipというファイルをアップロードしています。

sftp -i ssh-key-cmords1.key -P 10022 opc@localhost

Connected to localhost.

sftp> put Wallet_APEXDEV.zip

Uploading Wallet_APEXDEV.zip to /home/opc/Wallet_APEXDEV.zip

Wallet_APEXDEV.zip                            100%   21KB   1.3MB/s   00:00    

sftp> put apexugj.dev.zip

Uploading apexugj.dev.zip to /home/opc/apexugj.dev.zip

apexugj.dev.zip                               100% 6762   752.1KB/s   00:00    

sftp> exit

% 


以上で、ファイルがユーザーopcのホーム・ディレクトリにアップロードされました。

これ以上アップロードするファイルがなければ、ポート転送を行なっているsshコマンドは終了できます。

コンピュート・インスタンスへSSHで接続する


SSHでコンピュート・インスタンスに接続します。今度は要塞で管理対象SSHセッションを作成します。要塞Bastion1を開き、セッションの作成を実行します。

セッション・タイプとして管理対象SSHセッションユーザー名opcを指定する以外は、先ほどのポート転送セッションと同様の設定を行い、セッションの作成をクリックします。


セッションが作成されたら右端のハンバーガー・メニューを開き、SSHコマンドのコピーを実行します。


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

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


<privateKey>の部分を秘密キーのファイル名に置き換え、sshコマンドを実行します。

ssh -i ssh-key-cmords1.key -o ProxyCommand="ssh -i ssh-key-cmords1.key -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaawzoefciakq7z6smcwfodqn2ebveyeca7z7brmbn2dfgdmpox4dyq@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.1.82

The authenticity of host '10.0.1.82 (<no hostip for proxy command>)' can't be established.

ECDSA key fingerprint is SHA256:oTItIYbGj7E26UZlk2dcXFqcBeZ5GXGUVbJXyn+IkJY.

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Warning: Permanently added '10.0.1.82' (ECDSA) to the list of known hosts.

Activate the web console with: systemctl enable --now cockpit.socket


[opc@cmords1 ~]$ 


初回接続時はfingerprintをknown_hostsファイルに追加するかどうか確認を求められます。yesを入力すると宛先のコンピュート・インスタンスに接続されます。

以上で要塞を使って使ってプライベート・ネットワーク上のコンピュート・インスタンスに接続する方法の記事は終了です。

Oracle APEXをOracle Cloud上で構成する際の参考になれば幸いです。