BitLocker Management

Athena manages BitLocker drive encryption on your Windows endpoints. It shows every machine's encrypted volumes and stores each machine's recovery passwords automatically. An operator can reveal a recovery password with a reason, and every reveal is audited. You define encryption policies, assign them to agents, collections or tags, and turn on enforcement to have agents encrypt their OS drive. Athena can also rotate recovery passwords on a schedule and publish a Compliance baseline. Recovery passwords are stored on your own Athena server, so all of this works on an air-gapped network.

Scope
  • Windows agents only. Linux agents do not report BitLocker. For Macs, see FileVault Recovery-Key Escrow, which is included in the same licence.
  • Operating-system and fixed data volumes only. Removable drives (USB sticks, external disks) are never reported or managed.
  • A licensed module. Your licence must include the BitLocker module. Without it, nothing is sent to agents, and the BitLocker REST endpoints return 403. See Separately licensed modules.
  • Enforcement is off by default. Until you turn it on, Athena only reports, escrows keys and shows what policies would do. It changes nothing on any machine.

Where BitLocker appears#

Permissions

BitLocker has five permissions. The built-in Admin role has all of them. View BitLocker and Reveal BitLocker startup PINs are also given to the built-in Helpdesk and Operator roles, so help-desk staff can open the BitLocker tabs and read a machine's startup PIN to a user at the pre-boot prompt. Manage BitLocker is also given to Operator, so operators can change policies. Revealing recovery passwords and Decrypt stay Admin-only by default. Roles can't be edited in this release, so to give someone a permission, give them a role that holds it. See Roles & Permissions.

PermissionKeyDefault rolesAllows
View BitLockerbitlocker.viewHelpdesk, Operator, AdminSee volume status, escrow status (never the key), policies, effective policy, sync state, which startup PIN applies (never the PIN), fleet summary and module settings.
Manage BitLockerbitlocker.manageOperator, AdminEdit policies, assignments and per-agent overrides (except Decrypt). Also refresh an agent, re-evaluate, set, clear and push startup PINs, rotate keys, and change the enforcement, rotation and compliance settings. Viewing assignments also requires this permission.
Reveal BitLocker recovery keysbitlocker.revealAdminReveal an escrowed recovery password. A reason is required and every reveal is audited.
Reveal BitLocker startup PINsbitlocker.pin.revealHelpdesk, Operator, AdminShow a stored TPM + PIN startup PIN (a policy PIN or a device override). Every reveal is audited. See Revealing a startup PIN.
Decrypt BitLocker volumesbitlocker.decryptAdminSet an agent's Decrypt override. This also needs Manage BitLocker. It is a separate permission, so being allowed to edit policies never means being allowed to remove a machine's encryption.

Volume inventory#

Each Windows agent reports its OS and fixed data volumes every time it connects to the server, and continuously while someone has its BitLocker tab open (see Live updates while the tab is open). To ask a connected agent for a fresh report, click the refresh button on its BitLocker tab (Request current BitLocker volume status from this agent). If the agent is offline, the tab says so and keeps showing the last report it received. For each volume the tab shows:

A machine is BitLocker capable only when BitLocker is available on it and it has a TPM. A Windows edition without BitLocker, or a machine without a TPM (many virtual machines), is Not capable. Athena never sends an encryption request to a Not capable machine, and those machines are never counted as drift. If a collection fails, the tab shows Last collection failed: with the error and time.

Live updates while the tab is open

You don't need to reload the page to watch an encryption or decryption. While an agent's BitLocker tab is open, Athena switches that agent into live mode:

The refresh button still works as before: it asks the agent for a report now. The toast says "Status requested. The tab updates as soon as the agent answers." and the tab updates when the answer arrives. If the agent is not connected you see "This agent is not connected. Showing the latest available report."

Requirements

Live updates need Windows agent version 1.2.112 or later and a license that includes the BitLocker module. An older agent still reports when it connects and when you click refresh, but the tab won't move by itself. To update agents, see Agent Binaries & Updates.

Recovery-key escrow#

