AWS

Amazon S3がいくつかのHTTPエラーコードに対する課金を廃止

2024年5月15日

amazon-s3-icon

2024年5月13日にAmazon S3におけるいくつかのHTTPエラーコードのに対する課金を廃止したとの発表があった。

https://aws.amazon.com/jp/about-aws/whats-new/2024/05/amazon-s3-no-charge-http-error-codes

上記によってどのようなメリットがあるのか、どのHTTPエラーコードに対して課金が廃止されたのか、AWSが課金廃止をすることになった原因と考えられるS3へのEDoS攻撃について記事にする。

「サリー」です。AWSパートナー企業でエンジニアとして働いています。
お問い合わせ自己紹介

課金廃止の具体的な内容

今回の変更により、以下のHTTPエラーコードに対して課金が廃止された。

  • 全ての5xx系エラー(サーバーエラー)
  • 特定の4xx系エラー (クライアントエラー)
  • 特定の3xx系エラー(リダイレクション)

全ての5xx系エラー(サーバーエラー)

公式ドキュメントに下記のとおりあるため、5xx系エラーは課金されないとみて良いだろう。4xx系、3xx系エラーについては「特定のエラーは課金されない」旨の記載があった。

Bucket owners aren't billed for HTTP 5XX server error responses, such as HTTP 503 Slow Down errors.

バケット所有者は、HTTP 503 Slow DownエラーのようなHTTP 5XXサーバーエラーレスポンスに対して課金されません。(DeepLによる翻訳)

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ErrorCodeBilling.html

特定の4xx系エラー (クライアントエラー)

以下はHTTP 4xx ステータスコードのうち、課金されないエラーコードの一覧。

HTTP status codeError code
400 Bad RequestAuthorizationHeaderMalformed
AuthorizationQueryParametersError
ExpiredToken
IllegalLocationConstraintException
InvalidArgument
InvalidDigest
InvalidEncryptionAlgorithmError
InvalidRequest
InvalidSOAPRequest
InvalidStorageClass
InvalidTag
InvalidToken
InvalidURI
KeyTooLongError
MalformedACLError
MalformedPOSTRequest
MalformedXML
MaxPostPreDataLengthExceededError
MetadataTooLarge
MissingRequestBodyError
MissingSecurityHeader
NoLoggingStatusForKey
RequestHeaderSectionTooLarge
UnexpectedContent
UserKeyMustBeSpecified
IncorrectEndpoint
403 ForbiddenRequestTimeTooSkewed
SignatureDoesNotMatch
NotSignedUp
InvalidSecurity
InvalidPayer
InvalidAccessKeyId
AccountProblem
UnauthorizedAccessError
404 Not FoundNoSuchUpload
NoSuchWebsiteConfiguration
405 Method Not AllowedMethodNotAllowed
409 ConflictBucketAlreadyExists
InvalidBucketState
OperationAborted
411 Length RequiredMissingContentLength
412 Precondition FailedRequestIsNotMultiPartContent
参考:https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ErrorCodeBilling.html
ステータスコード説明
400 Bad Requestリクエストが不正である場合などに発生。
無効なシンタックスや不正なデータが含まれている場合のエラー。
403 Forbiddenセキュリティ認証情報が正しくない場合などリソースにアクセスする権限がない場合に発生。
アクセス許可がないバケットに対するリクエストのエラー。
404 Not Found指定されたバケットにウェブサイトの設定がない場合に発生。
指定されたマルチパート・アップロードが存在しない。
アップロードIDが有効でないか、マルチパートのアップロードが中断または完了した可能性がある。
405 Method Not Allowedリクエストメソッドが許可されていない場合に発生。
409 Conflict同じオブジェクトを同時に更新しようとした場合などに発生。
別の名前を指定して再試行する必要がある。
411 Length RequiredリクエストにContent-Length HTTPヘッダが含まれていない場合に発生。
Content-Length HTTPヘッダを指定する必要がある。
412 Precondition FailedバケットPOSTリクエストは、enclosure-type multipart/form-dataでなければならない。
参考:https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ErrorCodeBilling.html

特定の3xx系エラー(リダイレクション)

