Find Key Vaults in Azure faster.
Named 'Key Vault Explorer' in Microsoft Store.
Visit the releases section to download the application. Still in active development but in a usable state
Key Vault Explorer is a lightweight tool with the idea to simplify finding and accessing secrets (and certificates and keys) stored in Azure Key Vault, providing a interface for aggregating, filtering, and quickly getting secret values. The app was inspired by the original AzureKeyVaultExplorer with the goal to eventually bring some more feature parity but first brining the application to macOS.
- Signing in with a Microsoft Account See how credentials are secured
- Support to selectively include/exclude subscriptions to show resource groups and key vaults in the tree
- Ability to filter subscriptions, resource groups, and key vaults by name
- Saving vaults to "pinned" section in quick access menu and saving selected subscriptions in SQLite
- Copy secrets to the clipboard using Control+C
- Automatic clearing of clipboard values after a set amount of time (configurable up to 60 seconds)
- Viewing details and tags about values
- Filtering and sorting of values
- Viewing last updates and next to expire values
- Downloading and saving .pfx and .cer files
- No telemetry or logs collected
- SQLite Database encryption using DPAPI and KeyChain on Mac
The authentication and credentials storage uses Microsoft.Identity.Client.Extensions.Msal library are encrypted and stored with DPAPI on windows, and the keychain on macOS (you may be prompted multiple times to grant rights). The security is pulled directly from this document: https://github.com/AzureAD/microsoft-authentication-extensions-for-dotnet/wiki/Cross-platform-Token-Cache#configuring-the-token-cache
The SQLite database is encrypted using DPAPI on windows, and on macOS the password in the keychain.
![WinOSDark](https://private-user-images.githubusercontent.com/15821271/354816025-9b26fafb-e2b7-4f03-880c-4653fbcf0903.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zNTQ4MTYwMjUtOWIyNmZhZmItZTJiNy00ZjAzLTg4MGMtNDY1M2ZiY2YwOTAzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBhNTg2ODRiYTNmYjBlNjdkOTFhOWVmMjc5MDlkZjIxM2I5YTAyNzE4ODc1NDFlYTNlOGQ2YWNlMDAyOGVhNmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.fd9ghWV_8505rGPze5gvb8ktLgpx-n291DDYoBBhkek)
![WinOSLight](https://private-user-images.githubusercontent.com/15821271/330607902-1f5e1a5b-1796-43c1-bbd9-1ee60e3deeb0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zMzA2MDc5MDItMWY1ZTFhNWItMTc5Ni00M2MxLWJiZDktMWVlNjBlM2RlZWIwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYyZTQyODUwMDIzMTVhMjJlMDdmMmRkY2FjOWYzMmVkMzI4MDgzY2QyNGMyZmYyMzg1Njc3YWE0OGU2ZGE4MWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.tQfcbHY9Z3YeUA-yyyjz4pNECLZ698NE8fwnY62bBvY)
![MacDark](https://private-user-images.githubusercontent.com/15821271/328372935-365cea71-2a68-4cab-997c-2631922e7bc6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zMjgzNzI5MzUtMzY1Y2VhNzEtMmE2OC00Y2FiLTk5N2MtMjYzMTkyMmU3YmM2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk4NmI4MDZhYTlhNmY4YjhmYTFkYTAzYTU5ZGM3MTgzYzY5ODBkZDM4Zjk2MWNhNjZjMGEyMGNhY2ZiMGNhZDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.FBFrgKBShX06M5Wh92QXbrg_CN3htgRXs2r9hYKIN1M)
![MacLight](https://private-user-images.githubusercontent.com/15821271/328373001-41793cfa-eb01-4954-b062-56072d19d5ea.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zMjgzNzMwMDEtNDE3OTNjZmEtZWIwMS00OTU0LWIwNjItNTYwNzJkMTlkNWVhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE0OWFkMjNiMjkyODFjMzhlYmQ0YjQ1ZDZmZmYzYjNiZTdmMDk3YjA3NGYxMjQ0OTIzOTEyNmNmYThmMzA5MzkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.6yfQvCXpdmE0q9s6zNXLYK7Il04mN__wci5zM6mQHrE)
![linuxDark](https://private-user-images.githubusercontent.com/15821271/356884044-80d7b240-b94c-45e9-9dde-00ef190d4b8e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zNTY4ODQwNDQtODBkN2IyNDAtYjk0Yy00NWU5LTlkZGUtMDBlZjE5MGQ0YjhlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTgxMTVmMDUxMGZlMmNhYzg4YjY1ZDk5NDNlMjBkMjZhMjNlZDExMzQ3ZTU0M2ZmYzYyYTM5NWEzNjQxZWZjMmYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Akv-HQBRqySo5j09m4JK4V1yZK0bzBOuM5MwYOWx5Ao)
![linuxLight](https://private-user-images.githubusercontent.com/15821271/356883886-798511de-1491-4a87-b4ea-613fb25f68b9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zNTY4ODM4ODYtNzk4NTExZGUtMTQ5MS00YTg3LWI0ZWEtNjEzZmIyNWY2OGI5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTIxNjQ5MjhkNGJiYzdlODI5YzhhMzVmYjdlNzI1NGNlMzczNTI4MDk3OTFjODExMjE5NTRjNWI2YTExY2I3YTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.0bYN6MF4Lmp-7eNerJZC-np9YVZ7p1JI570GN3RPMBI)
![Light](https://private-user-images.githubusercontent.com/15821271/354815784-ed0b7919-666d-4f03-a09a-c6763fe2ca1d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zNTQ4MTU3ODQtZWQwYjc5MTktNjY2ZC00ZjAzLWEwOWEtYzY3NjNmZTJjYTFkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTNhNWVlMTczNDAyYzcwYTg3MjkxMDRhZmRmN2U1YzRkZGMyZDJjYjA1NzAwOWNiMTM0MDM3OTE4MzQ1OWM4NDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Oh5DcvgjU7n8I69pt98gOe7i98MqMJ6MrxaMRVs6yqI)
![Light](https://private-user-images.githubusercontent.com/15821271/354815789-87823029-e98d-4f4b-91d3-b7ea78f934ae.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zNTQ4MTU3ODktODc4MjMwMjktZTk4ZC00ZjRiLTkxZDMtYjdlYTc4ZjkzNGFlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThlOGRjMmEyODMyYWViY2IxYzRiZGNiNzRlMDEyZTA2MmZhM2JkODE3Y2ZhZmFiZTQ3ODZmMzc3Zjc2MmU5NGEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Aq9AV-OKY6ZWvvfHIFPV7jlm4S9-1eK1TYIHsPKivjw)
![Light](https://private-user-images.githubusercontent.com/15821271/354815807-d33521b6-effd-4a51-b0c5-161feac56ffe.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zNTQ4MTU4MDctZDMzNTIxYjYtZWZmZC00YTUxLWIwYzUtMTYxZmVhYzU2ZmZlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTNkYTkxNDU5N2UzMmY2OTRjMGY5ZWM1YmY5NjgwY2QwYWJmMmZiMTFkZjQ1YjUzYjY3MGI0MjE1NmM3MjI2Y2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.hVK-3G9L_J2cYTgU1JbnLv7wotSnPVV8msgRoEjdGOg)
![Light](https://private-user-images.githubusercontent.com/15821271/354815843-ec1c614d-5de1-47c4-97ce-20c0246690ea.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYwOTE3NDMsIm5iZiI6MTcyNjA5MTQ0MywicGF0aCI6Ii8xNTgyMTI3MS8zNTQ4MTU4NDMtZWMxYzYxNGQtNWRlMS00N2M0LTk3Y2UtMjBjMDI0NjY5MGVhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTExVDIxNTA0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZmOWE2YTRiNTA1NjYwMTUzZDAzOTRlZDBkZDQwYWE4NTgxNTYxZmY5MGZkNmViNDNjZGU0ZWM4MWUxZDM3NmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.RC0s-7JrYOpJXpTYmGS7iInM4gxH2NAJxeRRboFjQeM)
You will need the latest version of the .NET 8 SDK, and Visual Studio 2022 (this can be downloaded from the Microsoft Store).
Clone the project, open the .\AzureKeyVaultExplorer
directory and open the solution file called "kv.sln" or "kv.slnx".
Get it from the Microsoft store!
Please follow this Microsoft learn article if you encounter this error: https://learn.microsoft.com/en-us/answers/questions/1393470/azure-enterprise-apps-missing-a-permission-listed
Your Azure tenant global admin will have to consent via this URL:https://login.microsoftonline.com/{the id of your customer tenant}/adminconsent?client_id={client id}
You can also download from the release section for exe and macOS versions: https://github.com/cricketthomas/AzureKeyVaultExplorer/releases
If downloaded from this section, you will need to follow this guide to run the app: #67 (comment)
Install the latest .NET 8 SDK: https://dotnet.microsoft.com/en-us/download/dotnet
-
Open PowerShell 7+ (on windows, Linux and mac, or zsh on mac)
-
cd c:\repos
(choose the folder of your choice) -
git clone https://github.com/cricketthomas/AzureKeyVaultExplorer.git
(to clone/download the sources) -
cd AzureKeyVaultExplorer
(to get into the freshly cloned repo) -
.\build.ps1 -RunBuild -Platform net8.0 -Runtime win-x64
(other platforms include win-arm64, osx-x64, osx-arm64, linux-x64). To build a self contained.exe
please run.\build.ps1 -Runtime win-x64 -PublishAot:$false
, you can ignore the.pdb
files.
If you get an error message stating "Platform linker not found" when building on Windows, please ensure you have all the required prerequisites documented at https://aka.ms/nativeaot-prerequisites, in particular the Desktop Development for C++ workload in Visual Studio.
Open the Visual Studio Installer, Modify, install Desktop Development for C++
For ARM64 development also install C++ ARM64 build tools.
Repeat step 5. The build starts and might take a couple of minutes. The final output looks something like this: Desktop -> C:\Repos\AzureKeyVaultExplorer\publish\
-
Open that folder in Windows Explorer and run
keyvaultexplorerdesktop.exe
. On macOS, aKey Vault Explorer.app
mac os package will be generated in the publish directory. Move this to "Applications", you will have to force open the app using System Preferences, and click "Open anyway". -
It will launch your default browser window and prompt you to login and grant consent.
The app is now verified as I am member of the Microsoft Partner Program.
When you run it for the first time, it creates an enterprise application in your tenant.
Please contact your Azure tenant admin to make sure the application has been consented for use.
Otherwise you will get an error message, see the "First time installs in Azure Tenant:" section
Alternatively, you create an enterprise application with the following permissions, then you can modify the clientId in the Constants.cs
file to your newly created app that is hosted in your own tenant.
Thank you to reddit user AzureToujours for helping with the readme.
The folder where all app associated data like the database and other encrypted files is /Users/YOUR_USER_NAME/Library/Application Support/KeyVaultExplorer/
on macOS
and C:\Users\YOUR_USER_NAME\AppData\Local\KeyVaultExplorer
on Windows.
If you're facing trouble, I recommend deleting all files in the directory. On macOS, i also recommend opening the key chain and deleting everything that begins with "keyvaultexplorer_".
When downloading on windows, you may have to click properties on the exe/application file and check the "unblock" checkbox to allow running the application on the machine if you get a messages saying the app needs another app from the microsoft store to download.
Accepting PRs, suggestions, code reviews, feature requests and more. This is my first time using AvaloniaUI and building a desktop application so all feedback is welcome.
- .NET 8
- Avalonia
- FluentAvalonia
- Azure.ResourceManager.KeyVault
- Azure.Security.KeyVault.Certificates
- Azure.Security.KeyVault.Keys
- Azure.Security.KeyVault.Secrets
- CommunityToolkit.Mvvm
- Microsoft.Data.Sqlite
- Microsoft.Extensions.Caching.Memory
- Microsoft.Identity.Client.Extensions.Msal
- Microsoft.Extensions.DependencyInjection