-
Notifications
You must be signed in to change notification settings - Fork 90
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
OAuth with KafkaUser and simple authorization #135
Comments
Thank you for a thorough description of your problem. Actually, could you open another issue in Strimzi Operator since it's an issue that also concerns KafkaUser CR, and a possibly more elegant solution could be achieved through changes there? Looks like the substitution regex config option would make perfect sense. |
We do not plan to support any custom usernames in the |
Ok, we can still add it in strimzi-kafka-oauth and expose extra config in Kafka CR |
It is road to hell as proved by the Topic Operator. As I said, the User Operator is optional. It might not be able to cover all usecases, but users don't have to use it. |
So in that case the username containing the '@' would not be a problem and the need for the substitution goes away. |
Thank you for your fast responses. I would like to use strimzi for managing ACL's through kubernetes if I can rather than going directly to the kafka api. Maybe another idea for a better fix. A KafkaAcl crd which is similar to the KafkaUser crd however it has a spec.KafkaUser option and no authentication option. KafkaAcl will be applied as a union. So you could have one KafkaUser and 10 KafkaAcls for example. Same sort of pattern as terraform and aws_security_group and aws_security_group_rule. Think of a scenario like you have a connect cluster but seperate deploys for your connectors. Each of the connectors need additional access to topics so would deploy their own KafkaAcl. This would also mean for OAuth users they could just use KafkaAcls. Granted you could get yourself into trouble if two KafkaAcls gives the same permission. You could dectect this in the code and throw out an error and refuse to do anything with the user until the conflict is resolved. Failing that would you be okay with an oauth regex option? Thoughts? |
But that causes the same problems in whatever operator processes the |
Obviously oauth users are outside of kubernetes. Not something I can change. Would you be okay with adding an optional regex to the oauth options in the kafka crd then? The regex can be used to transform the oauth user to a kubernetes friendly name. |
I do not have problem with that => but for the Oauth library, @mstruk is the one to consider it. |
There would need to be some changes in the strimzi operator. Add the option to the Kafka CRD and write it into the kafka server.properties file if the option is set. @mstruk is this solution something you would accept? |
That's the approach I had in mind when I said:
It is really just another principal name mapping facility in addition to existing fallbackXXX mechanisms. It didn't seem like something anyone would need or want at the time, but now there is a real use-case for it. |
Ahh, sorry. I misunderstood that. |
I'm trying to set up oauth for authentication (Azure AD) but use simple authorization.
I have the authenitcation/authorisation working. My issues are around linking the simple authorization through KafkaUser crds.
I realised you could set the KafkaUser without an authentication section and it would just create the permissions.
Sadly my issue comes down to the lack of a spec.kafkaUser setting like the way the KafkaTopic has. I understand there are reasons not to have this to avoid conflicts. However without this functionaltion it is causing me more issues.
I need to run multiple clusters in the same namespace (sadly not up to me). This will create conflicts if I try to add the same user to multiple clusters.
Oauth user unique_name in Azure AD come out as email addresses. So [email protected]. When trying to apply a KafkaUser with that name you get the classic:
failed to create resource: KafkaUser.kafka.strimzi.io "[email protected]" is invalid: metadata.name: Invalid value: "[email protected]": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is 'a-z0-9?(.a-z0-9?)*')
I tried experimenting with the following settings:
userNameClaim: unique_name
fallbackUserNameClaim: sub
fallbackUserNamePrefix: clustername-
This would mean jwk auth requests without a unique_name would avoid point 1. (e.g. username comes out as clustername-11111111-1111-1111-1111-111111111111), however not so much on point 2.
I tried forking with the following hack:
Which made the usernames come out like clustername-username. Which I can make KafkaUsers from.
Although I think having a spec.KafkaUser would be a better solution do you think we could add a "substitution regex" option in the code and crds?
This would allow us to map our usernames to ones that we can create with KafkaUsers.
The text was updated successfully, but these errors were encountered: