AWS PrivateLink経由でのVPCリソースへのアクセス

# AWS PrivateLink 経由での VPC リソースへのアクセス

2024年12月のサービスアップデートにより、PrivateLink経由でVPCリソースへアクセスができるようになりました。

+ NLBなしでVPC内のリソースにプライベートアクセスが可能
+ NLB不要なので、コストを抑えられる
+ VPC CIDRが重複していても利用可能

https://aws.amazon.com/jp/about-aws/whats-new/2024/12/access-vpc-resources-aws-privatelink/

**従来の構成例**
![privatelink-old.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/b4feb09a-4d2f-6aee-1fdb-a8341c68d400.png)

**サービスアップデート後の構成例**
![privatelink-new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/4e5ed3bf-4511-04ea-2086-1b7b942c376f.png)

# 準備
+ 同じリージョンにアクセス元、アクセス先のVPCを2つ作る
+ 各VPCに1台ずつEC2を起動する
+ アクセス先のEC2はnginxをインストールし、HTTPアクセスをするとページが返ってくるようにする

![privatelink-new-sg-copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/8d83e717-3d50-dd3d-d817-0de25640c0e5.png)

# 設定
## セキュリティグループの作成
+ アクセス元のEC2用のセキュリティグループ
インバウンドルール：なし
アウトバウンドルール：リソースエンドポイント用のセキュリティグループへのHTTP通信を許可
+ アクセス先のEC2用のセキュリティグループ
インバウンドルール：Resouce gateway用のセキュリティグループからのHTTP通信を許可
アウトバウンドルール：なし
+ リソースエンドポイント用のセキュリティグループ
インバウンドルール：アクセス元のEC2用のセキュリティグループからのHTTP通信を許可
アウトバウンドルール：アクセス先のVPC CIDRへのHTTP通信を許可
+ Resource gateway用のセキュリティグループ
インバウンドルール：リソースエンドポイントのIPアドレスからのHTTP通信を許可
アウトバウンドルール：アクセス先のEC2用のセキュリティグループへの通信を許可

![privatelink-new-sg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/931997b2-8c2d-78d9-d571-105bb042820d.png)

## Resource gatewayの作成
VPCのマネジメントコンソールのPrivateLink and Latticeにある、Resouce gatewaysから作成。
後で作成するResource configurationで指定したリソースへのアクセスポイント

https://docs.aws.amazon.com/ja_jp/vpc-lattice/latest/ug/resource-gateway.html

+ Resource gateway name
任意
+ IPアドレスタイプ
IPv4
+ VPC
アクセス元のVPC
+ AZ
事前にサブネットを作成したAZ
+ サブネット
事前に作成したサブネット
+ セキュリティグループ
Resouce gateway用に作成したセキュリティグループ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/e78fbfde-6fe8-c54c-1b6d-f8c434ff6fab.png)

## Resource configurationの作成
VPCのマネジメントコンソールから、PrivateLink and Latticeにある、Resource configurationsから作成。
リソースのIPアドレスやARNを指定することで、他のVPCから接続するリソースを定義する。

https://docs.aws.amazon.com/vpc/latest/privatelink/resource-configuration.html

+ 名前
任意
+ Configuration type
Resouce
+ Type
Single
+ プロトコル
TCP
+ Resource gateway
先ほど作成したResource gateway
+ Resource type
IP resource
+ IPアドレス
アクセス先のEC2インスタンスのプライベートIPv4アドレス
+ Port ranges
1～65535
+ Association settings
Allow
+ Share resource configuration
選択しない
+ モニタリング
オフ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/4a0562f6-4732-b193-f9de-c29d07194c51.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/da1c3fad-4cb5-b7b5-4774-a1dab527e95c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/4d69d417-c149-8f5b-57a5-8e1f5276bb0c.png)


## リソースエンドポイントの作成
VPCのマネジメントコンソールから、PrivateLink and Latticeにある、エンドポイントから作成。
Resource configurationで指定したリソースへのプライベートアクセスを提供する。

https://docs.aws.amazon.com/vpc/latest/privatelink/use-resource-endpoint.html

### エンドポイントの設定
+ 名前タグ
任意
+ タイプ
リソース
+ サービス
先ほど作成したResource configuration
+ VPC
アクセス元のEC2があるVPC
+ DNS名を有効化
オン
+ サブネット
事前に作成したサブネット
+ セキュリティグループ
エンドポイント用に作成したセキュリティグループ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/a18ddd29-bd97-4df5-9359-4803519a572a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/4ac5ac77-0e1a-b150-1b98-39f7f0676530.png)

# 実際にアクセスしてみる
アクセス元のEC2から、リソースエンドポイントのIPアドレスにアクセスします。
最初に設定したhtmlが返ってくることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3434748/85e572fd-ad5b-ff03-b247-d5e3e58c4fd3.png)

# 実際に触ってみて分かったこと

+ VPCリソースへのアクセス専用のサービスのため、シンプルな設計になる
→構成の複雑化を避けられる

+ RDSのみ、ARN指定でリソース指定ができる
→フェイルオーバー対応のLambdaの作りこみが不要

+ TCP通信のみの対応で、UDP通信は未対応
→UDP通信の場合、従来通りNLBが必要

+ Resource gateway側のリソースから通信を行うことはできない
→双方向の通信が必要な場合は、別途検討が必要

+ リソースエンドポイントに、エンドポイントポリシーの設定ができない
→アクセス制限はセキュリティグループでかける必要がある

+ TCP通信のみの対応で、UDP通信は未対応
→UDP通信の場合、従来通りNLBが必要