Skip to content

Support Fine-Grained Permissions v2 (Keycloak 26.2) #1187

Open
@sventorben

Description

@sventorben

Description

Keycloak 26.2 introduced Fine-Grained Permissions v2, which allows scoped and secure delegation of administrative rights across various Keycloak entities such as users, groups, roles, and clients. This improvement enables more secure and granular administrative delegation compared to the legacy realm admin role.

Currently, the Keycloak Terraform Provider does not support managing Fine-Grained Permissions v2. Supporting this feature would enable full infrastructure-as-code (IaC) workflows around admin delegation and access management.

Relevant documentation:

Discussion

No response

Motivation

  • Enables secure delegation of administrative tasks using Terraform.
  • Aligns Terraform-based Keycloak management with the latest Keycloak features.
  • Reduces reliance on the full realm admin role for delegated use cases.
  • Improves compliance and security through scoped permissions and policies.

Details

Requested Enhancements

Realm-Level Support

  • Support the adminPermissionsEnabled flag for realms.

Top-Level Permission Resources

Add new Terraform resources for managing entity-specific admin permissions:

  • keycloak_user_permissions
  • keycloak_group_permissions
  • keycloak_client_permissions
  • keycloak_role_permissions

Each should allow configuring which scopes (e.g. view-users, manage-clients) are protected and who is allowed to use them.

Policy Resources

Add support for managing policy types used in permissions:

  • keycloak_aggregated_policy
  • keycloak_client_policy
  • keycloak_client_scope_policy
  • keycloak_group_policy
  • keycloak_regex_policy
  • keycloak_role_policy
  • keycloak_time_policy
  • keycloak_user_policy

Permission–Policy Links

Add a resource like keycloak_permission_policy_link to associate policies with specific permission resources.

Example Terraform Configuration

resource "keycloak_realm" "myrealm" {
  realm                     = "myrealm"
  enabled                   = true
  admin_permissions_enabled = true
}

resource "keycloak_role" "user_admin" {
  realm_id = keycloak_realm.myrealm.id
  name     = "user-admin"
}

resource "keycloak_user_permissions" "manage_users_permission" {
  realm_id = keycloak_realm.myrealm.id
  scope    = "manage-users"
  resource = "users"
}

resource "keycloak_role_policy" "user_admin_policy" {
  realm_id = keycloak_realm.myrealm.id
  name     = "user-admin-role-policy"
  roles    = [keycloak_role.user_admin.id]
}

resource "keycloak_permission_policy_link" "link_user_admin_to_permission" {
  permission_id = keycloak_user_permissions.manage_users_permission.id
  policy_id     = keycloak_role_policy.user_admin_policy.id
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions