static boost::optional<Policy>
get_iam_policy_from_attr(CephContext* cct,
- const map<string, bufferlist>& attrs)
+ const map<string, bufferlist>& attrs,
+ const string& tenant)
{
if (auto i = attrs.find(RGW_ATTR_IAM_POLICY); i != attrs.end()) {
- // resource policy is not restricted to the current tenant
- const std::string* policy_tenant = nullptr;
-
- return Policy(cct, policy_tenant, i->second.to_str(), false);
+ return Policy(cct, &tenant, i->second.to_str(), false);
} else {
return none;
}
mpobj->set_in_extra_data(true);
object = mpobj.get();
}
- policy = get_iam_policy_from_attr(s->cct, bucket_attrs);
+ policy = get_iam_policy_from_attr(s->cct, bucket_attrs, s->bucket_tenant);
int ret = get_obj_policy_from_attr(dpp, s->cct, driver, s->bucket_owner,
acl, storage_class, object, s->yield);
}
try {
- s->iam_policy = get_iam_policy_from_attr(s->cct, s->bucket_attrs);
+ s->iam_policy = get_iam_policy_from_attr(s->cct, s->bucket_attrs, s->bucket_tenant);
} catch (const std::exception& e) {
ldpp_dout(dpp, 0) << "Error reading IAM Policy: " << e.what() << dendl;
ldpp_dout(this, 0) << "failed to read bucket policy" << dendl;
return r;
}
- _bucket_policy = get_iam_policy_from_attr(s->cct, bucket_attrs);
+ _bucket_policy = get_iam_policy_from_attr(s->cct, bucket_attrs, auth_tenant);
bucket_policy = &_bucket_policy;
pbucket = ubucket.get();
} else {
return r;
}
auto _bucket_policy = get_iam_policy_from_attr(
- s->cct, tmp_bucket->get_attrs());
+ s->cct, tmp_bucket->get_attrs(), auth_tenant);
bucket_policy = _bucket_policy.get_ptr();
buckets[bucket_name].swap(tmp_bucket);
policies[bucket_name] = make_pair(bucket_acl, _bucket_policy);
if (op_ret < 0) {
return op_ret;
}
- auto dest_iam_policy = get_iam_policy_from_attr(s->cct, s->bucket->get_attrs());
+ auto dest_iam_policy = get_iam_policy_from_attr(s->cct, s->bucket->get_attrs(), s->bucket_tenant);
//Add destination bucket tags for authorization
auto [has_s3_existing_tag, has_s3_resource_tag] = rgw_check_policy_condition(this, dest_iam_policy, s->iam_identity_policies, s->session_policies);
return false;
}
- auto policy = get_iam_policy_from_attr(s->cct, battrs);
+ auto policy = get_iam_policy_from_attr(s->cct, battrs, binfo.bucket.tenant);
bucket_owner = bacl.get_owner();
return false;
}
- auto policy = get_iam_policy_from_attr(s->cct, battrs);
+ auto policy = get_iam_policy_from_attr(s->cct, battrs, binfo.bucket.tenant);
return verify_bucket_permission(this, s, ARN(obj), s->user_acl, bacl, policy,
s->iam_identity_policies, s->session_policies,
try {
const Policy p(
- s->cct, nullptr, data.to_str(),
+ s->cct, &s->bucket_tenant, data.to_str(),
s->cct->_conf.get_val<bool>("rgw_policy_reject_invalid_principals"));
rgw::sal::Attrs attrs(s->bucket_attrs);
if (s->bucket_access_conf &&