mirror of
				https://github.com/datahub-project/datahub.git
				synced 2025-11-04 04:39:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			241 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
import Tabs from '@theme/Tabs';
 | 
						|
import TabItem from '@theme/TabItem';
 | 
						|
 | 
						|
# Onboarding Users to DataHub
 | 
						|
 | 
						|
New user accounts can be provisioned on DataHub in 3 ways:
 | 
						|
 | 
						|
1. Shared Invite Links
 | 
						|
2. Single Sign-On using [OpenID Connect](https://www.google.com/search?q=openid+connect&oq=openid+connect&aqs=chrome.0.0i131i433i512j0i512l4j69i60l2j69i61.1468j0j7&sourceid=chrome&ie=UTF-8)
 | 
						|
3. Static Credential Configuration File (Self-Hosted Only)
 | 
						|
 | 
						|
The first option is the easiest to get started with. The second is recommended for deploying DataHub in production. The third should
 | 
						|
be reserved for special circumstances where access must be closely monitored and controlled, and is only relevant for Self-Hosted instances.
 | 
						|
 | 
						|
# Shared Invite Links
 | 
						|
 | 
						|
### Generating an Invite Link
 | 
						|
 | 
						|
If you have the `Manage User Credentials` [Platform Privilege](../../authorization/access-policies-guide.md), you can invite new users to DataHub by sharing an invite link.
 | 
						|
 | 
						|
To do so, navigate to the **Users & Groups** section inside of Settings page. Here you can generate a shareable invite link by clicking the `Invite Users` button. If you
 | 
						|
do not have the correct privileges to invite users, this button will be disabled.
 | 
						|
 | 
						|
<p align="center">
 | 
						|
  <img width="100%" src="https://raw.githubusercontent.com/datahub-project/static-assets/master/imgs/invite-users-button.png"/>
 | 
						|
</p>
 | 
						|
 | 
						|
To invite new users, simply share the link with others inside your organization.
 | 
						|
 | 
						|
<p align="center">
 | 
						|
  <img width="70%" src="https://raw.githubusercontent.com/datahub-project/static-assets/master/imgs/invite-users-popup.png"/>
 | 
						|
</p>
 | 
						|
 | 
						|
When a new user visits the link, they will be directed to a sign up screen where they can create their DataHub account.
 | 
						|
 | 
						|
### Resetting User Passwords
 | 
						|
 | 
						|
To reset a user's password, navigate to the Users & Groups tab, find the user who needs their password reset,
 | 
						|
and click **Reset user password** inside the menu dropdown on the right hand side. Note that a user must have the
 | 
						|
`Manage User Credentials` [Platform Privilege](../../authorization/access-policies-guide.md) in order to reset passwords.
 | 
						|
 | 
						|
<p align="center">
 | 
						|
  <img width="100%" src="https://raw.githubusercontent.com/datahub-project/static-assets/master/imgs/reset-user-password-button.png"/>
 | 
						|
</p>
 | 
						|
 | 
						|
To reset the password, simply share the password reset link with the user who needs to change their password. Password reset links expire after 24 hours.
 | 
						|
 | 
						|
<p align="center">
 | 
						|
  <img width="70%" src="https://raw.githubusercontent.com/datahub-project/static-assets/master/imgs/reset-user-password-popup.png"/>
 | 
						|
</p>
 | 
						|
 | 
						|
# Configuring Single Sign-On with OpenID Connect
 | 
						|
 | 
						|
Setting up Single Sign-On via OpenID Connect enables your organization's users to login to DataHub via a central Identity Provider such as
 | 
						|
 | 
						|
- Azure AD
 | 
						|
- Okta
 | 
						|
- Keycloak
 | 
						|
- Ping!
 | 
						|
- Google Identity
 | 
						|
 | 
						|
and many more.
 | 
						|
 | 
						|
This option is strongly recommended for production deployments of DataHub.
 | 
						|
 | 
						|
### DataHub Cloud
 | 
						|
 | 
						|
Single Sign-On can be configured and enabled by navigating to **Settings** > **SSO** > **OIDC**. Note
 | 
						|
that a user must have the **Manage Platform Settings** [Platform Privilege](../../authorization/access-policies-guide.md)
 | 
						|
in order to configure SSO settings.
 | 
						|
 | 
						|
To complete the integration, you'll need the following:
 | 
						|
 | 
						|
1. **Client ID** - A unique identifier for your application with the identity provider
 | 
						|
2. **Client Secret** - A shared secret to use for exchange between you and your identity provider
 | 
						|
3. **Discovery URL** - A URL where the OpenID settings for your identity provider can be discovered.
 | 
						|
 | 
						|
These values can be obtained from your Identity Provider by following Step 1 on the [OpenID Connect Authentication](sso/configure-oidc-react.md)) Guide.
 | 
						|
 | 
						|
