AWS VPC 内の PrivateLink VPC Endpoint を VPN 接続された GCP VPC および別の AWS VPC から利用するための設定例
[履歴] [最終更新] (2021/07/31 21:52:39)
最近の投稿
注目の記事

概要

AWS VPC に設定された PrivateLink の VPC Endpoint を

から実行するための設定例を記載します。

Private hosted zone (PHZ) を利用するための VPC 設定

PrivateLink または Route53 による Private hosted zone (PHZ) を利用するためには、DNS hostnames と DNS resolution が両方とも Enabled になっている必要があります

Uploaded Image

VPC エンドポイントの作成

VPC Endpoint (VPCE) には PrivateLink によるものと、S3 および DynamoDB のみが対応する Gateway 型のものがあります

  • PrivateLink
    • Interface endpoints
    • Gateway Load Balancer endpoints
  • Gateway endpoints

PrivateLink による VPCE は Subnet 内のプライベート IP を持ちます。この VPCE を、VPN 接続された GCP VPC や別の AWS VPC から利用する設定を考えます。

補足: Gateway endpoints はプライベートIP を持たないため、他のネットワークから利用することができません。S3 は Gateway 型の他に Interface 型によってもサポートされているため、他のネットワークから利用するためには、Interface 型を利用します。ただし、S3 へのアクセスを行うクライアントが、VPCE 用に生成されたエンドポイントを明示的に使用する必要が発生します。参考: Amazon Simple Storage Service endpoints and quotasAWS PrivateLink for Amazon S3

To access Amazon S3 using AWS PrivateLink, you must update your applications to use endpoint-specific DNS names.

そのために、まずは Interface endpoints を作成してみます。例として Amazon Comprehend の VPCE を作成します。

VPCE のネットワークインターフェースを作成する Subnet を一つ以上選択します。選択した個数分だけ、VPCE のプライベートIP が払出されます。

Uploaded Image

Private DNS Name のチェックを外します。

チェックを入れると、comprehend.ap-northeast-1.amazonaws.com が VPCE のプライベートIP に解決されるような DNS レコードが自動で作成されます。

VPCE を一つの VPC からのみ利用する場合はそれで問題になりませんが、今回は別のネットワークである GCP VPC や他の AWS VPC からの VPCE 利用を考えているため、チェックを外して、別途 Route53 を用いて DNS レコードを作成します。

Uploaded Image

HTTPS (TCP 443) 通信が許可されるようなセキュリティグループを指定します。また、VPCE にポリシーを設定して、より細かいアクセス制御を行なうことも可能です。

Uploaded Image

VPCE は、プライベートなIP と、プライベートなIP に名前解決されるパブリックな DNS レコードを持ちます。

$ host vpce-0780d5a06cb1566c0-27y4uqrc.comprehend.ap-northeast-1.vpce.amazonaws.com
vpce-0780d5a06cb1566c0-27y4uqrc.comprehend.ap-northeast-1.vpce.amazonaws.com has address 10.2.3.136
vpce-0780d5a06cb1566c0-27y4uqrc.comprehend.ap-northeast-1.vpce.amazonaws.com has address 10.2.2.156

$ host vpce-0780d5a06cb1566c0-27y4uqrc-ap-northeast-1b.comprehend.ap-northeast-1.vpce.amazonaws.com
vpce-0780d5a06cb1566c0-27y4uqrc-ap-northeast-1b.comprehend.ap-northeast-1.vpce.amazonaws.com has address 10.2.2.156

$ host vpce-0780d5a06cb1566c0-27y4uqrc-ap-northeast-1c.comprehend.ap-northeast-1.vpce.amazonaws.com
vpce-0780d5a06cb1566c0-27y4uqrc-ap-northeast-1c.comprehend.ap-northeast-1.vpce.amazonaws.com has address 10.2.3.136

