はじめに
IBM Cloud Object Storageには、3種類のエンドポイントがあります。
https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-endpoints
・Public Endpoint
・Private Endpoint
・Direct Endpoint
Private EndpointまたはDirect Endpointを使うと、プライベートネットワークを介してICOSとデータをやり取りできます。セキュアで、かつ、インターネット側へのアウトバウンド転送費用が発生しないため、オンプレミスからDirect Link経由でICOSのプライベート側にアクセスしたいというリクエストが以前からありました。
これまで、オンプレミスからICOSへは直接アクセスできなかったため(ICOSは利用者のサブネットでなく共有サービスセグメントに位置するため、そこまでのルーティング情報がオンプレミス側に広告されない)、IBM Cloud内に立てたreverse proxyを介してアクセスする必要がありました。
https://cloud.ibm.com/docs/direct-link?topic=direct-link-using-ibm-cloud-direct-link-to-connect-to-ibm-cloud-object-storage
また、PowerVSからICOSにアクセスする要件も多くありますが、上記と同様に直接は行けないため、x86側にreverse proxyを立てる必要がありました。
参考: https://qiita.com/y_tama/items/bb9c553ba8f35f12f8a4
今回は、Virtual Private Endpoint(VPE)という、ICOS等のIBM CloudサービスへのエンドポイントをユーザーのVPCサブネット上に作成できるサービスの新機能についてです。
https://cloud.ibm.com/docs/vpc?topic=vpc-about-vpe
これまでVPEでは、同じVPCからの通信のみ可能で、Direct Link越しやTransit Gateway越しにはアクセスできませんでした。
今回の新機能として、Direct Link 2.0越しやTransit Gateway越しにVPEにアクセスできるようになったため、利用者自身でreverse proxyを構成する必要が無くなりました。
このVPEの新機能は、東京・大阪を含む、MZRで対応しています。
Direct Link 2.0越しやTransit Gateway越しにVPEにアクセスする機能はTCPのみサポートしています。NTPのようなUDPを使うプロトコルは対応していませんのでご注意ください。
https://cloud.ibm.com/docs/vpc?topic=vpc-end-to-end-private-connectivity-vpe&interface=cli
Only TCP services are supported.
構成概要
概要図は下記となります。
今回は接続元としてPowerVSを使用します。オンプレミスから接続する場合も同様の構成で可能です。
手順の概要は下記となります。
・PowerVSとVPCをCloud Connections(Direct Link2.0)+Transit Gatewayで接続
・ICOSと紐づけたVPEをオーダー
・DNS ServicesでCustom Resolverを作成
・PowerVSのDNS参照先を上記で作成したCustom Resolverに設定
・PowerVS(AIX)上でICOSクライアント(今回はs3cmd)をセットアップ。接続確認。
構成詳細
PowerVSとVPCをCloud Connections(Direct Link2.0)+Transit Gatewayで接続
PowerVSとVPCをCloud Connections(Direct Link2.0)+Transit Gateway経由で接続します(Transit Gatewayは必須ではありませんが、経路情報を確認できて便利なので利用します)。
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-cloud-connections
ご参考に、PowerVSをTransit Gatewayに接続する画面キャプチャ入りの手順は下記です。(※下記では2箇所のPowerVSを繋いでいますが、今回は1箇所でOKです。)
https://qiita.com/y_tama/items/7000125129f817209796
PowerVSからのDirect LinkとVPCがTransit Gatewayに接続され、双方のルーティング情報が伝搬されている事を確認します。
PowerVSのLPARでパブリックIPアドレスを有効にしていると、デフォルトゲートウェイがパブリック側を向いています。VPC宛の通信がプライベート側ゲートウェイにルーティングされるようAIXに静的経路を設定します。
# netstat -r
Routing tables
Destination Gateway Flags Refs Use If Exp Groups
Route tree for Protocol Family 2 (Internet):
default 192.168.167.65 UG 8 39948 en0 - -
127/8 localhost U 5 6771 lo0 - -
172.16.10/24 172.16.52.1 UGS 2 62784 en1 - -
172.16.20/24 172.16.52.1 UGS 0 34 en1 - -
172.16.30/24 172.16.52.1 UGS 0 51 en1 - -
172.16.52.0 172.16.52.253 UHSb 0 0 en1 - - =>
172.16.52/24 172.16.52.253 U 3 0 en1 - -
...
ICOSと紐づけたVPEをオーダー
Virtual Private Endpointをオーダーします。
https://cloud.ibm.com/vpc-ext/provision/endpointGateway
今回は大阪RegionalのICOSに紐づけるため、大阪RegionalのDirect Endpoint(s3.direct.jp-osa.cloud-object-storage.appdomain.cloud)を選択します。
ICOSのEndpoint一覧は下記にあります。
https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-endpoints#endpoints-region
VPEに紐づけるVPC上のIPアドレスは後から設定します。
作成されたVPEに対し、各ゾーンから1つずつサブネットを選び、紐づけます。この設定により、1つのゾーンに障害があった場合も、残ったゾーンのVPEを使用してICOSにアクセスすることが可能となります。
VPEにはSecurity Groupsが適用されるため、使用する通信を許可する設定を行います。
今回はPowerVSからICOSへのREST APIの通信なので、PowerVSのサブネット範囲からのTCP 443を許可します。
DNS ServicesでCustom Resolverを作成
PowerVSからICOSを使用するときは、Direct EndpointのFQDN(今回は大阪なので、s3.direct.jp-osa.cloud-object-storage.appdomain.cloud)を指定します。
パブリックIPを有効にしたPowerVSのデフォルト状態では、このFQDNに対する名前解決は一般のリゾルバが利用され、161.26.x.xが返ります。このIPアドレスは、IBM CloudがプライベートNWに使用しているIPアドレス範囲ですが、PowerVSからは直接ルーティングされないため、このままではアクセスすることができません。
# nslookup s3.direct.jp-osa.cloud-object-storage.appdomain.cloud
Server: 9.9.9.9
Address: 9.9.9.9#53
Non-authoritative answer:
Name: s3.direct.jp-osa.cloud-object-storage.appdomain.cloud
Address: 161.26.0.47
#
そこで、DNS Servicesの機能である、Custom Resolverを作成し、PowerVSのAIXのDNS参照先をCustom Resolverに設定します。Custom ResolverにはVPEの設定が反映されているため、s3.direct.jp-osa.cloud-object-storage.appdomain.cloudの名前解決要求に対し、VPEのIPアドレスを返してくれます。
custom resolverを使わずに、AIXのhostsファイルでICOSのFQDNをVPEのIPアドレスに名前解決する(VPEを切り替えたい時はhostsファイルを手動で書き換える)事も可能と思いますが、今回は1つのVPEが使えなくなった際に切り替えを自動化する観点でcustom resolverを使用しています。
まず、カタログからDNS Servicesを作成し、次に、作成されたDNS Servicesの中でCustom Resolverを作成します。
DNS ServicesやCustom Resolverの価格については下記をご確認ください。
https://cloud.ibm.com/docs/dns-svcs?topic=dns-svcs-pricing
ユーザーのVPCのサブネット上に、PowerVSからアクセス可能なCustom Resolverが作成されます。
PowerVSのDNS参照先を上記で作成したCustom Resolverに設定
PowerVSのAIXのDNS参照先として、上記で作成したCustom ResolverのIPアドレスを指定します。
# cat /etc/resolv.conf
#nameserver 127.0.0.1
#nameserver 9.9.9.9
nameserver 172.16.10.8
nameserver 172.16.20.5
#
Custom ResolverはVPEの設定が反映された名前解決を行うため、ICOSのDirect EndpointのFQDNへの名前解決要求に対し、VPEのIPアドレスを返します。
# nslookup s3.direct.jp-osa.cloud-object-storage.appdomain.cloud
Server: 172.16.10.8
Address: 172.16.10.8#53
Name: s3.direct.jp-osa.cloud-object-storage.appdomain.cloud
Address: 172.16.10.11
#
試しにVPEにアタッチするIPアドレスを削除すると、一定時間(おそらくDNSのTTL)経過後、残っているゾーンのIPアドレスを返すようになります。
上記でcustom resolverが返していた172.16.10.11をVPEから削除。
一定時間経過後、残っているゾーンのIPアドレスを返すようになる。
# nslookup s3.direct.jp-osa.cloud-object-storage.appdomain.cloud
Server: 172.16.10.8
Address: 172.16.10.8#53
Name: s3.direct.jp-osa.cloud-object-storage.appdomain.cloud
Address: 172.16.30.6
#
PowerVS(AIX)上でICOSクライアント(今回はs3cmd)をセットアップ。接続確認。
AIXで使うICOSクライアントツールとして、今回はs3cmdを使います。yumが使える環境であれば下記で導入できます。
# export PATH=$PATH:/opt/freeware/bin
# yum install python-pip -y
# pip install s3cmd
設定ファイル(.s3cfg)を設定します。access_keyとsecret_keyは、ICOSのHMACクレデンシャルを使います。
# cat .s3cfg
[default]
access_key = xxxxxxxxxxxxxxxxxxxxxxxxx
secret_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
host_base = s3.direct.jp-osa.cloud-object-storage.appdomain.cloud
host_bucket = %(bucket)s.s3.direct.jp-osa.cloud-object-storage.appdomain.cloud
#
s3cmdを使ってICOSにアクセスできている事を確認します。
# s3cmd ls
2021-11-08 15:04 s3://bucket-osa-20211109
# s3cmd ls s3://bucket-osa-20211109
2022-09-12 11:54 1073741824 s3://bucket-osa-20211109/tmpfile
2022-09-12 11:57 1073741824 s3://bucket-osa-20211109/tmpfile2
#
今回の構成で使ったVPEもCustom Resolverもマネージドサービスのため、これまでのように手動でreverse proxyを構成する事なくICOSにアクセスできるようになり、かなり便利に使えるようになったと思います。
以上