← The board

A7 Credential management & rotation

Area
A — Getting started
Audience
operator
Kind
feature
Status
accepted
Maturity
built
Labels
security
Relates to
A3A6C4D1G8

The feature in the specification · Read at

Requirements

  1. A7-R1acceptedMUST

    lemonfiber MUST provide a single inventory of every credential it holds, showing name, consumer, storage location, and validation state.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/credential.rscrates/lemonfiber-core/src/credential/held.rscrates/lemonfiber-core/src/app/credentials/reading.rscrates/lemonfiber/src/render/credentials.rs
    cited by
    lemonfiber@34faf69189lemonfiber@4388b37bfclemonfiber@122972daeb
  2. A7-R2acceptedMUST

    The inventory MUST NOT display credential values.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/credential.rscrates/lemonfiber-core/src/credential/held.rscrates/lemonfiber-core/src/app/credentials/reading.rscrates/lemonfiber/src/render/credentials.rs
    cited by
    lemonfiber@122972daeb
  3. A7-R3acceptedMUST

    Credential values MUST NOT appear in logs, errors, dashboards, diagnostics, or support bundles.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/credential.rscrates/lemonfiber-core/src/credential/held.rscrates/lemonfiber-core/src/app/credentials/reading.rscrates/lemonfiber/src/render/credentials.rs
    cited by
    lemonfiber@a4c7d2dccelemonfiber@866fc172bclemonfiber@14f1111efclemonfiber@1543d54191lemonfiber@e1cb02261alemonfiber@588d3227a1lemonfiber@5b43ec7d1clemonfiber@122972daeblemonfiber@afe3a6b2f8lemonfiber@63f21a5f19lemonfiber@377eeee9b9lemonfiber@1d7aea4ae8lemonfiber@3469d76390lemonfiber@36ce848f93
  4. A7-R4acceptedMUST

    Rotation MUST validate the replacement before destroying the existing value.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/app/credentials/rotating.rscrates/lemonfiber-core/src/credential/rotation.rscrates/lemonfiber-core/src/app/credentials/pending.rscrates/lemonfiber-core/src/app/credentials/resetting.rs
    cited by
    lemonfiber@a4c7d2dccelemonfiber@5540e6a62flemonfiber@0c0d5505ddlemonfiber@4388b37bfclemonfiber@122972daeb
  5. A7-R5acceptedMUST

    On rotation failure, the existing credential MUST remain active and functional.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/app/credentials/rotating.rscrates/lemonfiber-core/src/credential/rotation.rscrates/lemonfiber-core/src/app/credentials/pending.rscrates/lemonfiber-core/src/app/credentials/resetting.rs
    cited by
    lemonfiber@a4c7d2dccelemonfiber@0c0d5505ddlemonfiber@4388b37bfclemonfiber@122972daeb
  6. A7-R6acceptedMUST

    Successful rotation MUST propagate to every consumer and MUST report any consumer that could not be updated.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/app/credentials/rotating.rscrates/lemonfiber-core/src/credential/rotation.rscrates/lemonfiber-core/src/app/credentials/pending.rscrates/lemonfiber-core/src/app/credentials/resetting.rs
    cited by
    lemonfiber@5540e6a62flemonfiber@4388b37bfclemonfiber@122972daeb
  7. A7-R7acceptedMUST

    lemonfiber MUST detect a service-regenerated API key and MUST re-propagate it.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/app/credentials/rotating.rscrates/lemonfiber-core/src/credential/rotation.rscrates/lemonfiber-core/src/app/credentials/pending.rscrates/lemonfiber-core/src/app/credentials/resetting.rs
    cited by
    lemonfiber@5540e6a62flemonfiber@122972daeb
  8. A7-R8acceptedMUST

    Credential files MUST be created with permissions restricting access to the owning user.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/config/store.rscrates/lemonfiber-core/src/doctor/permissions.rs
    cited by
    lemonfiber@dbc5bc238dlemonfiber@b2a1287f6clemonfiber@122972daeb
  9. A7-R9acceptedMUST

    lemonfiber MUST state accurately what its credential storage protects against, and MUST NOT overstate it.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/journal.rscrates/lemonfiber-core/src/app/recover.rscrates/lemonfiber-core/src/config/env.rscrates/lemonfiber-core/src/config/store.rscrates/lemonfiber/src/setup/interrupted.rscrates/lemonfiber/src/setup.rs
    cited by
    lemonfiber@6d343cd1d7lemonfiber@122972daeb
  10. A7-R10acceptedMUST

    Revealing a stored credential MUST be possible, and MUST require explicit confirmation with a warning.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/credential.rscrates/lemonfiber-core/src/credential/held.rscrates/lemonfiber-core/src/app/credentials/reading.rscrates/lemonfiber/src/render/credentials.rs
    cited by
    lemonfiber@122972daeb
  11. A7-R11acceptedMUST

    Stale credentials MUST be surfaced as advisories and MUST NOT be automatically expired.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/credential.rscrates/lemonfiber-core/src/credential/held.rscrates/lemonfiber-core/src/app/credentials/reading.rscrates/lemonfiber/src/render/credentials.rs
    cited by
    lemonfiber@122972daeb
  12. A7-R12acceptedMUST

    Backups containing credentials MUST be labelled as sensitive at creation time.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/secret.rscrates/lemonfiber-core/src/seed/services.rscrates/lemonfiber-core/src/seed/run/clients.rscrates/lemonfiber-core/src/backup.rs
    cited by
    lemonfiber@122972daeb
  13. A7-R13acceptedMUST

    Over-permissive credential file permissions MUST be reported as a diagnostic finding with a remedy.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/config/store.rscrates/lemonfiber-core/src/doctor/permissions.rs
    cited by
    lemonfiber@122972daeb
  14. A7-R14acceptedMUST

    Where a service mints only a temporary credential, lemonfiber MUST generate a durable replacement, set it on the service, and record it for its consumers. The operator MUST NOT be required to handle it.

    locked by
    0.13.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/secret.rscrates/lemonfiber-core/src/seed/services.rscrates/lemonfiber-core/src/seed/run/clients.rscrates/lemonfiber-core/src/backup.rs
    cited by
    lemonfiber@a4c7d2dccelemonfiber@122972daeb
  15. A7-R15acceptedMUST

    Where an installed plugin consumes a credential lemonfiber rotates, that plugin MUST be among the consumers rotation propagates to, and one that could not be updated MUST be named in the report like any other.

    locked by
    0.18.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/app/credentials.rscrates/lemonfiber-core/src/settings/run.rscrates/lemonfiber-core/src/settings/files.rscrates/lemonfiber-core/tests/integration/credential_inventory/republishing.rs::a_key_handed_out_again_reaches_the_plugin_that_reads_itcrates/lemonfiber-core/src/settings/tests/reaching.rs::replacing_a_crossing_credential_regenerates_and_restarts_what_reads_itcrates/lemonfiber-core/src/settings/tests/reaching.rs::a_reader_the_engine_would_not_recreate_is_named_as_not_reachedcrates/lemonfiber-core/src/settings/tests/reaching.rs::a_secrets_file_that_cannot_be_written_is_named_and_nothing_restarts
    cited by
    lemonfiber@e2005b9828