qualify
Train and qualify users before granting data access.
Completion writes attest:* IAM role tags that attest's
Cedar policies evaluate in real time β no training, no access.
How it works
qualify is the people layer of the Provabl suite. It sits between identity and access β training completion is the gate.
User completes training
User works through the required modules for their data type and project. qualify tracks completion, scores, and timestamps per module.
qualify writes IAM tags
On completion, qualify writes attest:* tags to the user's IAM role. Tags include completion status, expiry timestamp, and lab identifier.
# Tags written by qualify on CUI training completion:
attest:cui-training=true
attest:cui-training-expiry=2027-04-29T00:00:00Z
attest:lab-id=chen-quantum-lab
attest Cedar PDP re-evaluates
attest's continuous Cedar PDP reads the IAM tags as principal attributes. The next API call from that principal is evaluated against the updated policy β access is granted automatically.
# Cedar policy in attest (compiled from framework):
permit(
principal,
action == Action::"s3:GetObject",
resource in ResourceGroup::"cui-data"
)
when {
principal.CUITrainingCurrent == true &&
principal.CUITrainingExpiry > context.now
};
Expiry tracked automatically
Training expires per module (typically annual). qualify sends renewal reminders; attest's calendar surfaces approaching expiry. When a tag expires, Cedar denies access automatically.
Training modules
Each module maps to one or more compliance frameworks. Completion writes the corresponding IAM tags.
Controlled Unclassified Information
Required for CMMC Level 2. Covers CUI categories, handling requirements, marking, and safeguarding obligations under 32 CFR Part 2002.
HIPAA Security & Privacy
Required for PHI access. Covers the HIPAA Security Rule, minimum necessary standard, breach notification, and workforce training obligations.
FERPA
Required for student record access. Covers education records, disclosure limitations, legitimate educational interest, and de-identification requirements.
ITAR / Export Controls
Required for DoD-funded research with foreign nationals or controlled technical data. Covers deemed exports, Technology Control Plans, and EAR/ITAR distinctions.
Data Classification
Institutional data classification framework. Covers identifying data sensitivity levels, handling requirements per classification, and proper storage and transmission controls.
Research Security
Required by NIH NOT-OD-26-017 for all key personnel on NIH-funded projects. Covers foreign influence disclosure, research integrity, and institutional reporting obligations.
Security Awareness
Annual security awareness training satisfying CMMC Practice AC.1.001 and general workforce training requirements across HIPAA, NIST 800-171, and institutional policy.
IAM tag contract
qualify writes these tags. attest reads them. Neither side needs to know how the other works β the tag namespace is the full interface.
# Training completion (bool string)
attest:cui-training = "true" | "false"
attest:hipaa-training = "true" | "false"
attest:awareness-training = "true" | "false"
attest:ferpa-training = "true" | "false"
attest:itar-training = "true" | "false"
attest:data-class-training = "true" | "false"
attest:research-security-training = "true" | "false"
# Expiry timestamps (RFC3339)
attest:cui-training-expiry = "2027-04-29T00:00:00Z"
attest:hipaa-training-expiry = "2027-04-29T00:00:00Z"
attest:awareness-training-expiry = "2027-04-29T00:00:00Z"
# Identity
attest:lab-id = "<lab-identifier>"
attest:admin-level = "none" | "env" | "sre"
Full contract spec: attest/docs/integrations/qualify.md
CLI training
The qualify CLI delivers training modules directly in the terminal β no browser required. Users complete modules, pass quizzes, and receive IAM tag writes from the command line. A polished web-based interface is available as an institutional subscription.
Check required training
qualify train status
Training status for alice@mru.edu
cui-fundamentals β required (CUI data access requires this)
hipaa-privacy-security β required
nih-research-security β required (NIH funding)
security-awareness β required (annual)
Start a module
qualify train start cui-fundamentals
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Controlled Unclassified Information (CUI) β Section 1 of 3: What is CUI?
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CUI is information the Government creates or possesses that requires
safeguarding consistent with applicable laws and regulations...
[Press Enter to continue β 'q' to save and quit]
Complete the quiz
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Quiz: 5 questions, 80% to pass
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Q3: A contract deliverable with a DoD clause contains export-
controlled technical data. How should it be handled?
1) Share via email as a PDF attachment
2) Store in CUI-designated S3 environment with access logging
3) Post to a public GitHub repository (technical reports are OK)
4) Save to personal OneDrive for convenience
Answer [1-4]: 2
β Correct. CUI must be stored in an authorized enclave.
IAM tags written automatically
Score: 4/5 (80%) β PASSED β
IAM tags written:
attest:cui-training = true
attest:cui-training-expiry = <1 year from now>
Cedar PDP will grant CUI data access on the next request.
Next up: qualify train start security-awareness
qualify train status
cui-fundamentals β current expires 2027-05-01
hipaa-privacy-security β required
Core commands
qualify onboard --email <email> --lab-id <id> # full guided onboarding (role + training + lab)
qualify onboard --email <email> --dry-run # preview what would be configured
qualify train required # modules required for active attest frameworks
qualify train required --framework hipaa nih-gds # check specific frameworks offline
qualify train list # all available modules
qualify train start <module-id> # begin or resume a module
qualify train status # current training completion state
qualify train status --user <email> # admin: check any user
qualify lab setup --user <email> --lab-id <id> # assign user to lab
qualify lab register-role --user <email> --role-arn <arn>
Open core boundary
- CLI (open source): terminal training, IAM tag writes, lab setup β everything an SRE admin needs. Fully functional.
- Web UI (institutional subscription): browser-based guided experience, progress dashboards, LMS integration (Canvas, Blackboard), SSO (Shibboleth, Okta), compliance reporting, and expert-validated content updates as regulations change.
Institutional LDAP integration
qualify can read attributes directly from your institution's LDAP / Active Directory, automating lab membership assignment and β critically β US person determination for ITAR export control compliance.
What LDAP provides
attest's principal resolver has a built-in LDAP source that queries your directory
at Cedar evaluation time. It reads group membership (memberOf) to
automatically populate lab assignments and admin levels β no manual
qualify lab setup needed for institutions with well-structured directories.
It can also read custom attributes for citizenship and residency status.
# Configure the LDAP source in .attest/sre.yaml
principal_sources:
- type: ldap
url: "ldap://directory.university.edu:389"
base_dn: "dc=university,dc=edu"
bind_dn: "cn=attest-svc,ou=serviceaccounts,dc=university,dc=edu"
bind_pass_env: LDAP_BIND_PASS # read from environment variable
# Groups mapped automatically:
# lab-* β principal.LabMembership
# research-* β principal.LabMembership
# admin-* β principal.AdminLevel = "env"
ITAR: US person determination
ITAR (International Traffic in Arms Regulations) prohibits sharing controlled technical data with non-US persons β including on US soil (deemed exports). A US person is a US citizen, lawful permanent resident (LPR / green card), or protected individual. The determination is based on immigration status, not nationality or employer.
Many institutions store this in their HR/identity directory. The LDAP source
can read these attributes and write the attest:country IAM tag
that attest's Cedar policy evaluates before granting access to ITAR-scoped resources.
# Attributes vary by institution β common patterns:
# Option A: custom boolean attributes
usCitizen: TRUE
permanentResident: TRUE
# Option B: employment authorization field
employmentEligibility: "USCitizen"
employmentEligibility: "LPR"
employmentEligibility: "OPT" # Optional Practical Training β non-US person
employmentEligibility: "H1B" # H-1B visa β non-US person
employmentEligibility: "J1" # J-1 Exchange Visitor β non-US person
# Option C: country of citizenship
citizenshipCountry: "US"
citizenshipCountry: "CN" # β denied ITAR + NIH countries-of-concern
# The LDAP source maps these to attest:country IAM tag
# US citizen or LPR β attest:country = "US"
# Otherwise β attest:country = <ISO 3166-1 alpha-2>
How Cedar enforces it
Once attest:country is set on the user's IAM role (either
via LDAP or manually with qualify lab setup), attest's Cedar PDP
evaluates it against the ITAR and NIH GDS frameworks at every API call:
# Cedar policy compiled from itar framework:
forbid (principal, action, resource)
when {
resource.itar_controlled == true &&
!(principal.institutional_affiliation_country == "US")
};
# Cedar policy compiled from nih-gds framework (NOT-OD-25-083):
forbid (principal, action, resource)
when {
resource.nih_controlled_access == true &&
principal.institutional_affiliation_country in
["CN", "RU", "IR", "KP", "CU", "VE"]
};
Important distinctions
- ITAR checks citizenship/immigration status β not nationality or country of origin. A user born in Germany who is a US citizen is a US person. An H-1B user from Canada is not.
- NIH countries-of-concern checks institutional affiliation β per NOT-OD-25-083, the restriction applies to the user's institutional affiliation country, not their citizenship. A US citizen at Peking University may be subject to this restriction.
- These are separate attributes β
attest:countrycovers both, but the Cedar policies evaluate them with different semantics depending on the framework. - Export Control office review required β LDAP-based determination is a first-pass screen. Your institution's Export Control office must review before granting or denying access to ITAR-controlled research.
See also: attest ITAR framework Β· qualifyβattest integration contract
Lab setup commands
Identity attributes (attest:lab-id and attest:admin-level) are set during lab onboarding, not on training completion.
# Register a user's IAM role ARN first
qualify lab register-role \
--user alice@mru.edu \
--role-arn arn:aws:iam::123456789012:role/user-alice
# Assign to a lab and set admin level
qualify lab setup \
--user alice@mru.edu \
--lab-id chen-quantum-lab \
--admin-level none # none | env | sre
# Result: two IAM role tags written immediately
# attest:lab-id=chen-quantum-lab
# attest:admin-level=none
Admin levels: none (user, no admin access), env (environment admin), sre (SRE admin β phishing-resistant MFA required)