目次
インフラ構築と自動化が得意。TerraformとAnsibleでインフラを自動構築するお仕事が多め
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 quotas、AWS 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
参考資料
- Integrating AWS Transit Gateway with AWS PrivateLink and Amazon Route 53 Resolver
- Centralized access to VPC private endpoints
- AWS PrivateLink & Snowflake
- Centralize access using VPC interface endpoints to access AWS services across multiple VPCs
- Choosing Your VPC Endpoint Strategy for Amazon S3
- DNS Forwarding (Zone Forwarding and DNS Policy) in GCP
- Understanding forwarding, peering, and private zones in Cloud DNS
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。
関連記事
- GKE における Node および Pod の autoscalingGoogle Kubernetes Engine (GKE) における autoscaling について、用語の意味を整理します。 GKE の機能による Node の autoscaling GKE のクラスタには Standard と Autopilot の二種類が存在します。 Autopilot の場合は Node は Google によって管理されるため、自動で autoscaling され...
- Snowflake におけるネットワーク関連の設定本ページではネットワーク関連の設定について記載します。 Network Policy によるアクセス元 IP 制限 IPv4 で指定します。IPv6 は 2021/9/21 時点では利用できません。 allowed list で許可されていない IP は block されます。 allowed list が /24 等で指定されており、その一部を
- VPC Service Controls に関する雑多な事項の整理VPC Service Controls (VPC-SC) に関する雑多な事項を記載します。 Private Google Access の基本形 Private Google Access は外部 IP を持たない VM のための機能です。VPC の機能ですが、VPC-SC と関連するため基本事項を記載します。 [Private Google Access](ht
- AWS IAM Role を GCP から STS 認証で利用する設定例GCP から AWS IAM Role を利用するための設定例を記載します。 GCP Service Account の作成 Service Account を作成して Unique ID を確認します。 AWS IAM Role の作成 Trust relationship の設定は Web Identity を選択します。Identity Provider
- Amazon Comprehend を GCP VPC 内から実行する設定の例 (Public Internet 接続なし)GCP DLP に相当する AWS サービスに Amazon Comprehend が存在します。GCP VPC 内から Public Internet を経由せずに利用する設定の例を記載します。 AWS VPC と GCP VPC の作成 クラウド 項目 値 AWS VPC region ap-northeast-1 AWS VPC CIDR 10.2.0.0/16 AWS ap-north