Whenever an agent connects, it also sends the recovery passwords (the 48-digit numerical passwords) of every recovery-password protector on its OS and fixed volumes. The server stores each one encrypted. This escrow happens whether enforcement is on or off. It also happens after Athena enables BitLocker or rotates a key. Recovery passwords are never written to logs or audit entries.

The Recovery keys section of the agent's BitLocker tab lists each escrowed protector with its Escrowed: date and Last verified: date. Last verified updates each time the agent reports the same protector again. When an agent's full check-in no longer includes a protector (for example, someone removed it on the machine), Athena deletes its stored key. A volume with nothing escrowed shows No recovery key escrowed.

Keys are grouped by drive letter, newest first. The Reveal button for a volume's current (newest) key sits on the drive-letter row. Older keys that are still escrowed keep their own Reveal on their own line. The rotate-key icon on the Recovery keys title row starts a rotation.

Escrowed keys depend on the server's certificate authority

Recovery passwords are encrypted with key material from your Athena server's own certificate authority. If that CA changes (for example, you restore the database onto a server with a different CA), a reveal fails with "The stored recovery key could not be decrypted." Back up the server's PKI together with the database. See Certificates & PKI and Data Directories & Backup.

Revealing a recovery password

  1. Open the agent's BitLocker tab and click Reveal next to the protector.
  2. Enter a Reason, for example a help-desk ticket number. It must have at least 3 visible characters (INC-1 passes, ok does not). Only the first 500 characters are kept.
  3. Click Reveal key. The recovery password appears with a Copy button. It hides automatically after 30 seconds.

The bitlocker.key-revealed audit entry is written before the key is shown. It records who, which agent, volume and protector, and the reason, but never the password itself. If the audit entry cannot be written, the key is withheld. Refused reveals (no reason, no escrowed key, a key that cannot be decrypted) are audited as bitlocker.key-reveal-failed. The REST response carrying a key is marked Cache-Control: no-store.

Policies#

A policy describes the BitLocker state you want. Create one in Policies → BitLocker → Policies → New policy.

FieldValuesNotes
NameUp to 100 charactersRequired. Unique, case-insensitive (Corp and corp are the same name).
DescriptionUp to 500 charactersOptional.
EnabledOn / offA disabled policy is skipped during assignment matching (see below).
Encryption methodXTS-AES 128, XTS-AES 256Used when Athena enables BitLocker.
Encryption scopeFull volume, Used space onlyUsed when Athena enables BitLocker.
OS drive protectorTPM, TPM + PINTPM + PIN needs a startup PIN (see TPM + PIN startup PINs).
Startup PIN / Confirm startup PIN6 to 20 digitsShown only for TPM + PIN. Optional. The policy PIN, stored encrypted. When editing a policy that already has a PIN, leave both fields blank to keep it, or tick Remove the stored PIN. The policy list shows PIN stored next to the protector.
Require the recovery key to be escrowed before encryption startsOn / offShown in the list as Escrow before enable. When on, the agent does not start encryption (or resume suspended protection) until the server confirms it has stored the recovery password.

Deleting a policy also removes its assignments.

Assignments and priority

An assignment links a policy to a target: an Agent, a Collection or a Tag. Assignments are evaluated top to bottom - the first assignment whose target contains the agent wins, like firewall rules. A new assignment goes to the bottom (lowest priority). Use the Raise priority and Lower priority arrows to reorder.

Per-agent overrides

On an agent's BitLocker tab, the Effective policy panel shows the policy that applies and which assignment it comes from (via collection …, via tag … or via this agent). The Override control changes that for one agent. You can add an optional reason, and every change is audited.

OverrideEffect
InheritNo override: the first matching assignment decides.
OnEnforce the policy of the first matching assignment. With no matching assignment there is nothing to enforce. An override never has a policy of its own.
OffDo not enforce anything on this agent. Off never decrypts: an encrypted machine stays encrypted.
DecryptThe only way to ask Athena to remove BitLocker. It applies to one agent and is never available in a policy. It needs the Decrypt BitLocker volumes permission, and you must type the agent's hostname to confirm. It is audited as a Warning.

Enforcement#

