モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

AWS VPC 内の PrivateLink VPC Endpoint を VPN 接続された GCP VPC および別の AWS VPC から利用するための設定例

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2021/07/28
最終更新最終更新
2023/12/05
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    インフラ構築と自動化が得意。TerraformとAnsibleでインフラを自動構築するお仕事が多め

    0
    ステッカーを贈るとは?

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

    • VPN 接続した GCP VPC
    • AWS の別の VPC

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

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

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

    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 が払出されます。

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

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

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

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

    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 に紐付けます。

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

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

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

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

    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 へのアクセスが許可されているセキュリティグループを指定します。

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

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

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

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

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

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

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

    補足: 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 利用のための設定です。

    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 へのルーティングが存在することを確認します。

    動作確認の例

    [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 のどちらか一方にしか設定できないため、以下の構成は成り立ちません。

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

    Understanding forwarding, peering, and private zones in Cloud DNS

    参考資料

    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    インフラ構築と自動化が得意。TerraformとAnsibleでインフラを自動構築するお仕事が多め

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事