Giter VIP home page Giter VIP logo

gapps's Introduction

Gapps

☁️ Try the SaaS app
❄️ View the Gapps site

Table of Contents

  1. About
  2. Getting Started
  3. Supported Frameworks
  4. Roadmap
  5. Things to know
  6. FAQ

New Features ❄️

  • SOC2, NIST CSF, NIST-800-53, CMMC, HIPAA, ASVS, ISO27001, CSC CIS18, PCI DSS and SSF have been added! That makes 10 total frameworks
  • Total revamp of the UI
  • Multi-tenancy is now supported!
  • Collaboration with auditors
  • Vendor Questionnaires
  • Add evidence directly to Gapps

Next big features ❄️

About

Gapps is an Security compliance platform that makes it easy to track your progress against various security frameworks. Gapps is currently in Alpha mode - while it works great, there may be some breaking changes as it evolves. Please do not use this in production.... yet!.

  • Supports 10 security compliance frameworks (more coming)
  • 1500+ controls and 25+ policies out of the box for the frameworks (majority of policies are sourced from strongdm/comply)
  • Track the status of each control
  • Add custom controls/policies
  • WYSIWYG content editor
  • Vendor questionnaires

Captures from the platform

Control Dashboard
Project Overview
Track Progress of Controls

Getting Started

Setting up the server with Docker in 2 minutes

The following instructions are to get you started very quickly. The image will be pulled from Docker Hub

$ git clone https://github.com/bmarsh9/gapps.git; cd gapps
$ docker-compose up -d

The server should be running on http://<your-ip>:5000
The default email/password is [email protected]:admin

Next, create a Tenant and a Project with you desired framework (e.g. SOC2). Based on the selected criteria, controls and policies will be automatically added to your project. Start exploring your project!

Email

You can setup email (for sending user invites) as well by setting the following environment variables (docker-compose file or elsewhere)

MAIL_SERVER : default ‘localhost’
MAIL_PORT : default 25
MAIL_USERNAME : default None
MAIL_PASSWORD : default None
MAIL_USE_TLS : default False
MAIL_USE_SSL : default False
MAIL_DEBUG : default app.debug
MAIL_DEFAULT_SENDER : default None
MAIL_MAX_EMAILS : default None
MAIL_SUPPRESS_SEND : default app.testing
MAIL_ASCII_ATTACHMENTS : default False
Hostname

Set your ENV instance hostname so that invites and emails will have the correct URL. The forward slash at the end of the URL is required!

HOST_NAME=https://your-host.com/

Supported frameworks

  • SOC2
  • CMMC
  • ASVS
  • ISO27001
  • HIPAA
  • NIST CSF
  • NIST 800-53
  • CSC CIS 18
  • PCI DSS
  • SSF (custom framework "Startup Security Framework")

Roadmap

Take a look at the project

Things to know

  • The mitigation details of the controls are not documented. So it won't tell you how to mitigate a specific control. This requires a ton of work to complete but there is a ticket
  • Difficulty to Implement (dtc) is a field attached to the controls and every single control is labeled as "Easy" (that doesn't actually mean it is easy). This also requires a ton of work to update.

FAQ

If you get a database connection error trying to start Gapps, you need to update (or remove) your env variables
[INFO] Checking if we can connect to the database server: postgresql://db1:db1@localhost/db1
[ERROR] could not connect to server: Connection refused
        Is the server running on host "localhost" (127.0.0.1) and accepting
        TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
        Is the server running on host "localhost" (::1) and accepting
        TCP/IP connections on port 5432?

Can usually be fixed by unsetting two variables if running within docker. If you want to use a external database, see the next FAQ

unset SQLALCHEMY_DATABASE_URI
unset POSTGRES_HOST
Set env variables for the database connection

The value db1 is the default value for the username, database and password. If you would like to change it, update db1 with the respective values and postgres for the host.

export POSTGRES_HOST=${POSTGRES_HOST:-postgres}
export POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-db1}
export POSTGRES_USER=${POSTGRES_USER:-db1}
export POSTGRES_DB=${POSTGRES_DB:-db1}
export SQLALCHEMY_DATABASE_URI="postgresql://db1:db1@postgres/db1"
Resetting the database

When starting Gapps for the first time, it will automatically create the database models. If you want to reset the data (e.g. delete all data), you can set the RESET_DB env variable such as export RESET_DB=yes.

Running Gapps for development

Sometimes you may want to run Gapps outside of Docker. You can do this by starting the Postgres container and then starting Gapps in the foreground.

  1. Uncomment ports declaration here
  2. Start the postgres container: docker-compose up -d postgres
  3. Set the following env variables:
export POSTGRES_HOST=${POSTGRES_HOST:-localhost}
export POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-db1}
export POSTGRES_USER=${POSTGRES_USER:-db1}
export POSTGRES_DB=${POSTGRES_DB:-db1}
export SQLALCHEMY_DATABASE_URI="postgresql://db1:db1@localhost/db1"
  1. Run export FLASK_CONFIG=development;bash run.sh
  2. Gapps should be running and connected to the database. You can now make changes to the code.
