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攻撃について記事にする。
課金廃止の具体的な内容
今回の変更により、以下のHTTPエラーコードに対して課金が廃止された。
- 全ての5xx系エラー(サーバーエラー)
- 特定の4xx系エラー (クライアントエラー)
- 特定の3xx系エラー(リダイレクション)
全ての5xx系エラー(サーバーエラー)
公式ドキュメントに下記のとおりあるため、5xx系エラーは課金されないとみて良いだろう。4xx系、3xx系エラーについては「特定のエラーは課金されない」旨の記載があった。
Bucket owners aren't billed for HTTP
5XX
server error responses, such as HTTP503 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 code | Error code |
---|---|
400 Bad Request | AuthorizationHeaderMalformed |
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 Forbidden | RequestTimeTooSkewed |
SignatureDoesNotMatch | |
NotSignedUp | |
InvalidSecurity | |
InvalidPayer | |
InvalidAccessKeyId | |
AccountProblem | |
UnauthorizedAccessError | |
404 Not Found | NoSuchUpload |
NoSuchWebsiteConfiguration | |
405 Method Not Allowed | MethodNotAllowed |
409 Conflict | BucketAlreadyExists |
InvalidBucketState | |
OperationAborted | |
411 Length Required | MissingContentLength |
412 Precondition Failed | RequestIsNotMultiPartContent |
ステータスコード | 説明 |
---|---|
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でなければならない。 |
特定の3xx系エラー(リダイレクション)
以下はHTTP 3xx ステータスコードのうち、課金されないエラーコードの一覧。
HTTP status code | Error code |
---|---|
301 Moved Permanently | PermanentRedirect |
PermanentRedirectControlError | |
307 Temporary Redirect | TemporaryRedirect |
ステータスコード | 説明 |
---|---|
301 Moved Permanently | リクエストされたリソースが永久的に新しいURLに移動したことを示す。 アクセスしようとしているバケットには指定された新しいエンドポイントを使用してアクセスする必要がある。 |
307 Temporary Redirect | リクエストされたリソースが一時的に異なるURLに移動していることを示す。 DNSサーバーの更新中に発生し、ユーザーを一時的に新しいエンドポイントにリダイレクトすることを示す。 |
これにより、エラー発生時のログ取得やモニタリングツールでの利用が一層簡便になる状況。
HTTPエラーコード課金廃止の背景
今回のHTTPエラーコードへの課金が廃止されたのは、以下記事で紹介していることが要因と考えられる。結論S3に対するEDoS攻撃があったため。
https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1
上記記事を書いた方がXで色々ポストしているため、もし興味のある人は見てほしい。
以前のS3バケットに関する記事を書いた際に、「記事で紹介したS3バケットは本記事公開時点で削除済みとなっている。」と記載しているが、それを記載したのもEDoS攻撃による課金の記事を見ての対応である。
課金が廃止されると何が嬉しいのか
トラブルシューティング時のコスト減
これまで、S3の利用においてHTTPエラーコードの取得にはコストが発生していた。エラーのトラブルシューティング時などには何度もエラーコードを取得することになっていたと思う。今回の課金廃止によりトラブルシューティング時の負担が減ると考えらえる。
いつから課金が廃止されるのか
公式ドキュメントに「2024年5月13日、バケット所有者以外からの不正なリクエストに対する課金をなくすための変更のデプロイを開始しました。」と記載がある。また、「この課金変更はアプリケーションのアップデートを必要とせず、すべてのS3バケットに適用されます。この変更のデプロイがすべてのAWSリージョンで完了したら、ドキュメントを更新します。」とあるため、2024年5月13日以降随時課金廃止が適用されると思って良い。変更によって自分たちが特に意識することはない。
Important
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ErrorCodeBilling.html
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 returnAccessDenied
(HTTP403 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 HTTP3XX
and4XX
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.
先ほども紹介した方も「すべてのAWSリージョンで展開が完了するまでには数週間かかります。」とポストしているとおり、2024年6月頃までかかりそうだ。
まとめ
今回の変更により、以下のHTTPエラーコードに対して課金が廃止された。だが、2024年5月13日以降随時課金廃止が適用され、数週間以内に全AWSリージョンで課金が廃止される予定のため現時点(2024年5月14日)では注意が必要。
- 全ての5xx系エラー(サーバーエラー)
- 特定の4xx系エラー (クライアントエラー)
- 特定の3xx系エラー(リダイレクション)
この記事が誰かの参考になれば嬉しい。最新情報や詳細な使い方、正確な情報についてはAWSのドキュメントを確認してほしい。