以下はHTTP 3xx ステータスコードのうち、課金されないエラーコードの一覧。

HTTP status codeError code
301 Moved PermanentlyPermanentRedirect
PermanentRedirectControlError
307 Temporary RedirectTemporaryRedirect
参考:https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ErrorCodeBilling.html
ステータスコード説明
301 Moved Permanentlyリクエストされたリソースが永久的に新しいURLに移動したことを示す。
アクセスしようとしているバケットには指定された新しいエンドポイントを使用してアクセスする必要がある。
307 Temporary Redirectリクエストされたリソースが一時的に異なるURLに移動していることを示す。
DNSサーバーの更新中に発生し、ユーザーを一時的に新しいエンドポイントにリダイレクトすることを示す。
参考:https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ErrorCodeBilling.html

これにより、エラー発生時のログ取得やモニタリングツールでの利用が一層簡便になる状況。

HTTPエラーコード課金廃止の背景

今回のHTTPエラーコードへの課金が廃止されたのは、以下記事で紹介していることが要因と考えられる。結論S3に対するEDoS攻撃があったため。
https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1

何があったのか

あるユーザーがS3バケットを作成し、いくつかのファイルをアップロードしていた。

2日後に確認すると請求額が 1,300 ドルを超え、請求コンソールには、わずか 1 日以内に約 1 億件の S3 PUT リクエストが実行されていた。

原因は、作成したバケット名が人気のOSSのデフォルト設定に設定されてたS3バケット名と偶然同じ名前になったことらしい。

AWSサポートに問い合わせるも、「S3 は不正なリクエスト (4xx) に対しても料金を請求します」との回答。

上記記事を書いた方がXで色々ポストしているため、もし興味のある人は見てほしい。

以前のS3バケットに関する記事を書いた際に、「記事で紹介したS3バケットは本記事公開時点で削除済みとなっている。」と記載しているが、それを記載したのもEDoS攻撃による課金の記事を見ての対応である。

課金が廃止されると何が嬉しいのか

トラブルシューティング時のコスト減

これまで、S3の利用においてHTTPエラーコードの取得にはコストが発生していた。エラーのトラブルシューティング時などには何度もエラーコードを取得することになっていたと思う。今回の課金廃止によりトラブルシューティング時の負担が減ると考えらえる。

いつから課金が廃止されるのか

公式ドキュメントに「2024年5月13日、バケット所有者以外からの不正なリクエストに対する課金をなくすための変更のデプロイを開始しました。」と記載がある。また、「この課金変更はアプリケーションのアップデートを必要とせず、すべてのS3バケットに適用されます。この変更のデプロイがすべてのAWSリージョンで完了したら、ドキュメントを更新します。」とあるため、2024年5月13日以降随時課金廃止が適用されると思って良い。変更によって自分たちが特に意識することはない。

Important

On May 13, 2024, we started deploying a change to eliminate charges for unauthorized requests that aren't initiated by the bucket owner. After the deployment of this change is completed, bucket owners will never incur request or bandwidth charges for requests that return AccessDenied (HTTP 403 Forbidden) errors when these requests are initiated from outside of their individual AWS account or AWS organization. The current page shows a full list of HTTP 3XX and 4XX status codes that won't be billed. This billing change requires no updates to your applications and applies to all S3 buckets. When deployment of this change is completed in all AWS Regions, we’ll update our documentation.

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ErrorCodeBilling.html

先ほども紹介した方も「すべてのAWSリージョンで展開が完了するまでには数週間かかります。」とポストしているとおり、2024年6月頃までかかりそうだ。

まとめ

今回の変更により、以下のHTTPエラーコードに対して課金が廃止された。だが、2024年5月13日以降随時課金廃止が適用され、数週間以内に全AWSリージョンで課金が廃止される予定のため現時点(2024年5月14日)では注意が必要。

  • 全ての5xx系エラー(サーバーエラー)
  • 特定の4xx系エラー (クライアントエラー)
  • 特定の3xx系エラー(リダイレクション)

この記事が誰かの参考になれば嬉しい。最新情報や詳細な使い方、正確な情報についてはAWSのドキュメントを確認してほしい。

-AWS
-,