VaultのPolicyに入門する
目次
- 初めに
- 動作環境
- Policyの追加
- 終わりに
1. 初めに
今回はPolicyについて書いていきたいと思います。 今回もHashiCorp Learnにそって進め、その都度調べたことなどを書いていきます。
2. 動作環境
3. Policyとは
まずはPolicyについて説明したいと思います。Policyはログインしたアカウントに対してアクセス制限をかけるものになります。
アクセス制限は読み込み、書き込み制限などを行うことができSecretのパスごとに制限をかけることができます。
下記がPolicyのフォーマットになります。
path "secret/*" { capabilities = ["create"] } path "secret/foo" { capabilities = ["read"] } path "secret/data/*" { capabilities = ["create"] } path "secret/data/foo" { capabilities = ["read"] }
このPolicyは secret/
配下にSecretの書き込みはできますが、secret/foo
に対しては読み込みしかできません。
Policyはデフォルトで拒否の設定となるため指定されてないパスに対してはアクセスができないようになっています。
また、capabilities
には下記のものが指定できます。
- create
- read
- update
- delete
- list
ざっくりではありますがPolicyについて説明しましたので次は実際にPolicyを使ってアクセス制限をしていきたいと思います。
4. Policyの追加
では実際にPolicyを追加したいと思います。下記のコマンドで追加することができます。
$ vault policy write my-policy my-policy.hcl Success! Uploaded policy: my-policy
無事にPolicyを追加することができました。Policyは下記のコマンドで確認することができます。
$ vault policy list default my-policy test root
また、Policyの情報は read
コマンドで確認することができます。
$ vault policy read my-policy path "secret/*" { capabilities = ["create"] } path "secret/foo" { capabilities = ["read"] } path "secret/data/*" { capabilities = ["create"] } path "secret/data/foo" { capabilities = ["read"] }
PolicyはTokenに割り当てることでそのTokenでログインしたアカウントに対してPolicyでのアクセス制限をすることができます。 では早速、新規にTokenを作成しPolicyを割り当ててみたいと思います。
$ vault token create -policy=my-policy Key Value --- ----- token s.78IsL4osG8n7wslFIOu5stAS token_accessor CIshIIuaE2xLedKkHopdG3b6 token_duration 768h token_renewable true token_policies ["default" "my-policy"] identity_policies [] policies ["default" "my-policy"] $ vault login s.78IsL4osG8n7wslFIOu5stAS Success! You are now authenticated. The token information displayed below is already stored in the token helper. You do NOT need to run "vault login" again. Future Vault requests will automatically use this token. Key Value --- ----- token s.78IsL4osG8n7wslFIOu5stAS token_accessor CIshIIuaE2xLedKkHopdG3b6 token_duration 767h59m37s token_renewable true token_policies ["default" "my-policy"] identity_policies [] policies ["default" "my-policy"]
作成し、ログインすることまでできましたのでPolicyのアクセス制限がされているか確認してみます。
$ vault kv put secret/bar robot=beepboop Key Value --- ----- created_time 2019-12-24T12:44:02.999777645Z deletion_time n/a destroyed false version 1 $ vault kv put secret/foo robot=beepboop Error writing data to secret/data/foo: Error making API request. URL: PUT http://127.0.0.1:8200/v1/secret/data/foo Code: 403. Errors: * 1 error occurred: * permission denied
Policy通り、 secret/foo
への追加は権限でエラーとなりました。
想定通りの動きとなりますね。
ちなみに、作成したPolicyを既存のRoleなどに適用することもできます。
$ vault write auth/gcp/role/gcp-role policies=my-policy $ vault read auth/gcp/role/gcp-role Key Value --- ----- add_group_aliases false allow_gce_inference true bound_projects [sandbox-262701] bound_service_accounts [user01@sample-project.iam.gserviceaccount.com] max_jwt_exp 900 policies [my-policy] token_bound_cidrs [] token_explicit_max_ttl 0s token_max_ttl 0s token_no_default_policy false token_num_uses 0 token_period 0s token_policies [my-policy] token_ttl 0s token_type default type iam
4. 終わりに
簡単ではありますが、Policyを作成し実際のアクセス制限についてみてみました。 アクセス制限をすることでread onlyのアカウントを作成したり、特定の環境にだけSecretを作成できるようにしたりすることができます。
Policyもまだパラメータの設定などを細かく指定することができるみたいなので、機会があるときにやってみたいと思います。