From: Casey Bodley Date: Thu, 6 Apr 2023 14:53:52 +0000 (-0400) Subject: rgw/op: factor out rgw_iam_add_crypt_attrs() X-Git-Tag: v17.2.8~142^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=93025dd381eb5478ba3fc5f17e22204636466952;p=ceph.git rgw/op: factor out rgw_iam_add_crypt_attrs() make the iam environment variables for server-side encryption available to other ops Signed-off-by: Casey Bodley (cherry picked from commit 3b517a2679c62529950cd66136f9fb971ae612cc) --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 1056c1ea043..204fc568aef 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -795,6 +795,22 @@ static int rgw_iam_add_buckettags(const DoutPrefixProvider *dpp, struct req_stat return rgw_iam_add_buckettags(dpp, s, s->bucket.get()); } +static void rgw_iam_add_crypt_attrs(rgw::IAM::Environment& e, + const meta_map_t& attrs) +{ + constexpr auto encrypt_attr = "x-amz-server-side-encryption"; + constexpr auto s3_encrypt_attr = "s3:x-amz-server-side-encryption"; + if (auto h = attrs.find(encrypt_attr); h != attrs.end()) { + rgw_add_to_iam_environment(e, s3_encrypt_attr, h->second); + } + + constexpr auto kms_attr = "x-amz-server-side-encryption-aws-kms-key-id"; + constexpr auto s3_kms_attr = "s3:x-amz-server-side-encryption-aws-kms-key-id"; + if (auto h = attrs.find(kms_attr); h != attrs.end()) { + rgw_add_to_iam_environment(e, s3_kms_attr, h->second); + } +} + static std::tuple rgw_check_policy_condition(const DoutPrefixProvider *dpp, boost::optional iam_policy, boost::optional> identity_policies, @@ -3674,19 +3690,8 @@ int RGWPutObj::verify_permission(optional_yield y) } } - constexpr auto encrypt_attr = "x-amz-server-side-encryption"; - constexpr auto s3_encrypt_attr = "s3:x-amz-server-side-encryption"; - auto enc_header = s->info.crypt_attribute_map.find(encrypt_attr); - if (enc_header != s->info.crypt_attribute_map.end()){ - rgw_add_to_iam_environment(s->env, s3_encrypt_attr, enc_header->second); - } - - constexpr auto kms_attr = "x-amz-server-side-encryption-aws-kms-key-id"; - constexpr auto s3_kms_attr = "s3:x-amz-server-side-encryption-aws-kms-key-id"; - auto kms_header = s->info.crypt_attribute_map.find(kms_attr); - if (kms_header != s->info.crypt_attribute_map.end()){ - rgw_add_to_iam_environment(s->env, s3_kms_attr, kms_header->second); - } + // add server-side encryption headers + rgw_iam_add_crypt_attrs(s->env, s->info.crypt_attribute_map); // Add bucket tags for authorization auto [has_s3_existing_tag, has_s3_resource_tag] = rgw_check_policy_condition(this, s, false);