### Self-Hosted DataHub
 | 
						|
 | 
						|
For information about configuring Self-Hosted DataHub to use OpenID Connect (OIDC) to
 | 
						|
perform authentication, check out [OIDC Authentication](sso/configure-oidc-react.md).
 | 
						|
 | 
						|
> **A note about user URNs**: User URNs are unique identifiers for users on DataHub. The username received from an Identity Provider
 | 
						|
> when a user logs into DataHub via OIDC is used to construct a unique identifier for the user on DataHub. The urn is computed as:
 | 
						|
> `urn:li:corpuser:<extracted-username>`
 | 
						|
>
 | 
						|
> By default, the email address will be the username extracted from the Identity Provider. For information about customizing
 | 
						|
> the claim should be treated as the username in Datahub, check out the [OIDC Authentication](sso/configure-oidc-react.md) documentation.
 | 
						|
 | 
						|
# Static Credential Configuration File (Self-Hosted Only)
 | 
						|
 | 
						|
User credentials can be managed via a [JaaS Authentication](./jaas.md) configuration file containing
 | 
						|
static username and password combinations. By default, the credentials for the root 'datahub' users are configured
 | 
						|
using this mechanism. It is highly recommended that admins change or remove the default credentials for this user
 | 
						|
 | 
						|
## Adding new users using a user.props file
 | 
						|
 | 
						|
:::NOTE
 | 
						|
Adding users via the `user.props` will require disabling existence checks on GMS using the `METADATA_SERVICE_AUTH_ENFORCE_EXISTENCE_ENABLED=false` environment variable or using the API to enable the user prior to login.
 | 
						|
The directions below demonstrate using the API to enable the user.
 | 
						|
:::
 | 
						|
 | 
						|
To define a set of username / password combinations that should be allowed to log in to DataHub (in addition to the root 'datahub' user),
 | 
						|
create a new file called `user.props` at the file path `${HOME}/.datahub/plugins/frontend/auth/user.props` within the `datahub-frontend-react` container
 | 
						|
or pod.
 | 
						|
 | 
						|
This file should contain username:password specifications, with one on each line. For example, to create 2 new users,
 | 
						|
with usernames "janesmith" and "johndoe", we would define the following file:
 | 
						|
 | 
						|
```
 | 
						|
// custom user.props
 | 
						|
janesmith:janespassword
 | 
						|
johndoe:johnspassword
 | 
						|
```
 | 
						|
 | 
						|
In order to enable the user access with the credential defined in `user.props`, set the `status` aspect on the user with an Admin user. This can be done using an API call or via the [OpenAPI UI interface](/docs/api/openapi/openapi-usage-guide.md).
 | 
						|
 | 
						|
<Tabs>
 | 
						|
<TabItem value="openapi" label="OpenAPI" default>
 | 
						|
 | 
						|
Example enabling login for the `janesmith` user from the example above. Make sure to update the example with your access token.
 | 
						|
 | 
						|
```shell
 | 
						|
curl -X 'POST' \
 | 
						|
  'http://localhost:9002/openapi/v3/entity/corpuser/urn%3Ali%3Acorpuser%3Ajanesmith/status?async=false&systemMetadata=false&createIfEntityNotExists=false&createIfNotExists=true' \
 | 
						|
  -H 'accept: application/json' \
 | 
						|
  -H 'Content-Type: application/json' \
 | 
						|
  -H 'Authorization: Bearer <access token>' \
 | 
						|
  -d '{
 | 
						|
  "value": {
 | 
						|
    "removed": false
 | 
						|
  }
 | 
						|
}'
 | 
						|
```
 | 
						|
</TabItem>
 | 
						|
</Tabs>
 | 
						|
 | 
						|
Once you've saved the file, simply start the DataHub containers & navigate to `http://localhost:9002/login`
 | 
						|
to verify that your new credentials work.
 | 
						|
 | 
						|
To change or remove existing login credentials, edit and save the `user.props` file. Then restart DataHub containers.
 | 
						|
 | 
						|
If you want to customize the location of the `user.props` file, or if you're deploying DataHub via Helm, proceed to Step 2.
 | 
						|
 | 
						|
### (Advanced) Mount custom user.props file to container
 | 
						|
 | 
						|
This step is only required when mounting custom credentials into a Kubernetes pod (e.g. Helm) **or** if you want to change
 | 
						|
