{ "info": { "author": "Gareth Rushgrove", "author_email": "gareth@morethanseven.net", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8" ], "description": "# Policy Kit\n\n[![CircleCI](https://circleci.com/gh/garethr/policykit.svg?style=svg)](https://circleci.com/gh/garethr/policykit)\n\nA set of utilities and classes for working with [Open Policy Agent](https://www.openpolicyagent.org/) based tools, including [Gatekeeper](https://github.com/open-policy-agent/gatekeeper) and [Conftest](https://github.com/instrumenta/conftest).\n\n\n## Installation\n\nPolicy Kit can be installed from PyPI using `pip` or similar tools:\n\n```\npip install policykit\n```\n\n\n## CLI\n\nThe module provides a CLI tool called `pk` for using some of the functionality.\n\n```console\n$ pk build *.rego\n[SecurityControls] Generating a ConstraintTemplate from \"SecurityControls.rego\"\n[SecurityControls] Searching \"lib\" for additional rego files\n[SecurityControls] Adding library from \"lib/kubernetes.rego\"\n[SecurityControls] Saving to \"SecurityControls.yaml\"\n```\n\nYou can also use the tool via Docker:\n\n```\ndocker run --rm -it -v $(pwd):/app garethr/policykit build\n```\n\n\n## Python\n\nThis module currently contains several classes, the first for working with `ConstraintTemplates` in Gatekeeper.\n\n```python\nfrom policykit import ConstraintTemplate\n\nwith open(path_to_rego_source_file, \"r\") as rego:\n ct = ConstraintTemplate(name, rego.read())\nprint(ct.yaml())\n```\n\nThe `Conftest` class makes interacting with [Conftest](https://github.com/instrumenta/conftest) from Python easy.\nNote that this requires the `conftest` executable to be available on the path.\n\n```python\n>>> from policykit import Conftest\n>>> cli = Conftest(\"policy\")\n>>> result = cli.test(\"deployment.yaml\")\n>>> result\nConftestRun(code=1, results=[ConftestResult(filename='/Users/garethr/Documents/conftest/examples/kubernetes/deployment.yaml', Warnings=[], Failures=['hello-kubernetes must include Kubernetes recommended labels: https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/#labels ', 'Containers must not run as root in Deployment hello-kubernetes', 'Deployment hello-kubernetes must provide app/release labels for pod selectors'], Successes=[])]\n>>> result.success\nFalse\n```\n\nPassing in a dictionary to `json_input` is parsed as JSON then sent as stdin to the `confest` executable.\n```python\nfrom policykit import Conftest\n\nresult = Conftest(\"policy\").test(json_input={\"foo\": \"bar\"})\nprint(result)\n```\n\n## Action\n\nPolicy Kit can also be easily used in GitHub Actions, using the following Action. This example also demonstrates\ncommitting the generated files back into the Git repository. Update the the values in `<>` as required.\n\n```yaml\non: push\nname: Gatekeeper\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@master\n - name: Generate ConstraintTemplates for Gatekeeper\n uses: garethr/policykit/action@master\n with:\n args: \n - name: Commit to repository\n env:\n GITHUB_TOKEN: ${{ secrets.github_token }}\n COMMIT_MSG: |\n Generated new ConstraintTemplates from Rego source\n skip-checks: true\n run: |\n # Hard-code user config\n git config user.email \"\"\n git config user.name \"\"\n git config --get-regexp \"user\\.(name|email)\"\n # Update origin with token\n git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git\n # Checkout the branch so we can push back to it\n git checkout master\n git add .\n # Only commit and push if we have changes\n git diff --quiet && git diff --staged --quiet || (git commit -m \"${COMMIT_MSG}\"; git push origin master\n```\n\n\n## Notes\n\nA few caveats for anyone trying to use this module.\n\n* [Loading libraries with `lib`](https://github.com/open-policy-agent/frameworks/commit/55fa33d1cca93f3b133e76a48d2e19adbdeb9de3) is only supported in Gatekeeper HEAD today but should be in the next release.\n* This module does not support parameterized ConstraintTemplates\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/garethr/policykit", "keywords": "", "license": "Apache-2.0", "maintainer": "", "maintainer_email": "", "name": "policykit", "package_url": "https://pypi.org/project/policykit/", "platform": "", "project_url": "https://pypi.org/project/policykit/", "project_urls": { "Homepage": "https://github.com/garethr/policykit", "Repository": "https://github.com/garethr/policykit" }, "release_url": "https://pypi.org/project/policykit/0.4.0/", "requires_dist": [ "PyYAML (>=5.1,<6.0)", "click (>=7.0,<8.0)", "colorama (>=0.4.1,<0.5.0)", "attrs (>=19.3,<20.0)", "delegator.py (>=0.1.1,<0.2.0)", "dataclasses-json (>=0.3.5,<0.4.0)" ], "requires_python": ">=3.7,<4.0", "summary": "A set of utilities and classes for working with Open Policy Agent based tools, including Gatekeeper and Conftest", "version": "0.4.0", "yanked": false, "yanked_reason": null }, "last_serial": 6859772, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "114a93094a2ce0dde3dc5d4f80415b20", "sha256": "01b7414b5a35333296437f096e0c9d575d168c4982dff268895c8b84f9fb2380" }, "downloads": -1, "filename": "policykit-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "114a93094a2ce0dde3dc5d4f80415b20", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 5635, "upload_time": "2019-10-28T14:54:46", "upload_time_iso_8601": "2019-10-28T14:54:46.894165Z", "url": "https://files.pythonhosted.org/packages/be/07/526c7804ae5888053b03575089a55ebacb53b5ff007ba6d847fe84b932a7/policykit-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9e5f593c63a5eeb20d127c302c923855", "sha256": "f4318bae86368d9e967a0211c73cce79b66b83ef14f9c15b49ebf7fb02350592" }, "downloads": -1, "filename": "policykit-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9e5f593c63a5eeb20d127c302c923855", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 4978, "upload_time": "2019-10-28T14:54:48", "upload_time_iso_8601": "2019-10-28T14:54:48.967522Z", "url": "https://files.pythonhosted.org/packages/0b/19/1e12e53c2ce53b26854c5a2fe196641a048d4528866e5dfa3f837c3aeb94/policykit-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "136820acd7d3a11d71ff4ccb38cba26e", "sha256": "3a87d6e52286e8fc7cc7217ee77b15e9073136a3175c52c7e96ebfefbd65777a" }, "downloads": -1, "filename": "policykit-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "136820acd7d3a11d71ff4ccb38cba26e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 5681, "upload_time": "2019-10-28T15:10:40", "upload_time_iso_8601": "2019-10-28T15:10:40.193757Z", "url": "https://files.pythonhosted.org/packages/25/d9/8c7c3ea75a6b746ecee04c0548d9c6a3f530f89e0609c5b4fa66cc38b253/policykit-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4dd65285c3b2595acadcfe5cb570a53b", "sha256": "f9ecb8d3609a67f1cc231edb8b3796bb94c369988c975c995c43992b5251ccb8" }, "downloads": -1, "filename": "policykit-0.1.1.tar.gz", "has_sig": false, "md5_digest": "4dd65285c3b2595acadcfe5cb570a53b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 5028, "upload_time": "2019-10-28T15:10:41", "upload_time_iso_8601": "2019-10-28T15:10:41.689503Z", "url": "https://files.pythonhosted.org/packages/7c/9b/322c9a6de36ac79626e33a821db751a9c4953a272da5109276fccba8fe15/policykit-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "85f0b685ebf6fccf9ac169c1e03c3f93", "sha256": "1212d32515501f84475e3a844602ac50206420cd435bc4084a66699fa57c432a" }, "downloads": -1, "filename": "policykit-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "85f0b685ebf6fccf9ac169c1e03c3f93", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 5779, "upload_time": "2019-10-28T15:44:58", "upload_time_iso_8601": "2019-10-28T15:44:58.951889Z", "url": "https://files.pythonhosted.org/packages/38/ea/c34c629fa2123f49cac9bf0171c5c5883b903461d34f5c1bc1f9627dbd73/policykit-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f03eb963784d4fc69cf500980995701d", "sha256": "f0f51ff505be2766408d0f1b3c48fd4caa4922847ac6f8e275e68778e9680495" }, "downloads": -1, "filename": "policykit-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f03eb963784d4fc69cf500980995701d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 5147, "upload_time": "2019-10-28T15:45:00", "upload_time_iso_8601": "2019-10-28T15:45:00.650894Z", "url": "https://files.pythonhosted.org/packages/b4/e6/57dd3e87d0eb00409d165703292a9774fae5c219954cb6cdbfbc54674569/policykit-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "15aa6b5d707c86ee444c5309c4168fe5", "sha256": "39561e60e9d2d81e12b2ae164123e35096ea82a896e75f0809047ed72544e78d" }, "downloads": -1, "filename": "policykit-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "15aa6b5d707c86ee444c5309c4168fe5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 7265, "upload_time": "2019-10-29T16:39:12", "upload_time_iso_8601": "2019-10-29T16:39:12.568468Z", "url": "https://files.pythonhosted.org/packages/e2/a6/d373fa4d3885c5fa84debe0a17d80b3160e9d3a5c540cb3ca3162b27f93e/policykit-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "38728d199c21fdd548b8bb4d030d3f94", "sha256": "8b6d98515f8b4d509cdcf1f5dfdfccfe382c511c62ce8ac6898e49fa85874e23" }, "downloads": -1, "filename": "policykit-0.2.0.tar.gz", "has_sig": false, "md5_digest": "38728d199c21fdd548b8bb4d030d3f94", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 6652, "upload_time": "2019-10-29T16:39:14", "upload_time_iso_8601": "2019-10-29T16:39:14.475978Z", "url": "https://files.pythonhosted.org/packages/95/84/0f4b50128ff857d0c3c34ec9818cac7bdd47a1f6615aeece6996ba4a1a43/policykit-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "ba2d3b0afc96d270a8865448f5efd382", "sha256": "073d5a7efb278e6744ff0012c34d0eb97f619b5b9cec4c7ab1a3bee9d76cbd50" }, "downloads": -1, "filename": "policykit-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ba2d3b0afc96d270a8865448f5efd382", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8036, "upload_time": "2019-10-30T08:57:29", "upload_time_iso_8601": "2019-10-30T08:57:29.707518Z", "url": "https://files.pythonhosted.org/packages/0e/47/83013c2e958913ff3998c89d288973820122e0ad9a54650aef5d60c97ce9/policykit-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "65f03c4127acde697772afc9299afb91", "sha256": "f06f77209dc5bf38494b6def858ca60cb77decd57316491ee1f55c65a3fd250f" }, "downloads": -1, "filename": "policykit-0.2.1.tar.gz", "has_sig": false, "md5_digest": "65f03c4127acde697772afc9299afb91", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 7101, "upload_time": "2019-10-30T08:57:31", "upload_time_iso_8601": "2019-10-30T08:57:31.606735Z", "url": "https://files.pythonhosted.org/packages/fc/4f/18d47df93083bd4ea5188bb970bfa3ed74a7c34e4c9a6c8e285d30d2e20a/policykit-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "05b35ded03a3631985fa84a637d6e0a8", "sha256": "c1f1b0af258b0007add74f9fdd54b0c8da7f9e7d6812f860092c761ec55c015b" }, "downloads": -1, "filename": "policykit-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "05b35ded03a3631985fa84a637d6e0a8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8144, "upload_time": "2019-10-30T09:10:40", "upload_time_iso_8601": "2019-10-30T09:10:40.800765Z", "url": "https://files.pythonhosted.org/packages/74/f1/ad2c263c00b6cd995348a2a20af9a908407175f369d94a55355ffe78b134/policykit-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b1f3a1ff46c06410d11eb02efedc7d1e", "sha256": "3890ca22e9d0bf2588c56f0fbf73b4ec3997f009c4c931c803bf4a54055ea29a" }, "downloads": -1, "filename": "policykit-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b1f3a1ff46c06410d11eb02efedc7d1e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 7709, "upload_time": "2019-10-30T09:10:42", "upload_time_iso_8601": "2019-10-30T09:10:42.527770Z", "url": "https://files.pythonhosted.org/packages/f0/bc/34ac0f967afd171da7c1bade8519b3d0e0211458e43f21747445d6229159/policykit-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "6bc7730205c10b0bf86b50010d0db29c", "sha256": "edb0ab163da3cc9a596d32debaf4c07b4f0cca48e1bab906bad2c987056a29a3" }, "downloads": -1, "filename": "policykit-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6bc7730205c10b0bf86b50010d0db29c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8239, "upload_time": "2019-11-02T11:58:25", "upload_time_iso_8601": "2019-11-02T11:58:25.000277Z", "url": "https://files.pythonhosted.org/packages/b1/3a/08b8817d06bf7b55b9dcfa9f674b3699efdfd3ee3d78a8fe4188d3338ef8/policykit-0.3.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6c710efc0b308d4ba9854fed0e5cc8ba", "sha256": "e240c89738fb0e576938fcd1b407d963eb996c7a2a0aae636f3378ab80948b6b" }, "downloads": -1, "filename": "policykit-0.3.1.tar.gz", "has_sig": false, "md5_digest": "6c710efc0b308d4ba9854fed0e5cc8ba", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 8360, "upload_time": "2019-11-02T11:58:26", "upload_time_iso_8601": "2019-11-02T11:58:26.963547Z", "url": "https://files.pythonhosted.org/packages/ec/cf/de430d6df0a5de9e365bf24a572c47f7a57f7dd65e0d8c03134f3dd8b785/policykit-0.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "04df8d6229fa498fdfd1ee875395915a", "sha256": "dfc04f90cc5cb6fcac9fbb6c845d5c73439535a2c492c14856aff3a3e8cf3709" }, "downloads": -1, "filename": "policykit-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "04df8d6229fa498fdfd1ee875395915a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8857, "upload_time": "2020-03-22T12:50:22", "upload_time_iso_8601": "2020-03-22T12:50:22.405029Z", "url": "https://files.pythonhosted.org/packages/02/24/09f64a4c7a26da318708d5426869d26c89cc133420be8e6510494d469b2c/policykit-0.4.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "125e4a691d1b1bd1f36e27df66a99fd3", "sha256": "d1a6e1bc00b00efd82ac61a6808ec0de3b7b9cf0169277047d960e52edb5b53f" }, "downloads": -1, "filename": "policykit-0.4.0.tar.gz", "has_sig": false, "md5_digest": "125e4a691d1b1bd1f36e27df66a99fd3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 9109, "upload_time": "2020-03-22T12:50:24", "upload_time_iso_8601": "2020-03-22T12:50:24.030016Z", "url": "https://files.pythonhosted.org/packages/ff/5b/c88a34e7b66f77a792b616fc4f92b542f60f14c39d3b6fcad0a4b562f5bc/policykit-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "04df8d6229fa498fdfd1ee875395915a", "sha256": "dfc04f90cc5cb6fcac9fbb6c845d5c73439535a2c492c14856aff3a3e8cf3709" }, "downloads": -1, "filename": "policykit-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "04df8d6229fa498fdfd1ee875395915a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8857, "upload_time": "2020-03-22T12:50:22", "upload_time_iso_8601": "2020-03-22T12:50:22.405029Z", "url": "https://files.pythonhosted.org/packages/02/24/09f64a4c7a26da318708d5426869d26c89cc133420be8e6510494d469b2c/policykit-0.4.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "125e4a691d1b1bd1f36e27df66a99fd3", "sha256": "d1a6e1bc00b00efd82ac61a6808ec0de3b7b9cf0169277047d960e52edb5b53f" }, "downloads": -1, "filename": "policykit-0.4.0.tar.gz", "has_sig": false, "md5_digest": "125e4a691d1b1bd1f36e27df66a99fd3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 9109, "upload_time": "2020-03-22T12:50:24", "upload_time_iso_8601": "2020-03-22T12:50:24.030016Z", "url": "https://files.pythonhosted.org/packages/ff/5b/c88a34e7b66f77a792b616fc4f92b542f60f14c39d3b6fcad0a4b562f5bc/policykit-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }