コンポーネント毎に設置されている policy.json ですが、デフォルト設定だけでも多いのに、隠れ設定もいっぱいあるため把握するのが非常に面倒くさいです。
が、デフォだと他人が作成したVMを勝手に削除したり色々できてしまうので、
グッと我慢して、隠れ設定のページを見つけたり、他人のVMをイジれないようにしました。
Nova
目的は、別ユーザが作成したVMを削除したり、コンソール覗いたり、Volumeを弄ったり、スナップショット取ったりできないようにすることです。参考にしたページはこちら/etc/nova/policy.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
"admin_or_user": "is_admin:True or user_id:%(user_id)s", "compute:attach_volume": "rule:admin_or_user", "compute:detach_volume": "rule:admin_or_user", "compute:update": "rule:admin_or_user", "compute:soft_delete": "rule:admin_or_user", "compute:delete": "rule:admin_or_user", "compute:restore": "rule:admin_or_user", "compute:force_delete": "rule:admin_or_user", "compute:start": "rule:admin_or_user", "compute:backup": "rule:admin_or_user", "compute:snapshot": "rule:admin_or_user", "compute:rebuild": "rule:admin_or_user", "compute:revert_resize": "rule:admin_or_user", "compute:confirm_resize": "rule:admin_or_user", "compute:resize": "rule:admin_or_user", "compute:add_fixed_ip": "rule:admin_or_user", "compute:remove_fixed_ip": "rule:admin_or_user", "compute:pause": "rule:admin_or_user", "compute:unpause": "rule:admin_or_user", "compute:get_diagnostics": "rule:admin_or_user", "compute:suspend": "rule:admin_or_user", "compute:resume": "rule:admin_or_user", "compute:rescue": "rule:admin_or_user", "compute:unrescue": "rule:admin_or_user", "compute:set_admin_password": "rule:admin_or_user", "compute:inject_file": "rule:admin_or_user", "compute:get_vnc_console": "rule:admin_or_user", "compute:get_spice_console": "rule:admin_or_user", "compute:get_console_output": "rule:admin_or_user", "compute:lock": "rule:admin_or_user", "compute:unlock": "rule:admin_or_user", "compute:get_lock": "rule:admin_or_user", "compute:reset_network": "rule:admin_or_user", "compute:inject_network_info": "rule:admin_or_user", "compute:attach_interface": "rule:admin_or_user", "compute:detach_interface": "rule:admin_or_user", "compute:get_instance_metadata": "rule:admin_or_user", "compute:delete_instance_metadata": "rule:admin_or_user", "compute:update_instance_metadata": "rule:admin_or_user", "compute:security_groups:add_to_instance": "rule:admin_or_user", "compute:security_groups:remove_from_instance": "rule:admin_or_user", "compute_extension:keypairs": "rule:admin_api", "compute_extension:security_group_default_rules": "rule:admin_api", "compute_extension:security_groups": "", "network:create": "rule:admin_api", "network:delete": "rule:admin_api", "network:associate": "rule:admin_api", "network:disassociate": "rule:admin_api", "network:setup_networks_on_host": "rule:admin_api", |
この設定で不満なところは、
それ以外のVM回りに関しては、大体うまく制限できたと思います。
Quantum
Quantumを使ってるので、ネットワーク周りはこちらになります。この辺は運用ルール上、一般ユーザに一切必要なかったのでバシバシ制限しています。
/etc/quantum/policy.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
"create_network": "rule:admin_only", "update_network": "rule:admin_only", "delete_network": "rule:admin_only", "get_l3-agents": "rule:admin_only", "create_router": "rule:admin_only", "get_router": "", "update_router:add_router_interface": "rule:admin_or_owner", "update_router:remove_router_interface": "rule:admin_or_owner", "delete_router": "rule:admin_only", "create_floatingip": "rule:regular_user", "update_floatingip": "rule:admin_or_owner", "delete_floatingip": "rule:admin_or_owner", "get_floatingip": "rule:admin_or_owner" |
Cinder
こちらはNova同様、別ユーザのボリュームやスナップショットにイタズラできないようにしています。参考ページはこちら。/etc/cinder/policy.json
1 2 3 4 5 6 7 8 9 10 11 |
"admin_or_user": [["is_admin:True"], ["user_id:%(user_id)s"]], "volume:delete": [["rule:admin_or_user"]], "volume:update": [["rule:admin_or_user"]], "volume:delete_volume_metadata": [["rule:admin_or_user"]], "volume:update_volume_metadata": [["rule:admin_or_user"]], "volume:attach": [["rule:admin_or_user"]], "volume:detach": [["rule:admin_or_user"]], "volume:create_snapshot": [["rule:admin_or_user"]], "volume:delete_snapshot": [["rule:admin_or_user"]], "volume:update_snapshot": [["rule:admin_or_user"]], |
Glance
隠し設定は探しましたが、結果的に設定は何もイジっていません。参考ページはこちら。/etc/glance/policy.json
1 2 3 4 5 6 7 8 9 |
{ "default": "", "manage_image_cache": "role:admin", "add_image": "", "modify_image": "", "delete_image": "", "download_image": "" } |
目的としては、一般ユーザがイメージの作成をできないようにしたかったのですが、add_image を制限してしまうと、なんとスナップショット作成もできなくなってしまうという罠が。
glance image-download を抑制する気持ちで download_image を制限したら、VM作成自体できなくなるという動きも。
全体的には、細かい項目に分けられていて十分だとは思うのですが、痒いところに届かなかったというか、実際に検証したり、ソースを追わないと影響範囲がはっきりしないので、便利さはまだ少し欠けるなという印象でした。
なので、存在する設定項目を全て policy.json に記述しておくのと、
それなりにでもドキュメントに説明があったらいいなと思う次第でした。