The proposal makes sense to me.

+1

Enrico

Il giorno mer 18 mag 2022 alle ore 07:18 Michael Marshall
<mmarsh...@apache.org> ha scritto:
>
> I switched to the name "permissionOnSubscriptionRequired" for this
> feature [0]. It describes the feature while satisfying the requirement
> to default to false.
>
> I plan to address the PR's remaining feedback and write tests tomorrow
> (Wednesday). If there isn't any other discussion, I'll start the vote
> once I get tests passing.
>
> Thanks,
> Michael
>
> [0] https://github.com/apache/pulsar/pull/15576
>
> On Fri, May 13, 2022 at 2:53 PM Michael Marshall <mmarsh...@apache.org> wrote:
> >
> > Hello Pulsar Community,
> >
> > Here is a PIP to add a new namespace policy to configure how the
> > PulsarAuthorizationProvider handles the default subscription
> > permission value (null/an empty set). I look forward to your feedback.
> >
> > PIP: https://github.com/apache/pulsar/issues/15597
> >
> > Thanks,
> > Michael
> >
> > ## Motivation
> >
> > Pulsar supports subscription level authorization. When combined with
> > topic level authorization, a user can configure Pulsar to limit which
> > roles can consume from which topic subscriptions. However, when this
> > feature is left unconfigured for a subscription, a role that has
> > permission to consume from a topic is, by default, implicitly granted
> > permission to consume from any subscription on that topic. As a
> > consequence, a missed security configuration could lead to accidental
> > privilege escalation. Here is a reference to the code responsible for
> > the current behavior:
> >
> > https://github.com/apache/pulsar/blob/6864b0ae5520e06b9d0fc5dcfa5a0a0a44feee87/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/PulsarAuthorizationProvider.java#L115-L122
> >
> > ## Goal
> >
> > I propose we add a namespace policy to configure a Pulsar namespace to
> > either allow all or reject all roles when there is no configuration
> > for a specific subscription’s permission. This way, a missed
> > configuration results in a rejected request due to insufficient
> > permission.
> >
> > This PIP will not change the current behavior and will be backwards
> > compatible. It will add a new boolean field to the existing
> > `auth_policies` namespace policy to configure how the
> > `PulsarAuthorizationProvider` handles an empty set of allowed roles in
> > the `canConsume` method.
> >
> > ## Naming
> >
> > I am not settled on the right name for this feature/namespace policy
> > yet. Hopefully this thread can help identify the right name.
> >
> > First, the existing subscription level authorization feature has
> > several names. The Admin API calls this feature
> > `PermissionOnSubscription`, the Pulsar Admin CLI tool calls it
> > `subscription-permission`, the AuthPolicies interface calls it
> > `SubscriptionAuthentication`, and the value is stored in the metadata
> > store as `subscription_auth_roles`.
> >
> > My preferred names for this feature are `implicit_subscription_auth`
> > and `implicitPermissionOnSubscription` because they work well with the
> > “grant” and “revoke” actions, e.g.
> > `grantImplicitPermissionOnSubscription` would be a PUT/POST call to
> > the `/implicitPermissionOnSubscription` endpoint to set the policy
> > value to true. However, that policy name requires the default value to
> > be true to maintain backwards compatibility. Enrico expressed concern
> > that defaulting to true is problematic for the upgrade path:
> > https://github.com/apache/pulsar/pull/15576#discussion_r872045946.
> >
> > Alternatively, we could use the names
> > `PermissionOnSubscriptionRequired` and `subscription_auth_required`.
> > In that case, I would switch the admin API so that the admin API has a
> > single setter endpoint that takes the configuration as a part of the
> > body instead of relying on PUT to mean grant permission and DELETE to
> > mean revoke permission.
> >
> > Please let me know if you have thoughts on what name(s) make sense for
> > this feature.
> >
> > ## API Changes
> >
> > The API changes include updating the Admin API to enable getting and
> > modifying the namespace policy, as well as updating the namespace
> > AuthPolicy interface to store this new metadata field.
> >
> > ## Implementation
> >
> > Draft implementation: https://github.com/apache/pulsar/pull/15576
> >
> > The core update is to the
> > `PulsarAuthorizationProvider#canConsumeAsync` method so that when
> > `implicit_subscription_auth` is true, a null or empty set of roles for
> > a subscription’s permission will result in granted permission to
> > consume from the subscription, and when `implicit_subscription_auth`
> > is false, a null or empty set of roles for a subscription’s permission
> > will result in rejected permission to consume from the subscription.
> > Note that if we negate the meaning of the variable name, the logic
> > will also be inverted appropriately.
> >
> > ## Rejected Alternatives
> >
> > First, we have already received a PR proposing to change the default
> > behavior for all use cases:
> > https://github.com/apache/pulsar/pull/11113. This PR went stale
> > because changing the default would break many deployments. By making
> > the behavior configurable, we satisfy the requirements requested in
> > that PR without breaking existing deployments.
> >
> > Second, it’s possible to implement a new `AuthorizationProvider` to
> > get this feature. However, I believe this feature will benefit users
> > and is a natural development on the existing Pulsar features around
> > subscription authorization, so I think we should include it in the
> > default `PulsarAuthorizationProvider`.

Reply via email to