Vault 是 HashiCorp 拿來管理各種敏感資訊的軟體,像是 API token 或是資料庫的帳號密碼。把這些資訊集中控管後就不需要把這些資訊放進 Git (超爽的?),而是在需要的時候由應用程式呼叫 Vault 取得。
而 Vault 的設計裡面要求應用程式需要「認證」後才能取得,結果這個「認證」又是一組敏感資訊,這就是 Secret Zero 問題,屬於雞蛋問題的一種。
找了一輪發現 HashiCorp 自家的說明解釋的最清楚,不過這篇是放在 blog 上的文章:「Tackling the Vault Secret Zero Problem by AppRole Authentication」。
Vault 在解決 Secret Zero 的方法是使用 AppRole,這邊的認證包括了 role_id
與 secret_id
的設計。比較特別的是一組 role_id
可以有多組 secret_id
對應。
在 AppRole 這樣的設計下,權限會綁在 role_id
上,而 secret_id
則可以在部屬時動態產生,像是官方提到的 Terraform 與 Chef,或是依照組織裡面使用的管理工具:
這樣就可以透過 role_id
管理權限,但不用在 Git 裡面寫死 Secret Zero 資訊,而且每台機器都有自己的 secret_id
可以提供稽核記錄,把幾個比較明顯的問題解了不少...