{"id":23104078,"url":"https://github.com/glueops/vault-backup-validator","last_synced_at":"2026-05-29T02:02:30.579Z","repository":{"id":205494536,"uuid":"711562671","full_name":"GlueOps/vault-backup-validator","owner":"GlueOps","description":"This repository contains a Go application that validates HashiCorp Vault backups. It provides an API endpoint to ensure the integrity and validity of Vault backup snapshots using provided keys and expected data values. The tool assists in verifying that backups can be restored correctly and data remains consistent.","archived":false,"fork":false,"pushed_at":"2026-05-28T04:58:07.000Z","size":237,"stargazers_count":1,"open_issues_count":7,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-28T05:13:10.785Z","etag":null,"topics":["allow-auto-merge","api","backup","backup-validation","backup-validator","data-integrity","glueops-platform","go","go-application","hashicorp","hashicorp-vault","rest-api","validation","vault","vault-backup","vault-backup-validation"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GlueOps.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-10-29T16:41:46.000Z","updated_at":"2026-05-28T03:25:42.000Z","dependencies_parsed_at":"2025-12-30T13:04:31.320Z","dependency_job_id":null,"html_url":"https://github.com/GlueOps/vault-backup-validator","commit_stats":null,"previous_names":["glueops/vault-backup-validator"],"tags_count":65,"template":false,"template_full_name":null,"purl":"pkg:github/GlueOps/vault-backup-validator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fvault-backup-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fvault-backup-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fvault-backup-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fvault-backup-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GlueOps","download_url":"https://codeload.github.com/GlueOps/vault-backup-validator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fvault-backup-validator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33633468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["allow-auto-merge","api","backup","backup-validation","backup-validator","data-integrity","glueops-platform","go","go-application","hashicorp","hashicorp-vault","rest-api","validation","vault","vault-backup","vault-backup-validation"],"created_at":"2024-12-17T00:31:12.471Z","updated_at":"2026-05-29T02:02:30.559Z","avatar_url":"https://github.com/GlueOps.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vault Backup Validator\n\nThis API validates OpenBao backups using a POST request. It checks the integrity of the backup data to ensure it can be safely restored.\n\n## Endpoint\n\n- `POST /api/v1/validate`\n\n## Request Parameters\n\nSend a JSON object with the following fields:\n\n- `source_backup_url` (string): URL of the source OpenBao backup.\n- `source_keys_url` (string): URL of the source OpenBao unseal keys and token.\n- `path_values_map` (json): key-pair values of secret_path and the expected key-values in that path.\n- `vault_version` (string): version of OpenBao where the backup is taken from.\n## Response\n\n- Status 200 OK: Validation successful.\n- Status 400 Bad Request: Validation unsuccessful/Invalid or missing parameters.\n- Status 500 Internal Server Error: Unexpected error.\n\nSample Request:\n\nPOST /api/v1/validate\n\n```json\n{\n    \"source_backup_url\": \"https://example.com/backup.snap\",\n    \"source_keys_url\": \"https://example.com/keys.json\",\n    \"path_values_map\":{\n        \"secret/key-1-for-balaji\": {\n            \"key1\":\"value1\",\n            \"key2\":\"value-2\"\n        }\n    },\n    \"vault_version\":\"2.4.0\"\n}\n```\n\nkeys.json Expected format\n\n```json\n{\n  \"keys\": [\n    \"key_in_hexa\"\n  ],\n  \"keys_base64\": [\n    \"key_in_base64\"\n  ],\n  \"root_token\": \"root_token_string\"\n}\n```\n\nSample Response\n\n```json\n{\n    \"message\":\"Backup is valid\",\n    \"status\":\"success\"\n}\n```\n\nTo dev locally:\n- Easiest to just create presigned urls using your existing tenant (e.g. tenant-foobar) and then finding the the required files keys.json + the *.snap backup file you want to restore/validate with.\n\nSample request using presigned urls while running locally:\n\n```bash\ncurl -X POST http://localhost:8080/api/v1/validate \\\n-H \"Content-Type: application/json\" \\\n-d '{\n    \"source_backup_url\": \"https://XXXXXXXXXXXXXXXXXXXXXXX.s3.us-west-2.amazonaws.com/foobar/backups_with_expiration_enabled/hashicorp-vault-backups/2025-10-19/vault_2025-10-19T00%3A15%3A06.snap?response-content-disposition=inline\u0026X-Amz-Content-Sha256=UNSIGNED-PAYLOAD\u0026X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJGMEQCIAnJW3ERFB7%2F1eVUEe48Anu%2BJQ6Fhm%2FQyxPi1WLz51OwAiBvVOU8KcXLkD2IMU5Bwa%2FO%2BppYam5TmBxMOn6Rg4SXLyraBAjM%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAEaDDIyMjk5Mzc3MDU1NCIMs5Udgcwf1OZhXv99Kq4EhBZux3HuF3syyZU65AU4%2BrnvFHPgBydbdCgOBANy41h8CA%2B4O9h6Gw42LxFDKR66l1d4vrfk%2B39J2X%2BYmpGtr0nsuxsh4pwzblg4e7V4EDjv8g%2BfR%2FEuLsX6Hkb5mrAeNiExUxRwVS63i3vadLlqRfid73NbJHAJPVZUCdWNTR9XDdINHB3VKOqZHspFav4vxdoU4HYh3f%2BO68z3Zhpj9iFYX%2Bdb%2BMry5J1UfUm6C0JPR1h%2BNyoaeXm1lBHNZ3XWVUjfaLgp3sei03L7jlK8DODs%2BlmCf06SutVwCdFEqEiwPjtcR86hue6HElvbt8Oqmk3rAGI3sZNkA%2Fb5XbZ7TkinzRTFNwXKFEsApzHy8Zd1u9D%2B26gF5xlt7txdcKi6Dd%2FZKXnpVd4fVuhujArJTw2VGu%2F9KWNTkercW2BDyh963LE18PGjAQZSV6pIIPAo7DA0dVs%2BhJT1XLuB8%2FJDe4rceVOo1v5IkUI48BSN3bAqE0QUEyRWMOgo9MySNNlckQSgcK4481A1KgF9WTq7N3dXQIOzct0aSY31s3N1XUhpyNMWnGhFxQlEKbXTsLZz%2BcNKnUigppOctheiP1kw27M7RImRlyKHEvy%2BzVboi3RtxxXoZsqL4ZUxV1uM5f53jbf9aIVUM4eJSaJxefQiVBBTbP7OMZ9Mt%2BkIpze6p4vy%2FPBRUApdbA5vG4CWDIT7SMDNr2n%2FYpNho35NtrmO3SuEnSjc4nxS8UkIFJdNMKqs0ccGOsYCcskPTQUihgbWYriNQKXo7TUGaOpYtPz2S1vy4ss3nFnGZeT5ph8mp9x6XKJIYRhCniulkg8YuMP8SP29gWRLrA26qy39yXUTbmBqJqxC%2Bi1UCWPIIsvcdHqtoTXySNusNp%2FgxPjCm%2FAJjGfj40HzDcTjsfT0hYbH5CDNGLrwm9zhamQsXwKHh6UiQ8k0W3KuGF0CR3BVaSKkEYhX%2BKi6STqZJmrddkLixsZU8Bg9NV62rq2%2FX5n4PZDbLR5%2BVF25UuSeABKNgo0gnA8yaiNE5ssIBGFIR2Ds%2BvACi3rPVPg6%2F5zkMMESVHd7EjwqagPognDXfSrflo66N4V7S3BWMOkH%2Bl%2FNis0oqq37jcf0AQZyTMpn5ptTQqVa8s%2FCcncG84AwRp5MuKywfB8wMFY3zot%2FD0LiGVtlELJiVBaP9TVYzZ4A058%3D\u0026X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=ASIATH23W5A5PGJDBNHK%2F20251019%2Fus-west-2%2Fs3%2Faws4_request\u0026X-Amz-Date=20251019T031129Z\u0026X-Amz-Expires=43200\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=eb38c6447af9687e5931121bdb71387923e060cd333522885a2b5a0582c47f8c\",\n    \"source_keys_url\": \"https://XXXXXXXXXXXXXXXXXXXXXXX.s3.us-west-2.amazonaws.com/foobar/hashicorp-vault-init/vault_access.json?response-content-disposition=inline\u0026X-Amz-Content-Sha256=UNSIGNED-PAYLOAD\u0026X-Amz-Security-Token=IQoJb3JpZ2luX2VjECMaCXVzLXdlc3QtMiJGMEQCIAnJW3ERFB7%2F1eVUEe48Anu%2BJQ6Fhm%2FQyxPi1WLz51OwAiBvVOU8KcXLkD2IMU5Bwa%2FO%2BppYam5TmBxMOn6Rg4SXLyraBAjM%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAEaDDIyMjk5Mzc3MDU1NCIMs5Udgcwf1OZhXv99Kq4EhBZux3HuF3syyZU65AU4%2BrnvFHPgBydbdCgOBANy41h8CA%2B4O9h6Gw42LxFDKR66l1d4vrfk%2B39J2X%2BYmpGtr0nsuxsh4pwzblg4e7V4EDjv8g%2BfR%2FEuLsX6Hkb5mrAeNiExUxRwVS63i3vadLlqRfid73NbJHAJPVZUCdWNTR9XDdINHB3VKOqZHspFav4vxdoU4HYh3f%2BO68z3Zhpj9iFYX%2Bdb%2BMry5J1UfUm6C0JPR1h%2BNyoaeXm1lBHNZ3XWVUjfaLgp3sei03L7jlK8DODs%2BlmCf06SutVwCdFEqEiwPjtcR86hue6HElvbt8Oqmk3rAGI3sZNkA%2Fb5XbZ7TkinzRTFNwXKFEsApzHy8Zd1u9D%2B26gF5xlt7txdcKi6Dd%2FZKXnpVd4fVuhujArJTw2VGu%2F9KWNTkercW2BDyh963LE18PGjAQZSV6pIIPAo7DA0dVs%2BhJT1XLuB8%2FJDe4rceVOo1v5IkUI48BSN3bAqE0QUEyRWMOgo9MySNNlckQSgcK4481A1KgF9WTq7N3dXQIOzct0aSY31s3N1XUhpyNMWnGhFxQlEKbXTsLZz%2BcNKnUigppOctheiP1kw27M7RImRlyKHEvy%2BzVboi3RtxxXoZsqL4ZUxV1uM5f53jbf9aIVUM4eJSaJxefQiVBBTbP7OMZ9Mt%2BkIpze6p4vy%2FPBRUApdbA5vG4CWDIT7SMDNr2n%2FYpNho35NtrmO3SuEnSjc4nxS8UkIFJdNMKqs0ccGOsYCcskPTQUihgbWYriNQKXo7TUGaOpYtPz2S1vy4ss3nFnGZeT5ph8mp9x6XKJIYRhCniulkg8YuMP8SP29gWRLrA26qy39yXUTbmBqJqxC%2Bi1UCWPIIsvcdHqtoTXySNusNp%2FgxPjCm%2FAJjGfj40HzDcTjsfT0hYbH5CDNGLrwm9zhamQsXwKHh6UiQ8k0W3KuGF0CR3BVaSKkEYhX%2BKi6STqZJmrddkLixsZU8Bg9NV62rq2%2FX5n4PZDbLR5%2BVF25UuSeABKNgo0gnA8yaiNE5ssIBGFIR2Ds%2BvACi3rPVPg6%2F5zkMMESVHd7EjwqagPognDXfSrflo66N4V7S3BWMOkH%2Bl%2FNis0oqq37jcf0AQZyTMpn5ptTQqVa8s%2FCcncG84AwRp5MuKywfB8wMFY3zot%2FD0LiGVtlELJiVBaP9TVYzZ4A058%3D\u0026X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=ASIATH23W5A5PGJDBNHK%2F20251019%2Fus-west-2%2Fs3%2Faws4_request\u0026X-Amz-Date=20251019T031200Z\u0026X-Amz-Expires=43200\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=4e1fb4e6cb0ac658bef44f170a3224622f86d5d079c3c1ef390308d4d4275d21\",\n    \"path_values_map\":{\n        \"secret/login-service\": {\n            \"password\":\"supersecretpassword\"\n        }\n    },\n    \"vault_version\":\"2.4.1\"\n}'\n```\n\n- To run the app, as usual create a fresh cloud development environment and then install golang:\n```bash\nwget https://go.dev/dl/go1.25.3.linux-amd64.tar.gz\nsudo rm -rf /usr/local/go \u0026\u0026 sudo tar -C /usr/local -xzf go1.25.3.linux-amd64.tar.gz\necho \"export PATH=$PATH:/usr/local/go/bin\" \u003e\u003e ~/.zshrc\nsource ~/.zshrc\ngo version\ngo install github.com/go-delve/delve/cmd/dlv@latest\n```\n- Install this extension for vscode: https://marketplace.visualstudio.com/items?itemName=golang.Go\n- To start the debugger you can create a launch.json configuration using vscode or place this file in: `/workspaces/glueops/.vscode/launch.json`:\n```json\n{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n    \n        {\n            \"name\": \"Launch Package\",\n            \"type\": \"go\",\n            \"request\": \"launch\",\n            \"mode\": \"auto\",\n            \"program\": \"${fileDirname}\"\n        }\n    ]\n}\n```\n- After creating that `launch.json`, go to `main.go` and just set a break point and kick off the debugger.\n\n**NOTES:** \n- When running the app locally you may run into permission issues and might need to update the scripts/commands under vault-backup-validator/vault/scripts/* to use `sudo`.\n- There are a number of references to `vault` instead of `openbao` as at one point this repository was for Hashicorp Vault but are now using `Openbao` instead. So it's expected you will continue to see both references throughout our repositories.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglueops%2Fvault-backup-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglueops%2Fvault-backup-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglueops%2Fvault-backup-validator/lists"}