LoginSignup
8
3

More than 5 years have passed since last update.

AWS Private Link設定時に特定のサブネット(AZ)からアクセスできない状態に遭遇した

Posted at

やりたかったこと

AWS Private Link についてはこちらを参照ください
AWS PrivateLinkのアップデート – お客様のアプリケーション&サービス向けのVPCエンドポイント

一言で言うとSaaSサービスのような用途のエンドポイントを、インターネット介さずにAWS間のネットワークでセキュアにアクセスできるよ。ってやつです。

で、やりたかったのは以下のような構成です。
ほぼTerraformで構築した。
image.png

ハマったこと

User AccountのSubnet Cからは、Endpoint経由でService AccountのEC2にアクセスできたけど、なぜかSubnet A, Bからは Service AccountのEC2にアクセスできない

調べたこと

1. どこからならアクセス可能か

Service AccountのEC2

localhostからアクセス可能

Service AccountのEC2の横にあるインスタンス

Private IPでアクセス可能
且つ、NLBのDNS名でアクセス可能

User AccountのSubnet AのEC2

Endpoint名でアクセス不可

User AccountのSubnet BのEC2

Endpoint名でアクセス不可

User AccountのSubnet CのEC2

Endpoint名でアクセス可能

結論

Endpoint -> Endpoint Service -> NLB -> EC2自体の 設定 は問題なさそう
ネットワーク周りが怪しい

2. セキュリティグループ

Endpoint

Endpointにセキュリティグループが設定できるので確認した。
User AccountのVPC丸ごと開けていた
もちろんOutboundは制限なし

Endpoint Service

セキュリティグループは設定できないので関係なし

NLB

セキュリティグループは設定できないので関係なし

EC2

NLBはクライアントIPをそのまま持ってくるため、User AccountのIPアドレスの開放が必要
User AccountのVPCとService AccountのVPCを丸ごと開けていた
もちろんOutboundは制限なし

結論

Subnet CのEC2からアクセスできていて、全てのSubnetを包括したCIDRで開けているから問題ないはず

3. NLBの設定しているSubnet

全てのSubnet(AZ)を設定済み

4. NACL

デフォなので特に制限無し

5. ルートテーブル

Subnet A, Bのルートテーブルがおかしいのか・・?と思い確認
どちらのアカウントもSubnet毎に分けているわけではないので差異は無し。

その日は諦めました

そして一日経過し判明

なんてことはない、NLBの クロスゾーン負荷分散 がオフになっていました。
つまり、クロスゾーン負荷分散が有効では無い、且つEC2が無いので分散しない状態でした。
しかも、EC2の横から確認したインスタンスは同じゾーンだったのでNLB経由でも自ゾーン内で通信するため問題ありませんでした。

image.png

そして クロスゾーン負荷分散 を有効にするとこうなりました。

image.png

なぜクロスゾーン負荷分散を有効にしていなかったのか

そう。冒頭に申し上げましたが、私はTerraformでNLBを構築したのですが、
設定を明示していなかったため、デフォルトとなり無効状態となっていたようです。。

みなさん、 クロスゾーン負荷分散 は有効にしない理由がほぼ無いので、有効にしておきましょう。
気が向けばTerraformにPR投げておきます。

補足

今回でわかったことは、アカウント跨いでもゾーンが同じならやっぱりゾーン内で通信は解決してるのね。と言うことを身に沁みました。

8
3
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
8
3