Deny
Hashicorp Vault - 限制路徑中一個特定子節點的策略
我配置了 Hashicorp Vault 伺服器,一切執行良好,除了我的“拒絕”策略。
我對大多數秘密進行了 2 級分組,因此它們遵循以下結構:
secret/client/environment/*
並非所有機密都遵循客戶端/環境結構,但對於那些這樣做的,我有一個“受限”節點,我不希望此策略的使用者能夠訪問。
基於上述要求,我最終得到了一個如下所示的策略:
# Allow access to non client / environment secrets path "secret/" { capabilities = ["create", "read", "update", "list"] } path "secret/+/" { capabilities = ["create", "read", "update", "list"] } path "secret/+/+/*" { capabilities = ["create", "read", "update", "list"] } # No access to restricted secrets path "secret/+/+/restricted" { capabilities = ["deny"] } path "secret/+/+/restricted/*" { capabilities = ["deny"] }
如果我使用該策略創建一個令牌並在“保險庫令牌功能”命令中使用該令牌,它會返回我所期望的:
$vault token capabilities $(cat token.txt) secret/client/environment/blah create, list, read, update $vault token capabilities $(cat token.txt) secret/client/environment/restricted deny $vault token capabilities $(cat token.txt) secret/client/environment/restricted/blah deny
當我使用該令牌登錄時,問題就出現了,我不僅可以列出受限節點的內容,還可以獲得其中任何鍵的詳細資訊(在下面的所有級別)。通過 CLI 和 Web UI 都是如此。
我確實嘗試了一個更簡單的策略,即允許 secret/,然後拒絕 secret/+/+/restricted/,但這甚至無法與“Vault 令牌功能”命令一起正常工作。
當我使用令牌登錄時,它會顯示正確的策略(以及預設策略,但預設策略沒有對 secret/ 的權限)。
secret/ 被設置為 kv 儲存,所以我通過 CLI 使用“vault kv list|get …”訪問它們
我必須採取另一個步驟來“強制”登錄使用者的策略規則嗎?
事實證明,因為我使用 KV v2 後端進行秘密儲存,所以策略結構略有不同。
我最終不得不指定秘密/元數據/用於列出權限和秘密/數據/用於創建/更新/讀取
例如:
# Allow listing of all secret branches path "secret/metadata/" { capabilities = ["list"] } path "secret/metadata/+/" { capabilities = ["list"] } path "secret/metadata/+/+/" { capabilities = ["list"] } # Allow management of all keys under secret/<client>/<environment> structure path "secret/data/+/+/+" { capabilities = ["create", "read", "update"] }
而不是在受限節點上放置“拒絕”,該級別的唯一其他節點(目前)是“不受限制”節點,所以我添加了:
path "secret/metadata/+/+/unrestricted/" { capabilities = ["list"] } path "secret/data/+/+/unrestricted/*" { capabilities = ["create", "read", "update"] }
由於保險櫃策略預設被拒絕,因此這具有預期的效果。
我在以下位置找到了 KV2 策略設置的詳細資訊:https ://www.vaultproject.io/docs/secrets/kv/kv-v2.html#acl-rules