【ハンズオン】PrivateLinkでサービス連携!「SaaSを自分のVPC内で使う方法(PrivateLink)」をやってみた #AWSSummit
こんにちは、崔です。
2020年9月8日から9月30日の間で開催されているAWS Summit Online のハンズオンセッション「SaaSを自分のVPC内で使う方法(PrivateLink)」を視聴および実践しましたので、レポートをお届けします。
AWS PrivateLinkを利用することで、VPC間のサービス連携が非常に簡単に構築できました。
セッション情報
スピーカー
アマゾン ウェブ サービス ジャパン株式会社
技術統括本部
プリンシパルソリューションアーキテクト 荒木靖宏 様
概要
AWS PrivateLink は、他の AWS VPC に対して安全にサービスを提供する手法です。このハンズオンでは、2つの VPC を SaaS のサービス提供者、受給者に分け、それぞれが必要な手順を体験いただきます。
資料
事前説明
AWS PrivateLink
- プライベート接続を介したサービスを提供するためのサービス
- サービスを利用する側のVPCでPrivateLink(VPCエンドポイント)を設定
- サービスを提供する側では、接続先としてNLBを設定
閉域接続
AWS PrivateLink の典型的な利用ケースは、閉域での接続です。
AWS PrivateLink は、特定のリージョンで使っている場合は、そのリージョンからAWSの外に一切出ることがありません。
まさに、閉域のサービスです。
オンプレミスとAWSの接続
オンプレミスとAWSを閉域で接続するためには、AWS Direct Connect や、Site-to-Site VPN、Client VPN 等を利用して実現できる。
メインに使われているのは、Direct Connectによる専用線接続。
閉域網の基本的な構成
Direct Connect を通じて、特定のVPCに接続することができる。
SaaSを利用したい場合に、提供ベンダに閉域網に参加するようお願いすれば、閉域網でSaaSを利用することができるはず。
SaaS事業者の立場になって考えてみましょう
お客様が増えていくにしたがって、A社向けシステム、B社向けシステムをどうやって共存していくかを考えていく必要がある。
エンドユーザの閉域網につなぐには個社専用VPCが必須
シングルテナントとして、VPCを作れば実現しやすいが、顧客のオンプレミスのNWでIPアドレスの衝突はないか、など検討するポイントは数多くある。
スケールするためには顧客の環境も重要
顧客のVPCからSaaS事業者のVPCに接続できればいいのでは?
SaaSが他企業向けにプライベート接続を介してサービスを提供できるようにするのが、AWS PrivateLink。
サービスを利用する側のVPCでPrivateLinkを設定し、サービスを提供する側ではNLBを設定する。
閉域網とPrivateLinkを使ったSaaS利用例
A社閉域網でA社のVPCがつながっており、そのVPC上にエンドポイントを作成し、SaaS側のNLBを紐付ける。
お客様が増えても、エンドポイントを増やすだけでいい。
これにより、マルチテナント対応が容易になる。
PrivateLink はスケーラブルかつシンプル
- ユーザーにアクセス方法を任せることができる
- サービス利用側と提供側の方向が明確
ハンズオン
2つのVPCをSaaSサービス提供者・受給者に分け、作業していきます。
- サービスプロバイダのVPCで行うこと
- アプリケーションの前段にNLBを構築
- VPCエンドポイントサービス設定を作成し、NLBを指定
- サービスコンシューマに対して、エンドポイントサービスへのアクセス権限を付与(今回は、同一アカウントのため不要)
- サービスコンシューマのVPCで行うこと
- サービスへのインターフェイスエンドポイントを作成
- 接続を有効にするために、インターフェイスエンドポイント接続リクエストを承諾
事前準備
- Client VPC の準備
- 10.100.0.0/16
- Provider VPC の準備
- 10.100.0.0/16 (今回はあえてIPアドレスを同じにしている)
- SecurityGroupは22と80を許可
- NLBの作成
- EC2を3台起動
- Client VPCに1台
- Provider VPCに2台
- httpdをインストール
用意されているCFnテンプレートを利用し構築します。
プロバイダ側の作業
NLBを構築していきます。
- 名前はprovider-NLBとする
- スキームでは、内部を選択します
- アベイラビリティーゾーンのところでは、VPCは Provider-VPCを選択。us-west-2cを設定する
ルーティングを設定します。
名前はprovider-targetとします。
ターゲットを登録します。 2つのインスタンスを追加します。
NLB作成後、VPCエンドポイントサービス設定を作成し、NLBを指定します。
- VPC > エンドポイントのサービス > エンドポイントサービスの作成 に進む
- NLBを関連づける
サービス名を確認しておきます。
クライアント側の作業
エンドポイントを作成します。
- VPC > エンドポイント > エンドポイントの作成 に進む
- サービスカテゴリ は「サービスを名前で検索」を選ぶ
- 先程確認をしておいたエンドポイントサービス名を入力する
- 「検証」をクリックすると確認できる
- VPCはクライアントVPCを指定する
- セキュリティグループを作成する
- 名前はfor-access-provider-NLBとする
- HTTPをそのVPC内(10.100.0.0/16)からのみ受け付けるようにする
作成したエンドポイントのステータスが、「承諾の保留中」であることを確認します。
プロバイダ側の作業
エンドポイント接続のリクエストを承諾します。
- VPC > エンドポイントのサービスにすすむ
- 作成したエンドポイントを選択し、「エンドポイント接続」のタブを選ぶ
- エンドポイント接続リクエストを承諾する
クライアント側からPrivateLinkを使う
クライアント側で、エンドポイントのURLを確認します。
- VPC > エンドポイント に移動する
- ホスト名とIPアドレスを確認します
- DNS名をメモします
Client VPC内のEC2にログインします。
EC2 Instance ConnectをつかってブラウザベースでのSSH接続をします。
先にメモをした、エンドポイントでcurlで接続します。
クライアント側から無事に接続することができました。
まとめ
非常に簡単に、エンドポイントとエンドポイントサービスを作成し、接続することができました。
AWS PrivateLinkを使用することで、VPCと異なるアカウントのサービスを簡単に接続することができ、ネットワークアーキテクチャーを大幅に簡素化することができます。
セキュリティグループやルートテーブルを設定したり、といったことが不要です。
また、サービス提供側と利用側でIPアドレスの重複があっても問題ありません。
AWS PrivateLinkを利用し、セキュアでスケーラブルな方法で接続ができます。
異なるVPC間や異なるアカウント間の連携に、PrivateLinkが利用できれば構成もシンプルになっていきますね。