-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Allow getting AltsContext from transport attributes on client-side #11042
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
Comments
Another option would be to check if TLS or ALTS was used. The attributes will have an SSLSession for TLS traffic. There is an attribute for ALTS, but it looks like ALTS doesn't expose it at all on client-side. Both io.grpc.alts.AuthorizationUtil and AltsContextUtil interact with it, but only on server-side. The simplest might be to extend AltsContextUtil with two additional methods for ClientCall. We can talk to the security team about that. Another option may be to learn which cluster/locality the request was sent to. That isn't plumbed today, and wasn't planned on being exposed publicly soon, but we were going to plumbing this for use in metrics. We could maybe have GoogleDefaultProtocolNegotiator add an additional transport attribute depending on whether it used TLS or ALTS. We'd need to create a handler to participate in the handshaking in order to add the attribute, as right now it decides earlier whether to use ALTS or TLS and then just delegates. |
@surbhigarg92 Do the ideas Eric provided work for you? |
Discussion from Friday:
|
@ejona86 I was trying to use Also the method here takes the
|
When I said:
That was meaning, "we should change things to make it available." I've changed the language in the comment to "Seems AltsContextUtil should be made available on client-side" |
Is there an ETA for this ? |
#11634 added an |
This adds a createFrom(Attributes) to mirror the check(Attributes) added in ba8ab79. It also adds conveniences for ClientCall for both createFrom() and check(). This allows getting peer information from ClientCall and CallCredentials.RequestInfo, as was already available from ServerCall. The tests were reworked to test the Attribute-based methods and then only basic tests for client/server. Fixes grpc#11042
Is your feature request related to a problem?
We want an easy/more consistent way to verify if a request has taken DirectPath or not.
Existing Solution
We are able to use ClientCall.getAttributes() method which is an experimental method to get the socket address like below
clientCall.getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR)
So a client can say that it's connecting to a directpath endpoint if the IP address is within the subnet of 34.126.0.0/18 or
2001:4860:8040::/42
But the above way is difficult to maintains , comes with the burden of modifying this code if IP range changes.
Describe the solution you'd like
We would like to have a separate method to indicate if directPath is used, or a separate attribute indicating that.
clientCall.getAttributes().get(Grpc.**DIRECTPATH_USED**)
The text was updated successfully, but these errors were encountered: