【EC2】プライベートサブネットでyumコマンドを通すために「S3エンドポイント」を設定する

  • 2021年4月16日
  • 2021年4月16日
  • AWS, IT
AWS

こんにちはますのです。

プライベートサブネットに置いているEC2インスタンスでyumが通らない…。
ルートテーブルにインターネットゲートウェイ置いてないからそうなりますよね。

でも、yumでAWSのリソースにアクセスするのだから、設定無くてもいけそうなのになぁとぼんやり思っていたのでした。

Amazon Linuxであればインターネットアクセス無しでyum利用可能??

調べていたところ何やら出来そうな記述を発見。

Q: VPC エンドポイントを設定して Amazon Linux AMI リポジトリへの接続を許可するにはどうすればよいですか?
インターネットにアクセスしなくても、VPC 内の yum リポジトリにアクセスすることができます。お客様の VPC エンドポイントポリシーで、VPC から Amazon Linux AMI リポジトリをホストする S3 バケットへのトラフィックを許可する必要があります。
引用:Amazon Linux AMI に関するよくある質問
そしてTwitterでも詳細情報を頂きました。ありがたやです。

S3のVPCエンドポイントを作成する

では早速S3のVPCエンドポイントを作成しましょう。
設定する際は以下のエンドポイントを設定します。

  • com.amazonaws.[region].s3

Gatewayタイプのエンドポイントを選択

VPC>エンドポイントの作成>com.amazonaws.ap-northeast-1.s3を検索

タイプはGateway型を選択します。
インターフェース型だと内部経由での通信になるけどお金が掛かる模様。
参考:Amazon VPC エンドポイント の GatewayとInterface

エンドポイントを紐づけるVPC/ルートテーブルを選択する

対象のEC2インスタンスが適用されるVPC、ルートテーブルを選択します。

ポリシーを設定する

ポリシーを「フルアクセス」で設定します。
キーなどは設定せず、このままエンドポイントの作成をクリックします。

S3のアクセスをフルアクセスではなく厳密に絞りたい場合は公式ドキュメントの内容を使ってみると良さそうです。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-al1-al2-update-yum-without-internet/

{
  "Statement": [
    {
    "Principal": "*",
    "Action": [
    "s3:GetObject"
    ],
    "Effect": "Allow",
    "Resource": [
      "arn:aws:s3:::amazonlinux.ap-northeast-1.amazonaws.com/*"
      ]
    }
  ]
}

エンドポイント設定後にyumが可能か試してみる

すごい。yumが通るようになった。
他にもネットワーク設定しないといけないと思ったのに。

必要なネットワーク設定

手順を確認していると以下の3点が必要なようです。
今回は初期設定のままだったので疎通が通ったようですね。

  • EC2 インスタンスにアタッチされたセキュリティグループで、アウトバウンド http トラフィックが許可されていることを確認します。
    →アウトバウンドは初期設定のまま。全ポート(0.0.0.0/0)開放してました。
  • S3 VPC エンドポイントにアタッチされたセキュリティグループで、EC2 インスタンスのサブネットからのインバウンド http トラフィックが許可されていることを確認します。
    →ゲートウェイ型を選んだためかセキュリティグループの設定は無かったのです。
  • EC2 インスタンスのサブネットに関連付けられているネットワーク ACL で、以下が許可されていることを確認します。
    →ネットワークACLも初期設定のまま。全ポート(0.0.0.0/0)開放してました。

    • ポート 80 (http) でリージョナル S3 サービスへの出力。
    • リージョナル S3 サービスから一時的 TCP ポートへの入力。エフェメラルポートは 1024-65535 です。
    • リージョナル S3 サービスは、S3 インターフェイスエンドポイントを含むサブネットの CIDR です。または、S3 ゲートウェイを使用している場合、リージョナル S3 サビスは S3 サービスのパブリック IP CIDR です。ネットワーク ACL はプレフィクスリストをサポートしません。ネットワーク ACL に S3 CIDR を追加するには、S3 CIDR として 0.0.0.0/0 を使用します。また、実際の S3 CIDR を ACL に追加することもできます。ただし、S3 CIDR はいつでも変更できることに注意してください。
AmazonLinuxならプライベートサブネットでもyumが通るように出来たのは最高です!
NATGatewayaやらNATインスタンスを作らないとダメかなぁ…。と、手間がかかる方法しかないと思っていたので救世主でした。
知らないことがまだまだありそうな世界だと白目になりそうです。

参考資料

最新情報をチェックしよう!