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とWebUIの両方に当てはまります。
シークレット/ *を許可してからシークレット/ +/+ /制限付き/ *を拒否するという単純なポリシーを試してみましたが、これは「ボールトトークン機能」コマンドでは正しく機能しませんでした。
トークンを使用してログインすると、正しいポリシーが表示されます(デフォルトも同様ですが、デフォルトにはsecret /へのアクセス許可がありません)。
secret /はkvストアとしてセットアップされているので、「vault kv list | get ...」を使用してCLIからアクセスします。
ログインしたユーザーにポリシールールを「強制」するために実行する必要のある別の手順はありますか?
シークレットストレージにKVv2バックエンドを使用していたため、ポリシー構造が少し異なります。
アクセス許可を一覧表示するにはsecret /metadata/を指定し、create/update/readにはsecret /data/を指定する必要がありました。
例えば:
# 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"]
}
Vaultポリシーはデフォルトで拒否されるため、これは望ましい効果をもたらしました。
KV2ポリシー設定の詳細は次の場所にあります: https://www.vaultproject.io/docs/secrets/kv/kv-v2.html#acl-rules