forked from TrueCloudLab/s3-tests
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
|
import json
|
||
|
|
||
|
class Statement(object):
|
||
|
def __init__(self, action, resource, principal = {"AWS" : "*"}, effect= "Allow", condition = None):
|
||
|
self.principal = principal
|
||
|
self.action = action
|
||
|
self.resource = resource
|
||
|
self.condition = condition
|
||
|
self.effect = effect
|
||
|
|
||
|
def to_dict(self):
|
||
|
d = { "Action" : self.action,
|
||
|
"Principal" : self.principal,
|
||
|
"Effect" : self.effect,
|
||
|
"Resource" : self.resource
|
||
|
}
|
||
|
|
||
|
if self.condition is not None:
|
||
|
d["Condition"] = self.condition
|
||
|
|
||
|
return d
|
||
|
|
||
|
class Policy(object):
|
||
|
def __init__(self):
|
||
|
self.statements = []
|
||
|
|
||
|
def add_statement(self, s):
|
||
|
self.statements.append(s)
|
||
|
return self
|
||
|
|
||
|
def to_json(self):
|
||
|
policy_dict = {
|
||
|
"Version" : "2012-10-17",
|
||
|
"Statement":
|
||
|
[s.to_dict() for s in self.statements]
|
||
|
}
|
||
|
|
||
|
return json.dumps(policy_dict)
|
||
|
|
||
|
def make_json_policy(action, resource, principal={"AWS": "*"}, conditions=None):
|
||
|
"""
|
||
|
Helper function to make single statement policies
|
||
|
"""
|
||
|
s = Statement(action, resource, principal, condition=conditions)
|
||
|
p = Policy()
|
||
|
return p.add_statement(s).to_json()
|