【PrivateLink】インターネットを介さずプライベート環境だけでNew Relicの監視を使用する

記事タイトルとURLをコピーする

みなさんこんにちは。マネージドサービス部MSS課の塩野(正)です。

今回はインターネットを介さずプライベート環境だけでNew Relic監視をおこなう話をしたいと思います。

目次

想定読者

  • New Relicをプライベート環境で使用したい方
  • AWSのネットワークに詳しくない方

AWS PrivateLinkとは

まずAWS PrivateLinkとはなんぞや?という方向けに簡単にサービス説明をします。AWS PrivateLinkは、AWSのサービスにセキュアでプライベートなネットワーク接続を提供するサービスです。通常AWSのリソースやサービスにアクセスする際にはインターネットを介して通信を行いますが、AWS PrivateLinkを利用することでユーザーは自分の仮想プライベートクラウド(VPC)内でAWSサービスにプライベートな接続を確立できます。

プライベート環境の監視

会社のポリシーによってインターネットに通信を出したくない、インターネットの出口の回線が細い、ルーターの性能がよくなくてスピードがでないためなるべくインターネット利用は絞りたいなど、インターネット回線の制約があるケースはそれなりにあるのではないかと思います。

とはいえ、プライベートサブネットでマネージドサービスを利用しており障害の切り分けがし辛くなっていたり、オブザーバビリティを活用して開発効率を上げたり、障害対応の時間を削減したいというケースももちろんあると思います。今回はどちらもやりたいけど、どうしたらいいんだろうというケースについて話をしていきます。

こういった場合の対応策は、基本的にはオブザーバビリティツールを提供しているNew RelicなどのSaaSサービス提供者側にてエンドポイントを色々なリージョンにバラまいて頂くか、エンドポイントが提供されているリージョンと実際の監視対象があるリージョンをVPC PeeringまたはTrangit Gatewayなどで接続するしか方法はありませんでした。

例えばNew Relicの場合は下記のドキュメントの一番下に記載がある「ピアリング接続を設定する」の項目の「VPC ピアリング」または「トランジットゲートウェイピアリング」のパターンがまさにその構成になります。

docs.newrelic.com

  • AWS PrivateLink 経由で送信する場合の構成
    • VPC Peering接続の場合

    • Transit Gateway接続の場合

現在サポートされている接続方法の場合も少しだけ課題があり、例えば「VPC ピアリング」の場合は、ピア接続しているVPC以外からピア接続している先のVPCへ通信ができなかったり、「トランジットゲートウェイピアリング」の場合は構成が大きくなりすぎることによってVPC間のルーティングやらサブネット構成の管理が複雑になりすぎて安易に構成変更し辛いなど、課題が全くないとは言い切れませんでした。

VPC エンドポイントをピンポイントで利用するリージョンに設置して通信できることによってこういった課題が改善されことはわかっているものの、エンドポイントを設置するということは各リージョンにサービスに耐えられるだけのサーバやコンテナを展開する必要があり、このハードルがかなり高いためにSaaSサービス提供者側もなかなかエンドポイントを設置してくれるという選択を取り辛いという状況でした。ところが、先月のAWSのアップデートで下記のニュースが流れてきました。

AWS PrivateLink now supports native cross-region connectivity. Until now, Interface VPC endpoints only supported connectivity to VPC endpoint services in the same region. This launch enables customers to connect to VPC endpoint services hosted in other AWS Regions in the same AWS partition over Interface endpoints.

AWS PrivateLinkがネイティブのクロスリージョン接続をサポートするようになりました。 これまで、Interface VPCエンドポイントは、同じリージョン内のVPCエンドポイントサービスへの接続のみをサポートしていました。 今回の発表により、お客様はInterfaceエンドポイントを介して、同じAWSパーティション内の他のAWSリージョンでホストされているVPCエンドポイントサービスに接続できるようになります。

aws.amazon.com

ということは、New RelicなどのSaaSサービス提供者が任意にポイントに設置してある VPCエンドポイント を他のリージョンに設置できるのでは?という夢が広がります。しかしながら、AWSのアップデートの記事をよく読んでみるとこういう表現をしているために、想像している構成ができないといったような勘違いをする人が多くいるように見受けられました。

This launch enables customers to connect to VPC endpoint services hosted in other AWS Regions in the same AWS partition over Interface endpoints.

お客様はInterfaceエンドポイントを介して、同じAWSパーティション内の他のAWSリージョンでホストされているVPCエンドポイントサービスに接続できるようになります。

もう少しかみ砕いて説明をしましょう。

AWS PrivateLinkの構成では、SaaSサービス提供者のサービスを受けられるようにするエンドポイントとしてVPCエンドポイントというENIをVPC内に設置するような設定を行います。しかしながらWhat's New の記事には「VPCエンドポイントサービス」がクロスリージョンであると明記されており、「VPCエンドポイント」がクロスリージョンに対応しているとは明記されておりません。つまり、このアップデートはNew RelicなどのSaaSサービス提供者がVPCエンドポイントのリージョン展開を容易にするサービスであって、SaaSサービス提供者が提供しているリージョン限定のVPCエンドポイントをユーザーが好きなところに移植できるアップデートではないという風に解釈できます。

