OCI Bastionサービス で Private Compute に SSH接続してみる。(Oracle Cloud Infrastructure)

表題の通り、OCI Bastionサービスで Private Compute に SSH接続してみますやで彡(ﾟ)(ﾟ)
Bastionセッションには Managed SSH と Port forwarding の二種類が有るのですが、本記事では Managed SSH を対象とします。

# 1. Bastionサービスとは？

いわゆる踏み台のサービスです。無料です。手元のPC等から OCI Compute への SSH接続、
Windows Compute へのリモートデスクトップ接続(DB)、DB系サービスへの SQL*Net接続などを
Bastionサービスを経由して実行可能です。サービス紹介やマニュアルは下記となります。

> 要塞概要
> https://docs.oracle.com/ja-jp/iaas/Content/Bastion/Concepts/bastionoverview.htm
> ※要塞……Bastion の直訳らしいです。踏み台と訳した方がエエですね……彡(-)(-)
> 
> Oracle Bastion
> https://www.oracle.com/jp/security/cloud-security/bastion/

# 2. 検証環境

下記記事の構成を流用します。ただし Public Subnet は今回使用しません。
Private Subnet に Compute と Bastionサービス を作成します。

> 検証によく使う Oracle Cloud Infrastructure(OCI) の 環境構成(VCN, Seculity List, 各種Gateway, Route Table, Subnet, Compute)まとめ
> https://qiita.com/ora_gonsuke777/items/08e4781af8c4f7e114ff

# 3. ポリシー(権限)の付与

Bastionサービスを作成するIAMユーザーにBastionサービスに必要なポリシー(権限)を付与します。

> 要塞IAMポリシー
> https://docs.oracle.com/ja-jp/iaas/Content/Bastion/Reference/bastionpolicyreference.htm

今回は下記のポリシーをIAMユーザーに付与しています。

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

# 4. Compute の Bastion Plugin有効化

Private Subnet に作成した Compute をコンソールで参照して Bastion Plugin を有効化します。
Bastion Plugin有効化 は Managed SSH で接続する場合には必須です。Port forwarding の場合は不要。
Oracle Provided Image の Oracle Linux等で作成した Compute なら「OCI Cloud Agent」のサブタブから制御可能です。
![bastion099.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/0982e643-f672-c80a-65de-7f64ed25fad8.jpeg)

![bastion001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/e0157a18-7d71-a585-d9bf-f71dee918967.jpeg)

![bastion002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/421b535c-c06d-0d21-7f63-dc280402832e.jpeg)

# 5. Bastionサービスの作成

Identity&Security → Bastion で画面遷移して、Bastionサービスを作成します。

今回は Private Subnet に Bastionサービスを作成します。
CIDR Block Allowed は接続元(PC端末など)の IP を CIDR で指定します。単体のIPの場合は xxx.xxx.xxx.xxx/32 で。

![bastion000.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/83472886-2895-177f-5512-7015accea409.jpeg)

# 6. Bastionセッションの作成

Managed SSH の Bastionセッションを作成します。セッションを作成すると、このセッションが生存している間は
対象リソースに接続可能になります。セッション作成時に 4. の Plugin を有効化していないとエラーになります。

![bastion010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2b50b9f8-a647-0d8c-cfc4-cafdc9ca3351.jpeg)
![bastion011.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/495a59d7-7c47-9d7c-694d-d93e0a7c0101.jpeg)

# 7. SSHコマンドのコピー/編集/接続

セッションが作成されると接続のためのSSHコマンドがコピー可能になります。
![bastion020.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/3762ccde-6a6c-e6de-2b4a-575f37cce51d.jpeg)

**編集前のSSHコマンド**

```
ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 ocid1.bastionsession.oc1.phx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@host.bastion.us-phoenix-1.oci.oraclecloud.com" -p 22 opc@10.0.x.x
```

**編集後のSSHコマンド(※5. Bastionサービス作成時の公開鍵に対応する秘密鍵を指定)**

```
ssh -i C:\Users\user\Desktop\bastion\ayu-bastion.key -o ProxyCommand="ssh -i C:\Users\user\Desktop\bastion\ayu-bastion.key -W %h:%p -p 22 ocid1.bastionsession.oc1.phx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@host.bastion.us-phoenix-1.oci.oraclecloud.com" -p 22 opc@10.0.x.x
```

編集後のSSHコマンドを実行します。今回は PC端末(Windows10)の PowerShell上 で実行してみました。

```powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6

PS C:\Users\user> ssh -i C:\Users\user\Desktop\bastion\ayu-bastion.key -o ProxyCommand="ssh -i C:\Users\user\Desktop\bastion\ayu-bastion.key -W %h:%p -p 22 ocid1.bastionsession.oc1.phx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@host.bastion.us-phoenix-1.oci.oraclecloud.com" -p 22 opc@10.0.x.x
Last login: Mon Aug 30 11:53:24 2021 from 10.0.6.94
Last login: Mon Aug 30 11:53:24 2021 from 10.0.6.94
[opc@ayu-compute1 ~]$ id -a
uid=1000(opc) gid=1000(opc) groups=1000(opc),4(adm),10(wheel),190(systemd-journal) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[opc@ayu-compute1 ~]$ hostname
ayu-compute1
[opc@ayu-compute1 ~]$ 
```

Bastionサービスのセッション経由で Compute に Managed SSH接続できました彡(^)(^)

# 8. まとめ

上記 4. の Bastion Plugin有効化 がちょっとしたハマりポイントでしょうか。
Public Subnet に作成する必要が無いというのも留意すべきかもしれません。

今回は SSH接続 でしたが、ポートフォワードの要領で 22(SSH)ポート以外 でも接続可能です。
無料のサービスなので、どんどん活用して下さいね。彡(^)(^)