diff --git a/lib/api/api.js b/lib/api/api.js index 7e59581270..195441c3fe 100644 --- a/lib/api/api.js +++ b/lib/api/api.js @@ -363,10 +363,15 @@ const api = { }); }; // End of processRequest helper function - // Cache-only rate limit check (fast path, no metadata fetch) - // If config is cached, apply rate limiting now - // If not cached, metadata validation functions will handle it - if (request.bucketName && config.rateLimiting?.enabled && !rateLimitApiActions.includes(apiMethod)) { + const applyRateLimit = request.bucketName + && config.rateLimiting?.enabled + && !rateLimitApiActions.includes(apiMethod) // Don't limit any rate limit admin actions + && !request.isInternalServiceRequest; // Don't limit any calls from internal services + + if (applyRateLimit) { + // Cache-only rate limit check (fast path, no metadata fetch) + // If config is cached, apply rate limiting now + // If not cached, metadata validation functions will handle it const cachedConfig = getRateLimitFromCache(request.bucketName); if (cachedConfig !== undefined) { diff --git a/lib/metadata/metadataUtils.js b/lib/metadata/metadataUtils.js index e9055f3894..38b39315a3 100644 --- a/lib/metadata/metadataUtils.js +++ b/lib/metadata/metadataUtils.js @@ -226,7 +226,8 @@ function checkRateLimitIfNeeded(bucket, bucketName, request, log, callback) { // Skip if already checked or not enabled if (request.rateLimitAlreadyChecked || !config.rateLimiting?.enabled - || rateLimitApiActions.includes(request.apiMethod)) { + || rateLimitApiActions.includes(request.apiMethod) + || request.isInternalServiceRequest) { return process.nextTick(callback, null); } diff --git a/lib/server.js b/lib/server.js index df5850fbb7..3ac1d0a297 100644 --- a/lib/server.js +++ b/lib/server.js @@ -111,6 +111,7 @@ class S3Server { * @returns {undefined} */ internalRouteRequest(req, res) { + req.isInternalServiceRequest = true; // eslint-disable-line no-param-reassign req.bypassUserBucketPolicies = true; // eslint-disable-line no-param-reassign return this.routeRequest(req, res); } diff --git a/package.json b/package.json index d6865f5772..73fb2eb689 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@zenko/cloudserver", - "version": "9.2.11", + "version": "9.2.12", "description": "Zenko CloudServer, an open-source Node.js implementation of a server handling the Amazon S3 protocol", "main": "index.js", "engines": {