久しぶりに AWS で VPC を構築する機会があり、コンソールを開いたが、色々変わっていた。
Multi AZ, 4Subnet(public x2, Private x2) の NAT@Public, WORKER@Private な一般的な構成で、WORKER サーバから yum 出来なくて困った。
Amazon Linux(2) の yum リポジトリは S3
とのことで、エンドポイントの設定をすれば良いと、あちこちに書いてあったので、設定。(したが、それだけではつながらなかった)
Endpoint の Policy 設定
VPC > エンドポイント > ポリシー
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AmazonLinux2AMIRepositoryAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::amazonlinux.*.amazonaws.com/*"
}
]
}
こいつを作成して、Private 側の Route Table にくっつける。
Sub Route Table
しばらくすると、勝手に追加される。
Source | Target | Note |
---|---|---|
x.x.x.0/xx | local | default set |
xxxx:xx....::/xx | local | default set |
pl-xxxx.s3, ... | vpce-xxxx | これが追加される |
0.0.0.0/0 | eni-xxxx | Instance of NAT |
::/0 | eni-xxxx | Instance of NAT |
yum のリポジトリのある S3 には、NAT インスタンスを通らずに、直接アクセスする。
ただし、私の環境では、これだけではつながらなかった。
Security Group(or NACL) の設定
Security Group なり Network ACL の設定で、Private Subnet にあるサーバが直接 S3 にアクセスできないと、yum できない。当たり前。S3 の IP Range は、
VPC > マネージドプレフィックスリスト
から見つけることができる。S3 と Dynamo が用意されていた。
私の場合は、NACL は緩く、SG で締める方針にしていたので、SG の Outbound に S3 のマネージドプレフィックスリストを追加したところ、yum が通るようになった。
おわりに
ネット上では、ポリシーの追加の話はたくさん見かけるが、SG の話が見当たらなかったのは、そもそも S3 に接続する設定があった上で、yum のリポジトリが変更になったからだろうか?よく分からないが、何か出来ない場合は、ネットを検索して一発解決策を探したくなるが、どういう経路でどんな通信を許可/拒否したくて、それに必要な設定がなされているかを、1つずつ潰していけば解決する。と再確認。