Fargate から ECR プライベートリポジトリへ接続するためのアウトバウンドルールについて
以下のアウトバウンドルールが必要でした。
- VPC エンドポイント com.amazonaws.ap-northeast-1.ecr.api 宛てのポート 443
- VPC エンドポイント com.amazonaws.ap-northeast-1.ecr.dkr 宛てのポート 443
- com.amazonaws.ap-northeast-1.s3 (ゲートウェイ) のプレフィックスリスト宛てのポート 443
Fargate で必要な ECR エンドポイントについて
ECSに必要なVPCエンドポイントまとめ(2022年版) | DevelopersIO
上記ブログの通りなので、冒頭の 3 つのエンドポイントを作成しました。
ecr.api と ecr.dkr のプライベート IP アドレスについては各エンドポイントのサブネットタブから確認可能です。
S3 ゲートウェイエンドポイントの IP アドレス範囲はマネージドプレフィックスリストで管理されているため、セキュリティグループのルールで直接指定できます。
AWS マネージドプレフィックスリスト - Amazon Virtual Private Cloud
Fargate からのアウトバウンド通信を制限してみた
上記を踏まえて Fargate タスク用のセキュリティグループのアウトバウンドルールを以下のように定義しました。
- ポート 443 の送信先: ecr.api のプライベート IP アドレス
- ポート 443 の送信先: ecr.dkr のプライベート IP アドレス
- ポート 443 の送信先: pl-61a54008 (com.amazonaws.ap-northeast-1.s3)
上記以外は以下の条件です。
- ECR リポジトリにはイメージをプッシュ済み
- VPC エンドポイント側のセキュリティグループのインバウンドルールでは Fargate タスクが起動する VPC の CIDR 範囲からの通信を許可
- VPC エンドポイント側のセキュリティグループのアウトバウンドルールはデフォルトの全開放
この状態で Fargate タスクがプライベートサブネットで起動することを確認できました。
VPC エンドポイントからのアウトバウンド通信も制限してみた
上記の検証では VPC エンドポイント側のセキュリティグループのアウトバウンドルールはデフォルトの全開放でしたが、VPC エンドポイントからのアウトバウンド通信も制限してみました。
まずは VPC エンドポイントから ECR へ接続するための IP アドレスを調べる必要がありますので、以下の方法で調べます。
特定の AWS サービスの IP アドレス範囲を調べる方法を教えてください | DevelopersIO
ECR のサービスエンドポイントは以下のドキュメントで公開されています。
Amazon ECR endpoints and quotas - AWS General Reference
今回は東京リージョンのエンドポイントの IP アドレスを調べてみました。
$ dig ecr.ap-northeast-1.amazonaws.com
;; ANSWER SECTION:
ecr.ap-northeast-1.amazonaws.com. 60 IN A 3.112.64.17
$ dig api.ecr.ap-northeast-1.amazonaws.com
;; ANSWER SECTION:
api.ecr.ap-northeast-1.amazonaws.com. 60 IN CNAME ecr.ap-northeast-1.amazonaws.com.
ecr.ap-northeast-1.amazonaws.com. 32 IN A 3.112.64.17
$ dig <account-id>.dkr.ecr.ap-northeast-1.amazonaws.com
012345678901.dkr.ecr.ap-northeast-1.amazonaws.com. 60 IN CNAME nlb3-a01fc3168d6b4c7e.elb.ap-northeast-1.amazonaws.com.
nlb3-a01fc3168d6b4c7e.elb.ap-northeast-1.amazonaws.com. 60 IN A 52.192.36.247
次に上記 IP アドレス範囲を AWS が公開している ip-ranges.json で調べます。
AWS IP address ranges - Amazon Virtual Private Cloud
今回は以下の IP アドレス範囲であることがわかりました。
# 3.112.64.17 が含まれる IP アドレス範囲
{
"ip_prefix": "3.112.64.0/23",
"region": "ap-northeast-1",
"service": "AMAZON",
"network_border_group": "ap-northeast-1"
}
# 52.192.36.247 が含まれる IP アドレス範囲
{
"ip_prefix": "52.192.0.0/15",
"region": "ap-northeast-1",
"service": "AMAZON",
"network_border_group": "ap-northeast-1"
}
ECR の IP アドレス範囲がわかったので、VPC エンドポイントのセキュリティグループのアウトバウンドルールに定義します。
- ポート 443 の送信先: 3.112.64.0/23
- ポート 443 の送信先: 52.192.0.0/15
この状態でも Fargate タスクがプライベートサブネットで起動することを確認できました。
まとめ
今回は Fargate から ECR プライベートリポジトリへ接続するためのアウトバウンドルールについて紹介しました。どなたかの参考になれば幸いです。
Discussion