先程の Private DNS Name のチェックを入れたままにしておくと、更に、プライベートなIP に名前解決されるプライベートな DNS レコード comprehend.ap-northeast-1.amazonaws.com が利用できますが、今回は Route53 を利用して別途作成します。

Route53 Private Hosted Zone (PHZ)

comprehend.ap-northeast-1.amazonaws.com ゾーンを Private Hosted Zone (PHZ) として作成して、VPC に紐付けます。

Uploaded Image

Uploaded Image

他の AWS VPC から VPCE を利用するためには PHZ を紐付け

VPC Peering や Transit Gateway でネットワーク的に接続された、他の AWS VPC から VPCE を利用するためには、上記 Route53 PHZ を紐付けます。

DNS エイリアスレコードの作成

VPCE の IP アドレスに解決されるような A レコードを、エイリアス機能を用いて作成します。

Uploaded Image

Route53 Inbound Endpoint (PHZ を直接参照できない GCP VPC のための設定です)

他の AWS VPC については、Route53 PHZ を関連付けることで、VPCE のプライベートIP に名前解決可能な A レコードが利用できます。

VPN 接続された GCP VPC の場合は PHZ を直接利用できないため、GCP Cloud DNS からのアクセス先となる Route53 Inbound Endpoint を作成します。

UDP 53 へのアクセスが許可されているセキュリティグループを指定します。

Uploaded Image

Route53 Inbound Endpoint は VPCE と同様に、subnet 内にプライベート IP を持ちます。少なくとも二つの subnet を指定する必要があります。

Uploaded Image

Cloud DNS から利用するための IP アドレスです。

Uploaded Image

GCP Cloud DNS から Route53 Inbound Endpoint を参照するための設定

Route53 Inbound Endpoint の IP にクエリを転送するような Zone を作成します。

Uploaded Image

VPN 接続に利用している Cloud Router に対して、35.199.192.0/19 へのルートが GCP VPC 側に存在することを Advertise する設定を追加します。

Uploaded Image

AWS Route テーブルの Route Propagation を Yes に設定します。

Uploaded Image

35.199.192.0/19 に対するルーティング情報が Propagated Yes で追加されたことが確認できます。

Uploaded Image

補足: 35.199.192.0/19 への経路情報は Route53 Inbound Endpoint を利用するために必須です。

Route Propagation を利用できない場合は手動で Route テーブルに設定を追加する必要があります。

何らかの事情により、経路情報を設定できない場合は、Route53 Inbound Endpoint を利用せずに、静的に Cloud DNS レコードに対して comprehend.ap-northeast-1.amazonaws.com に関する A レコードを作成することが回避策として考えられます。

動作検証

GCP VM から Amazon Comprehend の API が VPCE 経由で利用できることを確認します。

$ host comprehend.ap-northeast-1.amazonaws.com
comprehend.ap-northeast-1.amazonaws.com has address 10.2.3.136
comprehend.ap-northeast-1.amazonaws.com has address 10.2.2.156

$ python -m awscli comprehend detect-dominant-language --text "It is raining today in Seat
tle."
{
    "Languages": [
        {
            "LanguageCode": "en", 
            "Score": 0.9925304651260376
        }
    ]
}

AWS セキュリティグループに関する補足

今回の例では以下の一つのセキュリティグループを VPCE、Route53 Inbound Endpoint、EC2 インスタンス の三つに対して使い回していますが、実際には用途毎に分けて運用します。

  • ICMP、SSH → GCP VPC からの 検証用 EC2 インスタンスへのアクセスのための設定です。
  • DNS(UDP) → GCP VPC からの Route53 Inbound Endpoint 利用のための設定です。
  • HTTPS → GCP VPC からの VPCE 利用のための設定です。

Uploaded Image

Transit Gateway で他の AWS VPC を接続する場合の補足

  • Route53 Private Hosted Zone (PHZ) で関連付けがなされていることを確認します。
  • DNS hostnames と DNS resolution が両方とも Enabled になっていることを確認します。
  • Private Link VPCE のセキュリティグループで AWS VPC からの HTTPS アクセスが許可されていることを確認します。
  • 二つの AWS VPC (hub, spoke) 両方について、Transit Gateway へのルーティングが存在することを確認します。

