8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【IBM Cloud】Virtual Server for VPC上のPrivate Path機能を使ってサービスを公開する流れ

Last updated at Posted at 2025-02-21

はじめに

今回は2024年末にGAされたVPCのPrivate Path機能を使ってサービスを公開する流れについて検証しましたので、その内容を整理しています。
Private Pathを使用することで、コンシューマー(エンドユーザー)はインターネットを経由せずに、直接IBM Cloudを介してサービスにアクセスすることが可能になるため、セキュアなサービス利用が可能になります。
本来はプロバイダーがIBM Cloud上にアプリやサービスを公開し、コンシューマーが利用することを想定していますが、検証の中でプロバイダー役として直接サービスを作成し、それをコンシューマー役としてアクセスする全体の流れが含まれています。
スクリーンショット 2025-02-14 16.07.01.png

前提条件

今回の検証には以下の前提条件があります。

  • プロバイダーとコンシューマーの両方のリソースをホストするためのIBM Cloud有料アカウントが必要です。
  • プロビジョニングされたVirtual Server Instance(VSI)に接続するためのVPC用のSSH Keyが必要です。
  • サービスの作成やアクセスには、Infrastructure as Code(IaC)を実現するためのTerraformベースの自動化ツールである「IBM Cloud Schematics(Schematics)」を利用します。それによってPrivate Pathサービスを含むプロバイダー側の環境、およびコンシューマー側の環境を自動的に構築して接続の確認します。
    • Schematicsのリージョンは2025年現在、ダラス(us-south)ワシントン(us-east)フランクフルト(eu-de)ロンドン(eu-gb)の4箇所のみとなりますが、今回はフランクフルト(eu-de)で実施しました。
  • 今回使用するサービスはnginxベースのWebアプリサーバーです。

検証に使用するSSH KeyとVSIインスタンスは同じリージョンである必要があります。そのため、SSH Keyもフランクフルト(eu-de)に作成ください。

プロバイダーとしてのサービス作成の流れ

まずは上記の通りプロバイダーとしてIBM Cloudにサービスを公開するため、Schematicsでワークスペースの作成、テンプレートの指定を行います。
コンソールナビゲーション・メニューPlatform AutomationSchematicsTerraformにアクセスします。
スクリーンショット 2025-02-14 16.11.55.png
Terraform画面が表示されたら、ワークスペースの作成をクリックします。
スクリーンショット 2025-02-14 16.12.12.png
ワークスペース作成画面にてテンプレートを指定します。今回はすでにGithubに公開されているTerraformテンプレートのURLを使用しますので以下のURLを入力ください。
また、Terraformのバージョンを指定しますが、今回はterraform_v1.5で実施しています。
設定が終わったら次へをクリックします。

プロバイダー用リポジトリのURL
https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-pps-basics/provider

スクリーンショット 2025-02-14 16.18.54.png

完全リポジトリーを使用するには必ずチェックを入れてください。

次は詳細を入力しますが、ここでワークスペース名とリソースグループ、リージョンを選択しいます。
ワークスペース名はなんでも大丈夫ですが、今回はプロバイダー役のワークスペースだとわかりやすくするためにpps-providerにしています。
また、リージョンも前提で記載した通り、フランクフルトにしています。
設定が完了したら次へをクリックします。
スクリーンショット 2025-02-14 16.28.25.png
全ての設定が完了したら作成をクリックします。
スクリーンショット 2025-02-14 16.35.17.png
作成されたワークスペースの設定変数項目にて変数の修正を行います。前提条件として作成したSSH Keyやリージョンなどを指定します。デフォルトで値が設定されていますが、項目の右側のにて編集を行います。
SSH Keyの値はexisting_ssh_key_nameにて設定できますが、ここではSSH KeyのIDや指紋、公開鍵などではなく、SSH Keyのインスタンス名をそのまま入力する必要があります。
Schematicsのワークスペースが作成されたら、テンプレートの設定を行います。
スクリーンショット 2025-02-14 16.38.03.png
スクリーンショット 2025-02-14 16.38.13.png

繰り返しとなりますが、SSH Keyのリージョンとワークスペースのリージョンは同じリージョンである必要があります。もし別のリージョンの場合、プランの適用が失敗になります。
なお、今回使ったアカウントの事情上、リソースグループの設定も行う必要がありました。似てような状況の方は必要に応じてリソースグループの変更も実施ください。