The Enforcement switch on Policies → BitLocker is off by default. While it is off, "policies are evaluated and shown, but nothing is sent to any agent". An agent's Enforcement panel then shows the state Athena would send. Turning it on evaluates every connected agent immediately. From then on, an agent is evaluated:

Automatic triggers do not resend a desired state the agent has already answered. So agents that reported Drift, Failed or Suspended are retried only by Re-evaluate or by the BitLocker Enforcement task. Schedule that task in the Scheduler; every 60 minutes is recommended. See Scheduled Jobs. Turning enforcement off stops all sends, but a conversion already running on a machine continues.

What the agent does

Sync states

StateMeaning
In syncThe machine matches its desired state.
ApplyingA desired state was sent and the machine is converging (for example, encryption in progress).
DriftThe machine differs from the policy and is not being changed automatically, or enforcement is off ("this is what would be sent; nothing was"), or a TPM + PIN PIN is still needed.
SuspendedProtection is suspended for a number of reboots; left untouched.
FailedThe last attempt failed on the agent. The detail gives the reason.
Not capableNo BitLocker or no ready TPM. Never counted as drift.
UnmanagedNo policy applies (or the override is Off).
Not evaluatedThe agent has not been evaluated yet.

Re-evaluate reports what it decided, for example Desired state sent to the agent, Already in sync, The last apply is still converging on the agent, The agent is offline, The agent has not reported its volumes yet, A startup PIN is required or Enforcement is switched off in Settings. Nothing is sent in any of these cases except the first.

The Fleet enforcement summary on the Settings tab counts agents per sync state. It also counts Encrypted, Converting, Unencrypted, Not capable and Escrowed volumes.

From a sync count to the machines#

Each sync-state tile in the Fleet enforcement summary is a link. Hover it to see Show agents in <state>, then click it (or press Enter, or middle-click to open a new tab). The Agents list opens showing only the agents in that state, for example:

/agents?field=Module.bitlocker.SyncStatus&value=Drift

TPM + PIN startup PINs#

With a TPM + PIN policy, users type a startup PIN before Windows boots. Athena needs that PIN when it first enables BitLocker, and it never makes one up. You can store the PIN at two levels:

LevelWhere you set itApplies to
Policy PINPolicies → BitLocker → Policies, the Startup PIN fields of a TPM + PIN policyEvery agent of that policy that has no device override. It is used for machines encrypted from now on; see Push PIN for machines that are already encrypted.
Device overrideThe agent's BitLocker tab, Startup PIN line (or Provide PIN)That one agent. It wins over the policy PIN and is sent to the agent immediately.

For each agent, Athena uses the device override if one is set, otherwise the policy PIN. If neither is set, nothing is sent. The agent stays in Drift with "This policy needs a TPM+PIN startup PIN before BitLocker can be enabled." Saving a policy PIN re-evaluates the fleet, so agents that were waiting for a PIN get it without further action.

A PIN must be 6 to 20 digits (digits only) and is always entered twice. Stored PINs are encrypted in the same way as escrowed recovery passwords, so they have the same dependency on the server's certificate authority (see Recovery-key escrow). A PIN never appears in a list or detail response, a log or an audit entry. It is only sent to the agent that needs it, and a person can see it only through the audited reveal.

The Startup PIN line on an agent

When an agent's effective policy is enforced with TPM + PIN, its BitLocker tab shows a Startup PIN line with the PIN that applies:

Its buttons:

Provide PIN appears in the Enforcement panel only when a TPM + PIN enable is waiting and no PIN is stored. The PIN you enter there is saved as the agent's device override and sent at once, just like Set.

If the line also says "The PIN that applies now has not reached this device yet - it keeps its previous PIN until it receives the new one.", the PIN that applies has changed since the last one sent to this machine. For example, the policy PIN was changed but not pushed, or the agent was offline when you set the override. Use Push PIN or save the override again while the agent is connected.

Changing the PIN on machines already encrypted (Push PIN)

Changing a policy PIN does not change the PIN on machines that are already encrypted. To roll it out to them, click Push PIN next to the policy in Policies → BitLocker → Policies (shown when the policy has a stored PIN; needs Manage BitLocker) and confirm Push the policy PIN? Athena sends the PIN to every agent that:

