blob: 1574db981d5f8ddd7d1f6bef1c2b032823d17297 [file] [log] [blame] [view]
---
title: Apache Mesos - Authentication
layout: documentation
---
# Authentication
Authentication permits only trusted entities to interact with a Mesos cluster. Authentication can be used by Mesos in three ways:
1. To require that frameworks be authenticated in order to register with the master.
2. To require that agents be authenticated in order to register with the master.
3. To require that operators be authenticated to use many [HTTP endpoints](endpoints/index.md).
Authentication is disabled by default. When authentication is enabled, operators
can configure Mesos to either use the default authentication module or to use a
_custom_ authentication module.
The default Mesos authentication module uses the
[Cyrus SASL](http://asg.web.cmu.edu/sasl/) library. SASL is a flexible
framework that allows two endpoints to authenticate with each other using a
variety of methods. By default, Mesos uses
[CRAM-MD5](https://en.wikipedia.org/wiki/CRAM-MD5) authentication.
## Credentials, Principals, and Secrets
When using the default CRAM-MD5 authentication method, an entity that wants to
authenticate with Mesos must provide a *credential*, which consists of a
*principal* and a *secret*. The principal is the identity that the entity would
like to use; the secret is an arbitrary string that is used to verify that
identity. Principals are similar to user names, while secrets are similar to
passwords.
Principals are used primarily for authentication and
[authorization](authorization.md); note that a principal is different from a
framework's *user*, which is the operating system account used by the agent to
run executors, and a framework's *[role](roles.md)*, which is used to determine
which resources a framework can use.
## Configuration
Authentication is configured by specifying command-line flags when starting the
Mesos master and agent processes. For more information, refer to the
[configuration](configuration.md) documentation.
### Master
* `--[no-]authenticate` - If `true`, only authenticated frameworks are allowed
to register. If `false` (the default), unauthenticated frameworks are also
allowed to register.
* `--[no-]authenticate_http_readonly` - If `true`, authentication is required to
make HTTP requests to the read-only HTTP endpoints that support
authentication. If `false` (the default), these endpoints can be used without
authentication. Read-only endpoints are those which cannot be used to modify
the state of the cluster.
* `--[no-]authenticate_http_readwrite` - If `true`, authentication is required
to make HTTP requests to the read-write HTTP endpoints that support
authentication. If `false` (the default), these endpoints can be used without
authentication. Read-write endpoints are those which can be used to modify the
state of the cluster.
* `--[no-]authenticate_agents` - If `true`, only authenticated agents are
allowed to register. If `false` (the default), unauthenticated agents are also
allowed to register.
* `--authenticators` - Specifies which authenticator module to use. The default
is `crammd5`, but additional modules can be added using the `--modules`
option.
* `--http_authenticators` - Specifies which HTTP authenticator module to use.
The default is `basic` (basic HTTP authentication), but additional modules can
be added using the `--modules` option.
* `--credentials` - The path to a text file which contains a list of accepted
credentials. This may be optional depending on the authenticator being used.
### Agent
* `--authenticatee` - Analog to the master's `--authenticators` option to
specify what module to use. Defaults to `crammd5`.
* `--credential` - Just like the master's `--credentials` option except that
only one credential is allowed. This credential is used to identify the agent
to the master.
* `--[no-]authenticate_http_readonly` - If `true`, authentication is required to
make HTTP requests to the read-only HTTP endpoints that support
authentication. If `false` (the default), these endpoints can be used without
authentication. Read-only endpoints are those which cannot be used to modify
the state of the agent.
* `--[no-]authenticate_http_readwrite` - If `true`, authentication is required
to make HTTP requests to the read-write HTTP endpoints that support
authentication. If `false` (the default), these endpoints can be used without
authentication. Read-write endpoints are those which can be used to modify the
state of the agent.
* `--http_authenticators` - Specifies which HTTP authenticator module to use.
The default is `basic`, but additional modules can be added using the
`--modules` option.
* `--http_credentials` - The path to a text file which contains a list (in JSON
format) of accepted credentials. This may be optional depending on the
authenticator being used.
### Framework
If framework authentication is enabled, each framework must be configured to
supply authentication credentials when registering with the Mesos master. How to
configure this differs between frameworks; consult your framework's
documentation for more information.
As a framework developer, supporting authentication is straightforward: the
scheduler driver handles the details of authentication when a `Credential`
object is passed to its constructor. To enable [authorization](authorization.md)
based on the authenticated principal, the framework developer should also copy
the `Credential.principal` into `FrameworkInfo.principal` when registering.
## CRAM-MD5 Example
1. Create the master's credentials file with the following content:
{
"credentials" : [
{
"principal": "principal1",
"secret": "secret1"
},
{
"principal": "principal2",
"secret": "secret2"
}
]
}
2. Start the master using the credentials file (assuming the file is `/home/user/credentials`):
./bin/mesos-master.sh --ip=127.0.0.1 --work_dir=/var/lib/mesos --authenticate --authenticate_agents --credentials=/home/user/credentials
3. Create another file with a single credential in it (`/home/user/agent_credential`):
{
"principal": "principal1",
"secret": "secret1"
}
4. Start the agent:
./bin/mesos-agent.sh --master=127.0.0.1:5050 --credential=/home/user/agent_credential
5. Your new agent should have now successfully authenticated with the master.
6. You can test out framework authentication using one of the test frameworks
provided with Mesos as follows:
MESOS_AUTHENTICATE=true DEFAULT_PRINCIPAL=principal2 DEFAULT_SECRET=secret2 ./src/test-framework --master=127.0.0.1:5050