Files
nomad/website/content/docs/secure/acl/index.mdx
Aimee Ukasick 53b083b8c5 Docs: Nomad IA (#26063)
* Move commands from docs to its own root-level directory

* temporarily use modified dev-portal branch with nomad ia changes

* explicitly clone nomad ia exp branch

* retrigger build, fixed dev-portal broken build

* architecture, concepts and get started individual pages

* fix get started section destinations

* reference section

* update repo comment in website-build.sh to show branch

* docs nav file update capitalization

* update capitalization to force deploy

* remove nomad-vs-kubernetes dir; move content to what is nomad pg

* job section

* Nomad operations category, deploy section

* operations category, govern section

* operations - manage

* operations/scale; concepts scheduling fix

* networking

* monitor

* secure section

* remote auth-methods folder and move up pages to sso; linkcheck

* Fix install2deploy redirects

* fix architecture redirects

* Job section: Add missing section index pages

* Add section index pages so breadcrumbs build correctly

* concepts/index fix front matter indentation

* move task driver plugin config to new deploy section

* Finish adding full URL to tutorials links in nav

* change SSO to Authentication in nav and file system

* Docs NomadIA: Move tutorials into NomadIA branch (#26132)

* Move governance and policy from tutorials to docs

* Move tutorials content to job-declare section

* run jobs section

* stateful workloads

* advanced job scheduling

* deploy section

* manage section

* monitor section

* secure/acl and secure/authorization

* fix example that contains an unseal key in real format

* remove images from sso-vault

* secure/traffic

* secure/workload-identities

* vault-acl change unseal key and root token in command output sample

* remove lines from sample output

* fix front matter

* move nomad pack tutorials to tools

* search/replace /nomad/tutorials links

* update acl overview with content from deleted architecture/acl

* fix spelling mistake

* linkcheck - fix broken links

* fix link to Nomad variables tutorial

* fix link to Prometheus tutorial

* move who uses Nomad to use cases page; move spec/config shortcuts

add dividers

* Move Consul out of Integrations; move namespaces to govern

* move integrations/vault to secure/vault; delete integrations

* move ref arch to docs; rename Deploy Nomad back to Install Nomad

* address feedback

* linkcheck fixes

* Fixed raw_exec redirect

* add info from /nomad/tutorials/manage-jobs/jobs

* update page content with newer tutorial

* link updates for architecture sub-folders

* Add redirects for removed section index pages. Fix links.

* fix broken links from linkcheck

* Revert to use dev-portal main branch instead of nomadIA branch

* build workaround: add intro-nav-data.json with single entry

* fix content-check error

* add intro directory to get around Vercel build error

* workound for emtpry directory

* remove mdx from /intro/ to fix content-check and git snafu

* Add intro index.mdx so Vercel build should work

---------

Co-authored-by: Tu Nguyen <im2nguyen@gmail.com>
2025-07-08 19:24:52 -05:00

194 lines
9.4 KiB
Plaintext

---
layout: docs
page_title: ACL system overview
description: |-
Explore the three major components of Nomad's Access Control Layer (ACL) system: capabilities, policies, and tokens.
---
# ACL system overview
The ACL system is designed to be intuitive, high-performance, and to provide
administrative insight. At the highest level, there are three major components to
the ACL system: tokens, policies, and capabilities. The components are
illustrated in the diagram below.
[![Image showing that ACL Tokens refer to one or more associated policies and
that those policies encapsulate capabilities like "Allow Submit Job" or "Allow
Query Nodes"][img_acl_overview]][img_acl_overview]
## Policies
Policies consist of a set of rules defining the capabilities or actions to be
granted. For example, a `readonly` policy might only grant the ability to list
and inspect running jobs, but not to submit new ones. No permissions are
granted by default, making Nomad a default-deny system.
Each policy must have a unique name, an optional description, and a rule set.
The rules define the capabilities of a Nomad ACL token for accessing the objects
in a Nomad cluster, objects like namespaces, node, agent, operator, quota, etc.
A client ACL token can be associated with multiple policies; a request is
allowed if _any_ of the associated policies grant the capability. Management
tokens cannot be associated with policies because they are granted all
capabilities.
The special `anonymous` policy can be defined to grant capabilities to anonymous
requests. An anonymous request is a request made to Nomad without the
`X-Nomad-Token` header specified. This can be used to allow anonymous users to
list jobs and view their status, while requiring authenticated requests to
submit new jobs or modify existing jobs. By default, there is no `anonymous`
policy set meaning all anonymous requests are denied.
## Roles
Roles group one or more ACL policies into a container which can then be used to
generate ACL tokens for authorisation. This abstraction allows easier control
and updating of ACL permissions, particularly in larger, more diverse clusters.
## Capabilities
Capabilities are the set of actions that can be performed. This
includes listing jobs, submitting jobs, querying nodes, etc. A management token
is granted all capabilities, while client tokens are granted specific
capabilities via ACL policies. The full set of capabilities is discussed in the
rule specifications.
## Binding rules
Policies are comprised of one or more rules. The rules define the capabilities of a Nomad ACL token for accessing the objects in a Nomad cluster, objects like namespaces, node, agent, operator, quota, etc.
Binding rules provide a mapping between a Nomad user's SSO authorisation claims
and internal Nomad objects such as ACL Roles and ACL Policies. A binding rule
is directly related to a single auth method, and therefore only evaluated by
login attempts using that method. All binding rules mapped to an auth method
are evaluated during each login attempt.
<Note>
Binding rules are evaluated in no specific order, and should there be an
overlap in their selectors or scope, a "sum" of all the binding rules will be
applied, thus the least granular binding rules will always override the more
granular ones, as long as they apply to the same auth method and identity.
</Note>
A successful selector match between an SSO provider claim and a binding rule
will result in the generated ACL token having the identified ACL role or policy
assigned to it. If the `BindType` parameter is `management`, the ACL token
generated will be a `management` token, rather than a client token. This
matcher supersedes role or policy assignments, and therefore should be used
with caution.
### Rules and scope
The following table summarizes the rules that are available for constructing
ACL policies:
| Rule | Scope |
| -------------------------------- | -------------------------------------------- |
| [agent][rules_agent] | Utility operations in the Agent API |
| [host_volume][rules_host_volume] | Host Volume related operations |
| [namespace][rules_namespace] | Job related operations by namespace |
| [node][rules_node] | Node-level catalog operations |
| [operator][rules_operator] | Cluster-level operations in the Operator API |
| [plugin][rules_plugin] | CSI Plugin related operations |
| [quota][rules_quota] | Quota specification related operations |
Constructing policies from these rules is covered in detail in the
[Nomad ACL Policy Concepts guide][acl-policy-guide].
## Tokens
ACL tokens are used to authenticate requests and determine if the caller is
authorized to perform an action. Each ACL token has a
public Accessor ID which is used to name a token and a Secret ID which is used
to make requests to Nomad. The Secret ID is provided using a request header
(`X-Nomad-Token`) and is used to authenticate the caller. Tokens are either
management or client types. The `management` tokens are effectively "root" in
the system and can perform any operation. The `client` tokens are associated
with one or more ACL policies or roles which grant specific capabilities.
When ACL tokens are created, they can be optionally marked as `Global`. This
causes them to be created in the authoritative region and replicated to all
other regions. Otherwise, tokens are created locally in the region the request
was made and not replicated. Local tokens cannot be used for cross-region
requests since they are not replicated between regions.
## Workload Identity
Nomad allocations can receive workload identities in the form of a [JSON Web
Token (JWT)][jwt]. The [Workload Identity concept page][workload identity] has
more information on this topic.
## Authentication methods
Authentication methods dictate how Nomad should talk to SSO providers when a
user requests to authenticate using one. Currently, Nomad supports the [OpenID
Connect (OIDC)][oidc] SSO workflow which allows users to log in to Nomad via
applications such as [Auth0][auth0], [Okta][okta], and [Vault][vault], and
non-interactive login via externally-issued [JSON Web Tokens (JWT)][jwt].
Since both the `oidc` and `jwt` auth methods ultimately operate on JWTs as
bearer tokens, use the following to determine which method fits your use case:
- **JWT**
- Ideal for machine-oriented, headless login where an operator may have already
arranged for a valid JWT to be dropped on a VM or provided to a container.
- User or application performing the Nomad login must have a valid JWT
to begin login.
- Does not require browser interaction.
- **OIDC**
- Ideal for human-oriented, interactive login where an operator or administrator
may have deployed SSO widely and doesn't want to distribute Nomad ACL tokens
to every authorized user.
- User performing the Nomad login does not need a JWT.
- Requires browser interaction.
## Multi-Region configuration
Nomad supports multi-datacenter and multi-region configurations. A single region
is able to service multiple datacenters, and all servers in a region replicate
their state between each other. In a multi-region configuration, there is a set
of servers per region. Each region operates independently and is loosely coupled
to allow jobs to be scheduled in any region and requests to flow transparently
to the correct region.
When ACLs are enabled, Nomad depends on an "authoritative region" to act as a
single source of truth for ACL policies and global ACL tokens. The authoritative
region is configured in the [`server` stanza] of agents, and all regions must
share a single authoritative source. Any ACL policies or global ACL tokens are
created in the authoritative region first. All other regions replicate ACL
policies and global ACL tokens to act as local mirrors. This allows policies to
be administered centrally, and for enforcement to be local to each region for
low latency.
Global ACL tokens are used to allow cross-region requests. Standard ACL tokens
are created in a single target region and not replicated. This means if a
request takes place between regions, global tokens must be used so that both
regions will have the token registered.
## Replication
Multi-region federated clusters run replication process to replicate ACL
objects from the [authoritative region][]. The replication processes run on
each federated leader and replicate ACL policies, roles, auth methods, binding
rules, and token marked as `Global`.
[acl-policy-guide]: /nomad/docs/secure/acl/policies
[`server` stanza]: /nomad/docs/configuration/server
[img_acl_overview]: /img/secure/acl.jpg
[rules_agent]: /nomad/docs/secure/acl/policies#agent-rules
[rules_host_volume]: /nomad/docs/secure/acl/policies#host-volume-rules
[rules_namespace]: /nomad/docs/secure/acl/policies#namespace-rules
[rules_node]: /nomad/docs/secure/acl/policies#node-rules
[rules_operator]: /nomad/docs/secure/acl/policies#operator-rules
[rules_plugin]: /nomad/docs/secure/acl/policies#plugin-rules
[rules_quota]: /nomad/docs/secure/acl/policies#quota-rules
[ACL policy reference doc]: /nomad/docs/other-specifications/acl-policy
[authoritative region]: /nomad/docs/configuration/server#authoritative_region
[jwt]: https://datatracker.ietf.org/doc/html/rfc7519
[workload identity]: /nomad/docs/concepts/workload-identity
[oidc]: https://openid.net/connect/
[auth0]: https://auth0.com/
[okta]: https://www.okta.com/