2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Privatelink (NLB不要版) を使ってみる

Posted at

1. はじめに

  • CIDRが重複するVPC間を接続するのにPrivatelinkをよく使っている。(従来のPrivatelinkの構成については過去記事「【初心者】AWS PrivateLink を使ってみる」を参照)
  • これまでは接続される側のVPCにNLBなどを用意する必要があったが、2024/12にNLBなしでの構成ができるというアップデートがあったため、設定手順を確認する。

2. やったこと

  • VPC1にnginx(接続される用)を作成
  • VPC1にResource Gateway/Resource Configuration(VPC外からの接続を受けるための設定)を作成
  • VPC2にクライアント(curl打つ用)を作成
  • VPC2にResource Endpoint(VPC1のResource Configurationと繋ぐためのEndpoint)を作成
  • VPC2のクライアントから上記の経路を使用してVPC1のnginxへ接続

3. 構成図

image.png

  • 2024/12時点で、Resource Gateway/Configurationのアイコンがない!

4. AWS Privatelink (NLB不要版) の概念(自分の理解)

  • 接続される側のVPCで「Resource Gateway」を作り、VPC外からの接続を受ける口を作る。
  • 「Resource Configuration」を「Resource Gateway」の中に作り、VPC外から接続させたいリソース(EC2インスタンスやRDSインスタンスなど)を設定する。
  • 接続する側のVPCで「Resource Endpoint」を作り、接続したい「Resource Configuration」との道を作る。
  • 「Resource Gateway」「Resource Configuration」「Resource Endpoint」の3点セットで新しいPrivatelink、というイメージ。

5. 手順

5.1 VPCなどの準備

  • VPC1/VPC2を構成図のCIDRで作成
  • VPC1にnginx(接続される用)インスタンスを作成
  • VPC2にcurl用のインスタンスを作成

5.2 Resource Gatewayの作成

  • VPC1にResource Gatewayを作成する。

image.png

image.png

  • 足だしするAZ/subnetを指定すると、指定したsubnetにENIが作られる。

5.3 Resource Configurationの作成

  • Resource Gatewayの中に Resource Configurationを作成する。

image.png

image.png

image.png

  • VPC外から接続させたいインスタンスのホスト名とポート番号を指定する。
  • 今回は後で通信ログを見れるように、CloudWatch Logsへの出力を有効化する。(デフォルトはログなし)

5.4 Resource Endpointの作成

  • VPC2に、Resource Configurationへ繋げるための Resource Endpointを作成する。

image.png

image.png

image.png

  • Endpointのタイプとして Resourceを選択する。
  • 接続させたい先として、前の手順で作成したResource Configuration (=nginxへつなぐConfiguration)を選択する。
  • Endpointの作成場所として、VPC2内のAZ/subnetを選択する。そのsubnetにEndpointのENIが作られる。

image.png

  • Endpointの作成に成功すると、指定したsubnetにENIが作成され、IPアドレスが割り当てられる。

image.png

  • 「エンドポイントの関連付け」のところから、このEndpointのDNS名も確認できる。

5.5 接続確認

名前解決

  • VPC2では、Resource EndpointのDNS名の名前解決が可能。
[ec2-user@ip-10-0-0-121 ~]$ dig vpce-xxxxxxxxxxxxxxxx.rcfg-xxxxxxxxxxxxxxxx.xxxxxxx.vpc-lattice-rsc.ap-northeast-3.on.aws
~中略~
;; ANSWER SECTION:
vpce-xxxxxxxxxxxxxxxx.rcfg-xxxxxxxxxxxxxxxx.xxxxxxx.vpc-lattice-rsc.ap-northeast-3.on.aws. 60 IN A 10.0.2.243

AZ-3a経由のアクセス

  • AZ-3a側のResource Endpoint(10.0.2.243)経由でアクセスする。
[ec2-user@ip-10-0-0-121 ~]$ curl 10.0.2.243
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
~以後略~
  • Resource Configurationに関するCloudWatch Logsは以下のように保存される。
{
"eventTimestamp": "2024-12-26T09:10:43.578Z",
"vpcEndpointId": "vpce-xxxxxxxxxxxxxxxx",
"sourceVpcArn": "arn:aws:ec2:ap-northeast-3:xxxxxxxxxxxx:vpc/vpc-xxxxxxxxxxxxxxxx",
"resourceConfigurationArn": "arn:aws:vpc-lattice:ap-northeast-3:xxxxxxxxxxxx:resourceconfiguration/rcfg-xxxxxxxxxxxxxxxx",
"protocol": "tcp",
"sourceIpPort": "10.0.0.121:33818",
"destinationIpPort": "10.0.2.243:80",
"gatewayIpPort": "10.0.0.179:43971",
"resourceIpPort": "10.0.2.185:80"
}
  • nginxのアクセスログは以下。アクセス元のSRCIPは、Resource GatewayのENIが「プレフィクス委任」として、10.0.0.176/28を持っており、そこのIPになる様子。
[root@ip-10-0-2-185 nginx]# tail /var/log/nginx/access.log
10.0.0.179 - - [26/Dec/2024:09:10:43 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/8.5.0" "-"

AZ-3b経由のアクセス

  • AZ-3b側のResource Endpoint(10.0.3.123)経由でアクセスする。
[ec2-user@ip-10-0-0-121 ~]$ curl 10.0.3.123
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
~以後略~
  • Resource Configurationに関するCloudWatch Logsは以下のように保存される。
{
"eventTimestamp": "2024-12-26T09:23:47.177Z",
"vpcEndpointId": "vpce-xxxxxxxxxxxxxxxx",
"sourceVpcArn": "arn:aws:ec2:ap-northeast-3:xxxxxxxxxxxx:vpc/vpc-xxxxxxxxxxxxxxxx",
"resourceConfigurationArn": "arn:aws:vpc-lattice:ap-northeast-3:xxxxxxxxxxxx:resourceconfiguration/rcfg-xxxxxxxxxxxxxxxx",
"protocol": "tcp",
"sourceIpPort": "10.0.0.121:59610",
"destinationIpPort": "10.0.3.123:80",
"gatewayIpPort": "10.0.1.35:58673",
"resourceIpPort": "10.0.2.185:80"
}
  • nginxのアクセスログは以下。アクセス元のSRCIPは、Resource GatewayのENIが「プレフィクス委任」として、10.0.1.32/28を持っており、そこのIPになる様子。
[root@ip-10-0-2-185 nginx]# tail /var/log/nginx/access.log
10.0.1.35 - - [26/Dec/2024:09:23:47 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/8.5.0" "-"

6. 参考URL

7. 所感

  • 概念は分かったつもりになったので、使い分けなどを整理していきたい。また次は、EC2インスタンスではなくRDSインスタンスへの接続について検証したい。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?