mirror of https://github.com/grafana/grafana.git
				
				
				
			AuthZ: embed an authorization server (#89018)
* AuthZ: embed an authorization server * CODEOWNERS * Remove swagger * WIP * Flatten structure and inject wireset * sync mod files * Rename authorization package * Fix swagger gen * CODEOWNERS * Use itf instead of impl --------- Co-authored-by: Karl Persson <kalle.persson@grafana.com>
This commit is contained in:
		
							parent
							
								
									99e5e1c8bd
								
							
						
					
					
						commit
						afcb5a855c
					
				|  | @ -602,6 +602,7 @@ playwright.config.ts @grafana/plugins-platform-frontend | |||
| /pkg/services/anonymous/ @grafana/identity-access-team | ||||
| /pkg/services/auth/ @grafana/identity-access-team | ||||
| /pkg/services/authn/ @grafana/identity-access-team | ||||
| /pkg/services/authz/ @grafana/identity-access-team | ||||
| /pkg/services/signingkeys/ @grafana/identity-access-team | ||||
| /pkg/services/dashboards/accesscontrol.go @grafana/identity-access-team | ||||
| /pkg/services/datasources/guardian/ @grafana/identity-access-team | ||||
|  |  | |||
							
								
								
									
										2
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										2
									
								
								Makefile
								
								
								
								
							|  | @ -61,6 +61,7 @@ swagger-oss-gen: $(SWAGGER) ## Generate API Swagger specification | |||
| 	rm -f $(SPEC_TARGET) | ||||
| 	SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -q -m -w pkg/server -o $(SPEC_TARGET) \
 | ||||
| 	-x "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" \
 | ||||
| 	-x "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" \
 | ||||
| 	-x "github.com/prometheus/alertmanager" \
 | ||||
| 	-i pkg/api/swagger_tags.json \
 | ||||
| 	--exclude-tag=alpha \
 | ||||
|  | @ -78,6 +79,7 @@ swagger-enterprise-gen: $(SWAGGER) ## Generate API Swagger specification | |||
| 	rm -f $(ENTERPRISE_SPEC_TARGET) | ||||
| 	SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -q -m -w pkg/server -o $(ENTERPRISE_SPEC_TARGET) \
 | ||||
| 	-x "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" \
 | ||||
| 	-x "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" \
 | ||||
| 	-x "github.com/prometheus/alertmanager" \
 | ||||
| 	-i pkg/api/swagger_tags.json \
 | ||||
| 	--exclude-tag=alpha \
 | ||||
|  |  | |||
							
								
								
									
										9
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										9
									
								
								go.mod
								
								
								
								
							|  | @ -87,7 +87,7 @@ require ( | |||
| 	github.com/gorilla/mux v1.8.1 // @grafana/grafana-backend-group | ||||
| 	github.com/gorilla/websocket v1.5.0 // @grafana/grafana-app-platform-squad | ||||
| 	github.com/grafana/alerting v0.0.0-20240606211712-071c8609797a // @grafana/alerting-backend | ||||
| 	github.com/grafana/authlib v0.0.0-20240515154731-fe4779055ef4 // @grafana/identity-access-team | ||||
| 	github.com/grafana/authlib v0.0.0-20240611075137-331cbe4e840f // @grafana/identity-access-team | ||||
| 	github.com/grafana/codejen v0.0.3 // @grafana/dataviz-squad | ||||
| 	github.com/grafana/cuetsy v0.1.11 // @grafana/grafana-as-code | ||||
| 	github.com/grafana/dataplane/examples v0.0.1 // @grafana/observability-metrics | ||||
|  | @ -320,7 +320,7 @@ require ( | |||
| 	github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db // indirect | ||||
| 	github.com/grafana/sqlds/v3 v3.2.0 // indirect | ||||
| 	github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a5340 // indirect; @grafana/plugins-platform-backend | ||||
| 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect | ||||
| 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect | ||||
| 	github.com/hashicorp/errwrap v1.1.0 // indirect | ||||
| 	github.com/hashicorp/go-immutable-radix v1.3.1 // indirect | ||||
| 	github.com/hashicorp/go-msgpack v0.5.5 // indirect | ||||
|  | @ -397,7 +397,6 @@ require ( | |||
| 	github.com/redis/rueidis v1.0.16 // indirect | ||||
| 	github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect | ||||
| 	github.com/rivo/uniseg v0.4.7 // indirect | ||||
| 	github.com/rogpeppe/go-internal v1.12.0 // indirect | ||||
| 	github.com/rs/cors v1.10.1 // indirect | ||||
| 	github.com/russross/blackfriday/v2 v2.1.0 // indirect | ||||
| 	github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect | ||||
|  | @ -438,8 +437,8 @@ require ( | |||
| 	golang.org/x/term v0.21.0 // indirect | ||||
| 	golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect; @grafana/grafana-backend-group | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240520151616-dc85e6b867a5 // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect | ||||
| 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect | ||||
| 	gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect | ||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||
|  |  | |||
							
								
								
									
										16
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										16
									
								
								go.sum
								
								
								
								
							|  | @ -2307,8 +2307,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm | |||
| github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | ||||
| github.com/grafana/alerting v0.0.0-20240606211712-071c8609797a h1:MvrEgxNxmUqaFWkBtRlbgxStbdD8FcmtjlRp98bmMJU= | ||||
| github.com/grafana/alerting v0.0.0-20240606211712-071c8609797a/go.mod h1:U7Ta3K4T7jVgqGSYuPsfuPKHFiL2GbCZSHa3nHjmCos= | ||||
| github.com/grafana/authlib v0.0.0-20240515154731-fe4779055ef4 h1:Bfa397TXkM0X97MhbCC+fNSwVtg21c0Mg5STes1dRug= | ||||
| github.com/grafana/authlib v0.0.0-20240515154731-fe4779055ef4/go.mod h1:86rRD5P6u2JPWtNWTMOlqlU+YMv2fUvVz/DomA6L7w4= | ||||
| github.com/grafana/authlib v0.0.0-20240611075137-331cbe4e840f h1:hvRCAv+TgcHu3i/Sd7lFJx84iEtgzDCYuk7OWeXatD0= | ||||
| github.com/grafana/authlib v0.0.0-20240611075137-331cbe4e840f/go.mod h1:+MjD5sxxgLOIvw0ox18wJmjBzz8tOECo7quiiZAmgJY= | ||||
| github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw= | ||||
| github.com/grafana/codejen v0.0.3/go.mod h1:zmwwM/DRyQB7pfuBjTWII3CWtxcXh8LTwAYGfDfpR6s= | ||||
| github.com/grafana/cue v0.0.0-20230926092038-971951014e3f h1:TmYAMnqg3d5KYEAaT6PtTguL2GjLfvr6wnAX8Azw6tQ= | ||||
|  | @ -2380,8 +2380,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4Zs | |||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= | ||||
| github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= | ||||
| github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok= | ||||
| github.com/hanwen/go-fuse/v2 v2.1.0/go.mod h1:oRyA5eK+pvJyv5otpO/DgccS8y/RvYMaO00GgRLGryc= | ||||
|  | @ -4381,8 +4381,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240213162025-012b6fc9bca9/go. | |||
| google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240415180920-8c6c420018be/go.mod h1:dvdCTIoAGbkWbcIKBniID56/7XHTt6WfxXNMxuziJ+w= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 h1:DTJM0R8LECCgFeUwApvcEJHz85HLagW8uRENYxHh1ww= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6/go.mod h1:10yRODfgim2/T8csjQsMPgZOMvtytXKTDRzH6HRGzRw= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117/go.mod h1:OimBR/bc1wPO9iV4NC2bpyjy3VnAwZh5EBPQdtaE5oo= | ||||
| google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= | ||||
| google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c= | ||||
| google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw= | ||||
|  | @ -4427,8 +4427,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240311132316-a219d84964c2/go. | |||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240415141817-7cd4c1c1f9ec/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240520151616-dc85e6b867a5 h1:Q2RxlXqh1cgzzUgV261vBO2jI5R/3DD1J2pM0nI4NhU= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= | ||||
| google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | ||||
| google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | ||||
| google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= | ||||
|  |  | |||
|  | @ -554,6 +554,7 @@ github.com/grafana/grafana-plugin-sdk-go v0.231.1-0.20240523124942-62dae9836284/ | |||
| github.com/grafana/grafana/pkg/promlib v0.0.3/go.mod h1:3El4NlsfALz8QQCbEGHGFvJUG+538QLMuALRhZ3pcoo= | ||||
| github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= | ||||
| github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= | ||||
| github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= | ||||
| github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= | ||||
|  | @ -949,7 +950,6 @@ golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8U | |||
| golang.org/x/image v0.0.0-20220302094943-723b81ca9867 h1:TcHcE0vrmgzNH1v3ppjcMGbhG5+9fMuvOmUYwNEF4q4= | ||||
| golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= | ||||
| golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808 h1:+Kc94D8UVEVxJnLXp/+FMfqQARZtWHfVrcRtcG8aT3g= | ||||
| golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808/go.mod h1:KG1lNk5ZFNssSZLrpVb4sMXKMpGwGXOxSG3rnu2gZQQ= | ||||
| golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2 h1:IRJeR9r1pYWsHKTRe/IInb7lYvbBVIqOgsX/u0mbOWY= | ||||
| golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457 h1:zf5N6UOrA487eEFacMePxjXAJctxKmyjKUsjA11Uzuk= | ||||
| golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= | ||||
|  | @ -959,12 +959,17 @@ google.golang.org/api v0.166.0/go.mod h1:4FcBc686KFi7QI/U51/2GKKevfZMpM17sCdibqe | |||
| google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8/go.mod h1:vPrPUTsDCYxXWjP7clS81mZ6/803D8K4iM9Ma27VKas= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU= | ||||
| google.golang.org/genproto/googleapis/bytestream v0.0.0-20231120223509-83a465c0220f h1:hL+1ptbhFoeL1HcROQ8OGXaqH0jYRRibgWQWco0/Ugc= | ||||
| google.golang.org/genproto/googleapis/bytestream v0.0.0-20231212172506-995d672761c0 h1:Y6QQt9D/syZt/Qgnz5a1y2O3WunQeeVDfS9+Xr82iFA= | ||||
| google.golang.org/genproto/googleapis/bytestream v0.0.0-20240125205218-1f4bbc51befe h1:weYsP+dNijSQVoLAb5bpUos3ciBpNU/NEVlHFKrk8pg= | ||||
| google.golang.org/genproto/googleapis/bytestream v0.0.0-20240325203815-454cdb8f5daa h1:wBkzraZsSqhj1M4L/nMrljUU6XasJkgHvUsq8oRGwF0= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= | ||||
| google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= | ||||
| gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= | ||||
| gopkg.in/cheggaaa/pb.v1 v1.0.25 h1:Ev7yu1/f6+d+b3pi5vPdRPc6nNtP1umSfcWiEfRqv6I= | ||||
|  |  | |||
|  | @ -193,4 +193,5 @@ export interface FeatureToggles { | |||
|   pluginProxyPreserveTrailingSlash?: boolean; | ||||
|   azureMonitorPrometheusExemplars?: boolean; | ||||
|   pinNavItems?: boolean; | ||||
|   authZGRPCServer?: boolean; | ||||
| } | ||||
|  |  | |||
|  | @ -64,7 +64,7 @@ require ( | |||
| 	github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect | ||||
| 	github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect | ||||
| 	github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a5340 // indirect | ||||
| 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect | ||||
| 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect | ||||
| 	github.com/hashicorp/go-hclog v1.6.3 // indirect | ||||
| 	github.com/hashicorp/go-plugin v1.6.1 // indirect | ||||
| 	github.com/hashicorp/yamux v0.1.1 // indirect | ||||
|  | @ -139,8 +139,8 @@ require ( | |||
| 	golang.org/x/tools v0.22.0 // indirect | ||||
| 	golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240520151616-dc85e6b867a5 // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect | ||||
| 	google.golang.org/grpc v1.64.0 // indirect | ||||
| 	google.golang.org/protobuf v1.34.1 // indirect | ||||
| 	gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect | ||||
|  |  | |||
|  | @ -128,7 +128,7 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a534 | |||
| github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a5340/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc= | ||||
| github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= | ||||
| github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= | ||||
| github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= | ||||
| github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= | ||||
| github.com/hashicorp/go-plugin v1.6.1 h1:P7MR2UP6gNKGPp+y7EZw2kOiq4IR9WiqLvp0XOsVdwI= | ||||
|  | @ -401,8 +401,8 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA | |||
| google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= | ||||
| google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 h1:DTJM0R8LECCgFeUwApvcEJHz85HLagW8uRENYxHh1ww= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240520151616-dc85e6b867a5 h1:Q2RxlXqh1cgzzUgV261vBO2jI5R/3DD1J2pM0nI4NhU= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= | ||||
| google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= | ||||
| google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | ||||
| google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= | ||||
|  |  | |||
|  | @ -55,7 +55,7 @@ require ( | |||
| 	github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db // indirect | ||||
| 	github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect | ||||
| 	github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect | ||||
| 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect | ||||
| 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect | ||||
| 	github.com/hashicorp/go-hclog v1.6.3 // indirect | ||||
| 	github.com/hashicorp/go-plugin v1.6.1 // indirect | ||||
| 	github.com/hashicorp/yamux v0.1.1 // indirect | ||||
|  | @ -111,8 +111,8 @@ require ( | |||
| 	golang.org/x/text v0.16.0 // indirect | ||||
| 	golang.org/x/tools v0.22.0 // indirect | ||||
| 	golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240520151616-dc85e6b867a5 // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect | ||||
| 	google.golang.org/grpc v1.64.0 // indirect | ||||
| 	google.golang.org/protobuf v1.34.1 // indirect | ||||
| 	gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect | ||||
|  |  | |||
|  | @ -85,7 +85,7 @@ github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db h1:7aN5cccjIqCLTzed | |||
| github.com/grafana/regexp v0.0.0-20221123153739-15dc172cd2db/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= | ||||
| github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= | ||||
| github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= | ||||
| github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= | ||||
| github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= | ||||
| github.com/hashicorp/go-plugin v1.6.1 h1:P7MR2UP6gNKGPp+y7EZw2kOiq4IR9WiqLvp0XOsVdwI= | ||||
|  | @ -277,8 +277,8 @@ golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSm | |||
| golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= | ||||
| gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= | ||||
| gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 h1:DTJM0R8LECCgFeUwApvcEJHz85HLagW8uRENYxHh1ww= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240520151616-dc85e6b867a5 h1:Q2RxlXqh1cgzzUgV261vBO2jI5R/3DD1J2pM0nI4NhU= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= | ||||
| google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= | ||||
| google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
|  |  | |||
|  | @ -13,6 +13,7 @@ import ( | |||
| 	grafanaapiserver "github.com/grafana/grafana/pkg/services/apiserver" | ||||
| 	"github.com/grafana/grafana/pkg/services/auth" | ||||
| 	"github.com/grafana/grafana/pkg/services/authn/authnimpl" | ||||
| 	"github.com/grafana/grafana/pkg/services/authz" | ||||
| 	"github.com/grafana/grafana/pkg/services/cleanup" | ||||
| 	"github.com/grafana/grafana/pkg/services/cloudmigration" | ||||
| 	"github.com/grafana/grafana/pkg/services/dashboardsnapshots" | ||||
|  | @ -67,8 +68,8 @@ func ProvideBackgroundServiceRegistry( | |||
| 	_ dashboardsnapshots.Service, | ||||
| 	_ serviceaccounts.Service, _ *guardian.Provider, | ||||
| 	_ *plugindashboardsservice.DashboardUpdater, _ *sanitizer.Provider, | ||||
| 	_ *grpcserver.HealthService, _ entity.EntityStoreServer, _ *grpcserver.ReflectionService, _ *ldapapi.Service, | ||||
| 	_ *apiregistry.Service, _ auth.IDService, _ *teamapi.TeamAPI, _ ssosettings.Service, | ||||
| 	_ *grpcserver.HealthService, _ entity.EntityStoreServer, _ authz.Client, _ *grpcserver.ReflectionService, | ||||
| 	_ *ldapapi.Service, _ *apiregistry.Service, _ auth.IDService, _ *teamapi.TeamAPI, _ ssosettings.Service, | ||||
| 	_ cloudmigration.Service, _ authnimpl.Registration, | ||||
| ) *BackgroundServiceRegistry { | ||||
| 	return NewBackgroundServiceRegistry( | ||||
|  |  | |||
|  | @ -50,6 +50,7 @@ import ( | |||
| 	"github.com/grafana/grafana/pkg/services/auth/idimpl" | ||||
| 	"github.com/grafana/grafana/pkg/services/auth/jwt" | ||||
| 	"github.com/grafana/grafana/pkg/services/authn/authnimpl" | ||||
| 	"github.com/grafana/grafana/pkg/services/authz" | ||||
| 	"github.com/grafana/grafana/pkg/services/cleanup" | ||||
| 	"github.com/grafana/grafana/pkg/services/cloudmigration/cloudmigrationimpl" | ||||
| 	"github.com/grafana/grafana/pkg/services/contexthandler" | ||||
|  | @ -379,6 +380,7 @@ var wireBasicSet = wire.NewSet( | |||
| 	userimpl.ProvideVerifier, | ||||
| 	connectors.ProvideOrgRoleMapper, | ||||
| 	wire.Bind(new(user.Verifier), new(*userimpl.Verifier)), | ||||
| 	authz.WireSet, | ||||
| 	// Kubernetes API server
 | ||||
| 	grafanaapiserver.WireSet, | ||||
| 	apiregistry.WireSet, | ||||
|  |  | |||
|  | @ -0,0 +1,3 @@ | |||
| # Authorization | ||||
| 
 | ||||
| This package contains the authorization server implementation. | ||||
|  | @ -0,0 +1,33 @@ | |||
| package authz | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/grafana/grafana/pkg/infra/tracing" | ||||
| 	"github.com/grafana/grafana/pkg/services/accesscontrol" | ||||
| 	"github.com/grafana/grafana/pkg/services/featuremgmt" | ||||
| 	"github.com/grafana/grafana/pkg/services/grpcserver" | ||||
| 	"github.com/grafana/grafana/pkg/setting" | ||||
| ) | ||||
| 
 | ||||
| type Client interface { | ||||
| 	// TODO
 | ||||
| } | ||||
| 
 | ||||
| type LegacyClient struct { | ||||
| } | ||||
| 
 | ||||
| func ProvideAuthZClient( | ||||
| 	cfg *setting.Cfg, features featuremgmt.FeatureToggles, acSvc accesscontrol.Service, | ||||
| 	grpcServer grpcserver.Provider, tracer tracing.Tracer, | ||||
| ) (Client, error) { | ||||
| 	if !features.IsEnabledGlobally(featuremgmt.FlagAuthZGRPCServer) { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	_, err := newLegacyServer(acSvc, features, grpcServer, tracer) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	// TODO differentiate run local from run remote grpc
 | ||||
| 	return &LegacyClient{}, nil | ||||
| } | ||||
|  | @ -0,0 +1,66 @@ | |||
| package authz | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 
 | ||||
| 	authzv1 "github.com/grafana/authlib/authz/proto/v1" | ||||
| 
 | ||||
| 	"github.com/grafana/grafana/pkg/infra/log" | ||||
| 	"github.com/grafana/grafana/pkg/infra/tracing" | ||||
| 	"github.com/grafana/grafana/pkg/services/accesscontrol" | ||||
| 	"github.com/grafana/grafana/pkg/services/featuremgmt" | ||||
| 	"github.com/grafana/grafana/pkg/services/grpcserver" | ||||
| ) | ||||
| 
 | ||||
| var _ authzv1.AuthzServiceServer = (*legacyServer)(nil) | ||||
| 
 | ||||
| type legacyServer struct { | ||||
| 	authzv1.UnimplementedAuthzServiceServer | ||||
| 
 | ||||
| 	acSvc  accesscontrol.Service | ||||
| 	logger log.Logger | ||||
| 	tracer tracing.Tracer | ||||
| } | ||||
| 
 | ||||
| func newLegacyServer( | ||||
| 	acSvc accesscontrol.Service, features featuremgmt.FeatureToggles, | ||||
| 	grpcServer grpcserver.Provider, tracer tracing.Tracer, | ||||
| ) (*legacyServer, error) { | ||||
| 	if !features.IsEnabledGlobally(featuremgmt.FlagAuthZGRPCServer) { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	s := &legacyServer{ | ||||
| 		acSvc:  acSvc, | ||||
| 		logger: log.New("authz-grpc-server"), | ||||
| 		tracer: tracer, | ||||
| 	} | ||||
| 
 | ||||
| 	grpcServer.GetServer().RegisterService(&authzv1.AuthzService_ServiceDesc, s) | ||||
| 
 | ||||
| 	return s, nil | ||||
| } | ||||
| 
 | ||||
| func (s *legacyServer) Read(ctx context.Context, req *authzv1.ReadRequest) (*authzv1.ReadResponse, error) { | ||||
| 	ctx, span := s.tracer.Start(ctx, "authz.grpc.Read") | ||||
| 	defer span.End() | ||||
| 
 | ||||
| 	action := req.GetAction() | ||||
| 	subject := req.GetSubject() | ||||
| 	stackID := req.GetStackId() // TODO can we consider the stackID as the orgID?
 | ||||
| 
 | ||||
| 	ctxLogger := s.logger.FromContext(ctx) | ||||
| 	ctxLogger.Debug("Read", "action", action, "subject", subject, "stackID", stackID) | ||||
| 
 | ||||
| 	permissions, err := s.acSvc.SearchUserPermissions(ctx, stackID, accesscontrol.SearchOptions{NamespacedID: subject, Action: action}) | ||||
| 	if err != nil { | ||||
| 		ctxLogger.Error("failed to search user permissions", "error", err) | ||||
| 		return nil, tracing.Errorf(span, "failed to search user permissions: %w", err) | ||||
| 	} | ||||
| 
 | ||||
| 	data := make([]*authzv1.ReadResponse_Data, 0, len(permissions)) | ||||
| 	for _, perm := range permissions { | ||||
| 		data = append(data, &authzv1.ReadResponse_Data{Object: perm.Scope}) | ||||
| 	} | ||||
| 	return &authzv1.ReadResponse{Data: data}, nil | ||||
| } | ||||
|  | @ -0,0 +1,9 @@ | |||
| package authz | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/google/wire" | ||||
| ) | ||||
| 
 | ||||
| var WireSet = wire.NewSet( | ||||
| 	ProvideAuthZClient, | ||||
| ) | ||||
|  | @ -1308,6 +1308,14 @@ var ( | |||
| 			Stage:       FeatureStageExperimental, | ||||
| 			Owner:       grafanaFrontendPlatformSquad, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:              "authZGRPCServer", | ||||
| 			Description:       "Enables the gRPC server for authorization", | ||||
| 			Stage:             FeatureStageExperimental, | ||||
| 			Owner:             identityAccessTeam, | ||||
| 			HideFromAdminPage: true, | ||||
| 			HideFromDocs:      true, | ||||
| 		}, | ||||
| 	} | ||||
| ) | ||||
| 
 | ||||
|  |  | |||
|  | @ -174,3 +174,4 @@ alertingCentralAlertHistory,experimental,@grafana/alerting-squad,false,false,tru | |||
| pluginProxyPreserveTrailingSlash,GA,@grafana/plugins-platform-backend,false,false,false | ||||
| azureMonitorPrometheusExemplars,experimental,@grafana/partner-datasources,false,false,false | ||||
| pinNavItems,experimental,@grafana/grafana-frontend-platform,false,false,false | ||||
| authZGRPCServer,experimental,@grafana/identity-access-team,false,false,false | ||||
|  |  | |||
| 
 | 
|  | @ -706,4 +706,8 @@ const ( | |||
| 	// FlagPinNavItems
 | ||||
| 	// Enables pinning of nav items
 | ||||
| 	FlagPinNavItems = "pinNavItems" | ||||
| 
 | ||||
| 	// FlagAuthZGRPCServer
 | ||||
| 	// Enables the gRPC server for authorization
 | ||||
| 	FlagAuthZGRPCServer = "authZGRPCServer" | ||||
| ) | ||||
|  |  | |||
|  | @ -2264,6 +2264,20 @@ | |||
|         "stage": "experimental", | ||||
|         "codeowner": "@grafana/grafana-frontend-platform" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "metadata": { | ||||
|         "name": "authZGRPCServer", | ||||
|         "resourceVersion": "1718093439898", | ||||
|         "creationTimestamp": "2024-06-11T08:10:39Z" | ||||
|       }, | ||||
|       "spec": { | ||||
|         "description": "Enables the gRPC server for authorization", | ||||
|         "stage": "experimental", | ||||
|         "codeowner": "@grafana/identity-access-team", | ||||
|         "hideFromAdminPage": true, | ||||
|         "hideFromDocs": true | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
		Loading…
	
		Reference in New Issue