the default filesystem location from which DataHub mounts a custom `user.props` file (`${HOME}/.datahub/plugins/frontend/auth/user.props)`.
 | 
						|
 | 
						|
If you are deploying with `datahub docker quickstart`, or running using Docker Compose, you can most likely skip this step.
 | 
						|
 | 
						|
#### Docker Compose
 | 
						|
 | 
						|
You'll need to modify the `docker-compose.yml` file to mount a container volume mapping your custom user.props to the standard location inside the container
 | 
						|
(`/etc/datahub/plugins/frontend/auth/user.props`).
 | 
						|
 | 
						|
For example, to mount a user.props file that is stored on my local filesystem at `/tmp/datahub/user.props`, we'd modify the YAML for the
 | 
						|
`datahub-web-react` config to look like the following:
 | 
						|
 | 
						|
```aidl
 | 
						|
  datahub-frontend-react:
 | 
						|
    build:
 | 
						|
      context: ../
 | 
						|
      dockerfile: docker/datahub-frontend/Dockerfile
 | 
						|
    image: acryldata/datahub-frontend-react:${DATAHUB_VERSION:-head}
 | 
						|
    .....
 | 
						|
    # The new stuff
 | 
						|
    volumes:
 | 
						|
      - ${HOME}/.datahub/plugins:/etc/datahub/plugins
 | 
						|
      - /tmp/datahub:/etc/datahub/plugins/frontend/auth
 | 
						|
```
 | 
						|
 | 
						|
Once you've made this change, restarting DataHub enable authentication for the configured users.
 | 
						|
 | 
						|
#### Helm
 | 
						|
 | 
						|
You'll need to create a Kubernetes secret, then mount the file as a volume to the `datahub-frontend` pod.
 | 
						|
 | 
						|
First, create a secret from your local `user.props` file
 | 
						|
 | 
						|
```shell
 | 
						|
kubectl create secret generic datahub-users-secret --from-file=user.props=./<path-to-your-user.props>
 | 
						|
```
 | 
						|
 | 
						|
Then, configure your `values.yaml` to add the volume to the `datahub-frontend` container.
 | 
						|
 | 
						|
```YAML
 | 
						|
datahub-frontend:
 | 
						|
  ...
 | 
						|
  extraVolumes:
 | 
						|
    - name: datahub-users
 | 
						|
      secret:
 | 
						|
        defaultMode: 0444
 | 
						|
        secretName:  datahub-users-secret
 | 
						|
  extraVolumeMounts:
 | 
						|
    - name: datahub-users
 | 
						|
      mountPath: /etc/datahub/plugins/frontend/auth/user.props
 | 
						|
      subPath: user.props
 | 
						|
```
 | 
						|
 | 
						|
Note that if you update the secret you will need to restart the `datahub-frontend` pods so the changes are reflected. To update the secret in-place you can run something like this.
 | 
						|
 | 
						|
```shell
 | 
						|
kubectl create secret generic datahub-users-secret --from-file=user.props=./<path-to-your-user.props> -o yaml --dry-run=client | kubectl apply -f -
 | 
						|
```
 | 
						|
 | 
						|
> A note on user URNs: User URNs are unique identifiers for users of DataHub. The usernames defined in the `user.props` file will be used to generate the DataHub user "urn", which uniquely identifies
 | 
						|
> the user on DataHub. The urn is computed as `urn:li:corpuser:{username}`, where "username is defined inside your user.props file."
 | 
						|
 | 
						|
## Changing the default 'datahub' user credentials (Recommended)
 | 
						|
 | 
						|
Please refer to [Changing the default user credentials](../changing-default-credentials.md).
 | 
						|
 | 
						|
## Caveats
 | 
						|
 | 
						|
### Adding User Details
 | 
						|
 | 
						|
If you add a new username / password to the `user.props` file, no other information about the user will exist
 | 
						|
about the user in DataHub (full name, email, bio, etc). This means that you will not be able to search to find the user.
 | 
						|
 | 
						|
In order for the user to become searchable, simply navigate to the new user's profile page (top-right corner) and click
 | 
						|
**Edit Profile**. Add some details like a display name, an email, and more. Then click **Save**. Now you should be able
 | 
						|
to find the user via search.
 | 
						|
 | 
						|
> You can also use our Python Emitter SDK to produce custom information about the new user via the CorpUser metadata entity.
 | 
						|
 | 
						|
For a more comprehensive overview of how users & groups are managed within DataHub, check out [this video](https://www.youtube.com/watch?v=8Osw6p9vDYY).
 | 
						|
 | 
						|
## FAQ
 | 
						|
 | 
						|
1. Can I enable OIDC and username / password (JaaS) authentication at the same time?
 | 
						|
 | 
						|
YES! If you have not explicitly disabled JaaS via an environment variable on the datahub-frontend container (AUTH_JAAS_ENABLED),
 | 
						|
then you can always access the standard login flow at `http://your-datahub-url.com/login`.
 | 
						|
 | 
						|
## Feedback / Questions / Concerns
 | 
						|
 | 
						|
We want to hear from you! For any inquiries, including Feedback, Questions, or Concerns, reach out on Slack!
 |