0
1

S3へのアップロードが無料だと思ってたら意外なところで課金された話

Last updated at Posted at 2024-08-19

はじめに

S3へのアップロードって確か無料だよねぇ、EC2のデータを日時バックアップしちゃえ。
と思って構築してたらめっちゃ課金されてしまった話です。

まずはこちらを・・・

ご覧ください。一目瞭然、やっちまってます・・・。
image.png

ザ・原因

すぐに原因調査です。こちらの記事を参考にさせていただきました。(感謝!)
EC2からS3へアクセスする4つのルートとコスト
ざっくりまとめるとこんな感じです↓↓
(1)Internet Gateway→無料
(2)NAT Gateway→有料
(3)VPC Endpoint(Gatewayタイプ)→無料
(4)PrivateLink(Interfaceタイプ)→有料

で、現状の環境は下記のような感じ↓↓
image.png
EC2からS3に通信するとき、一旦リージョンを抜けて(オンプレ側のカスタマーゲートウェイを経由して)いるので、この辺りで課金されているのかなと。

対策

先ほどの記事では、(1),(3)が無料なので、どちらかを採用します。
今回は、プライベートな環境なので(1)は採用できません。
よって(3)の構成にしていきます。
ということで早速構築してみました。
※VPCエンドポイントの作成手順は省略します。参考にした記事はこちらです↓↓(感謝!)
VPCエンドポイント経由で S3 にアクセスする
image.png

で、重要なのがここからです。
①の通信は止めつつ②の経路で通信するようにしなくてはいけません。
image.png

これをバケットポリシーで制御します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::[バケット名]",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "[IPアドレス]/32"
                },
                "StringNotEquals": {
                    "aws:sourceVpce": "[VPCエンドポイント名]"
                }
            }
        }
    ]
}

↑↑VPCエンドポイントからの通信のみを許可するように設定しました。
ちなみに特定のIPアドレスからも通信を許可するようにしていますが、これはオンプレ側のグローバルIPです。
これを入れておかないと、マネジメントコンソールでバケットの操作ができなくなる可能性がありますので十分ご注意ください!

動作確認

許可されていないソースからAWS CLIで確認コマンドを実行してみると、

$ aws s3 ls s3://[バケット名]/
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

通信が拒否されていることがわかります。

以上!

おわりに

AWSの料金体系っていまだにちょっとわからない部分が多くて、いつも恐る恐るコストエクスプローラーでチェックしています^^;

0
1
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
0
1