Service Account Monitors
Service accounts are often used to authenticate machine-to-machine communication using Keycloak. Thus, they are often set up with fairly powerful roles and can generate highly privileged tokens. Service Account Monitors allow you to keep an eye on their configuration, to detect overprivileged or misconfigured service accounts. Please be sure that you have read our general introduction to Monitors to understand the context of this feature.
ServiceAccountWithSensitiveRole
In a large deployment with many roles and service accounts, configuration drift can be a real concern. Service accounts may have roles assigned to them that should have been removed months ago, or that were assigned in error. For certain roles, this can pose a threat to the security of the system.
This Monitor allows you to keep an eye on the most sensitive roles. You can define a role and a list of service accounts you expect to have access to this role, and the monitor will raise a finding when additional service accounts are assigned this role.
Info
The monitor will not notify you if an expected service account loses the role. If this would be a useful feature in your environment, please open an issue on our GitHub repo to let us know.
A configuration may look something like this:
- monitor: ServiceAccountWithSensitiveRole
config:
- role: ring_bearer
role-client: realm
severity: Critical
allowed:
- service-account-frodo # prefix client name with "service-account-" here
note: Only frodo should be allowed to carry the One Ring.
The role
field supports regular expressions, allowing you to capture multiple roles with a single monitor rule, as does the list of allowed
service accounts.
When matching realm roles, put realm
as the role-client
.
When matching client roles (e.g., the manage-users
role of the realm-management
client, which gives access to the user management features), put the name of the client that defines the roles into that field.
This monitor will detect direct role assignments, assignments via composite roles (where the monitored role is part of a composite role, which is then assigned to the service account), and assignments via groups. If you are aware of other ways to assign roles to service accounts, let us know and we will add them as well.
Info
If you want to create comprehensive monitoring for a single role, we recommend combining this monitor with the ClientWithSensitiveRole and GroupWithSensitiveRole monitors to achieve more comprehensive coverage.
ServiceAccountWithGroup
Service accounts are represented as a special type of user in Keycloak. This user can be assigned roles, but also be added to groups and inherit roles and other settings that way. Thus, it can be useful to monitor the group assignments of service accounts as well.
- monitor: ServiceAccountWithGroup
config:
- group: "/admin" # Use the group path, which starts with a slash
severity: Medium
allowed:
- service-account-housekeeping
allow_no_group: true
note: The housekeeping service account should be the only account with this group.
If your policy is that all service accounts must be assigned to a specific group and no other, you can use the allow_no_group
option:
- monitor: ServiceAccountWithGroup
config:
- group: "/(?!ServiceAccount).*"
severity: Medium
allowed: []
allow_no_group: false
note: Service Accounts should be in the /ServiceAccount group, and no other group.
As you can see, the group
field (like the allowed
field) supports regular expressions as well.
Where necessary, you can also directly address subgroups by using their group path, i.e., /group/subgroup
.