Each of those agents changes its existing TPM + PIN protector's PIN in place, so the machine always keeps a TPM protector. The result reads PIN sent to N of M encrypted agent(s). Offline agents are not queued. Push again when they are back online. Changing the PIN on an already-encrypted machine needs Windows agent 1.2.103 or later.

Removing a policy PIN (Remove the stored PIN) does not touch encrypted machines: they keep their current PIN, and new TPM + PIN machines wait for a PIN again.

Revealing a startup PIN

Users with Reveal BitLocker startup PINs see a Show button on the agent's Startup PIN line and next to PIN stored in the policy list. The dialog warns "Showing a PIN is recorded in the audit log with your name." Nothing is decrypted until you click Show PIN. The PIN then appears with a Copy button and hides automatically after 30 seconds. When the dialog hides or closes, Athena tries to clear a PIN you copied from it off the clipboard.

On an agent, the reveal shows the PIN last sent to that machine. If Athena doesn't know that PIN, it shows the PIN that applies now (the override, otherwise the policy PIN). No reason is asked for, unlike a recovery-password reveal. The bitlocker.pin-revealed audit entry (Warning) is written before the PIN is shown. If it cannot be written, the PIN is withheld.

Other TPM + PIN rules

Recovery-password rotation#

Athena can replace recovery passwords, for example after one has been revealed. Rotation only touches recovery-password protectors. It never changes encryption, protection or the TPM / TPM + PIN protectors. For each volume:

  1. the agent adds a new recovery password;
  2. it escrows the new password to Athena;
  3. it removes the old password only after Athena confirms the new one is stored.

If the confirmation doesn't arrive, the old password stays and the new, unconfirmed one is removed again. The volume always keeps an escrowed key. Until the rotation result arrives, the old key stays revealable in Athena.

Each escrowed key shows its Age: N days. While rotation is on, a volume's newest key that is older than the interval is also marked Stale.

Compliance baseline#

Policies → BitLocker → Compliance baseline → Create baseline adds a detection-only baseline named BitLocker to Compliance. It has one Windows rule, BitLocker - OS drive protected, which passes only when the OS drive's protection status is On. The baseline is assigned to a dynamic collection named BitLocker capable (agents whose BitLocker readiness is Capable) and evaluated every 60 minutes. It has no remediation and changes nothing on agents.

Compliance shows the baseline as Managed by BitLocker; edits made there are overwritten. Remove baseline deletes the baseline and its results. If an operator-created baseline or collection already uses one of these names, creation is refused and nothing half-built is kept.

Filter fields#

BitLocker data is available as filter fields in dynamic collections, tagging rules, monitors and reports. For example, Module.bitlocker.OsDriveEncrypted equals false builds a collection of machines whose OS drive is not encrypted yet. An agent that has never reported has no value for any of these fields.

LabelField pathType / meaning
BitLocker OS Drive ProtectionModule.bitlocker.ProtectionStatusOn, Off or Unknown (OS volume)
BitLocker OS Drive Encryption MethodModule.bitlocker.EncryptionMethodString, for example XtsAes256 (OS volume)
BitLocker OS Drive EncryptedModule.bitlocker.OsDriveEncryptedBoolean: true only when the OS volume is Fully encrypted (a volume still converting is false)
BitLocker Any Unencrypted Fixed DriveModule.bitlocker.AnyUnencryptedFixedBoolean: true when any fixed data volume is not fully encrypted
BitLocker ReadinessModule.bitlocker.ReadinessCapable or NotCapable

Audit events#

BitLocker writes these event types to the audit log, and they are forwarded to your SIEM with the rest. No entry ever contains a recovery password or a PIN.

