結論
ALB作成時にスキームがインターネット向けになっておりRoute53のプライベートホストゾーンを利用してもエイリアスによる接続を行うことでパブリックIPを返却するようになっていた。
ALB作成時に内部を選択するとプライベートIPアドレスが返却されるようになる。
顛末
要件
WebアプリケーションA(以降スクレイパーと呼ぶ)から、WebアプリケーションB(以降スクレイプリーと呼ぶ)へスクレイピングを行いたい。
社内利用のアプリケーションのため、特定のIP以外アクセスできないようにしたい。
環境
作戦1:セキュリティーグループにVPCのCIDRを追加
ECSのIPアドレス起動のたびに変更されるので固定するのは面倒。
なのでドメインが固定されているALBにアクセスすれば簡単に実現できそう。
同じVPCサービス内だからプライベートIPで接続されそう。
上記の理由からスクレイプリーのセキュリティグループにVPCのCIDRを設定し、同じVPC内のサービスからのアクセスを許可してしまえばいいと思い設定、スクレイパーを実行してみました。
結果:スクレイパーはスクレイプリーにアクセスできず、タイムアウトすることになりました。
作戦2:プライベートホストゾーンを利用すればいい
調べているとRoute53にはプライベートホストゾーンという概念があり、それを利用するとこでVPCネットワーク内でドメインによるアクセスを行うとプライベートIPアドレスが利用できるというものです。同じVPC内であればドメインによるアクセス時に勝手にプライベートIPになると勘違いしていたので、これを行っていないため、うまくいかないことに納得しましたあ。また、プライベートホストゾーンはパブリックホストゾーンと競合しても問題ないそうです。
早速プライベートホストゾーンを設定し、試してみます。
結果:スクレイパーはスクレイプリーにアクセスできず、タイムアウトすることになりました。
作戦3:スキームが内部のALBを利用する
調べているとALBにはスキームでインターネット向けか内部を選択できます。
この時にインターネット向けを選んでいるとプライベートホストゾーンを利用していてもパブリックIPを返却するみたいです。
これを実装するには以下の構成を行う必要があります。
もうお気づきですね、そう料金が跳ね上がっているんです。
ECSの料金とALBの料金とホストゾーンの料金がかかるのでこれならNATゲートウェイを利用する方が安く済みそうです。
結果:料金が高いことがわかった
作戦4:NATゲートウェイを利用し、スクレイパーのパブリックIPを固定する
あとは当初のALBのセキュリティグループでスクレイパーからのパブリックIPを固定すればいいだけですね。
結果:シンプルに解決
学び
- ALBとターゲットグループは1対1対応
- EC2のAWSコンソールからターゲットグループを作成する時にECSのリソースを選択できない。ECSのサービス作成でターゲットグループを作成することができる。
- ALBはALBをターゲットにしたターゲットグループを選択できない
最後に
ここまで読んでくださりありがとうございます。
スクレイプリーという言葉へのなんとも言えない違和感を堪能していただきありがとうございました。