Amazon Web Services ブログ

AWS PrivateLink クロスリージョン接続の導入

概要

AWS PrivateLink は、複数の VPC やアカウント間でサービスを安全かつ簡単に共有・アクセスする方法を提供します。すべてのトラフィックはパブリックインターネットを経由せずに AWS ネットワーク上に留まります。これまで、プロバイダーとコンシューマーは同じ AWS リージョン内に存在する必要がありましたが、AWS PrivateLink のネイティブなクロスリージョン接続のサポート開始により、異なるリージョン間で VPC エンドポイントサービスを共有・アクセスできるようになりました。これにより、サービスプロバイダーは単一のリージョンから世界中の顧客に SaaS ソリューションをプライベートに提供できるようになります。コンシューマーは、同一リージョン内のサービスと同じように、インターフェースエンドポイントを使用してクロスリージョン対応のサービスに簡単に接続できます。PrivateLink を介したクロスリージョン接続は、シンプルで安全であり、さまざまなユースケースに合わせてカスタマイズ可能です。

本ブログでは、AWS PrivateLink を介したクロスリージョン接続の仕組みと、グローバルデータの境界線を保護するための制御方法を紹介します。その後、エンドツーエンドの接続を確立する方法を示し、アーキテクチャの選択に役立つ考慮事項とベストプラクティスについて詳しく説明します。以降、本ブログでは簡潔さのため、VPC エンドポイントサービスを「サービス」、インターフェイス VPC エンドポイントを「エンドポイント」、AWS リージョンを「リージョン」と呼びます。

クロスリージョンアーキテクチャ

今日、多くのプロバイダーは特定のリージョンでサービスを提供していますが、世界中にコンシューマーを抱えています。この新機能のリリース前は、コンシューマーが別リージョンのサービスにアクセスしたい場合、リージョン間の VPC ピアリングや Transit Gateway (TGW) ピアリングを設定する必要がありました。彼らは自分のネットワークに CIDR 重複がないことを確認し、ネットワークの信頼境界を保護するためのガードレールを確立する必要がありました。あるいは、プロバイダーが拠点を他のリージョンに拡大したい場合、各リージョンに追加のインフラストラクチャをプロビジョニングする必要がありました。これにより、サービスプロバイダーとコンシューマーの両方にコストと複雑さが増していました。

Simplified PrivateLink architecture using Cross-region PrivateLink

図1. 新機能以前のネイティブなクロスリージョンサポートがないトポロジー図

図1 は、これまでコンシューマーがリージョン外でホストされているサービスにどのようにアクセスしていたかを示しています。ネットワークの信頼境界は、プロバイダーとコンシューマー間の分離を示しています。これは VPC やアカウント、または組織の境界である場合があります。サービスにアクセスするために、コンシューマーはプロバイダーのリージョンのトランジット VPC へのリージョン間の VPC ピアリングまたは TGW ピアリング接続を確立する必要がありました。そして、トランジット VPC 内の Availability Zones (AZ) をプロバイダーと一致させる必要がありました。

この新機能リリースにより、PrivateLink はこれらの複雑さをすべて抽象化し、コンシューマーとプロバイダーに対してシンプルでネイティブなリージョン間接続体験を提供します。プロバイダーは、クロスリージョン接続を有効にするだけで、任意のリージョンのコンシューマーがそのサービスにアクセスできるようになります。コンシューマーは、リージョン内のサービスに接続するのと同じように、エンドポイントを使用してこれらのリモートサービスに接続できるようになります。

図2 は、クロスリージョン PrivateLink のアーキテクチャ例を示しています。図1 で示した、リージョン内のエンドポイントパスによる連鎖的なピアリングとは対照的に、クロスリージョン接続ではサービスプロバイダーとコンシューマー間の AZ の整合性は必要ありません。プロバイダーは、サービスリージョンで AWS Network Load Balancer (NLB) を固定するために最低 2 つの AZ を使用する必要があります。コンシューマーは必要に応じて、複数 AZ にインターフェースエンドポイントを作成することができますが、高可用性のために 2 つ以上の AZ を使用することを推奨してます。これにより、いずれかのリージョンで AZ 障害イベントが発生した場合、PrivateLink はプロバイダーとコンシューマーに対して透過的に、正常な AZ へトラフィックを動的に振り分けることができます。

