Great suggestions, Enrico.

> It would be interesting to reject connections on the Proxy if the
> client tries to set that field.

I support making the proxy reject invalid input. We could also have
the client reject connections where the client connect command
includes `original_principal`, `original_auth_data`, or
`original_auth_method`, since those are also only meant to be sent by
the proxy.

> On the broker there is no way to distinguish a proxy from a client, that's 
> fair.

We can reject these connections when authentication and authorization
are enabled. My draft PR includes such logic.

Thanks,
Michael

On Fri, Feb 24, 2023 at 7:29 AM Enrico Olivelli <eolive...@gmail.com> wrote:
>
> Makes sense.
>
> It would be interesting to reject connections on the Proxy if the
> client tries to set that field.
> On the broker there is no way to distinguish a proxy from a client, that's 
> fair.
> But on the proxy it is not expected to see a connection from another proxy.
>
> +1
>
> Enrico
>
> Il giorno ven 24 feb 2023 alle ore 10:00 Zike Yang <z...@apache.org> ha 
> scritto:
> >
> > Hi, Michael
> >
> > Thanks for initiating this PIP.
> >
> > +1
> >
> > BR,
> > Zike Yang
> >
> >
> > Zike Yang
> >
> > On Fri, Feb 24, 2023 at 12:16 PM Michael Marshall <mmarsh...@apache.org> 
> > wrote:
> > >
> > > Hi Pulsar Community,
> > >
> > > In talking with Zike Yang on
> > > https://github.com/apache/pulsar/pull/19540, we identified that it
> > > would be helpful for the proxy to forward its own version when
> > > connecting to the broker. Here is a related PIP to improve the
> > > connection information available to operators.
> > >
> > > Issue: https://github.com/apache/pulsar/issues/19623
> > > Implementation: https://github.com/apache/pulsar/pull/19618
> > >
> > > I look forward to your feedback!
> > >
> > > Thanks,
> > > Michael
> > >
> > > Text of PIP copied below:
> > >
> > > ### Motivation
> > >
> > > When clients connect through the proxy, it is valuable to know which
> > > version of the proxy connected to the broker. That information isn't
> > > currently logged or reported in any easily identifiable way. The only
> > > way to get information about the connection is to infer which proxy
> > > forwarded a connection based on matching up the IP address in the
> > > logs.
> > >
> > > An additional change proposed in the implementation is to log this new
> > > information along with the `clientVersion`, `clientProtocolVersion`,
> > > and relevant authentication role information. This information will
> > > improve debug-ability and could also serve as a form of audit logging.
> > >
> > > ### Goal
> > >
> > > Improve the value of the broker's logs and metrics about connections
> > > to simplify debugging and to make it easier for Pulsar operators to
> > > understand how clients are connecting to their clusters.
> > >
> > > ### API Changes
> > >
> > > Add the following:
> > >
> > > ```proto
> > > message CommandConnect {
> > >      // Other fields omitted
> > >     optional string proxy_version = 11; // Version of the proxy.
> > > Should only be forwarded by a proxy.
> > > }
> > > ```
> > >
> > > ### Implementation
> > >
> > > Initial implementation: https://github.com/apache/pulsar/pull/19618
> > >
> > > ### Alternatives
> > >
> > > The `CommandAuthResponse` has a `client_version` field. It's possible
> > > that someone would want this `proxy_version` field on that message.
> > > However, I think we should not continue down the path of duplicating
> > > fields in the connection handshake protocol.
> > >
> > > ### Anything else?
> > >
> > > Future work could include exposing this `proxyVersion` and
> > > `clientVersion` information via Prometheus metrics.

Reply via email to