As I have been working on many software projects and teams, I see that sharing credentials among developers is a common thing. Sometimes, developers store credentials in a file where everyone in the team can access them just to streamline the development process. But, I was also wondering how to maintain the security of the software or data managed while the credentials are accessible to everyone. How can we monitor the usage, make sure that no one in the team uses the credentials differently than they're supposed to be, or renew the credentials with ease? Hashicorp Vault is one of the solutions in the market that can answer that question.
There are three main problems that Vault solves.
The first is called secret sprawl where the credentials are spread everywhere to many individuals. Then, it becomes difficult when someone leave the team and we have to renew the existing credentials to secure the access. Vault can provide a mechanism to centralize the credentials storage, provide user authentication engine, and manage the access control. Everytime a user want to get a credential, she have to authenticate her self. When we want to renew the credential, we can set it on the centralised service.
The second problem is about securing credentials for application access. For example, an application needs to access the data in a database. Vault can enable dynamic credentials for the application to access the database. The flow is: first, the application will authenticate itself to Vault. Then, Vault will connect with the target database to generate dynamic credentials for the application. Lastly, Vault will send that dynamically generated credential to the application so that the application can use it to connect with the database.
The third is about managing credentials and performing encryption. Rather than building our own module in the application to perform encryption and properly manage the lifecycle of the credentials, we can leverage Vault to do it. Vault provides API endpoints to do common tasks in data encryption and credentials management.
Vault is developed using plugin-based approach. Each component is deployed as a plugin. There are two main plugin in the Vault which are authentication plugin and secret engine plugin. The authentication plugin allow users or applications to be authenticated by Vault such as username-password, token, Oauth, etc. While, secret engine plugins allow us generate dynamic secrets for a variety of existing services.
Comments
Post a Comment