Event typeWritten when
bitlocker.key-escrowedA recovery password was stored for the first time.
bitlocker.key-revealedAn operator revealed a recovery password (Warning; user, agent, volume, protector, reason).
bitlocker.key-reveal-failedA reveal was refused or failed.
bitlocker.policy-changedA policy was created, updated or deleted.
bitlocker.assignment-changedAn assignment was created or deleted, or priorities were reordered.
bitlocker.override-changedAn agent's override was set or cleared (Decrypt is a Warning).
bitlocker.enforcement-appliedA desired state was applied or an agent reported convergence; also records that a PIN was supplied.
bitlocker.enforcement-failedAn apply failed.
bitlocker.decrypt-sentA Decrypt was sent to an agent (Warning).
bitlocker.enforcement-toggledThe enforcement switch was turned on or off (Warning).
bitlocker.key-rotation-requestedA rotation was requested, manually or by the scheduled task.
bitlocker.key-rotatedAn old recovery password was actually retired after its replacement was stored.
bitlocker.key-rotation-failedA rotation failed or was partial; the old password was kept (Warning).
bitlocker.compliance-baseline-changedThe BitLocker compliance baseline was created, updated or removed.
bitlocker.pin-changedA policy PIN or a device PIN override was set, changed or removed (action Set, Change or Clear). The value is never recorded.
bitlocker.pin-revealedSomeone revealed a policy PIN or a device's PIN (Warning; user, policy or agent, and for an agent which PIN was shown). Refused reveals are recorded with the reason.
bitlocker.pin-pushedA policy PIN was pushed to its connected, already-encrypted agents (Warning).

Changes to the enforcement switch, the rotation settings, overrides and startup PINs are audited first. If the audit entry cannot be written, the change is not made.

REST API#

All routes are under /api/bitlocker and use the standard { success, data, message } envelope. Enum values are sent and returned as names (for example "XtsAes256", "Collection"); numbers are rejected. See API Reference for authentication.

Method & routePermissionPurpose
GET /agents/{id}/volumesviewLast reported volumes plus the last failed collection ({ volumes, lastError }).
POST /agents/{id}/refreshmanageAsk the agent to report now. data = whether a connected agent received the request.
GET /agents/{id}/recovery-keysviewEscrow metadata per protector (never the password).
POST /agents/{id}/revealrevealBody { protectorId, reason }. Returns the recovery password. 400 no/short reason, 404 no escrowed key, 500 cannot decrypt or cannot audit.
GET /policiesviewList policies.
POST /policies · PUT /policies/{id}manageCreate / replace a policy. 409 on a duplicate name.
DELETE /policies/{id}manageDelete a policy and its assignments.
GET /assignmentsmanageAssignments in priority order.
POST /assignmentsmanageBody { policyId, targetKind, targetKey }; appended last. targetKey is the agent id, the collection id or the tag name.
DELETE /assignments/{id}manageRemove an assignment.
POST /assignments/reordermanageBody { assignmentIds }: every assignment id exactly once, highest priority first (at most 500). All-or-nothing.
GET /agents/{id}/effective-policyviewThe resolved policy, its source and the matched assignment.
PUT /agents/{id}/overridemanage (+ decrypt)Body { mode, reason, confirm, confirmHostname }. mode is On, Off or Decrypt. Decrypt also needs bitlocker.decrypt, confirm: true and confirmHostname equal to the agent's hostname.
DELETE /agents/{id}/overridemanageClear the override (back to Inherit).
GET /agents/{id}/sync-stateviewThe agent's enforcement sync state (null = never evaluated).
GET /fleet-statusviewAgent counts per sync state and volume posture counts.
POST /agents/{id}/applymanageRe-evaluate the agent now; data = the decision (for example Sent, AlreadyInSync, Offline, PinRequired, EnforcementDisabled).
POST /agents/{id}/pinmanageBody { pin } (6–20 digits): a one-time PIN for a single TPM + PIN enable. Never stored. To store a PIN, use pin-override.
GET /agents/{id}/pinviewWhich PIN applies, never the PIN: { source, policyId, policyName, policyHasPin, overrideSetBy, overrideSetAt, deliveryPending }. source is None, Policy or Device.
PUT /agents/{id}/pin-overridemanageBody { pin }. Store the device override and send it to the agent now; data.decision = what that send decided.
DELETE /agents/{id}/pin-overridemanageRemove the device override; the policy PIN (if any) is sent to the agent now. 400 when there is no override.
POST /agents/{id}/pin/revealpin.revealReturns { pin }: the PIN last sent to the machine, otherwise the one that applies now. Audited first.
PUT /policies/{id}/pinmanageBody { pin }. Set or replace the policy PIN. GET /policies reports only hasPin.
DELETE /policies/{id}/pinmanageRemove the policy PIN. 400 when there is none.
POST /policies/{id}/pin/pushmanagePush PIN. data.targeted = matching connected agents, data.sent = PINs actually sent. 400 when the policy has no PIN.
PIN routes return 400 for a PIN that is not 6–20 digits, 404 for an unknown policy or agent (and for a reveal with nothing stored), 403 for a reveal without bitlocker.pin.reveal, and 500 when the audit entry could not be written (nothing was changed, sent or shown).
POST /agents/{id}/rotatemanageRotate now; data = the decision (only Sent means a rotation was started).
GET /settingsviewEnforcement switch, rotation on/off and interval, compliance baseline ids.
PUT /settingsmanageBody { enforcementEnabled?, rotationEnabled?, rotationDays? }. Only the fields you send are changed; rotationDays 1–365.
PUT /compliancemanageBody { enabled }: create or remove the BitLocker compliance baseline. 403 when not licensed, 409 on a name conflict.