Running with Docker Desktop
  1. Download the docker-compose.yml file
  2. Open up a elevated command prompt and change directories (cd) to where the docker-compose.yml file was downloaded (likely Downloads)
  3. Run docker compose up
View env variables for debugging
docker exec -e ONESHOT=yes gapps env
Perform database migration
docker exec -e INIT_MIGRATE=yes -e MIGRATE=yes -e ONESHOT=yes gapps bash run.sh

OR

docker-compose up -d
docker exec -it gapps bash
python3 manage.py db migrate
python3 manage.py db stamp head
python3 manage.py db upgrade
exit
Creating database manually

Warning - this will delete all data in the database!

docker exec -it gapps bash
python3 tools/check_db_connection.py
python3 tools/check_db_models.py
python3 manage.py init_db
Upgrading versions

1.) Edit docker-compose.yml file with the desired version from Docker Hub. Anywhere you see the old version in the compose file (should be 4 instances), update it with the desired version. (e.g. bmarsh13/gapps:3.3.9 -> bmarsh13/gapps:3.4.0)
2.) docker-compose up -d
3.) Perform database migration if neccesary

Loading new frameworks into Gapps

You can always create a new Framework and controls within the UI - but this would take a long time. Instead, you can load a JSON file into Gapps.

The format consists of controls and subcontrols. The snippet below shows an example of a control having one (1) subcontrol however you can add as many as you like. It is not a requirement to have subcontrols for a control (you can have zero). However it may make sense if you want to break down a control into specific actions that are trackable. Let's take the CIS 18 framework as an example. You could place all 18 "domains" as controls and the controls within each domain would be a subcontrol within Gapps.

[
    {
        "name": "Limit information system access to authorized users, processes acting on behalf of authorized users or",       
        "description": "Maintain list of authorized users defining their identity and associated role and sync with sys",       
        "guidance": "List approved users, services, and devices, and have logical controls in place to prevent unauthor",
        "ref_code": "AC.L1-3.1.1",
        "system_level": false,
        "subcategory": "Identity & Access Management (IAM)",
        "category": "Access Control",
        "dti": "easy",
        "dtc": "easy",
        "meta": {},
        "subcontrols": [
            {
                "ref_code": "3.1.1.a",
                "name": "Authorized users are identified.",
                "description": "Authorized users are identified.",
                "meta": {},
                "tasks": [
                    {
                        "title": "title of the task",
                        "description": "description of the task"
                    }
                ]
            }
        ]
    }
}

Next, save the above JSON format into a file (such as my_framework.json but it must end with .json). The name of your framework will be taken from the filename when Gapps loads it (my_framework in this case). Save the file in the app/files/base_controls/ directory. You can also change the load directory by setting the FRAMEWORK_FOLDER env variable. Once your new framework is saved to a file and sitting in the framework directory, you can go ahead and create a new Tenant within the UI. Gapps will load your framework automatically. If you want to add a framework to a existing Tenant, go to the "Tenants" page, edit the Tenant and click the "Reload Frameworks" button.

Building and pushing
docker build -t gapps:3.4.3 .
docker tag gapps:3.4.3 bmarsh13/gapps:3.4.3
docker push bmarsh13/gapps:3.4.3
API Authentication

You can generate an API token by viewing the following route in your browsers

# Create token that expires in 15 minutes
<gapps-host>/api/v1/token

# Create token that expires in 30 seconds
<gapps-host>/api/v1/token?expiration=30

# Create token that never expires
<gapps-host>/api/v1/token?expiration=0

And here is how you use the token to authenticate (curl as an example)

TOKEN="TOKEN HERE"
curl <gapps-host>/api/v1/tenants -H "token: $TOKEN"

gapps's People

Contributors

bmarsh9 avatar dependabot[bot] avatar

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

gapps's Issues

Add document storage and linking to controls

Add a document management/storage system with the ability to link documents to specific controls as evidence. Ideally with markup capabilities so assessors can reference the documents within the application without leaving it.

Improve developers documentation

Currently, there is a lack of documentation

  • What is the project structure?
  • How to add new frameworks?
  • How to make a mapping (policy-controls)?
  • etc

SSO with OIDC

Possibility to authenticate using Azure AD or Google etc. with OIDC would be great.

Expanding menubar

Is there a way to make the menu bar on left expand when mouse is hovered over it or maybe by a click of button?

Considerations for the name

I think it may be beneficial to rethink the name of this application. "Gapps" as a moniker is already used for the android google apps suite (See xda developers) as well some professional organizations. Additionally, (to me at least) doesn't indicate what the application does exactly. Perhaps at some point consider a more unique and telling name for the application. ChatGPT could potentially be useful here.

Sample selection

I think it makes sense to include sample selection in the software for evidence control and management. This can be done two ways, the easy way would be to implement a numbers tool, which allows input of a range of numbers (rows) and the number of, or percentage or rows.

The second more intensive option would be to allow import of an excel or csv and the same range input mentioned above, but have the software automatically the select the samples themselves from the evidence.

Ideally these samples could then be linked to specific controls, but this could be considered a separate issues.

Delete projects from the frontend

