From 190766fed1619eab7d917917b7b62859f46556e9 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Mon, 18 Apr 2022 13:34:12 -0500 Subject: [PATCH] Create fixed roles for reading API Keys and service accounts and fix listing of service account tokens (#47767) (#47777) * Create fixed roles for reading API Keys and service accounts * Handle PR comments and fix the listing of token (cherry picked from commit 782ec05d8c86424920d44ff0548ccb4859d8da7b) Co-authored-by: Vardan Torosyan --- pkg/api/accesscontrol.go | 19 ++++++++++++++- .../serviceaccounts/database/database.go | 2 +- pkg/services/serviceaccounts/manager/roles.go | 24 ++++++++++++++++--- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/pkg/api/accesscontrol.go b/pkg/api/accesscontrol.go index dffe67e03a8..e1c3eed6acd 100644 --- a/pkg/api/accesscontrol.go +++ b/pkg/api/accesscontrol.go @@ -150,6 +150,23 @@ func (hs *HTTPServer) declareFixedRoles() error { Grants: []string{string(models.ROLE_VIEWER)}, } + apikeyReaderRole := ac.RoleRegistration{ + Role: ac.RoleDTO{ + Version: 1, + Name: "fixed:apikeys:reader", + DisplayName: "APIKeys reader", + Description: "Gives access to read api keys.", + Group: "API Keys", + Permissions: []ac.Permission{ + { + Action: ac.ActionAPIKeyRead, + Scope: ac.ScopeAPIKeysAll, + }, + }, + }, + Grants: []string{string(models.ROLE_ADMIN)}, + } + apikeyWriterRole := ac.RoleRegistration{ Role: ac.RoleDTO{ Version: 1, @@ -411,7 +428,7 @@ func (hs *HTTPServer) declareFixedRoles() error { orgMaintainerRole, teamsCreatorRole, teamsWriterRole, datasourcesExplorerRole, annotationsReaderRole, dashboardAnnotationsWriterRole, annotationsWriterRole, dashboardsCreatorRole, dashboardsReaderRole, dashboardsWriterRole, - foldersCreatorRole, foldersReaderRole, foldersWriterRole, apikeyWriterRole, + foldersCreatorRole, foldersReaderRole, foldersWriterRole, apikeyReaderRole, apikeyWriterRole, ) } diff --git a/pkg/services/serviceaccounts/database/database.go b/pkg/services/serviceaccounts/database/database.go index 61647755700..21557bd556f 100644 --- a/pkg/services/serviceaccounts/database/database.go +++ b/pkg/services/serviceaccounts/database/database.go @@ -157,7 +157,7 @@ func (s *ServiceAccountsStoreImpl) ListTokens(ctx context.Context, orgID int64, sess = dbSession. Join("inner", quotedUser, quotedUser+".id = api_key.service_account_id"). Where(quotedUser+".org_id=? AND "+quotedUser+".id=?", orgID, serviceAccountID). - Asc("name") + Asc("api_key.name") return sess.Find(&result) }) diff --git a/pkg/services/serviceaccounts/manager/roles.go b/pkg/services/serviceaccounts/manager/roles.go index 656f27881ec..7c323043a95 100644 --- a/pkg/services/serviceaccounts/manager/roles.go +++ b/pkg/services/serviceaccounts/manager/roles.go @@ -1,12 +1,30 @@ package manager import ( + "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/serviceaccounts" ) func RegisterRoles(ac accesscontrol.AccessControl) error { - role := accesscontrol.RoleRegistration{ + saReader := accesscontrol.RoleRegistration{ + Role: accesscontrol.RoleDTO{ + Version: 1, + Name: "fixed:serviceaccounts:reader", + DisplayName: "Service accounts reader", + Description: "Read service accounts and service account tokens.", + Group: "Service accounts", + Permissions: []accesscontrol.Permission{ + { + Action: serviceaccounts.ActionRead, + Scope: serviceaccounts.ScopeAll, + }, + }, + }, + Grants: []string{string(models.ROLE_ADMIN)}, + } + + saWriter := accesscontrol.RoleRegistration{ Role: accesscontrol.RoleDTO{ Version: 4, Name: "fixed:serviceaccounts:writer", @@ -31,10 +49,10 @@ func RegisterRoles(ac accesscontrol.AccessControl) error { }, }, }, - Grants: []string{"Admin"}, + Grants: []string{string(models.ROLE_ADMIN)}, } - if err := ac.DeclareFixedRoles(role); err != nil { + if err := ac.DeclareFixedRoles(saReader, saWriter); err != nil { return err }