Skip to content
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

Support secure retrieval of arbitrary secrets #541

Closed
glennmatthews opened this issue Jun 8, 2021 · 3 comments
Closed

Support secure retrieval of arbitrary secrets #541

glennmatthews opened this issue Jun 8, 2021 · 3 comments
Assignees
Labels
type: feature Introduction of new or enhanced functionality to the application
Milestone

Comments

@glennmatthews
Copy link
Contributor

glennmatthews commented Jun 8, 2021

Environment

  • Python version:
  • Nautobot version: 1.0.2

Proposed Functionality

Nautobot needs a supported set of UI and APIs for working with secrets (Git tokens, device credentials, OAuth2 parameters, SSoT integration credentials, etc.). This would include defining arbitrary secrets and providing their values, storing these secrets securely, and programmatically retrieving specific secrets as required.

Ideally we’d have a recommended deployment solution (possibly Hashicorp Vault or AWS Secrets Manager?) but provide a pattern or generic API capable of extension to integrate with other options, including (read-only) secrets provided as simple environment variables.

Use Cases

As Austin the NAE, I want to write a Job that connects directly to specific devices, for which the login credentials are already securely stored elsewhere, so that I can create network automation within Nautobot.

As Nelly the Network Engineer, I want to be able to store device login credentials securely such that Jobs can make use of them but lower-privileged users such as Ozzie the Operator are not able to retrieve and view these secrets.

As Ozzie the Operator, I want to execute Jobs against arbitrary devices without needing to manually provide (or even know!) the login credentials to those devices, so that I can perform my day-to-day network engineering tasks.

As P.D. the Plugin Developer, I want to define a set of required secrets which an admin user can provide values for, and an API for retrieving these secrets when required, so that I can develop a plugin that integrates Nautobot with an external system (e.g. Git, ServiceNow, AWS, GMail via OAuth2, etc.) that has its own authentication requirements.

As Patti the Platform Admin, I want to ensure that secrets are securely stored in an existing "blessed" secrets management system, so that I don't need to specifically audit Nautobot's secrets storage implementation.

Database Changes

Ideally we should NOT store secrets in Nautobot's own database (this would include replacing the current in-DB storage of Git tokens for Git repos, and probably removing our dependency on django-cryptography altogether) but store them in one of several secure third-party solutions such as Hashicorp Vault or AWS Secrets Manager.

External Dependencies

Probably - some possibilities worth investigating include:

@glennmatthews glennmatthews added the type: feature Introduction of new or enhanced functionality to the application label Jun 8, 2021
@nniehoff
Copy link
Contributor

nniehoff commented Jun 8, 2021

It would be cool if this could be easily integrated with Hashicorp Vault as well

@itdependsnetworks
Copy link
Contributor

Does it make sense for this to allow user provided @ run time secrets? I could envision a system where the you could store or select "prompt user".

@glennmatthews
Copy link
Contributor Author

See #868

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 14, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
type: feature Introduction of new or enhanced functionality to the application
Projects
None yet
Development

No branches or pull requests

4 participants