-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Teleport 13 Test Plan #24576
Comments
Creating a Kubernetes join token returns no message: #24733 |
Fixed |
Agentless/OpenSSH guide doesn't work: #24778 |
Fixed |
Minor UX log entry issue for |
Fixed |
Enhanced session recording does not capture disk events - looks like a known issue so I'm checking it as complete. |
|
Fixed |
Fixed |
Fixed |
Fixed |
YubiHSM2 SDK version 2023.01 not supported: #25017 |
This is working as expected. |
DynamoDB db access requires additional configuration which isn't mentioned in docs or handled by |
Fixed |
Fixed |
Fixed |
agentless OpenSSH guide does not explain required permissions to create |
Fixed |
Several UI bugs in Discover for Desktop Access |
Fixed |
Differences in docs pages between
Looks like these all have outstanding backports, so I think all is good. |
@alexfornuto @avatus What do you think is the best way right now to ensure that the "Upcoming Releases" page only exists for the default docs version? We could add a redirect from Another option is deleting this page for non-default versions and not adding a redirect, but that might lead to 404s. |
etcd 10k Testetcd MetricsTeleport MetricsNetwork MetricsSoak Test
Firestore 10k TestTeleport MetricsNetwork MetricsIssues
|
I've suggested some edits to the |
In the Teleport Enterprise Cloud Getting Started guide, v13 has some UI differences from v12 for adding servers (including light mode), but I'm not going to update the screenshots this week since I have some higher-priority items to take care of. The overall server registration flow shown in the guide still works as intended. |
Outdated OneLogin screenshot: #25290 |
Bucket ACL issues with terraform: #25113 |
Fixed |
Fixed |
Using OpenSSH |
Working as expected |
creating moderated sessions for a leaf node is not enforced: #25557 |
Dynamo Loadtesting10k Tunnel Node Scaling10k Direct Dial Node Scaling500 Trusted Cluster Scalingnote: Elevated CPU is presumed to be due to a cache bug that was causing frequent recents of the "remote proxy" cache, and will be fixed in the final v13 release. Benchmarks (1k Nodes)Tunnel bench:
Tunnel Random:
Label-Based:
Direct Dial:
|
Manual Testing Plan
Below are the items that should be manually tested with each release of Teleport.
These tests should be run on both a fresh installation of the version to be released
as well as an upgrade of the previous version of Teleport.
Adding nodes to a cluster @atburke
Labels @lxea
Trusted Clusters @EdwardDowling
RBAC @nklaassen
Make sure that invalid and valid attempts are reflected in audit log. Do this with both Teleport and Agentless nodes.
Verify that custom PAM environment variables are available as expected. @nklaassen
Users @codingllama
With every user combination, try to login and signup with invalid second
factor, invalid password to see how the system reacts.
WebAuthn in the release
tsh
binary is implemented using libfido2 forlinux/macOS. Ask for a statically built pre-release binary for realistic
tests. (
tsh fido2 diag
should work in our binary.) Webauthn in Windowsbuild is implemented using
webauthn.dll
. (tsh webauthn diag
withsecurity key selected in dialog should work.)
Touch ID requires a signed
tsh
, ask for a signed pre-release binary so youmay run the tests.
Windows Webauthn requires Windows 10 19H1 and device capable of Windows
Hello.
Adding Users Password Only
Adding Users OTP
Adding Users WebAuthn
Adding Users via platform authenticator
Managing MFA devices
tsh mfa add
tsh mfa add
tsh mfa add
tsh mfa ls
tsh mfa rm
tsh mfa rm
second_factor: on
inauth_service
, should failsecond_factor: optional
inauth_service
, should succeedLogin Password Only
Login with MFA
tsh mfa add
U2F devices must be registered in a previous version of Teleport.
Using Teleport v9, set
auth_service.authentication.second_factor = u2f
,restart the server and then register an U2F device (
tsh mfa add
). Upgradethe installation to the current Teleport version (one major at a time) and try to
log in using the U2F device as your second factor - it should work.
Login OIDC
Login SAML
Login GitHub
Deleting Users
Backends @timothyb89
Session Recording @Joerger
Enhanced Session Recording @Joerger
disk
,command
andnetwork
events are being logged.enhanced_recording
role option.Restricted Session @Joerger
Audit Log @atburke
Failed login attempts are recorded
Interactive sessions have the correct Server ID
server_id
is the ID of the node in "session_recording: node" modeserver_id
is the ID of the node in "session_recording: proxy" modeforwarded_by
is the ID of the proxy in "session_recording: proxy" modeNode/Proxy ID may be found at
/var/lib/teleport/host_uuid
in thecorresponding machine.
Node IDs may also be queried via
tctl nodes ls
.Exec commands are recorded
scp
commands are recordedSubsystem results are recorded
Subsystem testing may be achieved using both
Recording Proxy mode
and
OpenSSH integration.
Assuming the proxy is
proxy.example.com:3023
andnode1
is a node runningOpenSSH/sshd, you may use the following command to trigger a subsystem audit
log:
sftp -o "ProxyCommand ssh -o 'ForwardAgent yes' -p 3023 %[email protected] -s proxy:%h:%p" root@node1
Interact with a cluster using
tsh
@capnspacehookThese commands should ideally be tested for recording and non-recording modes as they are implemented in a different ways.
Interact with a cluster using
ssh
@capnspacehookMake sure to test both recording and regular proxy modes.
Verify proxy jump functionality @Joerger
Log into leaf cluster via root, shut down the root proxy and verify proxy jump works.
Interact with a cluster using the Web UI @EdwardDowling
tsh
CA loading @atburkeCreate a trusted cluster pair with a node in the leaf cluster. Log into the root cluster.
load_all_cas
on the root auth server isfalse
(default) -tsh ssh leaf.node.example.com
results in access denied.load_all_cas
on the root auth server istrue
-tsh ssh leaf.node.example.com
succeeds.
X11 Forwarding @Joerger
xeyes
andxclip
:apt install x11-apps xclip
xeyes
. Thenbrew install xclip
.ssh_service.x11.enabled = yes
tsh ssh -X user@node xeyes
tsh ssh -X root@node xeyes
tsh ssh -Y server01 "echo Hello World | xclip -sel c && xclip -sel c -o"
should print "Hello World"tsh ssh -X server01 "echo Hello World | xclip -sel c && xclip -sel c -o"
should fail with "BadAccess" X errorUser accounting @atburke
/var/run/utmp
on Linux./var/log/wtmp
on Linux.Combinations @strideynet
For some manual testing, many combinations need to be tested. For example, for
interactive sessions the 12 combinations are below.
Teleport with EKS/GKE @tigrato
Teleport with multiple Kubernetes clusters @AntonAM
Note: you can use GKE or EKS or minikube to run Kubernetes clusters.
Minikube is the only caveat - it's not reachable publicly so don't run a proxy there.
tsh login
, check thattsh kube ls
has your clusterkubectl get nodes
,kubectl exec -it $SOME_POD -- sh
tsh login
, check thattsh kube ls
has your clusterkubectl get nodes
,kubectl exec -it $SOME_POD -- sh
tsh login
, check thattsh kube ls
has your clusterkubectl get nodes
,kubectl exec -it $SOME_POD -- sh
tsh login
, check thattsh kube ls
has both clusterstsh kube login
kubectl get nodes
,kubectl exec -it $SOME_POD -- sh
on the new clustertsh login
, check thattsh kube ls
has all clustersname
andlabels
Step 2
login value matching the rowsname
columnname
orlabels
in the search bar worksname
columKubernetes auto-discovery @tigrato
tctl create
.tctl create -f
.tctl rm
.Kubernetes Secret Storage @AntonAM
Statefulset
Kubernetes Pod RBAC @AntonAM
kubernetes_resources
:{"kind":"pod","name":"*","namespace":"*"}
- must allow access to every pod.{"kind":"pod","name":"<somename>","namespace":"*"}
- must allow access to pod<somename>
in every namespace.{"kind":"pod","name":"*","namespace":"<somenamespace>"}
- must allow access to any pod in<somenamespace>
namespace.*
wildcards -<some-name>-*
and regex forname
andnamespace
fields.go-client
.kubernetes_resources
:kubernetes_groups
that denies exec into a podsearch_as_roles
is not allowed.Kubernetes credentials forwarding @tigrato
Teleport with FIPS mode @atburke
ACME @marcoandredinis
Migrations @r0mant @zmb3
SSH should work for both main and old clusters
SSH should work
Command Templates
When interacting with a cluster, the following command templates are useful:
OpenSSH
Teleport
Teleport with SSO Providers
GitHub External SSO @Tener
tctl sso
family of commands @TenerFor help with setting up sso connectors, check out the Quick GitHub/SAML/OIDC Setup Tips
tctl sso configure
helps to construct a valid connector definition:tctl sso configure github ...
creates valid connector definitionstctl sso configure oidc ...
creates valid connector definitionstctl sso configure saml ...
creates valid connector definitionstctl sso test
test a provided connector definition, which can be loaded fromfile or piped in with
tctl sso configure
ortctl get --with-secrets
. Validconnectors are accepted, invalid are rejected with sensible error messages.
tctl sso test
. @TenerTeleport Plugins @EdwardDowling
AWS Node Joining @nklaassen
Docs
ec2:DescribeInstances
permissions for local account:TELEPORT_TEST_EC2=1 go test ./integration -run TestEC2NodeJoin
TELEPORT_TEST_EC2=1 go test ./integration -run TestIAMNodeJoin
Kubernetes Node Joining @hugoShaka
Azure Node Joining @atburke
Docs
Cloud Labels @atburke
and with tag
foo
:bar
. Verify that a node running on the instance has labelaws/foo=bar
.foo
:bar
. Verify that a node running on theinstance has label
azure/foo=bar
.Passwordless @codingllama
This feature has additional build requirements, so it should be tested with a pre-release build from Drone (eg:
https://get.gravitational.com/teleport-v10.0.0-alpha.2-linux-amd64-bin.tar.gz
).This sections complements "Users -> Managing MFA devices".
tsh
binaries foreach operating system (Linux, macOS and Windows) must be tested separately for
FIDO2 items.
Diagnostics
Commands should pass all tests.
tsh fido2 diag
(macOS/Linux)tsh touchid diag
(macOS only)tsh webauthnwin diag
(Windows only)Registration
tsh mfa add
, choose WEBAUTHN andpasswordless)
tsh mfa add
, choose TOUCHID)tsh mfa add
, choose WEBAUTHN andpasswordless)
Login
tsh login --auth=passwordless
)tsh login --auth=passwordless
)tsh login --auth=passwordless --mfa-mode=cross-platform
uses FIDO2tsh login --auth=passwordless --mfa-mode=platform
uses platform authenticatortsh login --auth=passwordless --mfa-mode=auto
prefers platform authenticatorthe same device)
(
auth_service.authentication.passwordless = false
)(
auth_service.authentication.connector_name = passwordless
)(
tsh login --auth=local
)Touch ID support commands
tsh touchid ls
workstsh touchid rm
works (careful, may lock you out!)Device Trust @sshahcodes
Device Trust requires Teleport Enterprise.
This feature has additional build requirements, so it should be tested with a
pre-release build from Drone (eg:
https://get.gravitational.com/teleport-v10.0.0-alpha.2-linux-amd64-bin.tar.gz
).Client-side enrollment requires a signed
tsh
for macOS, make sure to use thetsh
binary fromtsh.app
.A simple formula for testing device authorization is:
Inventory management
tctl devices add
)tctl devices add --enroll
)tctl devices ls
)tctl devices rm
)tctl devices rm
)tctl devices enroll
)tctl devices enroll
)Device enrollment
Enroll device on macOS (
tsh device enroll
)Verify device extensions on TLS certificate
Note that different accesses have different certificates (Database, Kube,
etc).
Verify device extensions on SSH certificate
Device authorization
device_trust.mode other than "off" or "" not allowed (OSS)
device_trust.mode="off" doesn't impede access (Enterprise and OSS)
device_trust.mode="optional" doesn't impede access, but issues device
extensions on login
device_trust.mode="required" enforces enrolled devices
device_trust.mode="required" is enforced by processes, and not only by
Auth APIs
Testing this requires issuing a certificate without device extensions
(mode="off"), then changing the cluster configuration to mode="required" and
attempting to access a process directly, without a login attempt.
Role-based authz enforces enrolled devices
(device_trust.mode="off" or "optional",
role.spec.options.device_trust_mode="required")
Device authorization works correctly for both require_session_mfa=false
and require_session_mfa=true
Device authorization applies to SSH access (all items above)
Device authorization applies to Trusted Clusters (root with
mode="optional" and leaf with mode="required")
Device authorization applies to Database access (all items above)
Device authorization applies to Kubernetes access (all items above)
Device authorization does not apply to App access
(both cluster-wide and role)
Device authorization does not apply to Windows Desktop access
(both cluster-wide and role)
Device audit (see lib/events/codes.go)
data (for certificates with device extensions)
Binary support
tsh
for macOS gives a sane errormessage for
tsh device enroll
attempts.Hardware Key Support @Joerger
Hardware Key Support is an Enterprise feature and is not available for OSS.
You will need a YubiKey 4.3+ to test this feature.
This feature has additional build requirements, so it should be tested with a pre-release build from Drone (eg:
https://get.gravitational.com/teleport-ent-v11.0.0-alpha.2-linux-amd64-bin.tar.gz
).Server Access
These tests should be carried out sequentially.
tsh
tests should be carried out on Linux, MacOS, and Windows.tsh login
as user with Webauthn login and no hardware key requirement.role.role_options.require_session_mfa: hardware_key
-tsh login --request-roles=hardware_key_required
tsh ssh
role.role_options.require_session_mfa: hardware_key_touch
-tsh login --request-roles=hardware_key_touch_required
tsh ssh
tsh logout
andtsh login
as the user with no hardware key requirement.auth_service.authentication.require_session_mfa: hardware_key
tsh ls
) should force automatic re-login with yubikeytsh ssh
auth_service.authentication.require_session_mfa: hardware_key_touch
tsh ls
) should force automatic re-login with yubikeytsh ssh
Other
Set
auth_service.authentication.require_session_mfa: hardware_key_touch
in your cluster auth settings.tsh proxy db --tunnel
HSM Support @nklaassen
Docs
Moderated session @marcoandredinis
Using
tsh
join an SSH session as two moderators (two separate terminals, role requires one moderator).Ctrl+C
in the Implement a prototype for a proxying SSH server that implements concepts expressed in readme #1 terminal should disconnect the moderator.Ctrl+C
in the Implement a functional prototype #2 terminal should disconnect the moderator and terminate the session as session has no moderator.Using
tsh
join an SSH session as two moderators (two separate terminals, role requires one moderator).t
in any terminal should terminate the session for all participants.Performance @rosstimothy @fspmarshall @espadolini
Scaling Test
Scale up the number of nodes/clusters a few times for each configuration below.
Perform reverse tunnel node scaling tests for all backend configurations:
Perform the following additional scaling tests on DynamoDB:
Soak Test
Run 30 minute soak test directly against direct and tunnel nodes
and via label based matching. Tests should be run against a Cloud
tenant.
Concurrent Session Test
Run a concurrent session test that will spawn 5 interactive sessions per node in the cluster:
Robustness
resources which do not require a moderated session and in async recording
mode from an already issued certificate.
which require a moderated session and in async recording mode from an already
issued certificate.
are restarted.
Teleport with Cloud Providers
AWS @tcsc
GCP @tcsc
IBM @hugoShaka
Application Access @mdwn
debug_app: true
works.name.rootProxyPublicAddr
and well aspublicAddr
.name.rootProxyPublicAddr
.app.session.start
andapp.session.chunk
events are created in the Audit Log.app.session.chunk
points to a 5 minute session archive with multipleapp.session.request
events inside.tsh play <chunk-id>
can fetch and print a session chunk archive.tsh apps login
.tsh
commands.tsh aws
tsh aws --endpoint-url
(this is a hidden flag)tsh apps login
.tsh az
commands.tsh proxy az
andaz
commands.tsh apps login
.tsh gcloud
commands.tsh gsutil
commands.tsh proxy gcloud
andgcloud
/gsutil
commands.tctl create
.tctl create -f
.tctl rm
.Add Application
dialogue works (refresh app screen to see it registered)Database Access @smallinsky
select pg_sleep(10)
followed by ctrl-c is a good query to test.)assume_role_arn: ""
andexternal_id: "<id>"
assume_role_arn: ""
andexternal_id: "<id>"
assume_role_arn: ""
andexternal_id: "<id>"
db.session.start
is emitted when you connect.db.session.end
is emitted when you disconnect.db.session.query
is emitted when you execute a SQL query.tsh db ls
shows only databases matching role'sdb_labels
.db_users
.db_names
. @smallinskydb.session.start
is emitted when connection attempt is denied.db_names
. @Tenerdb.session.query
is emitted when command fails due to permissions.tsh db connect
.tctl create
.tctl create -f
.tctl rm
.assume_role_arn
andexternal_id
is set.name
,description
,type
, andlabels
Step 2
login value matching the rowsname
columnlabels
TLS Routing @smallinsky
v2
configuration starts only a single listener for proxy service, in contrast withv1
configuration. @GavinFrazarGiven configuration:
*:3080
for proxy service. Given the configuration above, 3022 and 3025 will be opened for other services.v1
, there should be additional ports 3023 and 3024.multiplex
modeauth_service.proxy_listener_mode: "multiplex"
@GavinFrazarweb_proxy_addr == tunnel_addr
tsh db connect
works through proxy running inmultiplex
modetsh db proxy
with a GUI client. @smallinsky @GavinFrazar @Tener @greedy52multiplex
modessh -o "ForwardAgent yes" -o "ProxyCommand tsh proxy ssh" [email protected]
ssh -o "ForwardAgent yes" -o "ProxyCommand tsh proxy ssh --user=%r --cluster=leaf-cluster %h:%p" [email protected]
tsh ssh
access through proxy running in multiplex modemultiplex
modemultiplex
mode behind L7 load balancertsh login
andtctl
@smallinskytsh ssh
andtsh config
@gabrielcoradotsh proxy db
andtsh db connect
@gabrielcoradotsh proxy app
andtsh aws
@gabrielcoradotsh proxy kube
@smallinskyDesktop Access @ibeckermayer
listen_addr
):hosts
section.hosts
section.windows_desktop_service
s to the same Teleport cluster,verify that connections to desktops on different AD domains works. (Attempt to
connect several times to verify that you are routed to the correct
windows_desktop_service
)verify all keys are processed correctly in each supported browser. Known
issues: F11 cannot be captured by the browser without
special configuration
on MacOS.
the desktop should show a Windows menu, not a browser context menu)
Horizontal Scroll Test
client_idle_timeout
to a small value and verify that idle sessionsare terminated (the session should end and an audit event will confirm it
was due to idle connection)
teleport.dev/origin
label.teleport.dev
labels for OS, OSVersion, DNS hostname.
origin.
desktop_directory_sharing: false
) and confirm that the option to share a directory doesn't appear in the menumode: node-sync
ormode: proxy-sync
)mode: node
ormode: proxy
)and the progress bar progresses to the end.
a relevant error message.
using the RBAC rule from our
docs
windows.desktop.session.start
(TDP00I
) emitted on startwindows.desktop.session.start
(TDP00W
) emitted when session fails tostart (due to RBAC, for example)
client.disconnect
(T3006I
) emitted when session is terminated by or failsto start due to lock
windows.desktop.session.end
(TDP01I
) emitted on enddesktop.clipboard.send
(TDP02I
) emitted for local copy -> remotepaste
desktop.clipboard.receive
(TDP03I
) emitted for remote copy -> localpaste
desktop.directory.share
(TDP04I
) emitted when Teleport starts sharing a directorydesktop.directory.read
(TDP05I
) emitted when a file is read over the shared directorydesktop.directory.write
(TDP06I
) emitted when a file is written to over the shared directoryBinaries compatibility @fheinecke
tsh
runs on:Machine ID
SSH @strideynet
With a default Teleport instance configured with a SSH node:
tctl bots add robot --roles=access
. Follow the instructions provided in the output to starttbot
ssh_config
in the destination directorySIGUSR1
andSIGHUP
to a running tbot process causes a renewal and new certificates to be generatedssh_config
provided bytbot
after each phase of a manual CA rotation.Ensure the above tests are completed for both:
DB Access @timothyb89
With a default Postgres DB instance, a Teleport instance configured with DB access and a bot user configured:
tbot db
whiletbot start
is runningHost users creation @lxea
Host users creation docs
Host users creation RFD
teleport-system
groupdisable_create_host_user: true
stops user creation from occurringCA rotations @espadolini
tctl get cert_authority
)standby
phase: onlyactive_keys
, noadditional_trusted_keys
init
phase:active_keys
andadditional_trusted_keys
update_clients
andupdate_servers
phases: the certs from theinit
phase are swappedstandby
phase: only the new certs remain inactive_keys
, nothing inadditional_trusted_keys
rollback
phase (second pass, after completing a regular rotation): same content as in theinit
phasestandby
phase afterrollback
: same content as in the previousstandby
phasetsh apps login
kubectl get po
aftertsh kube login
EC2 Discovery @lxea
EC2 Discovery docs
IP Pinning
Add a role with
pin_source_ip: true
(requires Enterprise) to test IP pinning.Testing will require changing your IP (that Teleport Proxy sees).
Docs: IP Pinning
tsh ssh
on root clustertsh ssh
on root clustertsh ssh
on leaf clustertsh ssh
on leaf clusterDocumentation @ptgott @alexfornuto
Checks should be performed on the version of documentation corresponding to the
major release we're testing for. For example, for Teleport 12 release use
branch/v12
branch and make sure to select "Version 12.0" in the documentationversion switcher.
Verify installation instructions are accurate:
Verify getting started instructions are accurate #25211
Verify upcoming releases page is accurate:
Verify Teleport versions throughout documentation are correct and reflect upcoming release: ptgott
In progress in this PR: Update docs version vars for v13 #25230
Verify that all necessary documentation for the release was backported to release branch ptgott:
Verify deprecated Teleport versions are added to the older versions page ptgott
In progress in this PR: Update config.json and gitmodules for v13 docs#277
Verify
gravitational/docs
version configuration: ptgott:gravitational/docs/config.json
: in progress in this PR: Update for branch/v13 docs#270gravitational/docs/.gitmodules
contains latest releaseIn progress in this PR: Update config.json and gitmodules for v13 docs#277
Verify changelog is up-to-date and complete for the default docs version:
Verify supported versions table in FAQ ptgott:
PR in progress here: https://github.com/gravitational/teleport/pull/25215/files
Resources
Quick GitHub/SAML/OIDC Setup Tips
The text was updated successfully, but these errors were encountered: