Teleport
Visualize Teleport users, roles, and access lists, map role assignments and access list membership across your infrastructure, and monitor changes through queries and alerts.
- Installation
- Authorization
- Data Model
- Types
- Release Notes
Installation
This integration authenticates to the Teleport auth service over gRPC with mutual TLS. No passwords, API keys, or OAuth tokens are used — all traffic is authenticated with a client certificate issued by the cluster's own CA and delivered to JupiterOne as a single identity file (a PEM bundle containing the private key, TLS client certificate, and cluster CA certificates).
Prerequisites
- A Teleport cluster (Cloud or self-hosted) reachable on port
443. - The
tctlandtshCLI tools, running as a cluster administrator that has permission to create roles, create local users, and impersonate the service user you are about to create.
Configuration in Teleport
1. Log in to the cluster as an administrator
tsh login --proxy=<cluster>.teleport.sh:443 --user=<admin-user>
2. Create the read-only role for JupiterOne
Save the following to jupiterone-role.yaml:
kind: role
version: v7
metadata:
name: jupiterone-reader
spec:
allow:
rules:
- resources:
[user, role, access_list, access_list_member, access_list_review]
verbs: [list, read]
Then apply it:
tctl create -f jupiterone-role.yaml
3. Grant your admin user permission to sign an identity for the service user
tctl auth sign --user=<other-user> requires explicit impersonation rights, which the preset editor role does not include. Create this role and attach it to your admin user:
kind: role
version: v7
metadata:
name: jupiterone-impersonator
spec:
allow:
impersonate:
users: ['jupiterone']
roles: ['jupiterone-reader']
tctl create -f jupiterone-impersonator.yaml
tctl users update <admin-user> --set-roles=<existing-roles>,jupiterone-impersonator
tsh logout && tsh login --proxy=<cluster>.teleport.sh:443 --user=<admin-user>
Re-logging in is required so the admin's session certificate picks up the new role.
4. Create the local service user and finish its invite
tctl users add jupiterone --roles=jupiterone-reader
This prints a one-hour invite URL. Open it in a browser and complete password + MFA setup for the jupiterone user. Local authentication with MFA is required — SSO users cannot be used to sign identity files because tctl auth sign needs a password-backed user.
5. Sign the identity file
tctl auth sign \
--user=jupiterone \
--format=file \
--out=jupiterone-identity.pem \
--ttl=24h
The PEM bundle written to jupiterone-identity.pem is what you will upload to JupiterOne in the next step.
Authentication and certificate lifetime
Teleport enforces a hard ~30 hour upper bound on user-certificate TTL (apidefaults.MaxCertDuration in the Teleport source; max_session_ttl on roles cannot push past this ceiling — see this discussion). A --ttl=24h identity is fine for a trial, one-off ingestion, or demo, but the integration will stop authenticating once the certificate expires.
For any long-running deployment, follow Teleport's recommendation and provision credentials through Machine ID (tbot) rather than a static tctl auth sign identity. tbot joins the cluster with a delegated token (AWS IAM, GCP, Kubernetes, static token, etc.), continuously renews short-lived certificates, and writes a fresh identity file to disk that can be fed back into the integration on each run. This is the only approach that supports unattended operation beyond the 30h cap.
Configuration in JupiterOne
- Navigate to the Integrations tab in JupiterOne and select Teleport.
- Click New Instance to begin configuring your integration and provide the following:
- Account Name used to identify the Teleport cluster in JupiterOne. Ingested entities will have this value stored in
tag.AccountNamewhen theAccountNametoggle is enabled. - Description to assist in identifying the integration instance, if desired.
- Polling Interval that you feel is sufficient for your monitoring needs. You may leave this as
DISABLEDand manually execute the integration. - Proxy Address — the public address of the Teleport Proxy Service with the port, e.g.
cluster.teleport.sh:443. - Identity File — upload
jupiterone-identity.pemfrom the previous step. JupiterOne stores the full PEM bundle as a masked secret.
- Account Name used to identify the Teleport cluster in JupiterOne. Ingested entities will have this value stored in
Click Create once all values are provided to finalize the integration.
Next steps
Now that your integration instance has been configured, it will begin running on the polling interval you provided, populating data within JupiterOne. Continue on to our Instance management guide to learn more about working with and editing integration instances.
Endpoints
API endpoints that the integration makes requests to.
Show Endpoints (6)
/proto.AuthService/ListRoles/proto.AuthService/Ping/teleport.accesslist.v1.AccessListService/ListAccessListMembers/teleport.accesslist.v1.AccessListService/ListAccessListReviews/teleport.accesslist.v1.AccessListService/ListAccessListsV2/teleport.users.v1.UsersService/ListUsers
Documentation Links
Links to provider documentation relevant to setup and configuration.
Show Documentation Links (3)
Per-Step Breakdown
Detailed authorization requirements for each ingestion step.
Show all steps (8)
| Step | Endpoints |
|---|---|
| Fetch Access List Members | /teleport.accesslist.v1.AccessListService/ListAccessListMembers |
| Fetch Access List Owners | - |
| Fetch Access List Reviews | /teleport.accesslist.v1.AccessListService/ListAccessListReviews |
| Fetch Access List Role Grants | - |
| Fetch Access Lists | /teleport.accesslist.v1.AccessListService/ListAccessListsV2 |
| Fetch Roles | /proto.AuthService/ListRoles |
| Fetch User Role Assignments | - |
| Fetch Users | /teleport.users.v1.UsersService/ListUsers |
Entities
The following entities are created:
| Resources | Entity _type | Entity _class |
|---|---|---|
| AccessList | teleport_access_list | AccessRole |
| AccessListReview | teleport_access_list_review | Review |
| Account | teleport_account | Account |
| Role | teleport_role | AccessRole |
| User | teleport_user | User |
Relationships
The following relationships are created:
Source Entity _type | Relationship _class | Target Entity _type |
|---|---|---|
teleport_access_list | ASSIGNED | teleport_role |
teleport_access_list | HAS | teleport_user |
teleport_access_list | HAS | teleport_access_list_review |
teleport_account | HAS | teleport_user |
teleport_account | HAS | teleport_role |
teleport_account | HAS | teleport_access_list |
teleport_user | ASSIGNED | teleport_role |
teleport_user | MANAGES | teleport_access_list |
teleport_user | REVIEWED | teleport_access_list_review |
Teleport Access List
teleport_access_list inherits from AccessRole
| Property | Type | Description | Specifications |
|---|---|---|---|
accessListType | string | ||
auditFrequency | string | ||
grantedRoles | array | null | ||
memberCount | number | ||
nextAuditOn | number | ||
ownerGrantedRoles | array | null | ||
ownerNames | array | null | ||
requiredMembershipRoles | array | null | ||
requiredOwnershipRoles | array | null | ||
title | string |
Teleport Access List Review
teleport_access_list_review inherits from Review
| Property | Type | Description | Specifications |
|---|---|---|---|
accessListName * | string | ||
notes | string | ||
removedMembers | array | null | ||
reviewedOn | number | ||
reviewers * | array of strings |
Teleport Account
teleport_account inherits from Account
| Property | Type | Description | Specifications |
|---|---|---|---|
clusterName * | string | ||
licenseExpiresOn | number | ||
proxyPublicAddr | string | ||
serverVersion | string |
Teleport Role
teleport_role inherits from AccessRole
| Property | Type | Description | Specifications |
|---|---|---|---|
allowedAWSRoleARNs | array | null | ||
allowedDatabaseNames | array | null | ||
allowedDatabaseUsers | array | null | ||
allowedKubeGroups | array | null | ||
allowedKubeUsers | array | null | ||
allowedLogins | array | null | ||
forwardAgent | boolean | ||
lockMode | string | ||
maxSessionTTL | string | ||
portForwarding | boolean | ||
requestAccess | string |
Teleport User
teleport_user inherits from User
| Property | Type | Description | Specifications |
|---|---|---|---|
connectorId | string | ||
connectorType | string | ||
createdBy | string | ||
locked | boolean | ||
lockedMessage | string | ||
mfaWeakestDevice | string | ||
passwordState | string | ||
roles * | array of strings |