IBM Cloud: ibmcloud CLIがproxy経由で利用できることを確認してみた


# 1. はじめに

APIを利用すれば東京リージョン・大阪リージョンでもprivate endpointに対応したAPIを呼び出すことができるが、残念ながらibmcloud CLIは本記事執筆時点では東京リージョン・大阪リージョンには対応していない。
ibmcloud CLIを実行するVSIがpublic gatewayやfloating IP経由でインターネットに直接アクセスできると良いのかもしれないが、セキュリティー上の要件でそういうアクセスを許可していないというシステムもまた多いと思われる。

一つの代替案は、(Forward) Proxyサーバーを構築し、

- Proxyサーバーのみインターネットにアクセスする。それ以外のサーバーはインターネットに直接アクセスできない。
- ProxyサーバーではFQDNでOutboundアクセスを制御する。
- インターネットにアクセスする必要があるサーバーは、Proxyサーバー経由でのみインターネットにアクセス可能とする。

という構成であろう。ということで、本当にibmcloud CLIがproxyサーバー経由でアクセスできるかどうかを確認してみた。

# 2. ibmcloud CLIが導入されているサーバーの環境がPrivate onlyであることを確認

以下のようにインターネットには出れないことを確認。

```txt:pingできない
[root@syasuda-metavsi ~]# ping www.yahoo.co.jp
PING edge12.g.yimg.jp (183.79.250.123) 56(84) bytes of data.
^C
--- edge12.g.yimg.jp ping statistics ---
9 packets transmitted, 0 received, 100% packet loss, time 7999ms
```

```txt:port443で繋がらない
[root@syasuda-metavsi ~]# nmap -Pn www.yahoo.co.jp -p 443

Starting Nmap 6.40 ( http://nmap.org ) at 2022-05-13 10:37 UTC
Nmap scan report for www.yahoo.co.jp (182.22.28.252)
Host is up.
PORT    STATE    SERVICE
443/tcp filtered https

Nmap done: 1 IP address (1 host up) scanned in 2.40 seconds
```
```txt:curlでも繋がらない
[root@syasuda-metavsi ~]# curl -I https://www.yahoo.co.jp
（無応答）
```
```txt:当然、ibmcloudコマンドを実行しても繋がらない。
[root@syasuda-metavsi ~]# ibmcloud login -a cloud.ibm.com --apikey @ibmcloud_apikey_1756623 -r jp-tok
API endpoint: https://cloud.ibm.com
Authenticating...
^C
```
```txt:ibmcloudのDebug結果。アクセスできずにTimeoutが発生している。
[root@syasuda-metavsi ~]# IBMCLOUD_TRACE=true ibmcloud login -a cloud.ibm.com --apikey @ibmcloud_apikey_1756623 -r jp-tok
API endpoint: https://cloud.ibm.com
Authenticating...

REQUEST: [2022-05-13T10:26:18Z]
POST /identity/token HTTP/1.1
Host: iam.cloud.ibm.com
Accept: application/json
Accept-Language: en
Accept-Language: en-US
Authorization: [PRIVATE DATA HIDDEN]
Content-Type: application/x-www-form-urlencoded
User-Agent: IBM Cloud CLI 2.6.0 / linux

apikey=[PRIVATE DATA HIDDEN]&grant_type=urn%3Aibm%3Aparams%3Aoauth%3Agrant-type%3Aapikey&response_type=cloud_iam
Post "https://iam.cloud.ibm.com/identity/token": dial tcp 104.87.66.105:443: i/o timeout

API endpoint:   https://cloud.ibm.com
Region:
Not logged in.

REQUEST: [2022-05-13T10:26:48Z]
GET /ibm-cloud-cli-metadata/info.json HTTP/1.1
Host: download.clis.cloud.ibm.com
Accept: application/json
Accept-Language: en
Accept-Language: en-US
Content-Type: application/json
User-Agent: IBM Cloud CLI 2.6.0 / linux



Warning: unable to check latest CLI version.
TIP: use 'ibmcloud config --check-version=false' to disable update check.

FAILED
Unable to authenticate.
```

# 3. Proxyの設定をする

Squidはすでに構成済みで、10.0.0.4:3128で待ち受けているものとする。

```
[root@syasuda-metavsi ~]# export https_proxy=http://10.0.0.4:3128
```
```txt:curlでの動作確認
[root@syasuda-metavsi ~]# curl -I https://www.yahoo.co.jp
HTTP/1.1 200 Connection established

HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=utf-8
Date: Fri, 13 May 2022 10:39:16 GMT
Etag: W/"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"
Vary: Accept-Encoding
X-Vcap-Request-Id: c35e52ad-bc11-4feb-5103-175aa9c43ebf
X-Xss-Protection: 1; mode=block
Age: 0
Connection: keep-alive
Server: ATS
```

# 4. ibmcloud CLI(Proxyあり)の動作確認

```txt:ibmcloudコマンドの実行（アクセス可能）
[root@syasuda-metavsi ~]# ibmcloud login -a cloud.ibm.com --apikey @ibmcloud_apikey_1756623 -r jp-tok
API endpoint: https://cloud.ibm.com
Authenticating...
OK

Targeted account xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx

Targeted region jp-tok


API endpoint:      https://cloud.ibm.com
Region:            jp-tok
User:              xxxxxxx@xx.xxx.xxx
Account:           xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx
Resource group:    No resource group targeted, use 'ibmcloud target -g RESOURCE_GROUP'
CF API endpoint:
Org:
Space:
```
```txt:CLIの更新確認（成功)　
[root@syasuda-metavsi ~]# ibmcloud update
Checking for updates...
No update required. Your CLI is already up-to-date.
To view available plugin updates, run 'ibmcloud plugin list'.
```
```txt:VPCPluginの新規導入（成功)
[root@syasuda-metavsi ~]# ibmcloud plugin install vpc-infrastructure
Looking up 'vpc-infrastructure' from repository 'IBM Cloud'...
Plug-in 'vpc-infrastructure[infrastructure-service] 4.0.3' found in repository 'IBM Cloud'
Attempting to download the binary file...
 18.99 MiB / 18.99 MiB [======================================================================================================================================================================================] 100.00% 0s
19910656 bytes downloaded
Installing binary...
OK
Plug-in 'vpc-infrastructure 4.0.3' was successfully installed into /root/.bluemix/plugins/vpc-infrastructure. Use 'ibmcloud plugin show vpc-infrastructure' to show its details.
```
```txt:VPCPluginの実行（成功）
[root@syasuda-metavsi ~]# ibmcloud is vpcs
Listing vpcs in all resource groups and region jp-tok under account IBM as user shiyasu@jp.ibm.com...
ID                                          Name               Status      Classic access   Default network ACL                   Default security group               Resource group
（略）
```