services:
- rgw
with_legacy: true
+- name: rgw_s3_auth_disable_signature_url
+ type: bool
+ level: advanced
+ desc: Should authentification with presigned URLs be disabled
+ long_desc: 'If enabled, any request that is presigned with either V2 or V4 signature will be denied'
+ default: false
+ services:
+ - rgw
- name: rgw_barbican_url
type: str
level: advanced
* nullptr inside. */
ldpp_dout(dpp, 5) << "Failed the auth strategy, reason="
<< result.get_reason() << dendl;
- //Special handling for expired pre-signed URL
+ // Special handling for expired pre-signed URL
if (result.get_reason() == ERR_PRESIGNED_URL_EXPIRED) {
result = result_t::deny(-EPERM);
set_req_state_err(s, -EPERM, "The pre-signed URL has expired");
}
+ // Special handling for disabled presigned URL
+ if (result.get_reason() == ERR_PRESIGNED_URL_DISABLED) {
+ result = result_t::deny(-EPERM);
+ set_req_state_err(s, -EPERM, "Presigned URLs are disabled by admin");
+ }
return result.get_reason();
}
#define ERR_INVALID_BUCKET_STATE 2221
#define ERR_INVALID_OBJECT_STATE 2222
#define ERR_PRESIGNED_URL_EXPIRED 2223
+#define ERR_PRESIGNED_URL_DISABLED 2224
#define ERR_BUSY_RESHARDING 2300
#define ERR_NO_SUCH_ENTITY 2301
AwsRoute route;
std::tie(version, route) = discover_aws_flavour(s->info);
- if (version == AwsVersion::V2) {
- return get_auth_data_v2(s);
- } else if (version == AwsVersion::V4) {
- return get_auth_data_v4(s, route == AwsRoute::QUERY_STRING);
+ if (! s->cct->_conf->rgw_s3_auth_disable_signature_url) {
+ if (version == AwsVersion::V2) {
+ return get_auth_data_v2(s);
+ } else if (version == AwsVersion::V4) {
+ return get_auth_data_v4(s, route == AwsRoute::QUERY_STRING);
+ } else {
+ /* FIXME(rzarzynski): handle anon user. */
+ throw -EINVAL;
+ }
} else {
- /* FIXME(rzarzynski): handle anon user. */
- throw -EINVAL;
+ ldpp_dout(s, 0) << "Presigned URLs are disabled by admin" << dendl;
+ throw -ERR_PRESIGNED_URL_DISABLED;
}
}