1. はじめに
現在は、東京/大阪リージョンで、private onlyのVSIからCLIを直接実行することはできない。
回避策として、publicへのアクセスが可能なproxyサーバーを指定してCLIを実行することもできるが、本稿では別の回避策を紹介したい。
以下では、自動的にCLI更新を試行しないようにあらかじめ以下が構成されている。
$ ibmcloud config --check-version false
2. private endpoint(CSE)経由での東京リージョンへの直接アクセス -> 失敗
これは、東京リージョンに、private.jp-tok.iam.cloud.ibm.comというendpointが存在しないためである。このendpointがないため、USリージョンなどにproxyを配置しても結局動かない。
$ ibmcloud login -a private.cloud.ibm.com --apikey @ibmcloud_apikey -r jp-tok
API endpoint: https://private.cloud.ibm.com
Targeted region jp-tok
Authenticating...
Post "https://private.jp-tok.iam.cloud.ibm.com/identity/token": dial tcp: lookup private.jp-tok.iam.cloud.ibm.com on 161.26.0.7:53: no such host
API endpoint: https://private.cloud.ibm.com
Region: jp-tok
Not logged in.
FAILED
Unable to authenticate.
$ IBMCLOUD_TRACE=true ibmcloud login -a private.cloud.ibm.com --apikey @ibmcloud_apikey -r jp-tok 2>&1 | grep -i host
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.jp-tok.iam.cloud.ibm.com
Post "https://private.jp-tok.iam.cloud.ibm.com/identity/token": dial tcp: lookup private.jp-tok.iam.cloud.ibm.com on 161.26.0.7:53: no such host
3. private endpoint(CSE)経由でのUSリージョンに一旦アクセスして東京リージョンに切り替え -> 成功
ただ、docsにはus-southとus-eastしかCSE経由ではアクセスできない旨の記述があるため、将来的にこの辺りの挙動は変わる可能性がある。
https://cloud.ibm.com/docs/cli?topic=cli-service-connection#cli-private-vpc
$ ibmcloud login -a private.cloud.ibm.com --apikey @ibmcloud_apikey -r us-south
API endpoint: https://private.cloud.ibm.com
Targeted region us-south
Authenticating...
Retrieving API key token...
OK
Targeted account itz-cp-jpn (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx
API endpoint: https://private.cloud.ibm.com
Region: us-south
User: xxxxxxx@xx.xxx.xxx
Account: xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx
Resource group: No resource group targeted, use 'ibmcloud target -g RESOURCE_GROUP'
$ ibmcloud target -r jp-tok
Switched to region jp-tok
API endpoint: https://private.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'
$ ibmcloud is instances
(問題なく東京リージョンのサーバーが表示された)
$ IBMCLOUD_TRACE=true ibmcloud login -a private.cloud.ibm.com --apikey @ibmcloud_apikey -r us-south 2>&1 | grep -i host
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.iam.cloud.ibm.com
Host: private.us-south.iam.cloud.ibm.com
Host: private.us-south.accounts.cloud.ibm.com
$ IBMCLOUD_TRACE=true ibmcloud target -r jp-tok 2>&1 | grep -i host
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
Host: private.us-south.globalcatalog.cloud.ibm.com
4. TOKのVPC上にあるprivate endpoint(VPE)経由でのアクセス -> 失敗
TOKのVPC上でVPE経由でのCLIアクセスを利用するには、以下のVPEがサポートされている必要がある。詳細はこちら。
- Account Management
- Cloud Object Storage
- Identity Access Management
- Global Catalog
- Global Search
- Global Tagging
- Usage Metering
- Enterprise Management
- Resource Controller
- User Management
残念ながら、東京リージョンはまだこれらのVPEがまだサポートされていない。。
$ ibmcloud login -a private.cloud.ibm.com --vpc --apikey @ibmcloud_apikey
API endpoint: https://private.cloud.ibm.com
Authenticating...
Retrieving API key token...
OK
FAILED
Get "https://private.accounts.cloud.ibm.com/v1/accounts": dial tcp: lookup private.accounts.cloud.ibm.com on 161.26.0.7:53: no such host.
Tip: The service you are accessing does not support the private endpoint in the current region.
Run the 'ibmcloud login -r REGION' command to switch the region and try again.
$ IBMCLOUD_TRACE=true ibmcloud login -a private.cloud.ibm.com --vpc --apikey @ibmcloud_apikey -r jp-tok 2>&1 | grep -i host
Host: private.iam.cloud.ibm.com
Host: private.iam.cloud.ibm.com
Host: private.accounts.cloud.ibm.com
Get "https://private.accounts.cloud.ibm.com/v1/accounts": dial tcp: lookup private.accounts.cloud.ibm.com on 161.26.0.7:53: no such host.
5. DALのProxyサーバー経由でVPEアクセスする方法 -> 成功
-
DALにVPCを構成し、proxyサーバーをsquidなどで構成する。
-
DALに以下のVPEの構成を行う。
- Account Management
- Cloud Object Storage
- Identity Access Management
- Global Catalog
- Global Search
- Global Tagging
- Usage Metering
- Enterprise Management
- Resource Controller
- User Management
-
TGWでTokyoおよびOsakaのVPCと、このDALのVPCを接続する。
-
Security Groupを構成し、Tokyo/OsakaのCLIを呼び出すVSIからDALのproxyサーバーに対してアクセス許可を与える。
-
Tokyo/OsakaのCLIを呼び出すVSIで、DALのproxyサーバー(以下の例では
192.168.0.19)を利用するように構成する。参考$ export https_proxy=http://192.168.0.19:3128 -
プライベートエンドポイント(
private.cloud.ibm.com)と--vpcオプションを指定してアクセスする。$ ibmcloud login -a private.cloud.ibm.com --vpc --apikey @ibmcloud_apikey -r jp-tok API endpoint: https://private.cloud.ibm.com Targeted region jp-tok Authenticating... OK Targeted account xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx API endpoint: https://private.cloud.ibm.com Region: jp-tok User: xxxxxx@xx.xxx.xxx Account: xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx Resource group: No resource group targeted, use 'ibmcloud target -g RESOURCE_GROUP' CF API endpoint: Org: Space: $ ibmcloud plugin install vpc-infrastructure $ ibmcloud is vpcs (問題なく東京リージョンのサーバーが表示された) $ ibmcloud is instances (問題なく東京リージョンのサーバーが表示された)以下より、VPEアクセスの際には
tokyoなどのキーワードが入らないアドレスにアクセスしていることがわかる。debug情報$ IBMCLOUD_TRACE=true ibmcloud login -a private.cloud.ibm.com --vpc --apikey @ibmcloud_apikey -r jp-tok 2>&1 | grep -i host Host: private.globalcatalog.cloud.ibm.com Host: private.globalcatalog.cloud.ibm.com Host: private.globalcatalog.cloud.ibm.com Host: private.globalcatalog.cloud.ibm.com Host: private.globalcatalog.cloud.ibm.com Host: private.globalcatalog.cloud.ibm.com Host: private.iam.cloud.ibm.com Host: private.iam.cloud.ibm.com Host: private.accounts.cloud.ibm.com Host: private.user-management.cloud.ibm.com Host: private.user-management.cloud.ibm.com

