Git Product home page Git Product logo

comply's Introduction

Comply

Comply is a SOC2-focused compliance automation tool:

  • Policy Generator: markdown-powered document pipeline for publishing auditor-friendly policy documents
  • Ticketing Integration: automate compliance throughout the year via your existing ticketing system
  • SOC2 Templates: open source policy and procedure templates suitable for satisfying a SOC2 audit

Installation

macOS:

brew tap strongdm/comply; brew install comply

Linux:

Download latest release

Go users:

go get github.com/strongdm/comply

Get Started

Start with comply init:

$ mkdir my-company
$ cd my-company
$ comply init

Once comply init is complete, just git init and git push your project to a new repository. You're ready to begin editing the included policy boilerplate text.

Discussion

Join us in Comply Users

Screenshots

Demo video

Start a Project

screencast 1

Build PDFs

screencast 4 pdf example

Track Policy Coverage

screencast 3

Dashboard

screencast 2

Dependencies

Comply relies on pandoc, which can be installed directly as an OS package or invoked via Docker.

CLI

NAME:
   comply - policy compliance toolkit

USAGE:
   comply [global options] command [command options] [arguments...]

COMMANDS:
     init             initialize a new compliance repository (interactive)
     build, b         generate a static website summarizing the compliance program
     procedure, proc  create ticket by procedure ID
     scheduler        create tickets based on procedure schedule
     serve            live updating version of the build command
     sync             sync ticket status to local cache
     todo             list declared vs satisfied compliance controls
     help, h          Shows a list of commands or help for one command

Running in Docker

Comply is currently only released for Linux and macOS, however from other operating systems it's possible to run using Docker:

# first pull the latest published docker image
$ docker pull strongdm/comply

# from an empty directory that will contain your comply project
$ docker run --rm -v "$PWD":/source -p 4000:4000 -it strongdm/comply
root@ec4544732298:/source# comply init
โœ— Organization Name:

# serve content live from an established project
$ docker run --rm -v "$PWD":/source -p 4000:4000 -it strongdm/comply
root@ae4d499583fc:/source# comply serve
Serving content of output/ at http://127.0.0.1:4000 (ctrl-c to quit)

For Windows users, replace $PWD with the full path to your project directory

Running in macOS M1

If you're running Comply inside Docker, or using it installed by HomeBrew, in a macOS M1, you should increase the Docker allocatable memory space to ~7 GB, but it won't run smoothly. So, we recommend to run Comply locally with pandoc binary installed via HomeBrew. For that, install the pandoc and basictex packages using the following command:

brew install pandoc basictex

Then when running the Comply binary -installed by HomeBrew- it will work as expected.

Ticketing Integrations:

  • Jira
  • Github
  • Gitlab

Configuration

GitHub

Ticketing integration with GitHub can be configured with the following YAML in comply.yml:

tickets:
  github:
    repo: <repo-name>
    token: <token>
    username: org or personal username

If you're setting up the repo in your personal account, set username to your username. If you're setting up the repo in an github organization, set username to your org's username instead.

Also, GITHUB_REPO, GITHUB_TOKEN, and GITHUB_USERNAME can be used to override values from the YAML file.

Jira

When comply creates a ticket (through proc, for instance), it sets the following fields.

  • assignee
  • description
  • issuetype
  • labels
  • project key
  • reporter
  • summary

Please make sure that the default Create Screen has all of those fields enabled. Additionally, make sure that there are no other required fields for the issue type you choose.

About authentication, you need to create an API Token to use as a password.

Forking and local development

Assumes installation of golang and configuration of GOPATH in .bash_profile, .zshrc, etc Inspiration: http://code.openark.org/blog/development/forking-golang-repositories-on-github-and-managing-the-import-path

$ go get github.com/strongdm/comply
$ cd $GOPATH/src/github.com/strongdm/comply ; go get ./...
$ make
$ cd example
$ mv comply.yml.example comply.yml
$ ../comply -h
$ ../comply sync
$ ../comply serve
#
$ make # recompile as needed with in $GOPATH/src/github.com/strongdm/comply

comply's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

comply's Issues

procedures with YML syntax errors generate panic during serve

panic: Malformed metadata markdown in /Users/jmccarthy/tmp/will/procedures/offboarding.md, must be of the form: YAML\n---\nmarkdown content

goroutine 25 [running]:
github.com/strongdm/comply/internal/model.loadMDMD(0xc4205c0080, 0x33, 0x4, 0x0, 0x0, 0x20)
	/private/tmp/comply-20180615-48154-14fvegh/comply-1.2.5/src/github.com/strongdm/comply/internal/model/fs.go:183 +0x241
github.com/strongdm/comply/internal/model.ReadProcedures(0xc4202ac200, 0x1b, 0x20, 0x0, 0x0)

Onboard new user: Frank Sinatra

Onboarding Steps

  • Determine github username and assign to correct Org
  • Create Slack account
  • Determine and assign IAM role

Attach Evidence

No evidence beyond activity logs within Slack, Github

Gitlab Integration

Hey Justin,

Cool project, I'm kicking the tires on using this for an upcoming compliance project.

