From f9ba21a87f31c907a43efe5fd7b608a10cd68f3d Mon Sep 17 00:00:00 2001 From: Seena Fallah Date: Sat, 13 Apr 2024 01:54:38 +0200 Subject: [PATCH] rgw: exclude logging of request payer for 403 requests As per AWS doc (https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html#ChargeDetails), request payer should not incur charges for 403 requests. Fixes: https://tracker.ceph.com/issues/65473 Signed-off-by: Seena Fallah (cherry picked from commit d3d40f932eb79691bfd22e1897f85db0b0b9b0c7) Fixes: https://tracker.ceph.com/issues/65901 Signed-off-by: Adam C. Emerson --- src/rgw/rgw_log.cc | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/rgw/rgw_log.cc b/src/rgw/rgw_log.cc index 5d7e3678f8f..6c2f54d291d 100644 --- a/src/rgw/rgw_log.cc +++ b/src/rgw/rgw_log.cc @@ -200,21 +200,23 @@ static void log_usage(req_state *s, const string& op_name) if (!usage_logger) return; - std::string user; + std::string user = to_string(s->owner.id); std::string payer; - string bucket_name; - - bucket_name = s->bucket_name; + string bucket_name = s->bucket_name; if (!bucket_name.empty()) { - bucket_name = s->bucket_name; user = to_string(s->bucket_owner.id); + + // As per https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html#ChargeDetails + // If the bucket has requester pays enabled, + // and the requerster includes x-amz-request-payer in the header (this is checked by verify_requester_payer_permission and results in 403 if not present), + // and the status code isn't 403, + // then the requester is the payer. if (!rgw::sal::Bucket::empty(s->bucket.get()) && - s->bucket->get_info().requester_pays) { + s->bucket->get_info().requester_pays && + s->err.http_ret != 403) { payer = s->user->get_id().to_str(); } - } else { - user = to_string(s->owner.id); } bool error = s->err.is_err(); -- 2.39.5