AuthZ: Zanzana only evaluation toggle (#112715)

* Zanzana: Feature toggle to enable zanzana only evaluation

* refactor

* Update pkg/services/featuremgmt/toggles_gen.json

Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>

---------

Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>
This commit is contained in:
Alexander Zobnin
2025-10-21 16:03:17 +02:00
committed by GitHub
co-authored by Ieva
parent 12e294d8ab
commit adf1224e82
6 changed files with 40 additions and 2 deletions
@@ -621,6 +621,10 @@ export interface FeatureToggles {
*/
zanzana?: boolean;
/**
* Use openFGA as main authorization engine and disable legacy RBAC clietn.
*/
zanzanaNoLegacyClient?: boolean;
/**
* Enables reload of dashboards on scopes, time range and variables changes
*/
reloadDashboardsOnParamsChange?: boolean;
+9 -2
View File
@@ -23,6 +23,7 @@ import (
"github.com/grafana/authlib/cache"
authlib "github.com/grafana/authlib/types"
"github.com/grafana/dskit/middleware"
"github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/tracing"
@@ -53,6 +54,8 @@ func ProvideAuthZClient(
zanzanaClient zanzana.Client,
restConfig apiserver.RestConfigProvider,
) (authlib.AccessClient, error) {
zanzanaEnabled := features.IsEnabledGlobally(featuremgmt.FlagZanzana)
authCfg, err := readAuthzClientSettings(cfg)
if err != nil {
return nil, err
@@ -62,6 +65,10 @@ func ProvideAuthZClient(
return nil, errors.New("authZGRPCServer feature toggle is required for cloud and grpc mode")
}
if zanzanaEnabled && features.IsEnabledGlobally(featuremgmt.FlagZanzanaNoLegacyClient) {
return zanzanaClient, nil
}
// Provisioning uses mode 4 (read+write only to unified storage)
// For G12 launch, we can disable caching for this and find a more scalable solution soon
// most likely this would involve passing the RV (timestamp!) in each check method
@@ -72,7 +79,7 @@ func ProvideAuthZClient(
switch authCfg.mode {
case clientModeCloud:
rbacClient, err := newRemoteRBACClient(authCfg, tracer, reg)
if features.IsEnabledGlobally(featuremgmt.FlagZanzana) {
if zanzanaEnabled {
return zanzana.WithShadowClient(rbacClient, zanzanaClient, reg)
}
return rbacClient, err
@@ -119,7 +126,7 @@ func ProvideAuthZClient(
authzlib.WithTracerClientOption(tracer),
)
if features.IsEnabledGlobally(featuremgmt.FlagZanzana) {
if zanzanaEnabled {
return zanzana.WithShadowClient(rbacClient, zanzanaClient, reg)
}
+8
View File
@@ -1066,6 +1066,14 @@ var (
HideFromDocs: true,
HideFromAdminPage: true,
},
{
Name: "zanzanaNoLegacyClient",
Description: "Use openFGA as main authorization engine and disable legacy RBAC clietn.",
Stage: FeatureStageExperimental,
Owner: identityAccessTeam,
HideFromDocs: true,
HideFromAdminPage: true,
},
{
Name: "reloadDashboardsOnParamsChange",
Description: "Enables reload of dashboards on scopes, time range and variables changes",
+1
View File
@@ -139,6 +139,7 @@ pinNavItems,GA,@grafana/grafana-frontend-platform,false,false,false
authZGRPCServer,experimental,@grafana/identity-access-team,false,false,false
ssoSettingsLDAP,GA,@grafana/identity-access-team,false,true,false
zanzana,experimental,@grafana/identity-access-team,false,false,false
zanzanaNoLegacyClient,experimental,@grafana/identity-access-team,false,false,false
reloadDashboardsOnParamsChange,experimental,@grafana/dashboards-squad,false,false,false
enableScopesInMetricsExplore,experimental,@grafana/dashboards-squad,false,false,false
cloudWatchRoundUpEndTime,GA,@grafana/aws-datasources,false,false,false
1 Name Stage Owner requiresDevMode RequiresRestart FrontendOnly
139 authZGRPCServer experimental @grafana/identity-access-team false false false
140 ssoSettingsLDAP GA @grafana/identity-access-team false true false
141 zanzana experimental @grafana/identity-access-team false false false
142 zanzanaNoLegacyClient experimental @grafana/identity-access-team false false false
143 reloadDashboardsOnParamsChange experimental @grafana/dashboards-squad false false false
144 enableScopesInMetricsExplore experimental @grafana/dashboards-squad false false false
145 cloudWatchRoundUpEndTime GA @grafana/aws-datasources false false false
+4
View File
@@ -567,6 +567,10 @@ const (
// Use openFGA as authorization engine.
FlagZanzana = "zanzana"
// FlagZanzanaNoLegacyClient
// Use openFGA as main authorization engine and disable legacy RBAC clietn.
FlagZanzanaNoLegacyClient = "zanzanaNoLegacyClient"
// FlagReloadDashboardsOnParamsChange
// Enables reload of dashboards on scopes, time range and variables changes
FlagReloadDashboardsOnParamsChange = "reloadDashboardsOnParamsChange"
+14
View File
@@ -4173,6 +4173,20 @@
"hideFromAdminPage": true,
"hideFromDocs": true
}
},
{
"metadata": {
"name": "zanzanaNoLegacyClient",
"resourceVersion": "1760953975541",
"creationTimestamp": "2025-10-20T09:52:55Z"
},
"spec": {
"description": "Use openFGA as main authorization engine and disable legacy RBAC client.",
"stage": "experimental",
"codeowner": "@grafana/identity-access-team",
"hideFromAdminPage": true,
"hideFromDocs": true
}
}
]
}