2022.06

2022.06

  • Imply
  • Ingest
  • Query
  • Visualize
  • Administer
  • Deploy

›Users

Overview

  • About Imply administration

Manager

  • Using Imply Manager
  • Managing Imply clusters
  • Imply Manager security
  • Extensions

Users

  • Imply Manager users
  • Druid API access
  • Authentication and Authorization

    • Get started with Imply Hybrid Auth
    • Authentication
    • Local users
    • User roles
    • User groups
    • User sessions
    • Brute force attack detection
    • Identity provider integration
    • Okta OIDC integration
    • Okta SAML integration
    • LDAP integration
    • OAuth client authentication

Clarity

  • Monitoring
  • Set up Clarity
  • Cloudwatch monitoring
  • Metrics

Druid administration

  • Configuration reference
  • Logging
  • Druid design

    • Design
    • Segments
    • Processes and servers
    • Deep storage
    • Metadata storage
    • ZooKeeper

    Security

    • Security overview
    • User authentication and authorization
    • LDAP auth
    • Dynamic Config Providers
    • Password providers
    • Authentication and Authorization
    • TLS support
    • Row and column level security

    Performance tuning

    • Basic cluster tuning
    • Segment size optimization
    • Mixed workloads
    • HTTP compression
    • Automated metadata cleanup
  • API reference
  • View Manager

    • View Manager
    • View Manager API
    • Create a view
    • List views
    • Delete a view
    • Inspect view load status
  • Rolling updates
  • Retaining or automatically dropping data
  • Alerts
  • Working with different versions of Apache Hadoop
  • Misc

    • dump-segment tool
    • reset-cluster tool
    • pull-deps tool
    • Deep storage migration
    • Export Metadata Tool
    • Metadata Migration

Druid API access

The Druid API includes endpoints for loading data, querying data, performing operation tasks, and more. In addition, the Druid API lets you manage user access to the Druid console and APIs, as described in the following sections.

API connection information

For unmanaged Imply, such as an on-prem quickstart instance, you can follow the instructions in the Druid documentation to access the Druid API directly.

For managed Imply, you can view API access settings for clusters in the cluster's API tab in the Imply Manager. For Imply Enterprise (formerly Imply Private), the API tab shows the internal endpoint and access credentials for the built-in admin account. The API tab is populated when the cluster is running.

For Imply Hybrid (formerly Imply Cloud), the page additionally shows a public endpoint and the Manager certificate:

Cluster API View

The username and initial password for the default admin account are located in the Security section of a cluster's API view, contained in the Initial Druid API user and Initial Druid API pass fields, respectively.

To reach the private endpoint, you need to access the cluster by VPN or a VPC peering connection.

While the API page shows a public API endpoint as well, we do not recommend exposing a Druid cluster on the public internet. If you need to use the public endpoint, however, you need to open access to the public IP address using an ingress rule for the "Imply Hybrid ELB Unmanaged" security group. We further recommend permitting traffic only on port 9088 and only allowing access from the source IP of the computer used to access the API.

Trying out the API

To test the API, try out a simple status request. Imply Hybrid includes a built-in user, admin, you can use to access the API. For Imply Enterprise, you can use any user with Administer Cluster permissions.

With site-to-site AWS VPN enabled, as recommended, you can send a request to the internal load balancer as follows:

curl -k -u admin:Re+A******A== --cacert f1503f07-f919-47f5-942f-e6a5f42b2d57.crt https://internal-imply-880-elbinter-3ni9xey30jbh-1714040709.us-east-1.elb.amazonaws.com:9088/status

The response should be similar to the following:

{"version":"2021.09.0-iap","modules":[...],"memory":{"maxMemory":209715200,"totalMemory":209715200,"freeMemory":122470008,"usedMemory":87245192,"directMemory":209715200}}

f1503f07-f919-47f5-942f-e6a5f42b2d57.crt is the root certificate downloaded from this cluster's API view, specified with the --cacert flag. You can download the Manager certificate from the cluster API tab.

Druid API users

You administer user access to Druid separately from Imply Manager. Typically, access to the Druid data layer is controlled by firewall rules rather than RBAC rules. However, you can create users in Druid through the Druid API.

For details on creating and managing Druid users, see Druid authentication and authorization documentation. However, note that Imply is preconfigured with the modules required to implement Druid user authentication and authorization.

Also note that the Druid User API for Imply Hybrid is addressed through the router, which requires use of the Coordinator path prefix /proxy/coordinator. For example, to get a list of users, use the following endpoint:

https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users

For example:

curl -k -u admin:Re+A*******A== --cacert 8807c002-****-4182eba1a744.crt https://internal-imply-880-elbinter-3ni9xey30jbh-1714040709.us-east-1.elb.amazonaws.com:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users

The router directs the request to the coordinator service, removing proxy/coordinator. See Management Proxy Routing for more information.

The following sections take you through the work flow for setting up authentication and authorization for Druid users.

For unmanaged Imply, you can omit proxy/coordinator from the path and address the coordinator directly, as described in Druid authentication and authorization documentation.

Create a user

To create a new user, send a POST request to https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users/<username>.

