This project is mirrored from https://gitee.com/mirrors/nomad.git. Pull mirroring failed .
Repository mirroring has been paused due to too many failed attempts. It can be resumed by a project maintainer.
  1. 11 Jul, 2022 40 commits
    • Tim Gross's avatar
      additional ACL Policy tests (#13464) · 86666ec8
      Tim Gross authored
      This changeset includes some additional unit tests for secure
      variables ACL policies, so that we have explicit coverage of edge
      cases we're discussing with the UI folks.
      86666ec8
    • Tim Gross's avatar
      secure variable server configuration (#13307) · d03fd4b8
      Tim Gross authored
      Add fields for configuring root key garbage collection and automatic
      rotation. Fix the keystore path so that we write to a tempdir when in
      dev mode.
      d03fd4b8
    • Phil Renaud's avatar
      Secure Variables: JSON view (#13439) · d0c98021
      Phil Renaud authored
      * JSON view init
      
      * Overeager config history reverted
      
      * Set as query parameter
      
      * border added to copy button
      
      * More robust stringifyObject helper
      
      * Testing for stringify-object helper
      d0c98021
    • Jai's avatar
      dx: update `canCreate` logic and token generation for secure var dev environment (#13438) · c6d12ef1
      Jai authored
      * ui:  add logic for create permission computed property
      
      * ui:  update token factory and variable ability to simulate create permissions for dev env
      c6d12ef1
    • Phil Renaud's avatar
      Append an empty item when editing an existing Secure Variable (#13436) · 83fbe06e
      Phil Renaud authored
      * Did-insert modifier to add an extra row when editing
      
      * Defensive logic on model existing
      
      * Defensive pattern on copy keyValues
      83fbe06e
    • Phil Renaud's avatar
      Throw an error if you try to save a Secure Variable with no items (#13424) · 5fc980ff
      Phil Renaud authored
      * Error thrown if you have no KVs on save
      
      * Acceptance tests for flash messages and no-key-value adds
      
      * Post-hoc accounting for new variable path routing
      
      * Trim on key before validating it as existing
      5fc980ff
    • Tim Gross's avatar
      core job for key rotation (#13309) · bbef759d
      Tim Gross authored
      Extend the GC job to support periodic key rotation.
      
      Update the GC process to safely support signed workload identity. We
      can't GC any key used to sign a workload identity. Finding which key
      was used to sign every allocation will be expensive, but there are not
      that many keys. This lets us take a conservative approach: find the
      oldest live allocation and ensure that we don't GC any key older than
      that key.
      bbef759d
    • Tim Gross's avatar
      move gossip keyring command to their own subcommands (#13383) · 8c5a669a
      Tim Gross authored
      Move all the gossip keyring and key generation commands under
      `operator gossip keyring` subcommands to align with the new `operator
      secure-variables keyring` subcommands. Deprecate the `operator keyring`
      and `operator keygen` commands.
      8c5a669a
    • Phil Renaud's avatar
      Secure Variables: show file metadata on list pages (#13423) · e938ced2
      Phil Renaud authored
      * Add modified times and namespaces to layout
      
      * Undo typing change
      
      * Post-hoc accounting for new variable path routing
      e938ced2
    • Tim Gross's avatar
      fix blocking query for `Keyring.List` RPC (#13384) · ca300727
      Tim Gross authored
      The blocking query for `Keyring.List` appended the keys for each pass
      through the blocking query to the response. This results in mulitple
      copies of keys in the response. Overwrite the `reply.Keys` field on
      each pass through the blocking query to ensure we only get the
      expected page of responses.
      ca300727
    • Tim Gross's avatar
      secure variables ACL policies (#13294) · 01d19d71
      Tim Gross authored
      Adds a new policy block inside namespaces to control access to secure
      variables on the basis of path, with support for globbing.
      
      Splits out VerifyClaim from ResolveClaim.
      The ServiceRegistration RPC only needs to be able to verify that a
      claim is valid for some allocation in the store; it doesn't care about
      implicit policies or capabilities. Split this out to its own method on
      the server so that the SecureVariables RPC can reuse it as a separate
      step from resolving policies (see next commit).
      
      Support implicit policies based on workload identity
      01d19d71
    • Tim Gross's avatar
      implement Encrypt/Decrypt methods of encrypter (#13375) · 64b38be5
      Tim Gross authored
      The `Encrypt` method generates an appropriately-sized nonce and uses
      that buffer as the prefix for the ciphertext. This keeps the
      ciphertext and nonce together for decryption, and reuses the buffer as
      much as possible without presenting the temptation to reuse the
      cleartext buffer owned by the caller.
      
      We include the key ID as the "additional data" field that's used as an
      extra input to the authentication signature, to provide additional
      protection that a ciphertext originated with that key.
      
      Refactors the locking for the keyring so that the public methods are
      generally (with one commented exception) responsible for taking the
      lock and then inner methods are assumed locked.
      64b38be5
    • Charlie Voiselle's avatar
      Implement HTTP search API for Variables (#13257) · 39dcef84
      Charlie Voiselle authored
      * Add Path only index for SecureVariables
      * Add GetSecureVariablesByPrefix; refactor tests
      * Add search for SecureVariables
      * Add prefix search for secure variables
      39dcef84
    • Jai's avatar
      ui: make eye toggles only toggle on/off for their respective row (#13406) · f060647c
      Jai authored
      * chore:  update tests to handle invidual toggle responsibility
      
      * chore:  prettify secure-variable-form template
      
      * ui:  extract input group markup into seperate component
      f060647c
    • Jai's avatar
      ui: update component api to accept callback fns to be fired on cancel/prompt (#13414) · 89f7b402
      Jai authored
      * ui:  update  component api to accept callback fns to be fired on cancel/prompt
      
      * refact:  cancel callback should fire with outside click handler not on idle
      
      * refact:  rename action to be more specific
      89f7b402
    • Phil Renaud's avatar
      Toast-style global notification state (#13341) · 3bb71d04
      Phil Renaud authored
      * toast style notification init
      
      * Notificatino styles and messaging for variable save
      
      * pre-PR cleanup
      
      * Typo fix and 5sec timeout
      
      * Prevent text from overlapping the close button
      3bb71d04
    • Phil Renaud's avatar
      Path Tree compaction refactor (#13415) · 2e433c8c
      Phil Renaud authored
      * Bones of a just-in-time compaction pathTree
      
      * wooo got compaction going in sub-ms times
      
      * PR cleanup
      
      * Path compaction tests
      
      * lint fix to equal instead of .ok()
      
      * Name prop specifically being equality checked
      2e433c8c
    • Charlie Voiselle's avatar
      Secure Variables: Seperate Encrypted and Decrypted structs (#13355) · 75495f42
      Charlie Voiselle authored
      
      This PR splits SecureVariable into SecureVariableDecrypted and
      SecureVariableEncrypted in order to use the type system to help
      verify that cleartext secret material is not committed to file.
      
      * Make Encrypt function return KeyID
      * Split SecureVariable
      Co-authored-by: default avatarTim Gross <tgross@hashicorp.com>
      75495f42
    • Tim Gross's avatar
      keyring CLI: refactor to use subcommands (#13351) · 5c6ba1cc
      Tim Gross authored
      Split the flag options for the `secure-variables keyring` into their
      own subcommands. The gossip keyring CLI will be similarly refactored
      and the old version will be deprecated.
      5c6ba1cc
    • Phil Renaud's avatar
      Secure Variables form validation improvements (#13335) · b5b310a1
      Phil Renaud authored
      * Validation tests for secure variables form: duplicate path error
      
      * Validation for dot in key name
      
      * Defensive pattern on copy keyValues
      b5b310a1
    • Phil Renaud's avatar
      variable index header and deletion hook (#13302) · c0bad152
      Phil Renaud authored
      * variable index header and deletion hook
      
      * Some visual improvements to edit header and back button
      
      * Mirage fixtures for variables
      
      * Deletion flow test
      
      * Account for disabled state of add-more button
      
      * Transition destination changes after design chat
      
      * Simplified parent folder path by adding to variable model
      
      * Lint cleanup
      
      * test update to reflect path redirect on delete
      
      * No longer have to re-traverse to a deleted var folder after deletion, tests updated
      c0bad152
    • Tim Gross's avatar
      workload identity (#13223) · d3e9b9ac
      Tim Gross authored
      In order to support implicit ACL policies for tasks to get their own
      secrets, each task would need to have its own ACL token. This would
      add extra raft overhead as well as new garbage collection jobs for
      cleaning up task-specific ACL tokens. Instead, Nomad will create a
      workload Identity Claim for each task.
      
      An Identity Claim is a JSON Web Token (JWT) signed by the server’s
      private key and attached to an Allocation at the time a plan is
      applied. The encoded JWT can be submitted as the X-Nomad-Token header
      to replace ACL token secret IDs for the RPCs that support identity
      claims.
      
      Whenever a key is is added to a server’s keyring, it will use the key
      as the seed for a Ed25519 public-private private keypair. That keypair
      will be used for signing the JWT and for verifying the JWT.
      
      This implementation is a ruthlessly minimal approach to support the
      secure variables feature. When a JWT is verified, the allocation ID
      will be checked against the Nomad state store, and non-existent...
      d3e9b9ac
    • Phil Renaud's avatar
      Notify a user if they try to make a variable with an existing path (#13278) · c2856df7
      Phil Renaud authored
      * Notify a user if they try to make a variable with an existing path
      
      * Stylize error fade
      
      * Bugfix: if you click the dupe link to a variable you havent previously loaded, you lack its keyvalues
      
      * rename and typefix for duplicate path warning
      c2856df7
    • Phil Renaud's avatar
      Disable path input when model is not new (#13273) · b556bbc1
      Phil Renaud authored
      * Disable path input when model is not new
      
      * isDisabled tests for secure variables path
      b556bbc1
    • Tim Gross's avatar
      caa02dfc
    • Charlie Voiselle's avatar
      a7522d5c
    • Tim Gross's avatar
      keyring replication (#13167) · 5824b418
      Tim Gross authored
      Replication for the secure variables keyring. Because only key
      metadata is stored in raft, we need to distribute key material
      out-of-band from raft replication. A goroutine runs on each server and
      watches for changes to the `RootKeyMeta`. When a new key is received,
      attempt to fetch the key from the leader. If the leader doesn't have
      the key (which may happen if a key is rotated right before a leader
      transition), try to get the key from any peer.
      5824b418
    • Phil Renaud's avatar
      Secure Variables: Build a path tree and traverse it at /variables/*path (#13202) · 8cf81a9e
      Phil Renaud authored
      * Recursive trie-building with variable paths
      
      * tree structure applied to new path routes and a new util class
      
      * Breadcrumbs for SV paths and prompt when nothing exists at a path
      
      * Lint and test cleanup
      
      * Pre-review cleanup
      
      * lintfix
      
      * Abstracted pathtree each-ins into a new component class
      
      * Path tree component styles
      
      * Types added and PR feedback addressed
      
      * Path tree to variable paths
      
      * Slightly simpler path QP mods
      
      * More pr feedback handling
      
      * Trim moved into a function on variable model
      
      * Traversal and compaction tests for PathTree
      
      * Trim Path tests
      
      * Variable-paths component tests
      
      * Lint fixup for tests
      8cf81a9e
    • Tim Gross's avatar
      core job for root key GC (#13199) · 62ca1746
      Tim Gross authored
      Inactive and unused keys older than a threshold will be periodically
      garbage collected.
      62ca1746
    • Tim Gross's avatar
      remove end-user algorithm selection (#13190) · b69d1bff
      Tim Gross authored
      After internal design review, we decided to remove exposing algorithm
      choice to the end-user for the initial release. We'll solve nonce
      rotation by forcing rotations automatically on key GC (in a core job,
      not included in this changeset). Default to AES-256 GCM for the
      following criteria:
      
      * faster implementation when hardware acceleration is available
      * FIPS compliant
      * implementation in pure go
      * post-quantum resistance
      
      Also fixed a bug in the decoding from keystore and switched to a 
      harder-to-misuse encoding method.
      b69d1bff
    • Tim Gross's avatar
      provide state store query for variables by key ID (#13195) · 73804237
      Tim Gross authored
      The core jobs to garbage collect unused keys and perform full key
      rotations will need to be able to query secure variables by key ID for
      efficiency. Add an index to the state store and associated query
      function and test.
      73804237
    • Tim Gross's avatar
      bootstrap keyring (#13124) · 4c73f984
      Tim Gross authored
      When a server becomes leader, it will check if there are any keys in
      the state store, and create one if there is not. The key metadata will
      be replicated via raft to all followers, who will then get the key
      material via key replication (not implemented in this changeset).
      4c73f984
    • Phil Renaud's avatar
      Secure Variables UI: /variables/new and /variables/*path (#13069) · ca5969ef
      Phil Renaud authored
      * variables.new initialized
      
      * Hacky but savey
      
      * Variable wildcard route and multiple creatable at a time
      
      * multiple KVs per variable
      
      * PR Prep cleanup and lintfix
      
      * Delog
      
      * Data mocking in mirage for variables
      
      * Linting fixes
      
      * Re-implement absent params
      
      * Adapter and model tests
      
      * Moves the path-as-id logic to a serializer instead of adapter
      
      * Classic to serializer and lint cleanup
      
      * Pluralized save button (#13140)
      
      * Autofocus modifier and better Add More button UX (#13145)
      
      * Secure Variables: show/hide functionality when adding new values (#13137)
      
      * Flight Icons added and show hide functionality
      
      * PR cleanup
      
      * Linting cleanup
      
      * Position of icon moved to the right of input
      
      * PR feedback addressed
      
      * Delete button and stylistic changes to show hide
      
      * Hmm, eslint doesnt like jsdoc-usage as only reason for import
      
      * More closely match the button styles and delete test
      
      * Simplified new.js model
      
      * Secure Variables: /variables/*path/edit route and functionality (#13170)
      
      * Variable edit page init
      
      * Significant change to where we house model methods
      
      * Lintfix
      
      * Edit a variable tests
      
      * Remove redundant tests
      
      * Asserts expected
      
      * Mirage factory updated to reflect model state
      ca5969ef
    • Charlie Voiselle's avatar
      Secure Variables: Variables - State store, FSM, RPC (#13098) · ba74aadb
      Charlie Voiselle authored
      
      * Secure Variables: State Store
      * Secure Variables: FSM
      * Secure Variables: RPC
      * Secure Variables: HTTP API
      Co-authored-by: default avatarTim Gross <tgross@hashicorp.com>
      ba74aadb
    • Tim Gross's avatar
      keystore serialization (#13106) · ce8e7f17
      Tim Gross authored
      This changeset implements the keystore serialization/deserialization:
      
      * Adds a JSON serialization extension for the `RootKey` struct, along with a metadata stub. When we serialize RootKey to the on-disk keystore, we want to base64 encode the key material but also exclude any frequently-changing fields which are stored in raft.
      * Implements methods for loading/saving keys to the keystore.
      * Implements methods for restoring the whole keystore from disk.
      * Wires it all up with the `Keyring` RPC handlers and fixes up any fallout on tests.
      ce8e7f17
    • Tim Gross's avatar
      keyring HTTP API (#13077) · 0b0aa3ef
      Tim Gross authored
      0b0aa3ef
    • Tim Gross's avatar
      keyring RPC handlers (#13075) · 1348a76e
      Tim Gross authored
      Implement the upsert, list, delete, and rotate RPC handlers for the
      secure variables keyring. Operations on the keyring itself are still
      stubbed out.
      1348a76e
    • Tim Gross's avatar
      keyring state store operations (#13016) · 233fc631
      Tim Gross authored
      Implement the basic upsert, list, and delete operations for
      `RootKeyMeta` needed by the Keyring RPCs.
      
      This changeset also implements two convenience methods
      `RootKeyMetaByID` and `GetActiveRootKeyMeta` which are useful for
      testing but also will be needed to implement the rest of the RPCs.
      233fc631
    • Phil Renaud's avatar
      Secure Variables UI: Router setup and /variables/index route + guards (#12967) · 7c406382
      Phil Renaud authored
      * Route init
      
      * Bones of a mirage-mocked secure variables policy
      
      * Functinoing policy for list vars
      
      * Delog and transition on route
      
      * Basic guard test
      
      * Page guard tests for secure variables
      
      * Cleanup and unit tests for variables ability
      
      * Linter cleanup
      
      * Set expectations for test assertions
      
      * PR feedback addressed
      
      * Read label changed to View per suggestion
      7c406382
    • Charlie Voiselle's avatar
      Provide mock secure variables implementation (#12980) · 15d6dde2
      Charlie Voiselle authored
      * Add SecureVariable mock
      * Add SecureVariableStub
      * Add SecureVariable Copy and Stub funcs
      15d6dde2