If I or someone on my team wanted to contribute a gitlab integration, would that be ok? Do you have any contribution guidelines?

We're not a golang shop, but your github/jira implementations (in /internal) seem straight forward enough to replicate.

I would assume that we'd have to use:

https://github.com/xanzy/go-gitlab

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault

Process-ID: workstation
Name: Collect Workstation Details

Procedure-ID: workstation

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

View Documents in HTML by Default

It would be most excellent if documents could be viewed in HTML by default, with the option to download to PDF.

Use case: It's much easier for users to access content in HTML than PDF. PDFs are hard to parse and search through imo.

Thank you!

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault

Process-ID: Fish

Apply OS patches

Production Environment

  • View patchlevel report in OpenVAS
  • Apply patches using Ansible playbooks
    • AWS us-west-2
    • Reston Datacenter

Procedure-ID: patch

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault

Procedure-ID: workstation

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

Docker Requirement?

I'm wondering why the requirement for Docker in the comply build? I think pandoc is the only requirement being met by Docker? For OS X people you're already doing a homebrew install. Would it be easier to install pandoc instead of requiring gigs and gigs of a docker install to be there already?

CWD

Stuff

Process-ID: Fish

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

Fresh install doesn't build

After init'ing from homebrew and running comply init and following prompts, running comply build yields this:

Please install either Docker or the pandoc package and re-run `build`

Both docker and pandoc are installed. Could this be a gopath issue?

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

panic on ticketSystem when none is selected

running on mac
version 1.2.3
docker 18.05.0-ce-mac66

$ comply init
company name
none selected for ticketing
$ comply build

panic: (model.TicketSystem) (0x14f9da0,0xc4205acbb0)

goroutine 22 [running]:
github.com/strongdm/comply/internal/model.GetPlugin(0x15f16a9, 0x4, 0x0, 0x0)
	/private/tmp/comply-20180605-74529-1jhgc11/comply-1.2.3/src/github.com/strongdm/comply/internal/model/plugin.go:55 +0x213
github.com/strongdm/comply/internal/render.load(0x2, 0x2, 0x10dfaa0, 0xc420215d80)
	/private/tmp/comply-20180605-74529-1jhgc11/comply-1.2.3/src/github.com/strongdm/comply/internal/render/controller.go:102 +0x82e
github.com/strongdm/comply/internal/render.loadWithStats(0xc420270d50, 0x9, 0xc420215d80, 0x2)
	/private/tmp/comply-20180605-74529-1jhgc11/comply-1.2.3/src/github.com/strongdm/comply/internal/render/controller.go:112 +0x26
github.com/strongdm/comply/internal/render.html(0x15f3134, 0x6, 0x0, 0xc420382300, 0xc4203668d0)
	/private/tmp/comply-20180605-74529-1jhgc11/comply-1.2.3/src/github.com/strongdm/comply/internal/render/html.go:42 +0x845
created by github.com/strongdm/comply/internal/render.Build
	/private/tmp/comply-20180605-74529-1jhgc11/comply-1.2.3/src/github.com/strongdm/comply/internal/render/site.go:97 +0x1db```

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

Sorting standards not working as expected

https://github.com/strongdm/comply/blob/master/internal/render/controller.go#L82

The sort algorithm in Go library sorting for example:

A1
A11
A111
A2

Instead of:
A1
A2
A11
A111

I think a fix might look something like this: https://softwareengineering.stackexchange.com/questions/127639/why-do-some-sorting-methods-sort-by-1-10-2-3

But not sure, this is low priority, visual only. I am using FISMA NIST 800-53 standards that employ this type of formating: AC-1, AC-1(1), AC-1(2), etc.

Apply OS patches

Production Environment

  • View patchlevel report in OpenVAS
  • Apply patches using Ansible playbooks
    • AWS us-west-2
    • Reston Datacenter

Procedure-ID: patch

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault

Process-ID: workstation
Name: Collect Workstation Details

Procedure-ID: workstation

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

Apply OS patches

Production Environment

  • View patchlevel report in OpenVAS
  • Apply patches using Ansible playbooks
    • AWS us-west-2
    • Reston Datacenter

Procedure-ID: patch

Audit Request Workflow

Roughly:

  • Create "parent ticket" for new audit
  • Read XLS or CSV
  • Create ticket for each row
    • Link to parent
  • Tag all tickets audit

Assignments, due dates, etc will then be conducted as per usual. Comply Dashboard will update with audit progress as tickets are resolved.

Related: Audit tickets will ideally depend on Evidence Vault (encrypted attachments)

Jira ticketing integration

  • create ticket via comply proc
  • label ticket
  • find by label
  • encode & parse procedure metadata
  • create ticket via scheduler

Collect Workstation Details

Workstation Details

  • E-mail all users requesting confirmation of drive encryption
  • E-mail all users requesting confirmation of antivirus / antimalware configuration

Insert Evidence

Insert evidence into the Evidence Vault


Procedure-ID: workstation

CWD

Stuff

Process-ID: Fish

Apply OS patches

Production Environment

  • View patchlevel report in OpenVAS
  • Apply patches using Ansible playbooks
    • AWS us-west-2
    • Reston Datacenter

Procedure-ID: patch

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.