Uploaded Image

動作確認の例

[ec2-user@ip-10-3-3-134 ~]$ host comprehend.ap-northeast-1.amazonaws.com
comprehend.ap-northeast-1.amazonaws.com has address 10.2.2.33
comprehend.ap-northeast-1.amazonaws.com has address 10.2.3.113

[ec2-user@ip-10-3-3-134 ~]$ aws comprehend detect-dominant-language --text "It is raining today in Seattle."
{
    "Languages": [
        {
            "LanguageCode": "en", 
            "Score": 0.9925304651260376
        }
    ]
}

PrivateLink を集約するメリットとデメリットに関する補足

Interface 型 VPCE は時間毎に料金が発生します。PrivateLink を集約することによって、コストの削減が可能です。

一方で、集約することによって、一つの VPCE ポリシーで複雑なアクセス制御をする必要が発生します。ポリシーには文字数制限が存在することにも注意が必要です。

Note: A distributed VPC endpoint approach that is, an endpoint per VPC allows you to apply least privilege policies on VPC endpoints. In a centralized approach, you will apply and manage policies for all spoke VPC access on a single endpoint. With growing number of VPCs, the complexity of maintaining least privilege with a single policy document might grow. Single policy document also results in larger blast radius. You are also restricted on the size of the policy document (20,480 characters).

Centralized access to VPC private endpoints

料金の計算例

0.014 USD * 2 AZ * 24 hours * 30 days * 110 JPY/USD → 2217.6 JPY /month

集約しない場合で 10 VPC 存在

0.014 USD * 2 AZ * 24 hours * 30 days * 110 JPY/USD * 10 VPC → 22176 JPY /month

35.199.192.0/19 に関する補足

Private Link が存在する AWS VPC に接続する GCP VPC が一つであれば問題になりませんが、以下の図のように複数の GCP VPC が接続する場合に問題が発生します。

補足: 図における On premise を AWS VPC に置き換えても同じです。

35.199.192.0/19 へのルーティングを VPC A と VPC B のどちらか一方にしか設定できないため、以下の構成は成り立ちません。

Uploaded Image

Hub となる GCP VPC を用意する回避策が考えられます。

Uploaded Image

Understanding forwarding, peering, and private zones in Cloud DNS

参考資料

関連ページ
    概要 Amazon Simple Email Service (SES) は AWS におけるメール送受信サービスです。基本的な使い方を記載します。 二つの SES API バージョンについて SES API Action には v1 (classic) と v2 が存在しています。「ドキュメント」「aws cli」が v1 と v2 用にそれぞれ存在します。
    概要 こちらのページで基本的な使い方を把握した GCP DLP に相当する AWS サービスに Amazon Comprehend が存在します。GCP VPC 内から Public Internet を経由せずに利用する設定の例を記載します。 AWS VPC と GCP VPC の作成 クラウド 項目 値
    概要 AWS VPC と GCP VPC を IPsec-VPN で接続するための設定例を記載します。 Build HA VPN connections between Google Cloud and AWS AWS VPC の作成 VPC 10.2.0.0/16 ap-northeast-1b Subnet
    VPC Subnets for your VPC Subnet の最初の 4 IP と最後の 1 IP は予約されています。以下の IP は例です: 10.0.0.0 → ネットワークアドレス 10.0.0.1 → VPC router (AWS による予約) 10.0.0.2 → DNS サーバ (AWS による予約)
    EC2 Placement Groups Placement Group Strategies Cluster → ある AZ 内の同じ rack 内に配置することで、インスタンス間の通信遅延を小さくします。 Spread → 異なる AZ に配置することに加え、ある AZ 内において利用するハードウェアが重複しないように配置します。