Deny

Hashicorp Vault - 限制路徑中一個特定子節點的策略

  • August 13, 2019

我配置了 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

引用自:https://serverfault.com/questions/978445