diff --git a/cmd/iam.go b/cmd/iam.go index f3143ba81..c0b3620f1 100644 --- a/cmd/iam.go +++ b/cmd/iam.go @@ -1704,7 +1704,7 @@ func (sys *IAMSys) PolicyDBGet(name string, isGroup bool, groups ...string) ([]s // information in IAM (i.e sys.iam*Map) - this info is stored only in the STS // generated credentials. Thus we skip looking up group memberships, user map, // and group map and check the appropriate policy maps directly. -func (sys *IAMSys) policyDBGet(name string, isGroup bool) ([]string, error) { +func (sys *IAMSys) policyDBGet(name string, isGroup bool) (policies []string, err error) { if isGroup { if sys.usersSysType == MinIOUsersSysType { g, ok := sys.iamGroupsMap[name] @@ -1719,8 +1719,7 @@ func (sys *IAMSys) policyDBGet(name string, isGroup bool) ([]string, error) { } } - mp := sys.iamGroupPolicyMap[name] - return mp.toSlice(), nil + return sys.iamGroupPolicyMap[name].toSlice(), nil } var u auth.Credentials @@ -1738,8 +1737,6 @@ func (sys *IAMSys) policyDBGet(name string, isGroup bool) ([]string, error) { } } - var policies []string - mp, ok := sys.iamUserPolicyMap[name] if !ok { if u.ParentUser != "" { @@ -1757,8 +1754,7 @@ func (sys *IAMSys) policyDBGet(name string, isGroup bool) ([]string, error) { continue } - p := sys.iamGroupPolicyMap[group] - policies = append(policies, p.toSlice()...) + policies = append(policies, sys.iamGroupPolicyMap[group].toSlice()...) } return policies, nil @@ -1788,8 +1784,9 @@ func (sys *IAMSys) IsAllowedServiceAccount(args iampolicy.Args, parent string) b } // Check policy for this service account. - svcPolicies, err := sys.PolicyDBGet(args.AccountName, false) + svcPolicies, err := sys.PolicyDBGet(parent, false, args.Groups...) if err != nil { + logger.LogIf(GlobalContext, err) return false } @@ -2072,7 +2069,7 @@ func (sys *IAMSys) IsAllowed(args iampolicy.Args) bool { } // Continue with the assumption of a regular user - policies, err := sys.PolicyDBGet(args.AccountName, false) + policies, err := sys.PolicyDBGet(args.AccountName, false, args.Groups...) if err != nil { return false }