Oracle Cloud: Cloud Shell から 要塞(Bastion) 経由でコンピュート・インスタンスにアクセスしてみてみた

Oracle Cloud Infrastructure (OCI)クラウド・シェルは、Oracle CloudコンソールからアクセスできるWebブラウザベースのターミナルです。
Private Subnet のコンピュート・インスタンスへ SSH接続するには、要塞(Bastion) 経由して接続します。
ということで、Cloud Shell から 要塞(Bastion) 経由してPrivate Subnet のコンピュート・インスタンスへインスタンスへ接続してみてみます。


:::note warn
現在この機能はつかえません。
Cloud Shellの機能で、VCN Subnet内にエンドポイント作成する[プライベート・ネットワーク・アクセス](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cloudshellintro_topic-Cloud_Shell_Networking.htm#Cloud_Shell_Private_Access)機能が追加されました。
:::

# ■ 構成イメージ
![構成イメージ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/bb42a9b1-d124-0784-096f-f0ff24c8453b.jpeg)
要塞(Bastion)に登録する「CIDRブロック許可リスト」は、セキリティ要件で 0.0.0.0/0 は NGというところがあります。
というこで、Cloud Shell のエンドポイントのIP Adressを「CIDRブロック許可リスト」へ登録します。

# ■ コンピュート・インスタンス事前準備
## ● 要塞(Bastion) プラグイン有効化
[管理対象SSHセッション]を使用した 要塞(Bastion)アクセスでは、コンピュートの'要塞プラグイン'が有効化されている必要があります。
無効化されている場合は、有効化してステータスが’実行中’であることを確認
確認は、コンピュート・インスタンス画面にある [Oracle Cloudエージェント]タブで確認できます
![01_要塞プラグイン有効化01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/928e0ad7-06ea-84f1-2718-1de0e8b1144c.jpeg)


# ■ Cloud Shell: エンドポイント調査
### 1) Cloud Shell 起動
コンソールにログインし、コンソール・ヘッダーで「クラウド・シェル」アイコンをクリックして起動
「クラウド・シェル」ウィンドウの右上隅にあるアイコンを使用すると、クラウド・シェル・セッションを最小化、最大化、再起動および閉じることができます。
![CloudShell01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/fbc34792-1f5c-e663-fb2d-40d57a8fac3e.jpeg)
※クラウド・シェルの起動時に、コンソールの「リージョン」選択メニューで選択されているリージョンに対してコマンドが実行されることに注意してください。


### 2) エンドポイント確認
Cloud Shellへログインして次のコマンドを実行すると　Cloud ShellのエンドポイントになるIP Adressを確認することができます

**・コマンド**

```shell
curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
```


**・実行例**
```shell
shirok@cloudshell:~ (ap-Tokyo-1)$ curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
 129.213.201.220
```



# ■ Bastion作成

## ● Bastion作成
### 1) OCIコンソール
[アイデンティティとセキュリティ]> [要塞] をクリック
![01_Bastion作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/3fd43a41-4518-bd98-c322-7b51210b3903.png)



### 2) 要塞の作成画面
[リスト範囲]の[コンパートメント]リストで、要塞を作成するコンパートメントを選択し、[要塞の作成]をクリック

```
    ・要塞名: 任意の表示名
    ・仮想クラウド・ネットワーク: 関連付けるVCNを選択
    ・サブネット: Private Endpoint IPアドレスを配置するサブネットを選択
    ・CIDRブロック許可リスト: セッション接続を許可する1つ以上のアドレス範囲(CIDR表記)
    ・最大セッション存続時間（TTL）: 最小値は30分で、180分(3時間)を超えない値を指定
```

![01_Bastion作成03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/58c7d23a-6d27-744c-6b12-657afb447dba.jpeg)




### 3）作成完了
![01_Bastion作成04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/8c36ac69-1568-2bbb-85a4-8623e44dd617.jpeg)



## ● Bastion セッション作成
### 1) Bastion画面
[セッションの作成]をクリック
```
    ・セッション・タイプ: [管理対象SSHセッション]を選択 ターゲット・リソースの特定ポートへのSSHトンネルを作成
    ・セッション名: 新規セッションの表示名を入力
    ・次を使用してターゲット・ホストに接続します:
    ・インスタンスの選択: ターゲット・コンピュートのインスタンス名を選択
    ・ポート: ターゲット・リソースで接続するポート番号を入力
    ・SSHキーの追加: セッションに使用するSSHキー・ペアの公開キー・ファイルを指定
```
![02_セッション作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/702d072c-d182-9a99-6596-10f3cbd4125e.png)



### 1) SSHセッション・コマンド取得
セッションの「アクション」メニューで、「SSHコマンドのコピー」をクリック
![02_ssh接続03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/0da578fe-2b52-920d-40e7-2b23b67dbf54.jpeg)


### 2) SSHセッション・コマンドのコピー確認

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

```


### 3) SSHセッション・コマンドの編集
テキスト・エディタを使用して、'privateKey'を秘密キーへ置き換えます。

```shell
ssh -i ./id_rsa -o ProxyCommand="ssh -i ./id_rsa -W %h:%p -p 22 ocid1.bastionsession.oc1.phx.amaaaaaassl65iqapvcqmu3c@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.0.2
```


# ■ Cloud Shell へ ssh鍵アップロード
### 1) Cloud Shell画面: ssh鍵アップロード
左端のリスト・アイコンをクリックし、[Upload]をクリック
![02_CloudShell-ssh鍵アップロード.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/362b811f-8e4f-6de5-d4c7-c34d9e979de4.jpeg)


### 2) File Upload to your Home Directory画面
Bastion接続のための SSH秘密鍵(id_rsa) を添付し、[Upload]をクリック
![02_CloudShell-ssh鍵アップロード02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/4b6a41fe-6f96-b06b-09fe-e000d412b043.jpeg)


### 3）Upload確認

```shell
shirok@cloudshell:~ (ap-tokyo-1)$ ls -l
    total 16
    -rw-r--r--. 1 shirok oci  425 Jun  9 05:08 id_rsa
```

### 4) SSH秘密鍵パーミッション変更
SSHアクセスできるために SSH秘密鍵(id_rsa)のパーミッションを600へ変更

```shell
shirok@cloudshell:~ (ap-tokyo-1)$ chmod 600 id_rsa
shirok@cloudshell:~ (ap-tokyo-1)$ ls -l
    total 16
    -rw-------. 1 shirok oci  425 Jun  9 05:08 id_rsa
```

# ■ 接続
Cloud Shell上で Bastionで取得した SSHセッション・コマンドを実行


### 1) Bastionセッション SSHコマンド実行
Cloud Shell 画面で、Bastionセッション SSHコマンドを実行
![CloudShell02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/57d966de-67fb-ad38-69c8-dcf3214a7368.jpeg)


```
shirok@cloudshell:~ (ap-tokyo-1)$ ssh -i ./id_rsa -o ProxyCommand="ssh -i ./id_rsa -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaassl65iqapvcqmu3c@host.bastion.ap-Tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.0.2
FIPS mode initialized
FIPS mode initialized
Use of the Oracle network and applications is intended solely for Oracle's authorized users. The use of these resources by Oracle employees and contractors is subject to company policies, including the Code of Conduct, Acceptable Use Policy and Information Protection Policy; access may be monitored and logged, to the extent permitted by law, in accordance with Oracle policies. Unauthorized use may result in termination of your access, disciplinary action and/or civil and criminal penalties.
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Wed Jun  8 06:31:01 2022 from 10.0.0.59
[opc@tokyo-inst01 ~]$ 
```

### 2) コンピュート・インスタンス接続確認
コンピュート・インスタンスへ接続できたことを確認
```
[opc@tokyo-inst01 ~]$ hostname
 tokyo-inst01
```

# ■ 参考
## ● Sevice情報
・[クラウド・シェル](https://www.oracle.com/jp/devops/cloud-shell/)
・[Oracle Bastion](https://www.oracle.com/jp/security/cloud-security/bastion/)
## ● Oracle Cloud Infrastructureドキュメント 
・[クラウド・シェル](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cloudshellintro.htm)
・[クラウド・シェルの使用](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cloudshellgettingstarted.htm)
・[要塞ドキュメント](https://docs.oracle.com/ja-jp/iaas/Content/Bastion/home.htm)
・[クラウド・シェル・ネットワーキング](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cloudshellintro_topic-Cloud_Shell_Networking.htm)
・[クラウド・シェルのプライベート・ネットワーキング](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cloudshellintro_topic-Cloud_Shell_Networking.htm#Cloud_Shell_Private_Access)
・FAQ: [Oracle Cloud Infrastructure Bastion Serviceに関するよくある質問](https://www.oracle.com/jp/security/cloud-security/bastion/faq/)
・[要塞のトラブルシューティング](https://docs.oracle.com/ja-jp/iaas/Content/Bastion/Tasks/troubleshooting_bastion.htm)
・[Oracle Cloud Infrastructureを使用したLinuxコンピュート・インスタンスへのアクセスおよび管理](https://docs.oracle.com/ja/learn/access-oci-linux-instance/index.html#introduction)