ここから一人のユーザーの立場として取れる対応は、「SaaSサービス提供者に対して、簡単にエンドポイントを設置できるようになったんだからXXリージョンにも設置してよというお願いをする」こと、「自分でVPCエンドポイントサービスを作成し、別リージョンにVPCエンドポイントを生やす」ことの2点です。

基本的に技術的にできることと、実運用で障害切り分けを難しくするからあまりやらない方がいいよということの観点でお伝えすると、SaaSサービス提供者にお願いするのはアリですが、自分でエンドポイントを生やすのは障害ポイントを増やすことにつながるので、あまりオススメはいたしません。が、技術的に通信ができる環境を構築することは可能ですので、SaaSサービス提供者がVPCエンドポイントを追加するまでの暫定対処として費用面などを考慮してもプライベート環境の通信をおこなうほうがメリットが大きいならエンドポイントを作るのはアリと考えています。

構成

それでは、実際にAWS PrivateLinkを使って完全プライベート環境下におけるNew Relicのインフラエージェント監視について話をしていきたいと思います。

構成は下記の通りですが、東京リージョンにNew RelicのVPCエンドポイントを設置するために、バージニアリージョンにVPC Endpointを設置し、そのエンドポイントをVPC Endpointサービスに集約するためにNLBを使用しているという構成になります。なお、バージニアリージョンのVPCエンドポイントはAZ間でActive/Standbyの冗長構成となっているため、複数あるIPアドレスの片方のみHealthが有効になるようです。

設定概要

クロスリージョン監視の構成要素

AWS PrivateLinkを使用したクロスリージョンでのNew Relic監視を実現するために必要な要素は下記の通りです。

  1. バージニアリージョンでの構成

    • VPCエンドポイント
    • Network Load Balancer (NLB)
    • ターゲットグループ
    • VPCエンドポイントサービス
  2. 東京リージョンでの構成

    • VPCエンドポイント
    • 適切なセキュリティグループ設定
    • Route53 プライベートホストゾーン

設定手順

今回のブログ記事で取り上げているNew Relicのエンドポイントはバージニアリージョン(us-east-1)以外に、 オハイオリージョン(us-east-2)、オレゴンリージョン(us-west-2) などが対応していますが、記事の便宜上バージニアリージョンを採用しています。またクロスリージョン先のリージョンも便宜上、東京リージョン(ap-northeast-1)を使用しています。

1. バージニアリージョンでのVPCエンドポイントの作成

まず、バージニアリージョンにVPCエンドポイントを作成します。これは監視対象となるリソースとの通信の入り口となります。

  1. マネジメントコンソールのVPCの画面から、PrivateLink and Lattice>エンドポイント を選択し、エンドポイントの作成をクリックする
  2. エンドポイントの設定で任意の名前を入力
  3. タイプで PrivateLink Ready パートナーのサービス を選択
  4. サービス設定で エンドポイント サービス名 を入力
    ※New Relicの場合は、下記ページに記載されている エンドポイント サービス名 を入力し、検証ボタンをクリック
    AWS PrivateLink 経由で New Relic データを送信する | New Relic Documentation

  5. 展開対象のVPCを選択する

  6. VPC エンドポイントを設置するサブネットを選択する
  7. 任意のセキュリティグループを選択する
  8. エンドポイントを作成をクリックする

通信が必要なVPCエンドポイント分、同じ作業を繰り返します。

2. Network Load Balancer (NLB)用のターゲットグループの設定

バージニアリージョンのVPCエンドポイントサービスで使用するNetwork Load Balancer (NLB)用のターゲットグループを作成します。

  1. マネジメントコンソールのEC2の画面から、ロードバランシング>ターゲットグループを選択し、ターゲットグループの作成を選択する
  2. ターゲットタイプの選択でIPアドレスを選択する

  3. 任意のターゲットグループ名を入力、プロトコルはHTTPSでポートを443と入力、IPアドレスタイプをIPv4と入力する

  4. 展開対象のVPCを選択して次の画面に進む

  5. ターゲット登録の項目でVPCエンドポイントを作成した際に払い出されたローカルIPアドレスを指定し、すべての登録が終わればターゲットグループ作成ボタンをクリックする

通信が必要なVPCエンドポイント分、同じ作業を繰り返します。

3. Network Load Balancer (NLB)の作成

ここではバージニアリージョンのVPCエンドポイントサービスで使用するNetwork Load Balancerを作成します。

  1. マネジメントコンソールのEC2の画面から、ロードバランシング>ロードバランサーを選択し、ロードバランサーの作成を選択する
  2. ロードバランサータイプは Network Load Balancer を選択しますので、Network Load Balancerの欄の作成をクリックする
  3. ロードバランサー名の欄に任意の名前を入力する
  4. スキームは内部を選択する
  5. ロードバランサーの IP アドレスタイプはIPv4を選択する

  6. 展開対象のVPCとアベイラビリティーゾーンを選択する

  7. 任意のセキュリティグループを選択する

  8. リスナープロトコルとポートをTCP:443に設定し、対象のターゲットグループを選択する

  9. ロードバランサーの作成をクリックする

  10. 作成したロードバランサーをクリックし、アクションからセキュリティグループの変更をクリックする
  11. セキュリティ設定でPrivateLink トラフィックにインバウンドルールを適用するのチェックを外して設定を保存する

