Awacs
Python library for AWS Access Policy Language creation
Install / Use
/learn @cloudtools/AwacsREADME
===== awacs
.. image:: https://img.shields.io/pypi/v/awacs.svg :target: https://pypi.python.org/pypi/awacs
.. image:: https://travis-ci.org/cloudtools/awacs.png?branch=master :target: https://travis-ci.org/cloudtools/awacs
.. image:: https://img.shields.io/pypi/l/awacs.svg :target: https://opensource.org/licenses/BSD-2-Clause
About
awacs - Amazon Web Access Control Subsystem
The awacs library allows for easier creation of AWS Access Policy Language JSON by writing Python code to describe the AWS policies. To facilitate catching policy format or JSON errors early the library has property and type checking built into the classes.
NOTE: The old awacs.aws.Policy object is going to be deprecated in the future, in preference for the awacs.aws.PolicyDocument class. This is due to confusion that arises between the old object and troposphere.iam.Policy objects.
Installation
awacs can be installed using the pip distribution system for python by issuing:
.. code-block:: sh
$ pip install awacs
Alternatively, you can run use setup.py to install by cloning this repository and issuing:
.. code-block:: sh
$ python setup.py install
Examples
An example to use this comes from the AWS IAM_ documentation.
This shows creating policy attached to an Amazon S3 bucket:
.. code-block:: python
from awacs.aws import Action, Allow, PolicyDocument, Principal, Statement from awacs.iam import ARN as IAM_ARN from awacs.s3 import ARN as S3_ARN
account = "123456789012" user = "user/Bob"
pd = PolicyDocument( Version="2012-10-17", Id="S3-Account-Permissions", Statement=[ Statement( Sid="1", Effect=Allow, Principal=Principal("AWS", [IAM_ARN(user, '', account)]), Action=[Action("s3", "")], Resource=[S3_ARN("my_corporate_bucket/"),], ), ], ) print(pd.to_json())
would produce this json policy:
.. code-block:: json
{ "Id": "S3-Account-Permissions", "Statement": [ { "Action": [ "s3:" ], "Effect": "Allow", "Principal": [ { "AWS": [ "arn:aws:iam::123456789012:user/Bob" ] } ], "Resource": [ "arn:aws:s3:::my_corporate_bucket/" ], "Sid": "1" } ], "Version": "2012-10-17" }
Community
We have a google group, cloudtools-dev_, where you can ask questions and engage with the cloudtools/awacs community. Issues & pull requests are always welcome!
.. _AWS IAM: http://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html
.. _cloudtools-dev: https://groups.google.com/forum/#!forum/cloudtools-dev
Contributing new actions
To update actions there is a generator tool which will scrape policies from AWS's documentation resource and auto-generate new files. The following commands can be run (with Python 3.7+) to update the repo:
.. code-block:: sh
$ python3 -m pip install -r scrape/requirements.txt $ python3 -m pip install . $ python3 ./scrape/scrape.py $ git diff
Related Skills
node-connect
342.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
85.3kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
85.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
342.5kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
