• Stars
    star
    138
  • Rank 264,508 (Top 6 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created about 2 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The Compliance Validator

Lula - The Kubernetes Compliance Engine

Go version OpenSSF Scorecard

Lula is a tool written to bridge the gap between expected configuration required for compliance and actual configuration.

Cloud Native Infrastructure, Platforms, and applications can establish OSCAL documents that live beside source-of-truth code bases. Providing an inheritance model for when a control that the technology can satisfy IS satisfied in a live-environment.

This can be well established and regulated standards such as NIST 800-53. It can also be best practices, Enterprise Standards, or simply team development standards that need to be continuously monitored and validated.

Why this approach vs a policy engine?

  • Lula is not meant to compete with policy engines - rather augment the auditing and alerting process
  • Often admission control processes have a difficult time establishing big picture global context control satisfaction
  • Lula is meant to allow modularity and inheritance of controls based upon the components of the system you build

How does it work?

Under the hood, Lula has two primary capabilities; Provider and Domains.

  • A Domain is an identifier for where to collect data to be validated
  • A Provider is the "engine" performing the validation using policy and the data collected.

In the standard CLI workflow:

  • Target a Component-Definition OSCAL file for validation
    • lula validate oscal-component.yaml
  • This creates an object in memory for the OSCAL content
  • Lula then traverses as required to identify implemented-requirements that contain a Lula Validation Payload
  • When the payload has been identified:
    • Lula processes provider to understand which provider to use for validation
      • More than one provider can be used in an OSCAL document
    • Lula processes the domain to understand how data is collected (and which data to collect)
    • Lula collects the data for validation as specified in the payload
    • Lula performs validation of the data collected as specified as policy in the payload

Getting Started

Try it out

Dependencies

  • A running Kubernetes cluster
    • Kind
      • kind create cluster -n lula-test
    • K3d
      • k3d cluster create lula-test
  • kubectl
  • GoLang version 1.22.x

Steps

  1. Clone the repository to your local machine and change into the lula directory

    git clone https://github.com/defenseunicorns/lula.git && cd lula
  2. While in the lula directory, compile the tool into an executable binary. This outputs the lula binary to the bin directory.

    make build
  3. Apply the ./demo/namespace.yaml file to create a namespace for the demo

    kubectl apply -f ./demo/namespace.yaml
  4. Apply the ./demo/pod.fail.yaml to create a pod in your cluster

    kubectl apply -f ./demo/pod.fail.yaml
  5. Run the following command in the lula directory:

    ./bin/lula validate -f ./demo/oscal-component.yaml

    The output in your terminal should inform you that the control validated is not-satisfied:

     NOTE  Saving log file to
       /var/folders/f7/8csz3jj97lb8nqp_zv9kh07m0000gn/T/lula-2024-01-24-13-51-58-2247835644.log
      •  UUID: c759a19b-d408-424c-8342-298f45e18b68                                                                                                                                                                                                                   
      •  Status: not-satisfied                                                                                                                                                                                                                                        
      ✔  Validating Implemented Requirement - 42C2FFDC-5F05-44DF-A67F-EEC8660AEFFD                                                                                                                                                                                    
      •  Writing Security Assessment Results to: assessment-results-01-24-2024-13:51:58.yaml

    This will also produce an assessment-results file with timestamp - review the findings and observations:

      findings:
        - description: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,  quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum  dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
          related-observations:
            - observation-uuid: ef12a3bb-fd86-4336-9d28-98d00c7dc26d
          target:
            status:
              state: not-satisfied
            target-id: ID-1
            type: objective-id
          title: 'Validation Result - Component:A9D5204C-7E5B-4C43-BD49-34DF759B9F04 / Control Implementation: A584FEDC-8CEA-4B0C-9F07-85C2C4AE751A / Control:  ID-1'
          uuid: c759a19b-d408-424c-8342-298f45e18b68
      observations:
        - collected: "2024-01-24T13:51:58-08:00"
          description: |
            [TEST] ID-1 - a7377430-2328-4dc4-a9e2-b3f31dc1dff9
          methods:
            - TEST
          relevant-evidence:
            - description: |
                Result: not-satisfied - Passing Resources: 0 - Failing Resources 1
          uuid: ef12a3bb-fd86-4336-9d28-98d00c7dc26d
  6. Now, apply the ./demo/pod.pass.yaml file to your cluster to configure the pod to pass compliance validation:

    kubectl apply -f ./demo/pod.pass.yaml
  7. Run the following command in the lula directory:

    ./bin/lula validate -f ./demo/oscal-component.yaml

    The output should now show the pod as passing the compliance requirement:

     NOTE  Saving log file to
       /var/folders/f7/8csz3jj97lb8nqp_zv9kh07m0000gn/T/lula-2024-01-24-13-54-19-2423960428.log
      •  UUID: c3e4ccb2-6843-4ec2-a500-559cdd7918d5                                                                                                                                                                                                                   
      •  Status: satisfied                                                                                                                                                                                                                                            
      ✔  Validating Implemented Requirement - 42C2FFDC-5F05-44DF-A67F-EEC8660AEFFD                                                                                                                                                                                    
      •  Writing Security Assessment Results to: assessment-results-01-24-2024-13:54:19.yaml

    This will produce a new assessment-results file with timestamp - review the findings and observations:

      findings:
        - description: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,  quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum  dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
          related-observations:
            - observation-uuid: 84a169a1-74d6-4e26-bbfb-4dfc474c7790
          target:
            status:
              state: satisfied
            target-id: ID-1
            type: objective-id
          title: 'Validation Result - Component:A9D5204C-7E5B-4C43-BD49-34DF759B9F04 / Control Implementation: A584FEDC-8CEA-4B0C-9F07-85C2C4AE751A / Control:  ID-1'
          uuid: c3e4ccb2-6843-4ec2-a500-559cdd7918d5
      observations:
        - collected: "2024-01-24T13:54:19-08:00"
          description: |
            [TEST] ID-1 - a7377430-2328-4dc4-a9e2-b3f31dc1dff9
          methods:
            - TEST
          relevant-evidence:
            - description: |
                Result: satisfied - Passing Resources: 1 - Failing Resources 0
          uuid: 84a169a1-74d6-4e26-bbfb-4dfc474c7790

Future Extensibility

  • Support for cloud infrastructure state queries

Developing

  • Go 1.22.x

More Repositories

1

zarf

DevSecOps for Air Gap & Limited-Connection Systems. https://zarf.dev/
Go
341
star
2

leapfrogai

Production-ready Generative AI for local, cloud native, airgap, and edge deployments.
Python
250
star
3

pepr

Type safe K8s middleware for humans
TypeScript
123
star
4

zarf-package-software-factory

Pre-built Zarf Package of a Software Factory (a.k.a. "DI2-ME")
Go
33
star
5

uds-cli

Go
26
star
6

uds-package-dubbd

Defense Unicorns Big Bang Distro
Shell
25
star
7

uds-core

A secure runtime platform for mission-critical capabilities
TypeScript
21
star
8

tadpole

The fastest way to get started with LeapfrogAI
Makefile
20
star
9

go-oscal

Repository for the generation of OSCAL data types
Go
14
star
10

maru-runner

The Unicorn Task Runner
Go
10
star
11

leapfrogai-api

LeapfrogAI API
Python
8
star
12

uds-package-software-factory

Replaced by https://github.com/defenseunicorns/uds-software-factory
Go
8
star
13

component-generator

Generate and aggregate OSCAL component definition files
Go
7
star
14

uds-rke2-image-builder

Packer builds to produce STIG'd RKE2 images
HCL
7
star
15

bigbang-architecture-diagrams

Architecture diagrams for Platform One's Big Bang
7
star
16

zarf-package-bare-metal

[experimental] A package to deploy Zarf on bare metal machines
Shell
6
star
17

zarf-website

Public website for Zarf
TypeScript
5
star
18

bigbang-oscal-component-generator

(likely temporary) location for a CLI tool that generates an oscal-component.yaml file for Big Bang by collecting all subcomponents
Go
5
star
19

pepr-keycloak-authsvc

Pepr Keycloak AuthSvc Reusable Capability
TypeScript
5
star
20

zarf-package-k3d-airgap

Deploy k3d in an air-gapped environment
Shell
5
star
21

zarf-package-dev-dependencies

An example / experiment on how to include development dependencies inside of a Zarf package
Shell
5
star
22

uds-marketplace

Svelte
5
star
23

uds-package-mattermost

🏭 UDS Mattermost Zarf Package
TypeScript
5
star
24

sparkle-academy

Repo for Sparkle Academy exercises
HCL
4
star
25

leapfrogai-backend-rag

Python
4
star
26

grimoire

A collection of scripts and utilities to help unicorns do their jobs efficiently and effectively!
Shell
4
star
27

leapfrogai-images

Chainguard-derived images for LeapfrogAI
Makefile
4
star
28

uds-capability-rook-ceph

Makefile
3
star
29

doug-translate

Svelte
3
star
30

zarf-docs

JavaScript
3
star
31

bigbang-bootstrap-template

Template repository for bigbang bootstraps and demos.
3
star
32

leapfrogai-backend-ctransformers

ctransformers wrapper for model inferencing
Python
3
star
33

packages

Zarf Packages
Svelte
3
star
34

terraform-aws-iam-ra-demo

A Terraform generation module to build IAM Roles Anywhere artifacts demo both NPE and CAC temporary role granting
HCL
3
star
35

leapfrogai-backend-llama-cpp-python

LeapfrogAI backend using llama-cpp-python
Python
3
star
36

zarf-init-aws

Zarf Init Package for AWS - DevSecOps for Air Gap & Limited-Connection Systems. https://zarf.dev/
TypeScript
3
star
37

zarf-init-longhorn

Zarf Init Package for Longhorn - DevSecOps for Air Gap & Limited-Connection Systems. https://zarf.dev/
Mustache
3
star
38

pepr-excellent-examples

Welcome to the Pepr Examples Repository!
TypeScript
3
star
39

narwhal-delivery-zarf-package-eks-addons

Handles zarf packaging of multiple add-ons for EKS
Makefile
3
star
40

uds-security-hub-v1-archive

All things about securing UDS
Go
2
star
41

common-go

Common libraries for 🦄 go things
2
star
42

asdf-zarf

asdf plugin for Zarf (Not officially adopted, use at your own risk)
Shell
2
star
43

zarf-package-rke2-init

An alternative zarf init package that deploys rke2
Shell
2
star
44

doc-site-template

Template repository for creating product documentation
SCSS
2
star
45

uds-package-arc

UDS Package for GitHub Actions Runner Controller
2
star
46

sbom-cli

Go
2
star
47

leapfrogai-docs

Merged into LeapfrogAI main repo
SCSS
2
star
48

leapfrog-model-skeleton

Smarty
2
star
49

uds-common

Common tasks for UDS Packages
2
star
50

leapfrogai-backend-vllm

Python
2
star
51

leapfrogai-backend-text-embeddings

LeapfrogAI backend for text embedding generation
Python
2
star
52

asdf-opentofu

ASDF plugin for OpenTofu
Shell
2
star
53

asdf-git-xargs

ASDF plugin for the git-xargs tool
Shell
2
star
54

uds-support-charts

A Zarf skeleton package for deploying applications using flux
2
star
55

delivery-zarf-init

2
star
56

big-bang-app

HCL
1
star
57

uds-capability-gitlab

Platform One Gitlab deployed via flux
Shell
1
star
58

uds-idam

TypeScript
1
star
59

kubeflow-pipelines

Smarty
1
star
60

leapfrogai-grpc

Shared Protobufs and gRPC Code for LeapfrogAI
1
star
61

uds-sso

TypeScript
1
star
62

svelte-pdf-viewer

Svelte
1
star
63

uds-common-workflows

Repository containers common github workflows and actions for UDS
1
star
64

delivery-nutanix-deployments

HCL
1
star
65

baffles-infra

A repository containing scripts to bootstrap Kubernetes with Baffles on various cloud and on-prem providers.
HCL
1
star
66

data-derby-weather-forecaster-serving

Python
1
star
67

unicorn-academy

Repository for all things Unicorn Academy.
Svelte
1
star
68

zarf-public-test

A test repository for Zarf `git` pushing / pulling
1
star
69

leapfrog-chat

An internal, RLHF-oriented example of a chat app using LeapfrogAI's tooling
JavaScript
1
star
70

medium-gists

Not large gists, or small ones for that matter. But Medium ones.
1
star
71

uds-leapfrogai

A UDS Capability for AI for National Security
1
star
72

zarf-ui

Web User Interface for Zarf - DevSecOps for Air Gap & Limited-Connection Systems. https://zarf.dev/
TypeScript
1
star
73

uds-capability-redis

Bigbang Redis deployed via flux by zarf
Go
1
star
74

uds-package-sonarqube

🏭 UDS Sonarqube Zarf Package
TypeScript
1
star