File-based User Authentication
In file-based user authentication, an admin can manage and authenticate users by defining them in local files on each node in the cluster.
File-based User Authentication in Presto
Apart from existing authentication schemes, Presto supports a file-based authentication.
Important
The file-based authentication is only available in Presto 0.180 and later versions. Currently, it does not work when SSL is used for the inter-node communication within the cluster. For more information, see Points to Remember on the File-based Authentication.
You must create password digests to add the username:password pair before Enabling the File-based Authentication.
These username
:password
pairs are used to authenticate users, who try to access Presto directly (that is from
outside of QDS). The file-based authentication feature has been enhanced to accept only hashed passwords. Earlier, plain
passwords were accepted and stored as-is on the cluster which posed a security threat. MD5, SHA1, Unix Crypt, and BCrypt
hashed passwords are supported. Qubole recommends using MD5 and BCrypt as SHA1 and Unix Crypt are less secure. It accepts
the input file as a collection of the username
:password
lines.
Creating Password Digests
You must create password digests and add them in the authentication file. Create a password digest using the htpasswd
command. For more info on the command options, see htpasswd.
For creating password digests if you are using Presto version 317 (beta), see File-based Authentication in Direct Connections.
You can create a password digest using any of these methods:
htpasswd -n <UserName>
htpasswd /location/existing_file <UserName>
htpasswd -c /localtion/new_file_to_create <UserName>
In the following examples, password digests (passwords) are created by running ``htpasswd -n <UserName>``
for the
different encrypted passwords that Qubole supports are as described below:
MD5: Generate the MD5 encrypted password using this command syntax:
htpasswd -n <UserName>
.For example, run this command:
htpasswd -n admin
.The command output is:
admin:$apr1$EnUyEvmk$SWUlSWtcdTIsgLihPNW09
SHA1: Generate the SHA1 encrypted password using this command syntax:
htpasswd -n -s <UserName>
.For example, run this command:
htpasswd -n -s user1
.The command output is:
user1:{SHA}bWdU2ejuS1lWa0mv11TR2YAoOzs=
Unix Crypt: Generate the Unix Crypt-based password using this command syntax:
htpasswd -n -d <UserName>
.For example, run this command:
htpasswd -n -d user2
.The command output is:
user2:EY8ULaXsqebTI
BCrypt: Generate the BCrypt-based password using this command syntax:
htpasswd -n -B <UserName>
.For example, run this command:
htpasswd -n -B user3
.The command output is:
user3:$2a$05$/.QHkz9ytxOWwvcE5zMt7O0fabySUNcdKMqVmJpqTOGIRdFfjlSey
Here is the example of the passwords for users, which you can add as part of the authentication
file.
authentication:
admin:$apr1$EnUyEvmk$SWUlSWtcdTIsgLihPNW09
user1:{SHA}bWdU2ejuS1lWa0mv11TR2YAoOzs=
user2:EY8ULaXsqebTI
user3:$2a$05$/.QHkz9ytxOWwvcE5zMt7O0fabySUNcdKMqVmJpqTOGIRdFfjlSey
In the above example:
The
admin
uses MD5 encryption.The
user1
uses the SHA1 encryption.The
user2
uses the Unix Crypt encryption.The
user3
uses the BCrypt encryption.
Enabling the File-based Authentication
Note
For enabling file-based authentication if you are using Presto version 317 (beta), see File-based Authentication in Direct Connections.
You can enable the file-based authentication by adding this configuration as a Presto override in the cluster configuration.
config.properties:
http-server.authentication.type=FILE
authentication.filebased.config-file=etc/authentication
authentication:
admin:$apr1$EnUyEvmk$SWUlSWtcdTIsgLihPNW09
user1:{SHA}bWdU2ejuS1lWa0mv11TR2YAoOzs=
user2:EY8ULaXsqebTI
user3:$2a$05$/.QHkz9ytxOWwvcE5zMt7O0fabySUNcdKMqVmJpqTOGIRdFfjlSey
Adding this override configures Presto to use etc/authentication
as input for username
:password
pairs.
The content of this file is defined in the authentication:
section as mentioned above. Creating Password Digests
describes how to create them for different encrypted passwords.
In direct connections, you must provide username and password correctly and use https://MASTER_HOST_NAME:8443
as the URL.
You cannot change the port and it must be always 8443
for an SSL connection.
To authenticate direct connections to Presto Server where username is stored in the source name header, use these configurations:
http-server.authentication.post.source-has-username: <true/fasle>
. When it is enabled, the source name is used as the username for authentication and only POST API calls (submitted queries) are authenticated.http-server.authentication.source-has-username: <true/fasle>
. When it is enabled, the source name is used as the username for authentication but all API calls to the Presto server are authenticated.Warning
Enable
http-server.authentication.source-has-username
only if you have a custom Presto client as the standard Presto clients do not populate the source field in all requests except the POST request, which causes query failures.
If you are using open source, JDBC drivers must enable SSL apart from these configurations as described in the Presto JDBC topic.
Points to Remember on the File-based Authentication
Here are some conditions that hold good to the basic authentication for direct connections in Presto:
You must use the Qubole Presto Ruby client for uninterrupted access to clusters through QDS after enabling this feature. This feature does not support the old QDS Java client.
You must have an encrypted channel while submitting password and you must get SSL enabled in the master node by creating a ticket with Qubole Support.