Policies API Reference :: Kloudfuse Docs

Policies API Reference

The Policies API lets you create, read, update, and delete RBAC policies and assign them to teams, users, and service accounts. All endpoints are under the /rbac/ base path and require a Service Account token with Admin role.

Replace <your-instance> with your Kloudfuse hostname and <sa-token> with a valid Service Account token.

For background on how policies control stream access, see RBAC Policy Best Practices. For the Teams API, see Teams API Reference.

List Policies

Returns all policies defined in the system.

curl -H "Authorization: Bearer <sa-token>" \
  "https://<your-instance>/rbac/policies"

Response

{
  "policies": [
    {
      "name": "All Access",
      "scope": {
        "type": "all",
        "filters": [
          { "key": "kf_stream", "op": "=~", "value": "logs|metrics|events|apm|rum" }
        ]
      }
    },
    {
      "name": "Production Logs",
      "scope": {
        "type": "custom",
        "filters": [
          { "key": "kf_stream", "op": "=~", "value": "logs" },
          { "key": "env",       "op": "=",  "value": "production" }
        ]
      }
    },
    {
      "name": "No Access",
      "scope": {
        "type": "none",
        "filters": [
          { "key": "kf_stream", "op": "=~", "value": "logs|metrics|events|apm|rum" }
        ]
      }
    }
  ]
}

Get a Policy

Returns a single policy by name. URL-encode the policy name if it contains spaces or special characters.

curl -H "Authorization: Bearer <sa-token>" \
  "https://<your-instance>/rbac/policies/Production%20Logs"

Response

{
  "name": "Production Logs",
  "scope": {
    "type": "custom",
    "filters": [
      { "key": "kf_stream", "op": "=~", "value": "logs" },
      { "key": "env",       "op": "=",  "value": "production" }
    ]
  }
}

Create a Policy

Creates a new policy with the specified scope and filters.

curl -H "Authorization: Bearer <sa-token>" \
     -H "Content-Type: application/json" \
     -X POST "https://<your-instance>/rbac/policies" \
     -d '{
       "name": "Production Logs",
       "scope": {
         "type": "custom",
         "filters": [
           { "key": "kf_stream", "op": "=~", "value": "logs" },
           { "key": "env",       "op": "=",  "value": "production" }
         ]
       }
     }'

Scope types

type Behaviour
all Full access to all data in every stream. The filters field is ignored for access decisions.
none No access to any stream.
custom Access restricted to data matching the filters array. All filters apply to every query (AND logic within a policy; OR logic across policies on the same team).

Filter fields

