An example project to demonstrate the integration between Confluent Control Center (C3) and Windows Active Directory, using AD Groups to control access to the groups.
This will provide all the necessary steps for setting up Confluent Platform's Control Center (C3) to use simple Active Directory authorization. The configuration is documented here:
https://docs.confluent.io/platform/current/control-center/security/c3-auth-ldap.html
The following steps illustrate an in-depth walkthrough for setting up Windows Server 2022:
https://github.com/ableasdale/confluent-dockerfiles/tree/main/simple-active-directory-c3
This walkthrough has been tested with a VirtualBox installation of a trial version of Windows Server 2019, with Active Directory Services installed and with the VM being promoted to an AD Domain Controller.
Two users have been set up in Active Directory (in Windows Server, run dsa.msc to access the Active Directory Users and Computers component).
- Alex is a member of the Administrators group and will have full access to Confluent Control Center (C3)
- Bob is a member of the Guests group and has read-only access
There are two sections of configuration of note:
The control-center container is being configured with the following parameters:
# For LDAP
CONTROL_CENTER_REST_AUTHENTICATION_ROLES: Administrators,Guests
CONTROL_CENTER_AUTH_RESTRICTED_ROLES: Guests
CONTROL_CENTER_REST_AUTHENTICATION_METHOD: BASIC
CONTROL_CENTER_REST_AUTHENTICATION_REALM: c3
CONTROL_CENTER_OPTS: -Djava.security.auth.login.config=/tmp/jaas.confAnd the jaas.conf file will look similar to this:
c3 {
org.eclipse.jetty.jaas.spi.LdapLoginModule required
useLdaps="false"
contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
hostname="winldap"
port="389"
bindDn="CN=Alex,CN=Users,DC=ad-confluent,DC=io"
bindPassword="Password123456"
authenticationMethod="simple"
forceBindingLogin="true"
userBaseDn="CN=Users,DC=ad-confluent,DC=io"
userRdnAttribute="cn"
userIdAttribute="sAMAccountName"
userPasswordAttribute="userPassword"
userObjectClass="user"
roleBaseDn="CN=Builtin,DC=ad-confluent,DC=io"
roleNameAttribute="CN"
roleMemberAttribute="member"
roleObjectClass="group"
reportStatistics="true"
debug="true";
};In order to configure out the Distinguished Name (DN) entries, you can use the Attribute Editor in Active Directory Users and Computers; to do that, you need to ensure that Advanced Features is set under the View menu:
From there you can use the Attribute Editor tab and find the distinguishedName property for your user:
You can use the ldapsearch tool to search the LDAP directory; the format for the command looks like this:
ldapsearch -x -b <search_base> -H <ldap_host>Where the following switches are:
- -x Simple authentication
- -b basedn base dn for search
- -H URI LDAP Uniform Resource Identifier(s)
- -D binddn bind DN
- -W prompt for bind password
Here's an example using the setup created in this walkthrough:
ldapsearch -x -b "CN=Users,DC=ad-confluent,dc=io" -H ldap://192.168.1.236 -D "cn=Alex,CN=Users,DC=ad-confluent,DC=io" -WIf the command ran successfully, you should something like this at the end of the output returned:
# search result
search: 2
result: 0 Success
Another useful resource is Apache Directory Studio:
https://directory.apache.org/studio/
Once installed, the LDAP connection can be set up to your Active Directory instance by locating the Connections panel and clicking on the New Connection icon:
From there, you can enter the hostname (or IP address):
And set the Bind DN and Password:
Note that you have the option to test the connection at this stage.
From there, you can access a signficant amount of metadata associated with your Users and Groups - which should help with any further configuration:
First, make sure the volumes have been mounted on the control-center instance and ensure that you can access the jaas.conf file:
docker-compose exec control-center bashcd /tmp/
cat jaas.confYou can add -Djava.security.debug=all -Djava.security.auth.debug=all -Dorg.eclipse.jetty.util.log.IGNORED=true to your CONTROL_CENTER_OPTS in your docker-compose.yaml file to get more fine-grained logging (this setting is included in the provided docker-compose.yaml file):
CONTROL_CENTER_OPTS: -Djava.security.auth.login.config=/tmp/jaas.conf -Djava.security.debug=all -Djava.security.auth.debug=all -Dorg.eclipse.jetty.util.log.IGNORED=trueFor a successful login (with Debug logging configured), you will see the following entries from the LdapLoginModule:
control-center | [LoginContext]: org.eclipse.jetty.jaas.spi.LdapLoginModule loaded via reflection
control-center | [LoginContext]: org.eclipse.jetty.jaas.spi.LdapLoginModule login success
control-center | [LoginContext]: org.eclipse.jetty.jaas.spi.LdapLoginModule commit success
control-center | [2023-10-27 14:38:15,066] INFO Attempting authentication: CN=Alex,CN=Users,DC=ad-confluent,DC=io (org.eclipse.jetty.jaas.spi.LdapLoginModule)
control-center | [2023-10-27 14:38:15,070] INFO Attempting authentication: CN=Alex,CN=Users,DC=ad-confluent,DC=io (org.eclipse.jetty.jaas.spi.LdapLoginModule)
control-center | [LoginContext]: org.eclipse.jetty.jaas.spi.LdapLoginModule login success
control-center | [LoginContext]: org.eclipse.jetty.jaas.spi.LdapLoginModule commit success
control-center | [LoginContext]: org.eclipse.jetty.jaas.spi.LdapLoginModule loaded via reflection
control-center | [LoginContext]: org.eclipse.jetty.jaas.spi.LdapLoginModule login success
control-center | [LoginContext]: org.eclipse.jetty.jaas.spi.LdapLoginModule commit success







