Commit Graph
49 Commits
Author SHA1 Message Date
matheusandMichelle Bergquist 78a83b0b64 Add ListReleases and GetLicense endpoints (#19565)
* Add GetReleases and GetLicense methods

Co-authored-by: Michelle Bergquist <11967646+michellescripts@users.noreply.github.com>
2023-01-03 12:52:22 +00:00
Jakub Nyckowski 9379243390 Use pre-generated RSA keys in tests (#18750)
Many of our tests (db package, I'm looking at you) generate many RSA keys. This has two main side effects; makes our tests slow and flaky as CPU usage spikes in random moments when the tests are run in parallel.
This change pre-generates RSA keys at the beginning of each test module and reuse them in randomized order to reduce the situation that one key has been used multiple times in one test.
I had to move a few files to avoid circular dependencies.
2022-12-05 19:33:49 +00:00
Jakub Nyckowski 0ee91f6c37 Enable GCI linter (#17894) 2022-10-28 20:20:28 +00:00
Brian Joerger 4c0a6ff5b1 tsh PIV login integration (#15335)
* Add Yubikey PrivateKey implementation for use by Teleport clients.

  - Add yubikey login logic, reusing previously stored private keys.

  - Fix identity file decoding with PIV keys, which sign ecdsa certificates.

  - Add libpcsclite-dev pre-req for building on linux.

  - Remove unnecessary keys.Signer interface and move its functionality to keys.PrivateKey.

  - Move retry and jitter utils to new api/utils/retryutils package.
2022-09-23 19:44:10 +00:00
Andrew Burke 545e620839 Add validation for hostname read from EC2 (#15971)
This change adds validation for the hostname imported from an EC2 instance.
2022-08-31 17:56:31 +00:00
Russell Jones 46653322af Refactor tests under util package.
Refactored all tests under "lib/util" to use testify instead
of gocheck.
2022-07-14 19:22:54 -07:00
Gavin FrazarandAlan Parra df4991ea8c Optionally provide ca_pin as a file path (#12796)
* Optionally provide ca_pin as a file path

* Fix lint errors

* Test CA pin reads from file and from string

* Simplify ApplyCAPins

* Update lib/service/cfg.go

Co-authored-by: Alan Parra <alan.parra@goteleport.com>

* Update lib/utils/utils_test.go

Co-authored-by: Alan Parra <alan.parra@goteleport.com>

* Move length check into ApplyCAPins

* Rename token.go to config.go

* Add test for statictoken parsing

* Refactor token parsing test

* Error on empty ca_pin file

* Warn if config value is a path to an empty file

* Update lib/config/fileconf_test.go

Co-authored-by: Alan Parra <alan.parra@goteleport.com>

* Log empty file warning instead of printing

* Allow multiple entries in files referenced by config values

* Update static token parsing test

* Test reading multiple tokens/pins from a file referenced by a config

* Update lib/config/fileconf.go

Co-authored-by: Alan Parra <alan.parra@goteleport.com>

Co-authored-by: Alan Parra <alan.parra@goteleport.com>
2022-05-31 22:14:50 +00:00
Brian Joerger 26bad238fa OIDC multiple redirect URLs (#12054) 2022-05-31 17:52:04 +00:00
Zac Bergquist cc4d4df0f3 Remove unused utils.Capitalize func 2022-04-24 12:59:20 -06:00
Andrew Burke fe5d46f021 Regenerate host UUID of node if host_uuid is empty (#11810)
This change allows nodes to regenerate their UUID if the host_uuid file exists but is empty.
2022-04-12 18:45:54 +00:00
Zac Bergquist 55cbd0ac97 Remove use of deprecated ioutil package (#11296)
* Remove use of deprecated ioutil package
* Add lint rule to check for ioutil imports
2022-03-21 18:00:34 +00:00
Brian Joerger eaa750445c ClusterConfig fallback (#7702) 2021-08-09 10:17:49 -07:00
Brian Joerger 9b8b9d6d0c rollback - Upgrade api version. (#7751) 2021-07-30 15:34:19 -07:00
Brian Joerger c040aca4c1 Upgrade api version. (#7609) 2021-07-28 13:51:21 -07:00
Brian Joerger 4d36870ff0 Remove remaining API aliases (#7137) 2021-06-08 12:08:55 -07:00
Andrej Tokarčík 89f0432ad5 Introduce utils.ReadAtMost to prevent resource exhaustion 2021-03-01 22:14:10 +01:00
Andrew Lytvynov fc1c1dbd14 Move all utils.InitLoggerForTests calls to TestMain
This prevents data races between changing the standard logger and it
acutally being used.
2021-02-23 18:04:55 -08:00
Sasha Klizhentas d160507430 Session streaming
This commit introduces GRPC API for streaming sessions.

It adds structured events and sync streaming
that avoids storing events on disk.

You can find design in rfd/0002-streaming.md RFD.
2020-09-28 23:08:56 -07:00
Alexander Klizhentas 73ecb48232 Adds support for kubernetes_users, extend interpolation (#3404) (#3418)
This commit fixes #3369, refs #3374

It adds support for kuberenetes_users section in roles,
allowing Teleport proxy to impersonate user identities.

It also extends variable interpolation syntax by adding
suffix and prefix to variables and function `email.local`:

Example:

```yaml
kind: role
version: v3
metadata:
  name: admin
spec:
  allow:
    # extract email local part from the email claim
    logins: ['{{email.local(external.email)}}']

    # impersonate a kubernetes user with IAM prefix
    kubernetes_users: ['IAM#{{external.email}}']

  # the deny section uses the identical format as the 'allow' section.
  # the deny rules always override allow rules.
  deny: {}
```

Some notes on email.local behavior:

* This is the only function supported in the template variables for now
* In case if the email.local will encounter invalid email address,
it will interpolate to empty value, will be removed from resulting
output.

Changes in impersonation behavior:

* By default, if no kubernetes_users is set, which is a majority of cases,
  user will impersonate themselves, which is the backwards-compatible behavior.

* As long as at least one `kubernetes_users` is set, the forwarder will start
  limiting the list of users allowed by the client to impersonate.

* If the users' role set does not include actual user name, it will be rejected,
  otherwise there will be no way to exclude the user from the list).

* If the `kuberentes_users` role set includes only one user
  (quite frequently that's the real intent), teleport will default to it,
  otherwise it will refuse to select.

  This will enable the use case when `kubernetes_users` has just one field to
  link the user identity with the IAM role, for example `IAM#{{external.email}}`

* Previous versions of the forwarding proxy were denying all external
impersonation headers, this commit allows 'Impesrsonate-User' and
'Impersonate-Group' header values that are allowed by role set.

* Previous versions of the forwarding proxy ignored 'Deny' section of the roles
when applied to impersonation, this commit fixes that - roles with deny
kubernetes_users and kubernetes_groups section will not allow
impersonation of those users and groups.
2020-03-07 16:32:37 -08:00
Russell Jones df9962d572 Test cleanup.
Initialize in main utils_test.go file and name test functions match
package names.
2019-09-03 13:44:20 -07:00
Sasha Klizhentas aad397fbbd Better error message for IdP initated logins.
Fixes #2648

Teleport does not support SAML identity provider
initiated logins, this commit gives a better
error message to the user instructing them
what to do.
2019-08-06 16:40:29 -07:00
Alexander Klizhentas 32b84e6765 Read join tokens from file, fixes #2515. (#2864) 2019-07-17 12:51:18 -07:00
Sasha Klizhentas 7e636b0b2b Add --bind-addr, fixes #2620
This commit adds `--bind-addr` flag to tsh login
and TELEPORT_LOGIN_BIND_ADDR environment variable
to set up login bind address for SSO redirect flows.

Usage examples:

```
tsh login  --bind-addr=localhost:3333
tsh login --bind-addr=:3333
tsh login --bind-addr=[::1]:3333
TELEPORT_LOGIN_BIND_ADDR=localhost:7777 tsh login
```

Refactor redirect flow and fix URLs for --bind-addr
2019-04-15 15:19:45 -07:00
Sasha Klizhentas 8356ae6a74 Use in-memory cache for the auth server API.
This commit expands the usage of the caching layer
for auth server API:

* Introduces in-memory cache that is used to serve all
Auth server API requests. This is done to achieve scalability
on 10K+ node clusters, where each node fetches certificate authorities,
roles, users and join tokens. It is not possible to scale
DynamoDB backend or other backends on 10K reads per seconds
on a single shard or partition. The solution is to introduce
an in-memory cache of the backend state that is always used
for reads.

* In-memory cache has been expanded to support all resources
required by the auth server.

* Experimental `tctl top` command has been introduced to display
common single node metrics.

Replace SQLite Memory Backend with BTree

SQLite in memory backend was suffering from
high tail latencies under load (up to 8 seconds
in 99.9%-ile on load configurations).

This commit replaces the SQLite memory caching
backend with in-memory BTree backend that
brought down tail latencies to 2 seconds (99.9%-ile)
and brought overall performance improvement.
2019-04-12 14:23:09 -07:00
Sasha Klizhentas 2646b1d32d Marshal YAML as list of documents, fixes #2479
This commit fixes an issue when tctl
output in YAML was not compatible with tctl create.

Before:

```
$ tctl get users

- User: value
- User: value
```

After:

```
$ tctl get users

User: value
---
User: value
```
2019-02-11 16:04:18 -08:00
Russell Jones ccab010062 Advertise a minimum version for clients. 2018-11-16 16:34:19 -08:00
Sasha Klizhentas 045490de25 External traits in node labels and regexp role map
This commit adds two extensions to template variables
in roles and adds support for regular expressions
and group captures in role mapping of trusted clusters.

1. Roles node_labels can expand variables from traits:

allow:
  node_labels:
    '{{external.key}}': '{{external.val}}'
deny:
  node_labels:
    '{{external.key}}': '{{external.val}}'

If traits variable is not found, label key pair in allow or
deny rule will be set to empty key or value, so if 'external.val'
trait is missing, the resulting role will not match
allow or deny rule:

allow:
  node_labels:
    '': 'val'
deny:
  node_labels:
    '': 'val'

Same thing will happen for missing value:

allow:
  node_labels:
    'key': ''
deny:
  node_labels:
    'key': ''

2. Trusted cluster role mapping can now
support advanced expressions:

a. Glob values will math any string, including
empty one

   role_map:
   - remote: 'cluster-*'
     local: [clusteradmin]

a. Regular expression syntax is supported:

Syntax: https://github.com/google/re2/wiki/Syntax

Brackets can be used as a capture group and referred
to with expand variable:

   role_map:
   - remote: '^clusteradmin-(.*)$'
     local: [unprivileged-$1]

Will map incoming role 'clusteradmin-account-1' to 'guest-account-1'.

3. Same regular expression syntax is supported for SAML and OIDC
mappings:

a. Glob matches of values instead of static matches:

  claims_to_roles:
      - {claim: "roles", value: "gravitational/*", roles: ["clusteradmin"]}

b. Regexp matches with subgroup expands:

  attributes_to_roles:
      - {name: "roles", value: "^gravitational/(.*)$", roles: ["cluster-$1"]}
2018-07-02 16:13:12 -07:00
Russell Jones 19b2936514 Update default cryptographic primitives. 2018-05-08 14:47:07 -07:00
Sasha Klizhentas a4c86e0603 Add public_addr support for auth and ssh services.
This commit fixes #1803, fixes #1889

* Adds support for public_addr for Proxy and Auth
* Parameter advertise_ip now supports host:port format
* Fixes incorrect output for tctl get proxies
* Fixes duplicate output of some error messages.
2018-05-02 18:04:05 -07:00
Sasha Klizhentas bad1b0498d External events and sessions storage.
Updates #1755

Design
------

This commit adds support for pluggable events and
sessions recordings and adds several plugins.

In case if external sessions recording storage
is used, nodes or proxies depending on configuration
store the session recordings locally and
then upload the recordings in the background.

Non-print session events are always sent to the
remote auth server as usual.

In case if remote events storage is used, auth
servers download recordings from it during playbacks.

DynamoDB event backend
----------------------

Transient DynamoDB backend is added for events
storage. Events are stored with default TTL of 1 year.

External lambda functions should be used
to forward events from DynamoDB.

Parameter audit_table_name in storage section
turns on dynamodb backend.

The table will be auto created.

S3 sessions backend
-------------------

If audit_sessions_uri is specified to s3://bucket-name
node or proxy depending on recording mode
will start uploading the recorded sessions
to the bucket.

If the bucket does not exist, teleport will
attempt to create a bucket with versioning and encryption
turned on by default.

Teleport will turn on bucket-side encryption for the tarballs
using aws:kms key.

File sessions backend
---------------------

If audit_sessions_uri is specified to file:///folder
teleport will start writing tarballs to this folder instead
of sending records to the file server.

This is helpful for plugin writers who can use fuse or NFS
mounted storage to handle the data.

Working dynamic configuration.
2018-03-15 12:42:43 -07:00
Sasha Klizhentas c8ba21d877 Relax version checking, fixes #1728
Do not enforce patch/pre-release version differences.
2018-03-02 15:28:58 -08:00
Sasha Klizhentas ebe3c1a9c1 Fix several issues with audit events.
1. Fixes several cosmetic issues with logs:

Fixes #1690, fixes #1687

2. Fixes deadlocks that were revealed during stress
testing on slow encrypted EFS system.

The following deadlock scenario was happening:

Goroutine 1:

t1. auditlock.Lock <- success
t3. diskSessionLogger.Lock <- blocked

Gorotuine 2:

t2. diskSessionLogger.Lock <- success
t4. auditLock.Lock  <- blocked

3. Update ansible upgrade scripts
to support custom binary upgrades.

4. Fix docker flow by removing deprecated
--gops-addr flag

5. Remove verbose logging lines.

6. Reduce compression efficiency to
reduce large memory load.
2018-02-15 18:28:42 -08:00
Sasha Klizhentas 27ce2e1e1f Introduce version checking and fix YAML lists
Fixes #1663, #1665

This commit fixes a couple of issues with tsh and tctl:

* tsh now check the version of the server and prints error
if tsh is newer version than the server.

* tctl did not work properly when yaml file contained
multiple resources in a list
2018-02-06 17:50:37 -08:00
Sasha Klizhentas 0c77c5c0e9 refactor internal rule representation 2017-08-23 19:08:56 -07:00
Ev Kontsevoy 14cf48d707 Switching to 1.8.3
- Updated Dockerfile to use 1.8.3
- Updated Makefile to stop generating garbage
- Improved one test which failed under Docker
2017-06-01 14:08:31 -07:00
Ev Kontsevoy a8889271c6 Finished polish of tsh login
This commit:

* Improves on the previous commit on better name resolution by the proxy
  (and fixes a bug introduced by the previous commit)

* Removes 'host_login' from tsh client profile. Closes #729
2017-01-29 17:52:42 -08:00
Sasha Klizhentas 8ab3add372 map OIDC scopes to roles, implements #620 2016-12-24 14:42:33 -08:00
Ev Kontsevoy 900a944927 Sensible default environment variables
Fixes #542
2016-10-07 18:43:31 -07:00
Johannes Pfrang 58b6781fa5 Fixes possible TestGetShell failure
Some distros (e.g. arch) use `/usr/bin/nologin` instead of `/usr/sbin/nologin` for the daemon account
2016-09-19 23:06:55 +02:00
Ev Kontsevoy 0ae6270c05 Proxy HTTPS fixes
- Self-signed cert is now compatible with Golang HTTP client
- Fixes #296
- Changed the expiration date for self-signed cert
  from 1 to 10 years.
2016-06-01 14:38:27 -07:00
Ev Kontsevoy ed0948659b Changed how self-signed HTTPS cert is generated
Fixes #434

Changes:

- Certificate is not "CA" anymore
- Added "*" for CN field
2016-05-31 18:36:51 -07:00
Ev Kontsevoy eff737a104 Improved shell detection
Fixes #376
2016-05-14 17:17:16 -07:00
Ev Kontsevoy 5c4b45caaa Full OSX compatibility
Teleport has always worked on OSX, but not all tests were OSX
compatible:

- some wouuld hang
- others would fail

This commit fixes that. `make test` passes on OSX.
2016-05-09 00:21:21 -07:00
klizhentas d754821f54 move test as well 2016-04-22 17:32:52 -07:00
klizhentas ca7e3820d7 This commit adds ability to preconfigure the cluster without running
auth server. This is needed when you configure cluster from scratch and
all nodes including auth server spin up simultaneously.

* Add tctl tools to generate keys and certificates

  + Command "tctl authorities gen" generates public and private keypair.
  + Command "tctl authorities gencert" generates public and private keypair signed
    by existng private key
  + Command "tctl authorities export" was modified to be able to export exisitng private
    CA keys to local storage

   All of these commands are hidden by default.

section "static configuration"

* Add ability to configure teleport from environment variable

Environment variable TELEPORT_CONFIG can contain base64 encoded
YAML file config file of the standard file format, so teleport will use it on start

* Add special secrets section to the config file

Section "secrets" was updated to support pre-configured trusted CA keys and pre-generated keys

* Add special rts hidden section to add support for provisioning
2016-03-28 12:58:34 -07:00
klizhentas 519f07611b fix data races and remove sleep from tests
* fix data race with advertise ip
* remove global variable
* simplify pings logic and fix ping bug
* fix potential bug in dynamic labels
2016-03-08 18:41:05 -08:00
Ev Kontsevoy 0b75792171 More intelligent node ping
Three changes:

1. Pings are randomized. Note `utils.RandomizedDuration()` function.
2. Sleeps are twice as long between failures.
3. Made tests less vulnerable to sleep times (also sped them up by about
   three seconds)

+ minor refactoring, moved "magic constants" into a proper
constants in `defaults` module.
2016-03-08 09:17:41 -08:00
Ev Kontsevoy fb7768bc53 Experiment... 2016-03-05 23:51:12 -08:00
Ev Kontsevoy cb3eddd36b Servers now use read-only UUIDs for their IDs 2016-03-01 23:34:49 -08:00