If you want to store passwords or certificates securely and have them separated from your application code, then Azure Key Vaults are a wonderful option.
You can even set up key vaults so that you can access them without providing a client ID, etc. which makes them ultra secure as you don’t have to provide your credentials in your code or config files.
Creating a Key Vault
To set up a key vault, you just:
- Go to All Services in the portal.
- Search for Key Vault.
- Click create and then provide a name, resource group, and region.
- Remember, all of your resources in Azure have to go into a resource group so they are logically identified and manageable.
When you’re programmatically accessing resources in Azure, you always need a service principal. You can get this by creating an azure App Registration. This is involved, and if you’re doing this you probably already have one. If not though, you can refer to this Microsoft tutorial for creating a service principal.
Assuming you have the principal ready, go into your vault in the portal and click “Access Policies”. In here, you can pick which things you need to manage from a template, then give your service principal name and create.
Remember, after you do this and it shows the created one on the summary page, you STILL have to click “Save” at the top. If you don’t, it’s not really there. When you’re done refresh the web page with F5 to make sure it’s really there.
Adding secrets/passwords is simple. Just click “Secrets” and then the (+) sign and type in your name/value.
Querying Secrets From an Application
This is very language dependent. Microsoft has great tutorials for every language though. Here are two for Python and Java for example:
Managed Service Identity
Now, we still have one problem here. The key vault holds all of our passwords which is great… but we need a service principal (with a password) to access the vault. So, if we leave that in our code or config files, we’re no better off in reality.
The final step is to read up on Managed Service Identities which let you configure a machine to securely talk to a key vault without providing the principal information. This way your code and deployment config is 100% free of any passwords/etc.