変数を全て設定したら、上端のプランの適用をクリックします。
プランを適用することによって、スクリプト化されたコードが走り、変数で設定した項目通りにインスタンスがデプロイされるようになります。
なお、この作業にはデプロイのため数分ほど時間がかかる場合があります。
スクリーンショット 2025-02-14 14.09.08.png
デプロイが完了したらリソース・リストにppsという名前やタグでインスタンスがデプロイされていることがわかりますが、主に次のリソースが作成されます。

  • 1つの仮想プライベートクラウド(VPC)
  • 3つのサブネット(各ゾーンに1つずつ)
  • 各サブネットに少なくとも1つの仮想サーバーインスタンス
  • すべての仮想サーバーインスタンスを含むバックエンドプールで構成されたプライベートパスNLB
  • Private Path Service
    スクリーンショット 2025-02-14 14.11.25.png
    なお、作成されたVSIにアクセスし、ロードバランサーやPrivate Pass、SSH鍵がうまく紐づいたか確認ください。
    スクリーンショット 2025-02-14 14.11.59.png
    スクリーンショット 2025-02-14 14.13.18.png
    Private Passの詳細に入るとCRNとサービス・エンドポイントを確認することができます。後ほどサービス公開の際に使用することになるので別途メモしてください。
    スクリーンショット 2025-02-14 14.13.37.png
    ここまで実施したらプロバイダーとしてのサービス作成の流れは完了です。

コンシューマーとしてのサービスへアクセスの流れ

次はコンシューマーとしてのSchematicsワークスペースを作成します。全体的な流れはプロバイダー用のワークスペース作成と同じです。
以下のコンシューマー用リポジトリやTerraformのバージョン(terraform_v1.5)、ワークスペース名はコンシューマー用とわかりやすくpps-consumer、リージョン(フランクフルト)などを入力し、作成ボタンにてワークスペースを作成ください。

コンシューマー用リポジトリのURL
https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-pps-basics/consumer

スクリーンショット 2025-02-14 16.58.37.png
スクリーンショット 2025-02-14 16.58.55.png

また、ワークスペースが作成されたら、プロバイダー用ワークスペースと同様、SSH Keyやリージョン、リソースグループなどを入力します。
なお、その際にprovider_crn変数にて、上でメモしたCRNを入力します。
スクリーンショット 2025-02-14 17.06.41.png

その後、プランを適用をクリックし、インスタンスデプロイを待ちます。
デプロイが完了したら、リソース・リストに名前やタグがconsumerになったインスタンスが追加されていることがわかります。
なお、コンシューマー用インスタンスにはいかが作成されます。

  • 1つの仮想プライベートクラウド(VPC)
  • 2つのサブネット
  • 各サブネットに1つのVSI
  • プライベート パス サービス CRN と各サブネットに 1 つの IP アドレスが構成された 1 つのVirtual Private Endpoint(VPE)
    スクリーンショット 2025-02-14 14.30.28.png

この段階ではまだコンシューマーがプロバイダー提供のアプリにアクセスできない状況です。
Private Path サービスへの接続要求が審査され、許可されるのを待機している段階となります。
そのため、VPC用の仮装プライベート・エンドポイント・ゲートウェイにアクセスしたら状況処理待ちになっていることを確認ください。
スクリーンショット 2025-02-14 14.31.12.png
ここまでできたらコンシューマー用の作業は完了です。

コンシューマーのリクエストの承認

次はプロバイダー役に戻り、前の段階でコンシューマーが設定したアクセス申請を承認する必要があります。
Private Path Serviceリストに移動し、Schematicsで作成されたPrivate Pathの詳細画面にアクセスします。
その後接続要求カテゴリーにて新たに入った承認待ちのリクエストを確認し、にて許可をクリックします。
スクリーンショット 2025-02-14 14.32.26.png
スクリーンショット 2025-02-14 14.32.37.png
接続要求画面が表示されたら、再度許可をクリックします。
スクリーンショット 2025-02-14 14.33.04.png
その後、先ほどのVPC用の仮装プライベート・エンドポイント・ゲートウェイにアクセスすると処理待ち安定に変わっていることがわかります。
スクリーンショット 2025-02-14 14.33.28.png

コンシューマーからプロバイダーへの接続テストの流れ

プロバイダーから接続承認を行い、プライベートエンドポイントが有効になったら、最後にテストを行います。
仮装サーバーインスタンス(VSI)にアクセスし、割り当てられているFloating IP(浮動IP)を見つけます。
上記の通りVSIは3台作成されますが、その中で2台にFloating IPが割り当てられています。その二つのFloating IPをpingコマンドにて確認し、通信できるFloating IPを使用します。
私の場合は、以下の画面の中、vpc-pps-consumer-vsi-eu-de-2がpingが飛んでいました。

