HashiCorp Vaultを何となく理解する(4): Policy
イオンスマートテクノロジーのCTO室SREチームの@hikkie13です。
過去の記事に記載がある通り、弊社ではHCP Vaultの導入を進めています。
導入には教育・学習が欠かせません。
その過程で得た知識を何回かに分けてまとめていこうと思います。(心が折れない限り)
今回は、VaultのPolicyについてです。
Vault Policyとは
https://developer.hashicorp.com/vault/docs/concepts/policiesより引用
Vault Policyは、Vault内の特定のパスやアクションへのアクセスを許可または拒否する。
- このPolicyにより誰がどのsecretにアクセスできるかを制御する。
- 当然、最小権限の原則に従うことが重要
- JSONまたはHCLで記載する。
- デフォルトで拒否(暗黙の拒否)となる。
- 明示的なDENYは他のどの許可よりも優先される。
- ポリシーはトークンにattachされる。1つのTokenは複数のPolicyをattachできる。
初期状態で存在するPolicy
Root Policy
- すべての権限を持つ。
- 変更や削除が不可
- Root Tokenにattach
Default Policy
- 一般的な権限を持つ。
- 変更は可能だが、削除は不可
- 非Root Tokenにデフォルトでattach(attachの解除は可能)
Policyの設定方法
HCLもしくはjsonで記法可能。
以下はHCLでの記法を示す。
path "<path>" {
capabilities = ["<list of permissions>"]
}
path "<path>" {
capabilities = ["<list of permissions>"]
}
例
path "kv\data\apps\backend-app" {
capabilities = ["read","update","delete"]
}
path "sys/policies/*" {
capabilities = ["create","update","list","delete"]
}
path "aws/creds/web-app" {
capabilities = ["read"]
}
Pathについて
HashiCorp Vaultを何となく理解する(1):アーキテクチャ #PATHについて で記載している通り、Vaultの全てはPATHベースである。
PATHの例
- sys/rekey
- kv/apps/web-app
- auth/ldap/group/operators
- database/creds/production-database
- secrets/data/order-service/app01
その中には、以下のような特殊なPATHも存在する。
Root保護PATH
- Vault内のPATHでは、使用するためにRoot Tokenまたはsudo権限が必要となる。
Root保護PATHの例:
- auth/token/create-orphan(Orphan Tokenを作成)
- pki/root/sign-self-issued(自己署名証明書を署名)
- sys/rotate(暗号キーをローテート)
- sys/seal(Vaultを手動でseal)
PolicyにおけるPATHのmatch条件
PolicyにPATHを記載する際は、wildcard (+
)とglob (*
)を使用可能。
- glob (
*
)は、PATHの最後の階層にのみ使用可能。prefixでのmatchを指示する。secret/apps/service-*
secret/apps/web-app/*
- PATHの途中ではwildcard (
+
)が使える。1つのパスセグメントで区切られた任意の数の文字を示す。- 以下のように、複数のPATH階層に使用可能
secret/+/+/hogehoge
- 以下のように、複数のPATH階層に使用可能
- wildcard (
+
)とglob (*
)も組み合わせて利用可能secret/+/+/hoge-*
- 変数置換も可能
matchの条件を以下にまとめる。
- glob (
*
)パターン:secret/apps/serviceA/*
と設定した場合
PATH | マッチする |
---|---|
secret/apps/serviceA |
× |
secret/apps/serviceA/db |
○ |
secret/apps/serviceA/data/production |
○ |
secret/apps/serviceA/web-app |
○ |
secret/apps/serviceA/keys/key1 |
○ |
secret/apps/database |
× |
secret/apps/serviceB |
× |
secret/apps/data/backend |
× |
kv/secret/app/service |
× |
secret/apps/serviceA
はマッチしないことに注意。
- wildcard (
+
)を使ったパターン:secret/data/+/apps/backend1
と設定した場合
PATH | マッチする |
---|---|
secret/data/production/apps/backend1 |
○ |
secret/data/dev/apps/backend1 |
○ |
secret/data/hogehoge/apps/backend1 |
○ |
secret/data/1234567890/apps/backend1 |
○ |
secret/data/apps/backend1 |
× |
secret/env/dev |
× |
secret/data/frontend/apps |
× |
secret/dev/apps/frontend |
× |
capabilitiesについて
権限については、以下の種類がある。
capability | 説明 |
---|---|
Create | 新しいエントリーを作成 |
Read | 資格情報、設定などを読む |
Update | 既存の値を更新 |
Delete | 削除する |
List | リスト化する(読み取りは許可されない) |
Patch | パスのデータを部分的に更新する |
Sudo | Root保護パスの実行に使用 |
Deny | アクセスを拒否する ※他のあらゆるcapabilityより優先される |
参考
HashiCorp Certified: Vault Associate 2024 (w/ Hands-On Labs)
HashiCorp Certified: Vault Operations Professional
最後に(採用のお知らせ)
イオンスマートテクノロジーではエンジニアをはじめとした様々な職種を積極的に採用中です!
これからとてもおもしろいフェーズへ突入していくと思いますので興味のある方は是非カジュアル面談などで話を聞いてください!
Discussion