Amazon VPC Latticeネットワークを構築した話

こんにちは/こんばんは、技術本部 インフラストラクチャーDiv.の矢吹です。
最近は英語力を上げるべくひたすら単語を覚える日々を過ごしながら、休日は夫婦でゼルダの伝説をやってまして、主に防具集め&強化をしている日々を過ごしております。

はじめに

2023/05/31に一般提供されたAmazon VPC Lattice(以降 VPC Lattice とする)を利用したいという声があり、VPC Latticeネットワークの構築や管理方針決め等を行ったので、それをまとめたものから抜粋してブログに出来たらと思います。

VPC Latticeとは

VPC Lattice は、複数のアカウントや仮想プライベートクラウド(VPC)にわたるすべてのサービスの接続、保護、監視に使用できる完全マネージド型のアプリケーションネットワーキングサービスです。 AWS Transit Gatewayとの違いとしてICMPやSSHは出来ないことが特徴だと思います。

VPC Lattice設定の概要について

VPC Latticeの設定の概要は下記図の通りです。
Service Network Manager で VPC Lattice を使用し、サービスネットワークを作成、ポリシーを定義し、クロスアカウントアクセスを共有するプロセスを示しています。 サービス所有者はサービスを作成し、インバウンドトラフィックとアウトバウンドトラフィック用のルーティングとネットワークのルールを定義します。

Service Network Manager サブセット(画像上部)側の設定

  1. サービスネットワークの作成
    • 名前を選択し、認証タイプを設定する
  2. アクセスとモニタリングの定義
    • アクセスポリシーを設定および管理し、ログの送信先を選択する
  3. クライアントとサービスの関連付け
    • 関連付けられた VPC のリソースは、サービスネットワークに関連付けられたサービスにアクセスできます
  4. 他のアカウントとの共有
    • 特定のサービスまたはサービスネットワークをAWS Resource Access Managerで共有して、クロスアカウントアクセスを容易にする

サービス所有者サブセット側(画像下部)の設定

  1. サービスの作成
    • サービスを特定し、アクセスとモニタリングを定義する
  2. ルーティングの定義
    • サービスを保存するターゲットグループを指すリスナーとルールを追加する
  3. ネットワークへの関連付け
    • サービスがトラフィックから受信するネットワークを選択する

参考:https://aws.amazon.com/jp/vpc/lattice/

VPC Lattice環境の作成方法について

具体的な VPC Latticeの作成方法について記載します。
今回は二つのAWSアカウントを用いて、アクセス元AWSアカウントのVPC内EC2から、アクセス先AWSアカウントのVPC内ALB+EC2にアクセスできるか確認します。
EC2および、ALBは事前に作成したリソースを使用するため、作成手順などは割愛します。

以下に作成するリソースの情報を記載します。

作成するリソース

VPC Latticeネットワーク管理(Service Network Manager サブセット側)&アクセス元AWSアカウント

  • VPC Latticeサービスネットワーク
    • adways-vpc-lattice-network
  • [事前作成]EC2 ※1
    • cloud_coe_server(IPアドレス:10.1.33.54/32)

      アクセス先(サービス所有者サブセット側)AWSアカウント

  • VPC Lattice サービス
    • development-aws-ec2-vpc-lattice-yabuki
      • ドメイン
        • development-aws-ec2-vpc-lattice-yabuki-010f9cf06cb000350.7d67968.vpc-lattice-svcs.ap-northeast-1.on.aws
  • [事前作成]ALB ※2
    • yabuki-lattice-internal-alb
  • [事前作成]EC2 ※3
    • ec2-vpc-lattice-yabuki(IPアドレス:10.1.97.19/32)

※1 VPC Latticeネットワーク管理アカウントの中にEC2を立て、そこからアクセス先EC2に対して通信確認していますが、違うAWSアカウントでも可能です。
※2 VPC Latticeに紐づけるにはinternal ALBである必要があります。
※3 ALB配下に紐づているEC2、アクセスを確認するためにnginxを起動させています。

