---
layout: docs
page_title: ACL Auth Methods
sidebar_title: 'Auth Methods'
sidebar_current: docs-acl-auth-methods
description: >-
  An auth method is a component in Consul that performs authentication against a
  trusted external party to authorize the creation of an ACL tokens usable
  within the local datacenter.
---

-> **1.5.0+:** This guide only applies in Consul versions 1.5.0 and newer.

# ACL Auth Methods

An auth method is a component in Consul that performs authentication against a
trusted external party to authorize the creation of an ACL tokens usable within
the local datacenter.

The only supported type of auth method in Consul 1.5.0 is
[`kubernetes`](/docs/acl/auth-methods/kubernetes.html).

## Overview

Without an auth method a trusted operator is critically involved in the
creation and secure introduction of each ACL token to every application that
needs one, while ensuring that the policies assigned to these tokens follow the
principle of least-privilege.

When running in environments such as a public cloud or when supervised by a
cluster scheduler, applications may already have access to uniquely identifying
credentials that were delivered securely by the platform. Consul auth method
integrations allow for these credentials to be used to create ACL tokens with
properly-scoped policies without additional operator intervention.

In Consul 1.5.0 the focus is around simplifying the creation of tokens with the
privileges necessary to participate in a [Connect](/docs/connect/index.html)
service mesh with minimal operator intervention.

## Operator Configuration

An operator needs to configure each auth method that is to be trusted by
using the API or command line before they can be used by applications.

- **Authentication** - One or more **auth methods** should be configured with
  details about how to authenticate application credentials. Successful
  validation of application credentials will return a set of trusted identity
  attributes (such as a username). These can be managed with the `consul acl auth-method` subcommands or the corresponding [API
  endpoints](/api/acl/auth-methods.html). The specific details of
  configuration are type dependent and described in their own documentation
  pages.

- **Authorization** - One or more **binding rules** must be configured to define
  how to translate trusted identity attributes from each auth method into
  privileges assigned to the ACL token that is created. These can be managed
  with the `consul acl binding-rule` subcommands or the corresponding [API
  endpoints](/api/acl/binding-rules.html).

-> **Note** - To configure auth methods in any connected secondary datacenter,
[ACL token replication](/docs/agent/options.html#acl_enable_token_replication)
must be enabled. Auth methods require the ability to create local tokens which
is restricted to the primary datacenter and any secondary datacenters with ACL
token replication enabled.

## Binding Rules

Binding rules allow an operator to express a systematic way of automatically
linking [roles](/docs/acl/acl-system.html#acl-roles) and [service
identities](/docs/acl/acl-system.html#acl-service-identities) to newly created
tokens without operator intervention.

Successful authentication with an auth method returns a set of trusted
identity attributes corresponding to the authenticated identity. Those
attributes are matched against all configured binding rules for that auth
method to determine what privileges to grant the the Consul ACL token it will
ultimately create.

Each binding rule is composed of two portions:

- **Selector** - A logical query that must match the trusted identity
  attributes for the binding rule to be applicable to a given login attempt.
  The syntax uses github.com/hashicorp/go-bexpr which is shared with the [API
  filtering feature](/api/features/filtering.html). For example:
  `"serviceaccount.namespace==default and serviceaccount.name!=vault"`

- **Bind Type and Name** - A binding rule can bind a token to a
  [role](/docs/acl/acl-system.html#acl-roles) or to a [service
  identity](/docs/acl/acl-system.html#acl-service-identities) by name. The name
  can be specified with a plain string or the bind name can be lightly
  templated using [HIL syntax](https://github.com/hashicorp/hil) to interpolate
  the same values that are usable by the `Selector` syntax. For example:
  `"dev-${serviceaccount.name}"`

When multiple binding rules match, then all roles and service identities are
jointly linked to the token created by the login process.

## Overall Login Process

Applications are responsible for exchanging their auth method specific secret
bearer token for a Consul ACL token by using the login process:

![diagram of auth method login](/img/auth-methods.svg)

1. Applications use the `consul login` subcommand or the [login API
   endpoint](/api/acl/acl.html#login-to-auth-method) to authenticate to a
   specific auth method using their local Consul client. Applications provide
   both the name of the auth method and a secret bearer token during login.

2. The Consul client forwards login requests to the leading Consul server.

3. The Consul leader then uses auth method specific mechanisms to validate the
   provided bearer token credentials.

4. Successful validation returns trusted identity attributes to the Consul
   leader.

5. The Consul leader consults the configured set of binding rules associated
   with the specified auth method and selects only those rules that match the
   trusted identity attributes.

6. The Consul leader uses the matching binding rules to generate a list of
   roles and service identities and assigns them to a token created exclusively
   in the _local_ datacenter. If none are generated the login attempt fails.

7. The relevant `SecretID` and remaining details about the token are returned to
   the originating Consul client.

8. The Consul client returns the token details back to the application.

9. (later) Applications SHOULD use the `consul logout` subcommand or the
   [logout API endpoint](/api/acl/acl.html#logout-from-auth-method) to destroy
   their token when it is no longer required.

For more details about specific auth methods and how to configure them, click
on the name of the auth method type in the sidebar.