図2. クロスリージョン PrivateLink を使用して簡略化されたアーキテクチャ例

クロスリージョンのアクセス制御

PrivateLink のクロスリージョン接続は、セキュリティを最優先に設計されており、多層防御を提供します。コンシューマー側とプロバイダー側の両方が、クロスリージョンでサービスを共有およびアクセスするための適切な権限が設定されていることを確認する必要があります。

  1. クロスリージョン PrivateLink 接続をオプトイン: これまでのすべての PrivateLink アクションは ec2 名前空間に含まれていましたが、クロスリージョンのアクションは新しい vpce:AllowMultiRegion (アクセス許可のみ) アクションで制御されます。この許可をオプトインしないと、リージョン内の PrivateLink 接続は中断されずに維持されますが、リージョン間でのサービスの共有やアクセスは失敗します。

  2. サービスとエンドポイントのクロスリージョンアクセスを制御: サービスプロバイダーまたはコンシューマーとして、ec2:VpceMultiRegion boolean 型キーは、サービスがリージョン間接続を有効にしているか、または VPC エンドポイントが別のリージョンの PrivateLink サービスに接続されているかを示します。例えば、このステートメントはローカルリージョンでのサービスの共有とアクセスを許可します。また、サービスへのリージョン間アクセスを有効にすることも可能ですが、リモートサービスへのエンドポイントの作成は拒否します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "allowserviceshareandcreateendpoint",
          "Action": [
            "ec2:CreateVpcEndpointServiceConfiguration",
            "ec2:DeleteVpcEndpointServiceConfigurations",
            "ec2:DescribeVpcEndpointServiceConfigurations",
            "ec2:ModifyVpcEndpointServiceConfiguration",
            "vpce:AllowMultiRegion",
            "ec2:CreateVpcEndpoint",
            "ec2:DeleteVpcEndpoints",
            "ec2:DescribeVpcEndpoints",
            "ec2:ModifyVpcEndpoint"
          ],
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Sid": "denycrossregionendpoint",
          "Action": [
            "ec2:CreateVpcEndpoint",
            "ec2:DeleteVpcEndpoints",
            "ec2:DescribeVpcEndpoints",
            "ec2:ModifyVpcEndpoint"
          ],
          "Effect": "Deny",
          "Resource": "arn:aws:ec2:*:*:vpc-endpoint/*",
          "Condition": {
            "StringEquals": {
              "ec2:VpceMultiRegion": "true"
            }
          }
        }
      ]
    }
    JSON
  3. プロバイダー側でサービスにアクセスできるリージョンを定義: サービスプロバイダーとして、ec2:VpceSupportedRegion キーは、リモートアクセスを有効にできるリージョンを制限するのに役立ちます。例えば、このステートメントは、バージニア北部とアイルランドリージョン以外でのサービス共有を防ぎます。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "limitserviceshare",
          "Action": [
            "ec2:CreateVpcEndpointServiceConfiguration",
            "ec2:DeleteVpcEndpointServiceConfigurations",
            "ec2:DescribeVpcEndpointServiceConfigurations",
            "ec2:ModifyVpcEndpointServiceConfiguration",
            "vpce:AllowMultiRegion"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:ec2:*:*:vpc-endpoint-service/*",
          "Condition": {
            "ForAllValues:StringLike": {
              "ec2:VpceSupportedRegion": [
                  "us-east-1",
                  "eu-west-1"
              ]
            }
          }
        }
      ]
    }
    JSON
  4. コンシューマー側でサービスにアクセスできるリージョンを定義: コンシューマーとして、ec2:VpceServiceRegion キーは、エンドポイントを介してアクセスできるリモートサービスリージョンを定義するのに役立ちます。例えば、このステートメントは東京やアイルランドでホストされているサービスへのアクセスをブロックします。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "allowcrossregionendpoints",
          "Action": [
            "ec2:CreateVpcEndpoint",
            "ec2:DeleteVpcEndpoints",
            "ec2:DescribeVpcEndpoints",
            "ec2:ModifyVpcEndpoint",
            "vpce:AllowMultiRegion"
          ],
          "Resource": "arn:aws:ec2:*:*:vpc-endpoint/*",
          "Effect": "Allow"
        },
        {
          "Sid": "denyselectedregions",
          "Action": [
            "ec2:CreateVpcEndpoint"
          ],
          "Effect": "Deny",
          "Resource": "arn:aws:ec2:*:*:vpc-endpoint/*",
          "Condition": {
            "StringLike": {
              "ec2:VpceServiceRegion": [
                "ap-northeast-1",
                "eu-west-1"
              ]
            }
          }
        }
      ]
    }
    JSON
  5. オプトインリージョン: ほとんどのリージョンはデフォルトで AWS アカウントにおいてアクティブですが、2019年3月20日以降にローンチされたリージョンは、手動で選択した場合にのみアクティブ化されます。これらはオプトインリージョンと呼ばれます。オプトインリージョンからサービスへのアクセスを有効にする際、サービスプロバイダーはこれらのリージョンをオプトインする必要があります。同様に、コンシューマーがオプトインリージョンでホストされているサービスにアクセスしたい場合、まずそのリージョンをオプトインする必要があります。このガードレールは、アカウントで許可されていないリージョンへの、またはリージョンからの不測のアクセスを防ぐのに役立ちます。

これらの制御を組み合わせることで、あなたや組織は強固なセキュリティ境界を確立することができます。既存のリージョン内の PrivateLink 操作に影響を与えることなく、クロスリージョン間接続を選択したり、選択解除したりすることができます。これにより、管理された方法で機能を展開でき、データローカライゼーションに関する法的およびビジネス上のニーズに対応できます。

ステップバイステップのセットアップ

このセクションでは、バージニア北部リージョンでサービスを作成し、オレゴンリージョンからアクセスする手順を説明します。これらの手順は、ポリシーにて vpce:AllowMultiRegion と必要な AWS PrivateLink アクションが許可されていることを前提としています。

サービスプロバイダーのセットアップ

ステップ1: PrivateLink サービスの作成

新規または既存の NLB ベースのサービスに対して、クロスリージョンアクセスを有効にすることができます。この設定では、NLB と NLB ターゲットがすでに稼働していることを前提としています。バージニア北部リージョンの AWS VPC コンソールで、エンドポイントサービスを選択し、「エンドポイントサービスの作成」をクリックします。NLB のロードバランサータイプとして「ネットワーク」を選択します。利用可能なロードバランサーの中から、適切な NLB を選択します。ここでの「my-xrpl-svc」は、バージニア北部リージョンの4つのアベイラビリティーゾーンにわたって作成されています。

Create a PrivateLink service by selecting the NLB

ステップ2: サポートリージョンの設定

サポートリージョンのドロップダウンを使用して、コンシューマーがサービスにアクセスできるリージョンを選択してください。オレゴン、シンガポール、アイルランドのリージョンからこのサービスへのアクセスを有効にします。この例では、簡略化のため、追加設定で「承認が必要」の選択を解除し、「IPv4」を選択しています。NLB と VPC の構成によって選択項目が異なる場合があります。

Select the Region to allow access into the PrivateLink service

ステップ3: サービスの共有

サービスが作成されると、各サポートリージョンの状態が「保留中」から「利用可能」に変わるまで数分かかる場合があります。ここで生成されたサービス名をコンシューマーと共有して、サービスの発見を支援してください。PrivateLink サービスのセットアップおよび共有の残りの手順は、このブログで説明されているものと同じです。Application Load Balancer (ALB) を使用してサービスを構築している場合は、こちらに手順が用意されています。

Service name created for the PrivateLink Endpoint service

サービスコンシューマーのセットアップ

ステップ1: PrivateLink サービスの発見

コンシューマーとして、サポートされているどのリージョンからでも、共有されたサービスにアクセスできます。AWS. VPC コンソールで、オレゴンリージョンに切り替えます。次に、PrivateLink and Lattice の下で、エンドポイントをクリックし、「エンドポイントの作成」を選択します。「NLB と GWLB を使用するエンドポイントサービス」を選択します。なお、クロスリージョン接続は現在、NLB ベースのサービスのみをサポートしており、AWS や Marketplace のサービスはサポートしていません。

サービスリージョンの下のボックスにチェックを入れて「クロスリージョンエンドポイントを有効にする」を選択し、サービスがホストされているバージニア北部リージョンを指定します。上記のサービスプロバイダーのセットアップ内のステップ3で生成されたサービス名を入力し、「サービスの検証」をクリックします。指定されたリージョンに提供された名前のサービスが存在し、アクセスが許可されている場合、「サービス名が検証されました」というメッセージが表示されます。ここでは、バージニア北部リージョンのサービスに接続するために、オレゴンリージョンに「my-xrpl-consumer」とタグ付けされた VPC エンドポイントが作成されます。

Create an Endpoint to connect to a PrivateLink service and enable cross-region connectivity

ステップ2: インターフェイスエンドポイントの作成

VPC エンドポイントを作成する VPC とサブネットを選択する必要があります。リージョン内の PrivateLink では、コンシューマーがサービスプロバイダーがサポートする AZ にのみエンドポイントを作成できますが、クロスリージョン接続では、AZ の整合性は必要ありません。必要な信頼性に応じて任意の数の AZ を選択でき、ニーズに最も適したサブネットを選択できます。

Select the VPC and AZs in which to create the endpoint

エンドポイントが作成され、「利用可能」状態になると、クロスリージョン接続が正常に確立されます。以下のように設定の詳細を確認することができます。

Configured endpoint with subnets and DNS names to use for applications to access the cross-region PrivateLink service

複数のエンドポイント DNS 名が生成されていることに注目してください。最初の DNS エントリはリージョナル DNS 名で、その後に各エンドポイントの AZ の DNS 名のエントリが続きます。この例では2つの AZ を使用しているため、合計3つの DNS 名があります。アプリケーションにはより高い可用性と回復性のため、リージョナル DNS 名の使用が推奨されます。また、エンドポイントでプライベート DNS 名を有効にすることで、プロバイダーのサービスにアクセスするためのカスタム名を使用することもできます。プライベート DNS やサブネット、AZ に関する詳細については、AWS PrivateLink ユーザーガイドを参照してください。

考慮事項

プロバイダー

  • サービスへのアクセスを有効にできるリージョン数に制限はありません。ただし、同じパーティション内のリージョンからのアクセスのみを有効にすることができます。
  • クロスリージョンアクセスを有効にできるのは、NLB ベースのサービスのみです。現時点では、AWS サービスや Marketplace サービスはサポートされていません。
  • サポートリージョンのリストからリモートリージョンを削除することで、そのリージョンからのサービスへのアクセスを取り消すことができます。これにより、削除されたリージョンから新しいエンドポイントがサービスにアクセスすることを防げますが、既存のエンドポイントは維持されます。必要に応じて、これらのエンドポイントを手動で拒否する必要があります。

コンシューマー

  • クロスリージョン接続は、インターフェイスタイプの VPC エンドポイントでのみサポートされています。

  • ローカルリージョンまたはリモートリージョンのサービスへの VPC エンドポイントは、いずれも「VPC ごとのインターフェイス VPC エンドポイント」クォータにカウントされます。詳細の確認とクォータ引き上げの申請はこちらで行えます。

まとめ

AWS のグローバル展開に伴い、AWS PrivateLink のクロスリージョンサポートにより、SaaS サービスを1つのリージョンから世界中のカスタマーへシームレスに接続することができます。プロバイダーとコンシューマーの両方が、同じリージョンにインフラを設置することなく、互いにプライベートにアクセスすることを選択できます。

VPC コンソールのエンドポイントサービスとエンドポイントのオプションを使用して、AWS PrivateLink の利用を始めましょう。詳細については、AWS PrivateLink ユーザーガイドとホワイトペーパー「AWS PrivateLink を介したサービスへの安全なアクセス」を参照してください。

本稿は、2024年12月11日に Networking & Content Delivery で公開された “Introducing Cross-Region Connectivity for AWS PrivateLink” を翻訳したものです。翻訳は Solutions Architect の武松が担当しました。