diff --git a/weed/s3api/auth_credentials.go b/weed/s3api/auth_credentials.go index ba9560d0a..c21ec94fa 100644 --- a/weed/s3api/auth_credentials.go +++ b/weed/s3api/auth_credentials.go @@ -280,6 +280,27 @@ func NewIdentityAccessManagementWithStore(option *S3ApiServerOption, explicitSto iam.m.Unlock() } + // Determine whether to enable S3 authentication based on configuration + // For "weed mini" without any S3 config, default to allowing all access (isAuthEnabled = false) + // If any credentials are configured (via file, filer, or env vars), enable authentication + iam.m.Lock() + iam.isAuthEnabled = len(iam.identities) > 0 + iam.m.Unlock() + + if iam.isAuthEnabled { + // Credentials were configured - enable authentication + glog.V(0).Infof("S3 authentication enabled (%d identities configured)", len(iam.identities)) + } else { + // No credentials configured + if startConfigFile != "" { + // Config file was specified but contained no identities - this is unusual, log a warning + glog.Warningf("S3 config file %s specified but no identities loaded - authentication disabled", startConfigFile) + } else { + // No config file and no identities - this is the normal allow-all case + glog.V(0).Infof("S3 authentication disabled - no credentials configured (allowing all access)") + } + } + return iam } @@ -457,11 +478,19 @@ func (iam *IdentityAccessManagement) replaceS3ApiConfiguration(config *iam_pb.S3 iam.emailAccount = emailAccount iam.accessKeyIdent = accessKeyIdent iam.nameToIdentity = nameToIdentity - if !iam.isAuthEnabled { // one-directional, no toggling - iam.isAuthEnabled = len(identities) > 0 + // Update authentication state based on whether identities exist + // Once enabled, keep it enabled (one-way toggle) + authJustEnabled := false + if !iam.isAuthEnabled && len(identities) > 0 { + iam.isAuthEnabled = true + authJustEnabled = true } iam.m.Unlock() + if authJustEnabled { + glog.V(0).Infof("S3 authentication enabled - credentials were added dynamically") + } + // Log configuration summary glog.V(1).Infof("Loaded %d identities, %d accounts, %d access keys. Auth enabled: %v", len(identities), len(accounts), len(accessKeyIdent), iam.isAuthEnabled) @@ -673,11 +702,19 @@ func (iam *IdentityAccessManagement) mergeS3ApiConfiguration(config *iam_pb.S3Ap iam.emailAccount = emailAccount iam.accessKeyIdent = accessKeyIdent iam.nameToIdentity = nameToIdentity - if !iam.isAuthEnabled { - iam.isAuthEnabled = len(identities) > 0 + // Update authentication state based on whether identities exist + // Once enabled, keep it enabled (one-way toggle) + authJustEnabled := false + if !iam.isAuthEnabled && len(identities) > 0 { + iam.isAuthEnabled = true + authJustEnabled = true } iam.m.Unlock() + if authJustEnabled { + glog.V(0).Infof("S3 authentication enabled - credentials were added dynamically") + } + // Log configuration summary staticCount := len(staticNames) dynamicCount := len(identities) - staticCount