-
Notifications
You must be signed in to change notification settings - Fork 20
Add MFA docs and session profiles to new docs structure #710
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+954
−14
Merged
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
600aebb
Add MFA docs and session profiles, adapted to new docs structure
ae95292
add attested stamping docs
moeodeh3 0626c95
update session profile structure
moeodeh3 8cf35c4
cleanup
moeodeh3 c8e4ea5
resolve comment
moeodeh3 c7edf84
address feedback
moeodeh3 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,49 @@ | ||
| --- | ||
| title: "MFA Recovery" | ||
| description: "Learn how to set up recovery mechanisms for MFA policies in case users lose access to their authentication methods." | ||
| sidebarTitle: "Recovery" | ||
| --- | ||
|
|
||
| ## MFA recovery | ||
|
|
||
| If a user can no longer satisfy their MFA requirements (e.g., they lose access to their passkey or phone number), they will be unable to perform any activities that trigger that MFA policy. There is no way to bypass MFA once it is enforced. | ||
|
|
||
| Most applications that support MFA offer a recovery path through customer support (e.g., "contact support to reset your 2FA"). Turnkey cannot do this because Turnkey has no write access to your organizations. Only authenticators within the organization can modify its state. | ||
|
|
||
| By default, there is no MFA recovery mechanism. If your security posture allows it and you want to protect against users locking themselves out, you can set one up using [delegated access (DA) users](/features/policies/delegated-access/overview) that have permission to delete MFA policies on behalf of locked-out users. | ||
|
|
||
| The DA user's policy should be scoped to only allow MFA policy deletion: | ||
|
|
||
| ``` ts | ||
| // Policy condition: only allow deleting MFA policies | ||
| activity.resource == 'MFA_POLICY' && activity.action == 'DELETE' | ||
| ``` | ||
|
|
||
| With this setup, when a user is locked out, you can verify their identity through your own process and then delete the MFA policy using the DA user to restore access. | ||
|
|
||
| ### Quorum-based recovery | ||
|
|
||
| A single DA user with the ability to delete MFA policies is a single point of failure. If that DA user's API key is compromised, an attacker could remove a user's MFA protections entirely. | ||
|
|
||
| To prevent this, you can set up **multiple DA users** for MFA recovery with a consensus policy requiring multiple approvals before an MFA policy can be deleted. This way, no single party can unilaterally remove a user's MFA. | ||
|
|
||
| <Note> | ||
| We recommend having more DA users than required approvals (e.g., 3-4 DA users requiring 2 approvals). If you require all DA users to approve and one loses access, recovery is permanently blocked. | ||
| </Note> | ||
|
|
||
| To set this up: | ||
|
|
||
| 1. Create multiple DA users in the sub-organization, each with an API key controlled by a different party in the parent organization. | ||
| 2. Create a policy scoped to MFA policy deletion with a consensus requirement: | ||
|
|
||
| ``` ts | ||
| // Policy condition | ||
| activity.resource == 'MFA_POLICY' && activity.action == 'DELETE' | ||
| ``` | ||
|
|
||
| ```ts | ||
| // Consensus requirement: at least 2 DA users must approve | ||
| approvers.count() >= 2 | ||
| ``` | ||
|
|
||
| With this configuration, deleting an MFA policy requires at least two DA users to approve the `DeleteMfaPolicy` activity. Even if one DA user's key is compromised, the attacker cannot remove MFA protections alone. And if one DA user loses access, the remaining users can still reach the approval threshold. | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.