通信が必要なVPCエンドポイント分、同じ作業を繰り返します。

4. VPCエンドポイントサービスの作成

ここでは、前項までに作成したNetwork Load Balancer (NLB)を使用してVPCエンドポイントサービスを作成します。

  1. マネジメントコンソールのVPCの画面から、PrivateLink and Lattice>エンドポイントサービス を選択し、エンドポイントサービス の作成をクリックする
  2. ロードバランサーのタイプはネットワークを選択する
  3. 使用可能なロードバランサーの中から対象のロードバランサーを選択する

  4. サービスリージョンでサービスを展開したいリージョンを選択する
    ※上記のPrivateLinkのアップデートの話はおそらくこの部分と推測しています

  5. サポートされている IP アドレスタイプでIPv4にチェックを入れます

  6. 作成ボタンをクリックしてVPCエンドポイントサービスを作成する

通信が必要なVPCエンドポイント分、同じ作業を繰り返します。

5. 東京リージョンでのVPCエンドポイントの作成

ここではVPCエンドポイントサービスを利用したい他のリージョン(今回は東京リージョンを指定)側でも、 バージニアリージョンに作成したVPCエンドポイントサービスに接続するためのVPCエンドポイントを作成します。

基本的な手順は項1と同じですが、違うところは指定するVPCエンドポイントサービスは項4で作成したものを使用するという点になります。設定が完了したら、バージニアリージョンのVPCエンドポイントサービスを開き、東京リージョンに作成したVPCエンドポイントを承認すれば設定は完了です。

6. 東京リージョンにRoute53 Private Host Zone を設定する

基本的な通信の設定は項5までで完了となりますが、xxx.newrelic.com といったサービス展開しているアドレスに対して内部のVPCエンドポイントの名前解決が必要になりますので、サービス展開先のリージョンにあるVPCに対して Route53 Private Host Zone を設定しNew RelicのURLに対して名前解決できるように設定します。

  1. マネジメントコンソールのRoute53VPCの画面から、ホストゾーン を選択し、ホストゾーンの作成をクリックする
  2. ホストゾーンで解決させたいドメイン名を入力する
    ※ここでは newrelic.com や nr-data.net などになります

  3. タイプに プライベートホストゾーン を選択する

  4. ホストゾーンに関連付ける VPC として、VPCエンドポイントを設置したVPC選択し、ホストゾーンの作成をクリックする

  5. 作成されたホストゾーンの一覧から編集対象のドメインの画面を開く

  6. ホストゾーンの詳細画面からレコードを作成をクリックする

  7. ルーティングポリシーはシンプルルーティングを選択し、次へをクリックする

  8. シンプルなレコードを定義のボタンをクリックし、レコード追加画面を開く

  9. 下記エンドポイント一覧から対象のエンドポイントのサブドメイン名をsubdomainの欄に入力する
    エンドポイント一覧:Send New Relic data via AWS PrivateLink | New Relic Documentation

  10. レコードタイプをAレコードとして設定し、東京リージョンに設置したVPCエンドポイントのIPアドレスを 値/トラフィックのルーティング先 の欄に記載する

  11. シンプルなレコードを定義をクリックする

通信が必要なVPCエンドポイント分、同じ作業を繰り返します。

注意事項

クロスリージョン構成はとても便利ですが、この構成を採用する際は以下のコスト要因があることに留意が必要になります。

  1. リージョン間のデータ転送料金
  2. VPCエンドポイントの使用料
  3. NLBの運用コスト

まとめ

AWS PrivateLinkを使用したクロスリージョン監視の構築は、複数のコンポーネントを適切に設定する必要がある複雑な作業です。しかしながら、インターネットを介して通信せざるを得ないトラフィックをAWS内部に留めることができるため、うまく活用できればそれ以上にメリットのある設定ということが言えるでしょう。余談な話になりますが、SaaSサービス提供者の立場としては従来構成ではリソースの展開まで必要だったのが、サービスリージョンの設定変更だけで簡単に複数リージョンに対してのVPCエンドポイントを作成することができるようになるため、今後は、様々なSaaS事業者で今まで提供されていなかったクロスリージョンでのこうしたサービス展開が広がることを個人的に期待しています。

この記事がどなたかのお役に立てれば幸いでございます。

◆ 塩野 正人
◆ マネージドサービス部 所属
◆ X(Twitter):@shioccii
◆ 過去記事はこちら

前職ではオンプレミスで仮想化基盤の構築や運用に従事。現在は運用部隊でNew Relicを使ってサービス改善に奮闘中。