-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
VTGate: Set immediate caller id from gRPC static auth username #12050
VTGate: Set immediate caller id from gRPC static auth username #12050
Conversation
Signed-off-by: Brendan Dougherty <brendan.dougherty@shopify.com>
Review ChecklistHello reviewers! 👋 Please follow this checklist when reviewing this Pull Request. General
If a new flag is being introduced:
If a workflow is added or modified:
Bug fixes
Non-trivial changes
New/Existing features
Backward compatibility
|
"Args": ["vitess.io/vitess/go/test/endtoend/vtgate/grpc_server_auth_static"], | ||
"Command": [], | ||
"Manual": false, | ||
"Shard": "vtgate_general_heavy", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure if this is the right shard to use. Any guidance would be appreciated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This shard looks as good as any. I checked the run of this shard as well. It takes about 13 minutes with this new test, so there is no risk of flakiness because of timeouts. It should be okay.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Other than this, I like the changes and the tests too.
func TestAuthenticatedUserWithAccess(t *testing.T) { | ||
ctx, cancel := context.WithCancel(context.Background()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To me the tests feel self-explanatory, but could you add a couple of lines to each describing what its testing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
Signed-off-by: Brendan Dougherty <brendan.dougherty@shopify.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👋🏾 I work at PlanetScale and built out our Service-to-service authentication story and custom ACLs for PlanetScale databases.
PlanetScale's usage of vtgate static auth and ACLs system is a bit unique in that we don't handle authentication for user queries in vtgate. We do that in our own query front-end service.
VTGate static authentication is configured for service-to-service authentication between the query front-end and vtgate, ACL system is configured to pass through user roles from our credential store to vtgate.
We do this by setting the effectiveCallerID on requests made to the vtgate gRPC service and having the same names reflected in the acl config file for a given vttablet.
vitess/go/vt/vtgate/grpcvtgateservice/server.go
Lines 107 to 113 in c0b5df6
immediate, securityGroups := immediateCallerID(ctx) | |
if immediate == "" && useEffective && effectiveCallerID != nil { | |
immediate = effectiveCallerID.Principal | |
if useEffectiveGroups && len(effectiveCallerID.Groups) > 0 { | |
securityGroups = effectiveCallerID.Groups | |
} | |
} |
Given ☝🏾 , this change looks good to me. Since the caller identity is still the EffectiveCallerId from the context and not request identity used for service-to-service communication.
Thank you both for the reviews. Is there anything else needed or would it be possible for you to merge the PR? |
@brendar we are planning to effectively revert this PR and backport the change to release-16.0 branch as well. See discussion #12961 (comment) |
Signed-off-by: Brendan Dougherty brendan.dougherty@shopify.com
Description
Currently, when using gRPC static auth on VTGate, the immediate caller id is always set to
unsecure_grpc_client
, rather than the username provided by the client. This means that table ACLs on VTTablet will reject the client's queries.The problem appears to have been discussed when static auth was originally added here, but was not changed in a followup.
This PR takes a similar approach to what was suggested and sets the authenticated username in the Context. This allows the VTGate server to retrieve the username in a similar manner to how it retrieves the certificate common name as the immediate caller id when using mTLS (source).
Related Issue(s)
Fixes #12049
Checklist
Deployment Notes