update readme

This commit is contained in:
Nassim Babaci
2014-07-21 13:29:29 +02:00
parent 29945e0e5d
commit 7183c086d8
2 changed files with 62 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
Swift3 SwiftPolicy Middleware.
------ -----------------------
SwiftPolicy Middleware for OpenStack Swift, allows to use json policy file SwiftPolicy Middleware for OpenStack Swift, allows to use json policy file
format to handle swift authorizations. format to handle swift authorizations.
@@ -15,18 +15,18 @@ Install
------- -------
1) Install SwiftPolicy with ``sudo python setup.py install`` or ``sudo python 1) Install SwiftPolicy with ``sudo python setup.py install`` or ``sudo python
setup.py develop`` or via whatever packaging system you may be using. setup.py develop``.
2) Alter your proxy-server.conf pipeline to have SwiftPolicy: 2) Alter your proxy-server.conf pipeline to have SwiftPolicy:
You can use SwiftPolicy in place of keystoneauth middleware: For example, you can use SwiftPolicy in place of keystoneauth middleware:
Was:: Change::
[pipeline:main] [pipeline:main]
pipeline = catch_errors cache tempauth proxy-server pipeline = catch_errors cache tempauth proxy-server
Change To:: To::
[pipeline:main] [pipeline:main]
pipeline = catch_errors cache swiftpolicy tempauth proxy-server pipeline = catch_errors cache swiftpolicy tempauth proxy-server
@@ -37,4 +37,54 @@ Policy file is given using ``policy`` option
[filter:swift3] [filter:swift3]
use = egg:swiftpolicy#swiftpolicy use = egg:swiftpolicy#swiftpolicy
policy = {HERE}/default.json policy = %(here)s/default.json
We install along with this middleare a default policy file in /etc/swift/default.json, which make our middleware behaves
the same way as keystoneauth (for compatibility reasons).
Policy file
-----------
The policy file will list all possible actions on swift proxy.
Action's format is: "<http verbe>_<swift entity>" (example: "get_container", "put_object", etc).
...
"get_container": "rule:allowed_for_user",
"put_container": "rule:allowed_for_user",
"delete_container": "rule:allowed_for_user",
...
Policy file contains also two specific rules: "swift_owner" "reseller_request", they define
when swift_owner and reseller_request headers are set to true, as those two value are part
of the contract between the auth system and swift.
...
"swift_owner": "rule:swift_reseller or rule:swift_operator",
"reseller_request": "rule:swift_reseller",
...
 
Example
-------
* To deny creation of new containers: set put_container to '!':
...
"get_container": "rule:allowed_for_user",
"put_container": "!",
...
* To restrict creation of new container to users with role "admin":
...
"get_container": "rule:allowed_for_user",
"put_container": "role:admin",
...
Limitations
-----------
* swiftpolicy does not support dynamic laoding of the policy file, and thus, swift proxy have
to be restarted when policy file is updated.

View File

@@ -1,18 +1,17 @@
{ {
"is_anonymous": "identity:None", "is_anonymous": "identity:None",
"is_authenticated": "not rule:is_anonymous", "is_authenticated": "not rule:is_anonymous",
"swift_reseller": "role:reseller", "swift_reseller": "role:reseller",
"swift_operator": "role:admin or role:swiftoperator", "swift_operator": "role:admin or role:Member",
"swift_owner": "rule:swift_reseller or rule:swift_operator", "swift_owner": "rule:swift_reseller or rule:swift_operator",
"reseller_request": "rule:swift_reseller", "reseller_request": "rule:swift_reseller",
"same_tenant": "account:%(account)s", "same_tenant": "account:%(account)s",
"tenant_mismatch": "not rule:same_tenant", "tenant_mismatch": "not rule:same_tenant",
"allowed_for_authenticated": "rule:swift_reseller or acl:check_cross_tenant or acl:check_is_public or (rule:same_tenant and rule:swift_operator) or (rule:same_tenant and acl:check_roles)", "allowed_for_authenticated": "rule:swift_reseller or acl:check_cross_tenant or acl:check_is_public or (rule:same_tenant and rule:swift_operator) or (rule:same_tenant and acl:check_roles)",
"allowed_for_anonymous": "is_authoritative:True and acl:check_is_public", "allowed_for_anonymous": "is_authoritative:True and acl:check_is_public",
"allowed_for_user": "(rule:is_authenticated and rule:allowed_for_authenticated) or rule:allowed_for_anonymous", "allowed_for_user": "(rule:is_authenticated and rule:allowed_for_authenticated) or rule:allowed_for_anonymous",
"get_account": "rule:allowed_for_user", "get_account": "rule:allowed_for_user",
@@ -20,12 +19,14 @@
"head_account": "rule:allowed_for_user", "head_account": "rule:allowed_for_user",
"delete_account": "rule:swift_reseller", "delete_account": "rule:swift_reseller",
"options_account": "", "options_account": "",
"get_container": "rule:allowed_for_user", "get_container": "rule:allowed_for_user",
"put_container": "rule:allowed_for_user", "put_container": "rule:allowed_for_user",
"delete_container": "rule:allowed_for_user", "delete_container": "rule:allowed_for_user",
"post_container": "rule:allowed_for_user", "post_container": "rule:allowed_for_user",
"head_container": "rule:allowed_for_user", "head_container": "rule:allowed_for_user",
"options_container": "", "options_container": "",
"get_object": "rule:allowed_for_user", "get_object": "rule:allowed_for_user",
"put_object": "rule:allowed_for_user", "put_object": "rule:allowed_for_user",
"copy_object": "rule:allowed_for_user", "copy_object": "rule:allowed_for_user",