Currently its not possible to delete a project once it is created. Would be good to delete a project and that it asks for confirmation so its not done by mistake.

Error while creating an empty project

When trying to add a empty project to a tenant I get an error.

This was done on a fresh instance (just created the tenant) :

Capture d’écran du 2023-04-21 17-46-11

Thanks for the job done so far, seems very promising project ...

Create new model for adding Findings from integrations

In version 3.1.2 - we have added a task scheduler - which is the base requirements for adding integrations. Now that we have the scheduler, we should create a new database Model called "Findings".

When a integration is executed (e.g. Checking Github for branch protection rules) and a finding is generated, this can be added to the Findings model

Implementation levels

Instead of percentage wouldn't it better to add not implemented - partially implemented - implemented. 🤔🤔 or am i missing something?

UI enhancement

Current UI is very functional but needs improvement in multiple areas. This ticket will be used to capture future enhancements

Improve: Add Security Policy

Hi all,

I found a vulnerability and I would like to report it to improve the security of gapps. Could you please add a Security.md to enable collaborators to report vulnerabilities.

Implement multi-tenancy

Multiple tenants (with projects in each tenant). Roles are implemented to restrict who can view specific tenants

Dockerfile and images on docker hub are differents

Hello,
is it correct that images on docker hub are not built on the same way than the Dockerfile in this repository ?

I have try to use but I never have the same behaviour...
Can you help me on this please ?

Licensing

Hi just a heads up on licensing, from the Creative Commons FAQ: https://creativecommons.org/faq/#can-i-apply-a-creative-commons-license-to-software

We recommend against using Creative Commons licenses for software. Instead, we strongly encourage you to use one of the very good software licenses which are already available. We recommend considering licenses listed as free by the Free Software Foundation and listed as “open source” by the Open Source Initiative.

Unlike software-specific licenses, CC licenses do not contain specific terms about the distribution of source code, which is often important to ensuring the free reuse and modifiability of software. Many software licenses also address patent rights, which are important to software but may not be applicable to other copyrightable works.

Additionally, our licenses are currently not compatible with the major software licenses, so it would be difficult to integrate CC-licensed work with other free software. Existing software licenses were designed specifically for use with software and offer a similar set of rights to the Creative Commons licenses.

Since you chose CC-BY-NC-ND license you should probably stick with "source available" software licenses or something like Prosperity Public License (A non-commercial software license), Business Source License (Recently adopted by LightBend / Akka and other big projects), or Fair Source License

There are also some Copy-far-left or Copyfair Licenses that could be appealing to you as similar to CC-BY-NC-ND: https://github.com/LibreCybernetics/awesome-copyfarleft

Improve API documentation

Issue:
Based on thread in Discord
1.) About 80% of the functionality is exposed through the API. The ability to call the API from a external entity is supported as well but undocumented. So yes it will be fully supported, but there isn't a Github issue to track this yet..

Solution:
Provide API documentation

Create audit feedback pages

Implement a new feature that allows a team to upload evidence mark the control as "Ready for review"

The auditor can then review the control, uploaded evidence and mark it as Done, Needs work, leave notes, etc

Wrong parameters used for testing connection using psycopg2

Hi,

Normally I would take some time to test and provide a pull request. But currently no time sorry.

The issue is that I noticed the gapps-worker container failing to test the connection to the database. I disabled the container and the system works ok for just one user.

I did look for a cause and I think it is in tools/check_db_connection.py
psycopg2 is used with the sqlalchemy uri, but what I have read it is psycopg version 3 (in beta I think) that can do that. psycopg2 take a dict as parameter to connect to the database.

I used these 2 discussions from stackoverflow as reference.
https://stackoverflow.com/questions/15634092/connect-to-an-uri-in-postgres
https://stackoverflow.com/questions/62113733/how-connect-postgresql-database-with-sqlalchemy-python

Regards, Arjen

Create Projects with CMMC levels

Can't create CMMC projects levels 1-3 since currently a CMMC project has all the controls 238 controls. Would like to be able to create a CMMC 2.0 Level 1 project with 17 controls.

Modify code to Support integrations

We want to be able to support integrations in Gapps so that we can check for controls automatically. Currently Gapps uses self attestation (the user gathers and inputs the evidence) however the end goal is added automatic evidence collection.

This issue will cover the following:

  • Modify code and architecture to support integrations (may be Redis)
  • Document how to add new integrations

Requirements:

  • Integrations must be scoped to the projects
  • Must be extensible (users can upload their own integrations) with python code

Document the mitigation for the focus areas in SOC2

The mitigations are currently empty for the SOC2 focus areas. Need to go through each one and write a sentence or two about how the user can achieve compliance.

Currently it is not a huge deal b/c your auditor will be the final judge... but it would still be a great thing to add.

Code clean up

There is a good amount of code clean up that can be captured in the comments of this ticket

Consider buttons for each function vs Elipsis when possible

The use of ellipses as opposed to buttons causes the available functionality to not be immediately clear. The use of simple buttons for each function is more user friendly and allows the user to immediately understand what the available options are. (Not super important)
Elipsis

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.