From f38f10416a424843acdff65bd6d31ba17a5d9243 Mon Sep 17 00:00:00 2001 From: Vardan Torosyan Date: Thu, 3 Feb 2022 09:59:26 +0100 Subject: [PATCH] Revert fixed roles and service accounts (#44778) * Revert fixed roles and service accounts * Leave the fixed role for service accounts --- pkg/api/api.go | 9 ++- pkg/services/serviceaccounts/manager/roles.go | 60 ------------------- .../serviceaccounts/manager/service.go | 6 +- 3 files changed, 8 insertions(+), 67 deletions(-) diff --git a/pkg/api/api.go b/pkg/api/api.go index e1aff6d4591..884ef9f712e 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -13,7 +13,6 @@ import ( ac "github.com/grafana/grafana/pkg/services/accesscontrol" acmiddleware "github.com/grafana/grafana/pkg/services/accesscontrol/middleware" "github.com/grafana/grafana/pkg/services/featuremgmt" - sa "github.com/grafana/grafana/pkg/services/serviceaccounts/manager" ) var plog = log.New("api") @@ -256,10 +255,10 @@ func (hs *HTTPServer) registerRoutes() { // auth api keys apiRoute.Group("/auth/keys", func(keysRoute routing.RouteRegister) { - keysRoute.Get("/", authorize(reqOrgAdmin, sa.ActionApikeyListEv), routing.Wrap(GetAPIKeys)) - keysRoute.Post("/", authorize(reqOrgAdmin, sa.ActionApikeyAddEv), quota("api_key"), routing.Wrap(hs.AddAPIKey)) - keysRoute.Post("/additional", authorize(reqOrgAdmin, sa.ActionApikeyAddAdditionalEv), quota("api_key"), routing.Wrap(hs.AdditionalAPIKey)) - keysRoute.Delete("/:id", authorize(reqOrgAdmin, sa.ActionApikeyRemoveEv), routing.Wrap(DeleteAPIKey)) + keysRoute.Get("/", routing.Wrap(GetAPIKeys)) + keysRoute.Post("/", quota("api_key"), routing.Wrap(hs.AddAPIKey)) + keysRoute.Post("/additional", quota("api_key"), routing.Wrap(hs.AdditionalAPIKey)) + keysRoute.Delete("/:id", routing.Wrap(DeleteAPIKey)) }, reqOrgAdmin) // Preferences diff --git a/pkg/services/serviceaccounts/manager/roles.go b/pkg/services/serviceaccounts/manager/roles.go index e8038241322..a51f6c63bd3 100644 --- a/pkg/services/serviceaccounts/manager/roles.go +++ b/pkg/services/serviceaccounts/manager/roles.go @@ -5,22 +5,6 @@ import ( "github.com/grafana/grafana/pkg/services/serviceaccounts" ) -var ( - ActionApikeyList = "apikey:list" - ActionApikeyAdd = "apikey:add" - ActionApikeyRemove = "apikey:remove" - ActionApikeyAddAdditional = "apikey:addadditional" - - apikeyWriter = "fixed:apikey:writer" - apikeyReader = "fixed:apikey:reader" - - //API key actions - ActionApikeyListEv = accesscontrol.EvalPermission(ActionApikeyList) - ActionApikeyAddEv = accesscontrol.EvalPermission(ActionApikeyAdd) - ActionApikeyRemoveEv = accesscontrol.EvalPermission(ActionApikeyRemove) //Improvement:Check here or in database layer that user has permissiono modify the service account attached to this api key - ActionApikeyAddAdditionalEv = accesscontrol.EvalPermission(ActionApikeyAddAdditional) -) - func RegisterRoles(ac accesscontrol.AccessControl) error { role := accesscontrol.RoleRegistration{ Role: accesscontrol.RoleDTO{ @@ -50,49 +34,5 @@ func RegisterRoles(ac accesscontrol.AccessControl) error { return err } - apikeyAdminReadRole := accesscontrol.RoleRegistration{ - Role: accesscontrol.RoleDTO{ - Version: 1, - Name: apikeyReader, - DisplayName: "Apikeys reader", - Description: "Gives access to list apikeys.", - Group: "Service accounts", - Permissions: []accesscontrol.Permission{ - { - Action: ActionApikeyList, - Scope: accesscontrol.ScopeUsersAll, - }, - }, - }, - Grants: []string{"Admin"}, - } - if err := ac.DeclareFixedRoles(apikeyAdminReadRole); err != nil { - return err - } - - apikeyAdminEditRole := accesscontrol.RoleRegistration{ - Role: accesscontrol.RoleDTO{ - Version: 1, - Name: apikeyWriter, - DisplayName: "Apikeys writer", - Description: "Gives access to add and delete api keys.", - Group: "Service accounts", - Permissions: accesscontrol.ConcatPermissions(apikeyAdminReadRole.Role.Permissions, []accesscontrol.Permission{ - { - Action: ActionApikeyAdd, - Scope: accesscontrol.ScopeUsersAll, - }, - { - Action: ActionApikeyRemove, - Scope: accesscontrol.ScopeUsersAll, - }, - }), - }, - Grants: []string{"Admin"}, - } - if err := ac.DeclareFixedRoles(apikeyAdminEditRole); err != nil { - return err - } - return nil } diff --git a/pkg/services/serviceaccounts/manager/service.go b/pkg/services/serviceaccounts/manager/service.go index 747a3ee3c2e..447093b3266 100644 --- a/pkg/services/serviceaccounts/manager/service.go +++ b/pkg/services/serviceaccounts/manager/service.go @@ -36,8 +36,10 @@ func ProvideServiceAccountsService( log: log.New("serviceaccounts"), } - if err := RegisterRoles(ac); err != nil { - s.log.Error("Failed to register roles", "error", err) + if features.IsEnabled(featuremgmt.FlagServiceAccounts) { + if err := RegisterRoles(ac); err != nil { + s.log.Error("Failed to register roles", "error", err) + } } serviceaccountsAPI := api.NewServiceAccountsAPI(s, ac, routeRegister, s.store)