1. サービスネットワークの作成

VPC Latticeネットワーク管理(Service Network Manager サブセット側)アカウントで作成します。

サービスの関連付けは後で行うので今は空白にしています。

VPCはアクセス元で使われているVPCを選択、セキュリティグループは新たに作成します。

アクセス元サーバーのプライベートIPが許可されるように設定します。

情報: セキュリティグループの詳細

2. VPC Lattice ターゲットグループの作成

アクセス先(サービス所有者サブセット側) で作成します。

今回はALB配下のEC2に対してアクセスするのでALBを選択します。
VPCはアクセス先のEC2が属するものを選択します。

ターゲットの登録をします。ALBはinternal ALBでなければ表示に出てこないので注意してください。

確認

3. VPC Lattice サービスの作成

引き続き、アクセス先(サービス所有者サブセット側) で作成します。

事前に作成しておいたALB(yabuki-lattice-internal-alb)を紐づけます。

ネットワーク関連付けに関してはAWS Resource Access Managerでサービスネットワークを共有してからになるため、今は何もせずに次へ行きます。

VPC Lattice サービスを作成後、ドメインが表示されますが、サービスネットワークに紐付けを行わない限りアクセスは出来ません。

4. AWS Resource Access Manager(RAM) で VPC Lattice ネットワークサービスを共有

VPC Latticeネットワーク管理(Service Network Manager サブセット側)アカウント で作業します。

RAMの「自分が共有」からVPC Lattice Service Networksを選択し、1.サービスネットワークの作成で作成した VPC Latticeサービスネットワークを指定します。

そのまま次へ行きます

今回はAWSアカウントを指定して共有することにしました。

5. VPC Lattice サービスネットワークにサービスを関連付け

アクセス先(サービス所有者サブセット側) で関連付けを行います。

VPC Lattice - サービスネットワークを確認するとRAMで作業したサービスネットワークが共有されていることが確認できます。(確認のみ)

次にVPC Latticeサービスの画面で 3.VPC Lattice サービスの作成 で作成したものを開きます。

ネットワークの関連付けを作成から紐付け作業を行います。

RAMで共有されたVPC Latticeネットワークを選択し、保存します。

紐付けされたことを確認。

6. 確認

通信元

  • cloud_coe_server(IPアドレス:10.1.33.54/32)

通信先

  • development-aws-ec2-vpc-lattice-yabuki-010f9cf06cb000350.7d67968.vpc-lattice-svcs.ap-northeast-1.on.aws

以下のようにアクセス出来ることを確認


管理方針について

以下、現時点の管理方針について決めたことも記載しようと思います。

決めたこと

  • AWSが定義しているロールと責任に則って、以下のように管理する
    • サービスネットワークの所有者側の部分をクラウド管理部署(インフラDiv.)
    • サービスオーナー側の部分を各サービス管理部署(JANetやAppDriver等の開発部署)
  • 本番環境系とテスト環境のVPC Lattice ネットワークは分けて作成・管理する

メリット

  • 複数アカウント(サービス)に跨るサービスネットワークの所有者をクラウド管理部署(インフラDiv.)にすることで、管理や作業が職務分掌的にも整理される

    デメリット

  • インフラDiv.側の作業(サービスネットワークの共有)が必要となる

最後に

AWS Transit Gatewayでは出来ないのか?

結論からいうとTransit Gatewayでも出来ると思っていますが、セキュリティや設定のしやすさを考えるとVPC Latticeを利用する選択肢は良かったのかなと思っています。
今回の目的が共通基盤APIを作成し、いくつかのAWSアカウントからアクセスしたいという話だったのですが、SSH等をする必要がないこともあり、VPC Latticeを利用するには適していたのかなと思います。

以上、「Amazon VPC Latticeネットワークを構築した話」でした。使用される方の参考になれば幸いです。