Field Type Description
key string Label key to filter on. Use kf_stream to restrict by stream type, or any label key such as env or kube_namespace. See Get Allowed Filter Labels for supported keys per stream.
op string Operator: = (exact match), != (exclude), =~ (regex match), !~ (regex exclude).
value string Value or regex pattern. Use `

Common kf_stream values: logs, metrics, events, apm, rum.

Update a Policy

Replaces a policy’s scope and filters in full. The policy name in the URL and body must match. To rename a policy, delete and recreate it.

curl -H "Authorization: Bearer <sa-token>" \
     -H "Content-Type: application/json" \
     -X PUT "https://<your-instance>/rbac/policies/Production%20Logs" \
     -d '{
       "name": "Production Logs",
       "scope": {
         "type": "custom",
         "filters": [
           { "key": "kf_stream", "op": "=~", "value": "logs|metrics" },
           { "key": "env",       "op": "=",  "value": "production" }
         ]
       }
     }'

Delete a Policy

Deletes a policy and removes all its team, user, and service account assignments. Returns 204 No Content with an empty response body.

curl -H "Authorization: Bearer <sa-token>" \
     -X DELETE "https://<your-instance>/rbac/policies/Production%20Logs"

List Policy Assignments

Returns all teams, users, and service accounts assigned to a policy.

curl -H "Authorization: Bearer <sa-token>" \
  "https://<your-instance>/rbac/policies/Production%20Logs/mappings"

Response

{
  "mappings": [
    {
      "policy_name": "Production Logs",
      "entity_type": "group",
      "entity_name": "ops-team",
      "created_at": "2026-04-21T19:27:41.829667Z"
    },
    {
      "policy_name": "Production Logs",
      "entity_type": "user",
      "entity_name": "alice@example.com",
      "created_at": "2026-04-20T10:00:00.000000Z"
    }
  ]
}

Assign a Policy

Assigns a policy to a team (group), user, or service account.

# Assign to a team
curl -H "Authorization: Bearer <sa-token>" \
     -H "Content-Type: application/json" \
     -X POST "https://<your-instance>/rbac/policies/Production%20Logs/mappings" \
     -d '{
       "policy_name": "Production Logs",
       "entity_type": "group",
       "entity_name": "ops-team"
     }'

# Assign to a user
curl -H "Authorization: Bearer <sa-token>" \
     -H "Content-Type: application/json" \
     -X POST "https://<your-instance>/rbac/policies/Production%20Logs/mappings" \
     -d '{
       "policy_name": "Production Logs",
       "entity_type": "user",
       "entity_name": "alice@example.com"
     }'

# Assign to a service account
curl -H "Authorization: Bearer <sa-token>" \
     -H "Content-Type: application/json" \
     -X POST "https://<your-instance>/rbac/policies/Production%20Logs/mappings" \
     -d '{
       "policy_name": "Production Logs",
       "entity_type": "service_account",
       "entity_name": "my-pipeline-sa"
     }'

Remove a Policy Assignment

Removes a policy assignment from a team, user, or service account. Returns 204 No Content on success.

# Remove from a team
curl -H "Authorization: Bearer <sa-token>" \
     -X DELETE "https://<your-instance>/rbac/policies/Production%20Logs/mappings/group/ops-team"

# Remove from a user
curl -H "Authorization: Bearer <sa-token>" \
     -X DELETE "https://<your-instance>/rbac/policies/Production%20Logs/mappings/user/alice%40example.com"

# Remove from a service account
curl -H "Authorization: Bearer <sa-token>" \
     -X DELETE "https://<your-instance>/rbac/policies/Production%20Logs/mappings/service_account/my-pipeline-sa"

Get Effective Policies

Returns all policies assigned to an identity and the resolved per-stream access after combining all policies with OR logic.

# For a team
curl -H "Authorization: Bearer <sa-token>" \
  "https://<your-instance>/rbac/groups/ops-team/effective-policies"

# For a user
curl -H "Authorization: Bearer <sa-token>" \
  "https://<your-instance>/rbac/users/alice%40example.com/effective-policies"

# For a service account
curl -H "Authorization: Bearer <sa-token>" \
  "https://<your-instance>/rbac/service-accounts/my-pipeline-sa/effective-policies"

Response

{
  "name": "ops-team",
  "entity_type": "group",
  "policies": [
    {
      "name": "Production Logs",
      "scope": {
        "type": "custom",
        "filters": [
          { "key": "kf_stream", "op": "=~", "value": "logs|metrics" },
          { "key": "env",       "op": "=",  "value": "production" }
        ]
      }
    }
  ],
  "scopes": {
    "logs":    [{ "type": "custom", "filters": [{ "key": "env", "op": "=", "value": "production" }], "policy_name": "Production Logs" }],
    "metrics": [{ "type": "custom", "filters": [{ "key": "env", "op": "=", "value": "production" }], "policy_name": "Production Logs" }],
    "events":  [{ "type": "none", "policy_name": "default-deny-policy" }],
    "apm":     [{ "type": "none", "policy_name": "default-deny-policy" }],
    "rum":     [{ "type": "none", "policy_name": "default-deny-policy" }]
  },
  "direct_policy_count": 1,
  "total_policy_count": 1
}

Get Allowed Filter Labels

Returns the label keys available for use in policy filters, grouped by stream type.

curl -H "Authorization: Bearer <sa-token>" \
  "https://<your-instance>/rbac/allowed-labels"

Response

{
  "apm": [
    "kf_platform", "availability_zone", "cloud_account_id",
    "kube_cluster_name", "kube_namespace", "project", "region", "service_name"
  ],
  "rum": [
    "application.id", "service", "env", "geo.country_iso_code"
  ]
}
kf_stream is always available as a filter key across all stream types and does not appear in this list.

Error Codes

HTTP Status Meaning
200 Success.
201 Policy or mapping created.
204 Delete succeeded (empty response body).
400 Bad request — invalid scope type, missing required field, or entity not found.
401 Missing or invalid Authorization header.
403 Insufficient permissions.
404 Policy or mapping not found.
409 Conflict — a policy with that name already exists.