[
https://issues.apache.org/jira/browse/IMPALA-12232?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18012216#comment-18012216
]
Paul Mayer commented on IMPALA-12232:
-------------------------------------
This issue is currently a blocker for adoption in our context and I would like
to share some considerations which may be worth considering when working on a
fix:
*Our setup*
In our organization, we run Impala on Cloudera on Cloud Virtual Warehouses. We
have "Platform JWT Auth" activated, which allows authenticating with Impala
using Apache Knox tokens (Apache Knox being part of the Cloudera distro). We
have our own corporate IDP from which we import user identities into the
platform. Applications usually use federated identities with our IDP, use OIDC
to get identity tokens and want to authenticate with Impala (acting as a
Resource Server in an OAuth 2.0 sense).
*Considerations*
{*}{*}{*}1. Multi-Issuer Support{*}
There may be multiple Cloudera customers like us who want to both keep
authentication with Knox JWT tokens enabled (to not break integrations between
products in the Cloudera on Cloud portfolio) _and_ enable authentication with
tokens from external (here: external to the Cloudera ecosystem, "internal" to
the organization deploying Cloudera on Cloud) token providers.
>From that perspective, I would argue that multi-issuer support may be
>desirable, even if not something that many software projects support out of
>the box. Issuer validation could be combined with multi-issuer support as
>follows:
Option 1:
{code:java}
jwks_url=<url>:<name[s]-of-issuer>;<url>:<name[s]-of-issuer-2>{code}
A token validated with a key from the respective JWKS would then need to match
(one of) the respective issuer name(s), while Impala keeps a mapping between
jwks and issuer names. This could support "*" (following e.g. established
practice for proxy_group configs), to allow _any_ issuer name for a specific
issuer (e.g. if no claim is present).
{_}Alternatively{_}, as Option 2, Impala could stay with just supporting a
single jwks_url or jwks_file_path and Impala admins will need to either
aggregate jwks from multiple issuers or mount an aggregate jwks. Under this
scenario, one or more "allow-listed" issuers could be provided:
{code:java}
enable_jwt_issuer_validation=true
jwt_issuers=<names-of-issuers>{code}
*2. OIDC/OAuth 2.0 - Impala as Resource Server*
Use of OIDC is rather widespread and architectural decisions may need to be
looked at from the perspective of enabling (or making more difficult)
compliance with companion specifications to OIDC/OAuth 2.0. Aggregating
multiple issuers' JWKS is rather not in the spirit of OIDC (where there is a
jwks_url for an authorization server and references to keys for signature
validation are communicated in advance). Generally, audiences need to be
validated per token issuer/authz server, meaning that for audience validation,
it probably also makes sense to support a mapping from issuer name to audiences.
{code:java}
enable_jwt_audience_validation=true
jwt_audiences=<name-of-issuer>:<audiences>;<name-of-issuer>:<audiences>{code}
(here, * could again be supported to allow any audiences, even though then a
decision would need to be taken whether that permits missing audience claims
altogether)
*3. Backwards Compatibility*
Multi-issuer support (under Option 1), could either be enabled by a feature
toggle or supported in a little bit of an ugly way by keeping jwks_url
(supporting just a single url, {_}or{_}{*}{*} a format like the one proposed
above). With a feature toggle (e.g. enable_multiple_jwks=true) Impala could
expect jwks_urls with the proposed format. The concrete issuer and audience
validation configuration could be hidden behind feature flags that are false by
default, not breaking existing configurations on upgrade.
*4. Other Aspects*
With multiple issuers, also per-token-issuer configuration for server cert
validation, username claims - and potentially, new: issuer and audience claim
names - may need to be supported.
I'm sure there is more I'm missing, but I would be curious how maintainers here
see native multi-issuer support and how the feature should evolve with respect
to established standards (e.g. OIDC). Depending on feedback, I may be able to
give an implementation a stab (but with strategic direction of the feature
carrying quite a bit of weight in terms of _how_ this could be implemented, I
felt raising some of the points I could think of here made sense.
> Verify JWT Audience and Issuer Claims
> -------------------------------------
>
> Key: IMPALA-12232
> URL: https://issues.apache.org/jira/browse/IMPALA-12232
> Project: IMPALA
> Issue Type: Improvement
> Components: Backend, Security
> Reporter: Jason Fehr
> Assignee: Jason Fehr
> Priority: Major
> Labels: Impala, JWT, impala, jwt, security
>
> RFC 8725 contains JWT best practices that state the audience ("AUD") and
> issuer ("ISS") claims from a JWT should be validated if they are present.
> Impala currently has no mechanism to validate these claims.
> Implement [ISS claim
> validation|https://datatracker.ietf.org/doc/html/rfc8725#name-validate-issuer-and-subject]
> and [AUD claim
> validation|https://datatracker.ietf.org/doc/html/rfc8725#name-use-and-validate-audience].
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]