Skip to main content

Application Resources

Report an Issue

A role of version v9 denies every HTTP request to an application it grants, unless a rule under spec.allow.app_resources or spec.allow.app_resources_expressions authorizes the request. Earlier role versions authorize an application as a whole, so a user who reaches the application can send any request to it. Role v9 does not affect TCP, MCP, cloud (AWS console, Azure, and GCP), LLM, or Identity Center applications.

Rules​

The app_resources field is valid only under allow, and any matching rule allows the request. A rule sets paths, a list of path patterns, optionally narrowed by methods and where, or allow_all: true, which stands alone and authorizes every request.

The role below authorizes every request to the applications it grants:

kind: role
version: v9
metadata:
  name: gitlab-dev
spec:
  allow:
    app_labels:
      vendor: [gitlab]
    app_resources:
      - allow_all: true

Teleport removes the following headers from a request a rule allows, because they can bypass the rule:

  • X-HTTP-Method
  • X-HTTP-Method-Override
  • X-Method-Override
  • X-Original-URI
  • X-Original-URL
  • X-Rewrite-URL

Teleport keeps these headers on a request that an allow_all rule allows, because that rule matches every method and path. An app's rewrite.headers configuration is applied after the removal, so a rewrite of one of these names reaches the app.

The app_resources_expressions field is a list of string predicates. Every app_resources rule can be written as an app_resources_expressions predicate, but not the reverse.

When a v9 role and a v8 or older role both grant the same application, Teleport drops the older roles from the decision, so they cannot restore unrestricted access to an application a v9 role restricts.

Agent version requirements​

Upgrade all Application Service agents to Teleport 19 before using role v9. An agent on Teleport 18 or earlier cannot evaluate app_resources, so the Auth Service serves it a downgraded v8 copy of each v9 role. For a role with an allow_all rule the copy grants the same access as v9. For any other role the copy moves the allow app_labels and app_labels_expression to the deny side, so the older agent denies those applications instead of granting them. A role does not record which application types it grants, so a downgraded role also denies the TCP, MCP, and cloud applications it selects, and can deny more applications than the v9 role restricts.