title | description |
---|---|
Session and Identity Locking |
How to lock compromised users or agents |
System administrators can disable a compromised user or Teleport Agent—or prevent access during cluster maintenance—by placing a lock on a session, user or host identity.
Teleport will reject new API requests and terminate active connections to SSH, application, database, desktop, and Kubernetes sessions matching the lock's target.
A lock can target the following objects or attributes:
- a Teleport user by the user's name
- a Teleport RBAC role by the role's name
- a Teleport trusted device by the device ID
- an MFA device by the device's UUID
- an OS/UNIX login
- a Teleport Agent by the Agent's server UUID (effectively unregistering it from the cluster)
- a Windows desktop by the desktop's name
- an Access Request by UUID
(!docs/pages/includes/edition-prereqs-tabs.mdx!)
- (!docs/pages/includes/tctl.mdx!)
You can create a new lock with the tctl lock
command. Specify the lock target
with one of the following options:
If your user is missing a lock permission, you will get an error when creating a lock:
ERROR: access denied to perform action "create" on "lock"
Define a role locksmith
:
kind: role
version: v5
metadata:
name: locksmith
spec:
allow:
rules:
- resources: [lock]
verbs: [list, create, read, update, delete]
Create the role:
$ tctl create -f locksmith.yaml
# role 'locksmith' has been created
(!docs/pages/includes/create-role-using-web.mdx!)
(!docs/pages/includes/add-role-to-user.mdx role="locksmith"!)
With a lock in force, all established connections involving the lock's target get terminated while any new requests are rejected.
Errors returned and warnings logged in this situation feature a message of the form:
lock targeting User:"foo@example.com" is in force: Suspicious activity.
$ tctl lock --user=foo@example.com --message="Please come back tomorrow." --ttl=24h
Under the hood, tctl lock
creates a resource:
kind: lock
version: v2
metadata:
name: dc7cee9d-fe5e-4534-a90d-db770f0234a1
spec:
target:
user: foo@example.com
message: "Suspicious activity."
expires: "2021-08-14T22:27:00Z" # RFC3339 format
The kind: lock
resources can also be created and updated using tctl create
as per usual. See the Admin Guide for more
details.
Use tctl get
command to list all active locks:
$ tctl get locks
Delete a lock resource:
$ tctl rm locks/24679348-baff-4987-a2cd-e820ab7f9d2b
lock "24679348-baff-4987-a2cd-e820ab7f9d2b" has been deleted
Deleting a lock will allow new sessions or host connections.
If a Teleport Node or Proxy Service cannot properly synchronize its local lock view with the backend, there is a decision to be made about whether to rely on the last known locks. This decision strategy is encoded as one of the two modes:
strict
mode causes all interactions to be terminated when the locks are not guaranteed to be up to datebest_effort
mode keeps relying on the most recent locks
The cluster-wide mode defaults to best_effort
. You can set up the default
locking mode via API or CLI using a cluster_auth_preference
resource or static
configuration file.
If your Auth Service configuration (/etc/teleport.yaml
by default) contains
an auth_service.authentication
section, edit the Teleport configuration
file to contain the following:
auth_service:
authentication:
locking_mode: best_effort
Restart or redeploy the Auth Service for the change to take effect.
If not, edit your cluster authentication preference resource:
$ tctl edit cap
Adjust the file in your editor to include the following:
kind: cluster_auth_preference
metadata:
name: cluster-auth-preference
spec:
locking_mode: best_effort
version: v2
Save and close your editor to apply your changes.
The cluster-wide mode defaults to best_effort
. You can set up the default
locking mode via API or CLI using a cluster_auth_preference
resource:
$ tctl edit cap
Adjust the file in your editor to include the following:
kind: cluster_auth_preference
metadata:
name: cluster-auth-preference
spec:
locking_mode: best_effort
version: v2
Save and close your editor to apply your changes.
It is also possible to configure the locking mode for a particular role:
kind: role
version: v5
metadata:
name: example-role-with-strict-locking
spec:
options:
lock: strict
When none of the roles involved in an interaction specify the mode or when there is no user involved, the mode is taken from the cluster-wide setting.
With multiple potentially conflicting locking modes (the cluster-wide default
and the individual per-role settings) a single occurrence of strict
suffices
for the local lock view to become evaluated strictly.