For example, to turn enforcement on without touching rotation:

curl -k -X PUT -H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
  -d '{"enforcementEnabled": true}' \
  "https://<server>:8443/api/bitlocker/settings"

Troubleshooting#

SymptomWhat to check
"This agent has not reported its BitLocker volumes yet."The agent has not connected since the module was available, or it is a Linux agent. Click refresh while it is connected.
The encryption percentage doesn't move until you click refreshLive updates need Windows agent 1.2.112 or later and a license that includes the BitLocker module, and the agent must be connected. Update the agent, or use refresh. See Live updates.
The rotate-key icon is greyed outNo recovery key is escrowed for the device yet. An Enforce policy creates and escrows one when it encrypts the OS volume.
Agent shows Not capableBitLocker is not available on that Windows edition, or the machine has no (ready) TPM. Athena will not encrypt it; it is excluded from drift and from the compliance baseline's collection.
Policy assigned but nothing happensEnforcement is off (the agent's panel says "Enforcement is switched off in Settings"), the policy is disabled, a higher-priority assignment matches first, or the override is Off.
Stuck in Drift after an earlier attemptAutomatic triggers don't resend an answered state. Click Re-evaluate, or schedule the BitLocker Enforcement task.
Drift: method or protector differs from the policyAthena never re-encrypts or swaps protectors on an already-encrypted volume. Change it on the machine, or adjust the policy.
Failed with "the server did not acknowledge the recovery key escrow"With Escrow before enable on, the agent waits up to 2 minutes for the server to confirm the key is stored. Check connectivity and that enforcement still applies to the agent, then Re-evaluate.
"The stored recovery key could not be decrypted."The server's CA key material differs from the one used when the key was escrowed. Restore the matching PKI. The agent re-escrows its current keys each time it connects.
Reveal refused: "A reason of at least 3 visible characters is required"Enter a real reason, such as a ticket number.
Agent stays in Drift: "This policy needs a TPM+PIN startup PIN…"No PIN is stored for it. Set a Startup PIN on the policy, or click Provide PIN on the agent.
Users still type the old startup PIN after you changed the policy PINA new policy PIN only applies to machines encrypted from then on. Click Push PIN while those agents are connected. Agents with a device override are not changed by a push.
"The PIN that applies now has not reached this device yet"The agent was offline, or the policy PIN changed after it was encrypted. Push the policy PIN, or save the device override again, while the agent is connected.
No Show button for a PIN, or "You do not have permission to see startup PINs."Your role lacks bitlocker.pin.reveal (held by Helpdesk, Operator and Admin by default). Ask an administrator to give your account one of those roles.
"The stored PIN could not be decrypted."As with recovery keys, the server's CA key material changed since the PIN was stored. Restore the matching PKI, or set the PIN again.