The following curl command creates a user named tutorial. Be sure to replace <coordinator-ip> with the private or public address of the coordinator, as shown in your cluster's API view.

curl -u admin:password -XPOST https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users/tutorial

List all users

To verify that the new user was created, send a GET request to https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users.

For example, the following curl command:

curl -u admin:password https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users

This command returns the following output on a new cluster, indicating that the tutorial user was created:

["admin","tutorial"]

Show a user

You can also verify that the new user was created by requesting information for a specific user.

To do so, send a GET request to https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users/<username>

The following curl command retrieves information for the tutorial user:

curl -u admin:password https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users/tutorial

It should return the following output:

{"name":"tutorial","credentials":null}

Note that the tutorial user does not have any credentials information set. The next step demonstrates how to assign a password for the tutorial user.

Set a user password

To assign a password to the tutorial user, send a POST request to https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users/<username>/credentials

The following example request body shows the format of the JSON password update object:

{"password": "foobar123"}

The following curl command assigns a password to the tutorial user, where pass.json contains JSON data in the format shown above.

curl -u admin:password -H'Content-Type: application/json' -XPOST --data-binary @pass.json https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users/tutorial/credentials

If you retrieve the tutorial user's information now, you should see the assigned credentials, e.g.:

curl -u admin:password https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authentication/db/basic/users/tutorial
{"name":"tutorial","credentials":{"salt":"O1777dLwNzgZVNkNBTbnl6nQxi60nmGawb9E33qernE=","hash":"02pH8/wZ8rUGv8GdokAkxbIXGad5bxRMbX9fd54EeeN5AdwWAV31FF54V0p3cBSWqQZhm/6cw14T9/bwxSgsUA==","iterations":10000}}

You've now configured a user that can authenticate with your Druid cluster. The next section explains how to define roles and permissions for the new user.

Create a role

To create a new role, send a POST request to https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/roles/<rolename>.

curl -u admin:password -XPOST https://<coordinator-ip>:8281/druid-ext/basic-security/authorization/db/basic/roles/tutorial_role

List all roles

To verify that the new role was created, send a GET request to https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/roles.

For example, the following curl command:

curl -u admin:password https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/roles

should return the following output on a new cluster, indicating that the tutorial_role role was created:

["admin","tutorial_role"]

Show a role

To verify that the new role was created , send a GET request to https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/roles/<rolename>

The following curl command retrieves information for the tutorial_role role:

curl -u admin:password https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/roles/tutorial_role

It should return the following output:

{"name":"tutorial_role","permissions":[]}

Set role permissions

To set permissions for a role, send a POST request to https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/roles/<roleName>/permissions, where the request body contains a JSON list of permission definitions.

Permission definitions example:

[
{
  "resource": {
    "name": ".*",
    "type": "STATE"
  },
  "action": "READ"
},
{
  "resource": {
    "name": ".*",
    "type": "STATE"
  },
  "action": "WRITE"
}
]

This list of permission definitions grants a role READ and WRITE access to all resources of type STATE. For more details on permission definitions, please refer to Defining permissions

The following curl command assigns permissions to tutorial_role, where perms.json contains the JSON list of permissions shown above.

curl -u admin:password -H'Content-Type: application/json' -XPOST --data-binary @perms.json https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/roles/tutorial_role/permissions

Retrieving information about the tutorial_role should now show that it has the newly assigned permissions:

curl -u admin:password https://<coordinator-ip>:8281/druid-ext/basic-security/authorization/db/basic/roles/tutorial_role
{
  "name": "tutorial_role",
  "permissions": [
    {
      "resourceAction": {
        "resource": {
          "name": ".*",
          "type": "STATE"
        },
        "action": "READ"
      },
      "resourceNamePattern": ".*"
    },
    {
      "resourceAction": {
        "resource": {
          "name": ".*",
          "type": "STATE"
        },
        "action": "WRITE"
      },
      "resourceNamePattern": ".*"
    }
  ]
}

Assign a role to a user

Now that you have set permissions for tutorial_role, assign tutorial_role to the tutorial user that you previously created.

To assign a role to a user, send a POST request to https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/users/<username>/roles/<rolename>

The following curl command assigns the role tutorial_role to the tutorial user:

curl -u admin:password -XPOST https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/users/tutorial/roles/tutorial_role | jq

Retrieving the information for tutorial now shows that the user has tutorial_role.

curl -u admin:password https://{internal_lb}:9088/proxy/coordinator/druid-ext/basic-security/authorization/db/basic/users/tutorial
{"name":"tutorial","roles":["tutorial_role"]}
Last updated on 4/20/2022
← Imply Manager usersGet started with Imply Hybrid Auth →
  • API connection information
  • Trying out the API
  • Druid API users
    • Create a user
    • List all users
    • Show a user
    • Set a user password
    • Create a role
    • List all roles
    • Show a role
    • Set role permissions
    • Assign a role to a user
2022.06
Key links
Try ImplyApache Druid siteImply GitHub
Get help
Stack OverflowSupportContact us
Learn more
Apache Druid forumsBlog
Copyright © 2022 Imply Data, Inc