introducing `mode` config for gRPC auth server & client side

drclau/unistor/namespace_authorizer
Claudiu Dragalina-Paraipan 8 months ago
parent 914ca237e2
commit 3acada9d47
  1. 39
      pkg/services/authn/grpcutils/config.go
  2. 7
      pkg/services/authn/grpcutils/grpc_authenticator.go
  3. 8
      pkg/storage/unified/client.go
  4. 6
      pkg/storage/unified/resource/client.go

@ -1,35 +1,66 @@
package grpcutils
import (
"fmt"
"github.com/grafana/grafana/pkg/setting"
)
type Mode string
func (s Mode) IsValid() bool {
switch s {
case ModeOnPrem, ModeCloud:
return true
}
return false
}
const (
ModeOnPrem Mode = "on-prem"
ModeCloud Mode = "cloud"
)
type GrpcClientConfig struct {
Token string
TokenExchangeURL string
TokenNamespace string
Mode Mode
}
func ReadGrpcClientConfig(cfg *setting.Cfg) *GrpcClientConfig {
func ReadGrpcClientConfig(cfg *setting.Cfg) (*GrpcClientConfig, error) {
section := cfg.SectionWithEnvOverrides("grpc_client_authentication")
mode := Mode(section.Key("mode").MustString(string(ModeOnPrem)))
if !mode.IsValid() {
return nil, fmt.Errorf("grpc_client_authentication: invalid mode %q", mode)
}
return &GrpcClientConfig{
Token: section.Key("token").MustString(""),
TokenExchangeURL: section.Key("token_exchange_url").MustString(""),
TokenNamespace: section.Key("token_namespace").MustString("stack-" + cfg.StackID),
}
Mode: mode,
}, nil
}
type GrpcServerConfig struct {
SigningKeysURL string
AllowedAudiences []string
Mode Mode
}
func ReadGprcServerConfig(cfg *setting.Cfg) *GrpcServerConfig {
func ReadGprcServerConfig(cfg *setting.Cfg) (*GrpcServerConfig, error) {
section := cfg.SectionWithEnvOverrides("grpc_server_authentication")
mode := Mode(section.Key("mode").MustString(string(ModeOnPrem)))
if !mode.IsValid() {
return nil, fmt.Errorf("grpc_server_authentication: invalid mode %q", mode)
}
return &GrpcServerConfig{
SigningKeysURL: section.Key("signing_keys_url").MustString(""),
AllowedAudiences: section.Key("allowed_audiences").Strings(","),
}
Mode: mode,
}, nil
}

@ -10,7 +10,10 @@ import (
)
func NewGrpcAuthenticator(cfg *setting.Cfg) (*authnlib.GrpcAuthenticator, error) {
authCfg := ReadGprcServerConfig(cfg)
authCfg, err := ReadGprcServerConfig(cfg)
if err != nil {
return nil, err
}
grpcAuthCfg := authnlib.GrpcAuthenticatorConfig{
KeyRetrieverConfig: authnlib.KeyRetrieverConfig{
SigningKeysURL: authCfg.SigningKeysURL,
@ -31,7 +34,7 @@ func NewGrpcAuthenticator(cfg *setting.Cfg) (*authnlib.GrpcAuthenticator, error)
authnlib.WithIDTokenAuthOption(true),
authnlib.WithKeyRetrieverOption(keyRetriever),
}
if cfg.StackID == "" {
if authCfg.Mode == ModeOnPrem {
grpcOpts = append(grpcOpts,
// Access token are not yet available on-prem
authnlib.WithDisableAccessTokenAuthOption(),

@ -13,6 +13,7 @@ import (
infraDB "github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/services/apiserver/options"
"github.com/grafana/grafana/pkg/services/authn/grpcutils"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/storage/unified/resource"
@ -92,7 +93,12 @@ func ProvideUnifiedStorageClient(
}
func newResourceClient(conn *grpc.ClientConn, cfg *setting.Cfg) (resource.ResourceClient, error) {
if cfg.StackID != "" {
clientConfig, err := grpcutils.ReadGrpcClientConfig(cfg)
if err != nil {
return nil, err
}
if clientConfig.Mode == grpcutils.ModeCloud {
return resource.NewCloudResourceClient(conn, cfg)
}
return resource.NewGRPCResourceClient(conn)

@ -95,7 +95,11 @@ func NewGRPCResourceClient(conn *grpc.ClientConn) (ResourceClient, error) {
func NewCloudResourceClient(conn *grpc.ClientConn, cfg *setting.Cfg) (ResourceClient, error) {
// scenario: remote cloud
grpcClientConfig := clientCfgMapping(grpcutils.ReadGrpcClientConfig(cfg))
clientConfig, err := grpcutils.ReadGrpcClientConfig(cfg)
if err != nil {
return nil, err
}
grpcClientConfig := clientCfgMapping(clientConfig)
opts := []authnlib.GrpcClientInterceptorOption{
authnlib.WithIDTokenExtractorOption(idTokenExtractor),

Loading…
Cancel
Save