Floating IPの確認
ping <floating-ip>

スクリーンショット 2025-02-14 14.38.00.png

pingコマンドにて通信できるFloating IPを見つけたら、次はSSH Keyで仮装サーバーにログインします。

SSH Keyを使った仮装サーバーへのログイン
ssh root@<floating-ip>

ログインできたら、サービスエンドポイントを呼び出してプロバイダー提供のアプリにアクセスします。

curl http://vpc-pps.example.com
結果
Hello world from vpc-pps-provider-vsi-eu-de-1

もし以下のようにアクセスが失敗する場合、VSIに登録したSSH Keyが正しく指定されていない可能性があります。その時は以下の -i コマンドにてSSH Keyを指定する必要があります。

ログイン失敗結果 ①
moonsy@moon ~ % ssh root@xxx.xxx.xxx.x
root@161.156.168.6: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
結果 ① の対処法:-i コマンドにてSSH Keyの指定
ssh -i ~/.ssh/key-moon-de_rsa.prv root@xxx.xxx.xxx.x

なお、上記のコマンドを入力しても再度以下のようなエラーが表示されることがあります。これはSSH KeyのPermissionが緩すぎるため、SSHが鍵を無視している状況です。
その場合にはchmod 600コマンドにて解決できますが、こちらはSSH Keyの読み書きは所有者のみ可能にするPermissionを強化するコマンドです。

ログイン失敗結果 ②
moonsy@moon ~ % ssh -i ~/.ssh/key-moon-de_rsa.prv root@xxx.xxx.xxx.x
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/moonsungyun/.ssh/key-moon-de_rsa.prv' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/moonsungyun/.ssh/key-moon-de_rsa.prv": bad permissions
root@xxx.xxx.xxx.x: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
結果 ② の対処法:chmod 600コマンドにてPermission強化
moonsy@moon ~ % chmod 600 ~/.ssh/key-moon-de_rsa.prv

moonsy@moon ~ % ssh -i ~/.ssh/key-moon-de_rsa.prv root@xxx.xxx.xxx.x
Last login: Thu Jul 11 05:47:22 2024 from xxx.xxx.xx.xxx
[root@vpc-pps-consumer-vsi-eu-de-2 ~]#

ここまで実施したら、コンシューマーがプロバイダー提供のアプリにアクセスする流れは完了です。

全体公開の流れ

今回の検証は同一アカウント内、同一VPC内のコンシューマーに提供する検証でしたが、最後に別のVPCにいるコンシューマーに公開する流れは以下となります。
再度ナビゲーション・メニューInfrastructureNetworkPrivate Path Serviceにアクセスすると、先ほど作成されたPrivate Pathがあり、「公開済み」項目にいいえとなっていることがわかります。右側のにて公開をクリックします。
スクリーンショット 2025-02-14 15.50.40.png
再度公開をクリックします。
スクリーンショット 2025-02-14 15.50.48.png
すると、「公開済み」項目がはいに変更になり、他のアカウントが仮想プライベート・エンドポイント (VPE) ゲートウェイを介してサービスに接続することができるようになります。
スクリーンショット 2025-02-14 15.50.58.png

リソースの削除

最後にリソース削除についても簡単にご紹介したいと思います。
もしインスタンスが不要になった場合、本来であれば一つずつ削除を行う必要がありますが、Schematicsワークスペースで作成した場合には削除も一気に行うことができます。右上のアクションボタンをプルダウンし、リソースの破棄をクリックし、インスタンスの削除を行います。

一つ注意点としては、こちらの画面でリソースの破棄ではなくワークスペースの削除をクリックしてもリソースは削除されません。あくまでもSchematicsのワークスペースはリソースをオーダーして削除する命令を行う道具であるため、ワークスペースを削除してしまうと一気に削除するように命令する道具がなくなることになります。そのため、もしリソース削除の前にワークスペースを削除した場合、手作業で一つずつリソースインスタンスを削除する必要があります。
スクリーンショット 2023-07-12 17.21.19.png
スクリーンショット 2023-07-12 17.23.39.png
リソースを破棄が完了したとのジョブメッセージが表示されると、リソースリストを確認してみます。ワークスペースインスタンス以外、全てのリソースが削除されたことがわかります。
スクリーンショット 2023-07-12 17.27.43.png
スクリーンショット 2023-07-12 17.28.07.png
その後最終的にアクションワークスペースの削除をクリックして、Schematicsのワークスペースを削除します。
スクリーンショット 2023-07-12 17.30.01.png

参考

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?