Sangam Biradar,
Principle Security Advocate ,Tenable
Is GitOps An Old Idea?
code commit
(multiple developer)
Build
Unit and Integration test
Create Application or
Service image
Functional Testing
user acceptance
test
Configuration automation
Load
testing
Deployement
write code
version control Repository
automated testing
Image Repository
Deploy
Kubernetes
GitOps Tooling Categories
● ‘Push’ GitOps deployment tools
● ‘Pull’ GitOps deployment tools
● Curated GitOps products
● Infrastructure-provisioning tools
● GitLab CI/CD (+ kubectl / Helm)
● GitHub Actions (+ kubectl / Helm)
● Kubestack
● ArgoCD
● Flux
● JenkinsX
Secrets Management
● Sealed secrets
○ Bitnami implementation
● Storing encrypted secrets directly
in your source repository
○ git-secret
○ git-crypt
○ BlackBox
● Storing secrets with source control
separately from source
○ GitLab protected variables
● Storing encrypted secrets with your source-control tool separately from
source
○ GitHub encrypted secrets
● Storing secrets with your cloud vendor in a secrets-management
system
○ AWS Secrets Manager
○ Google Cloud Secrets Manager
○ Azure Key Vault
● Integrating with a third party secrets-management tool
○ Hashicorp Vault
○ Mozilla SOPS
Moving to DevSecOps
Install Terrascan
$ curl -L "$(curl -s https://api.github.com/repos/tenable/terrascan/releases/latest | grep -o
-E "https://.+?_Darwin_x86_64.tar.gz")" > terrascan.tar.gz
$ tar -xf terrascan.tar.gz terrascan && rm terrascan.tar.gz
$ install terrascan /usr/local/bin && rm terrascan
$ terrascan
Install terrascan via brew
$ brew install terrascan
Docker Image
$ docker run tenable/terrascan
Command Line Options
$ terrascan
Terrascan
Detect compliance and security violations across Infrastructure as Code to
mitigate risk before provisioning cloud native infrastructure.
For more information, please visit https://runterrascan.io
Usage:
terrascan [command]
Available Commands:
help Provides usage info about any command
init Initialize Terrascan
scan Start scan to detect compliance and security violations across Iac.
server Run Terrascan as an API server
version Shows the Terrascan version you are currently using.
Flags:
-c, --config-path string config file path
-h, --help help for terrascan
-l, --log-level string log level (debug, info, warn, error, panic, fatal) (default "info")
-x, --log-type string log output type (console, json) (default "console")
-o, --output string output type (human, json, yaml, xml) (default "human")
Use "terrascan [command] --help" for more information about a command.
push images
Source Code Repository
CI/CD pipeline
git action
pre-commit
Container Registry
Atlantis
GitOps repo
Sync changes
test
Dev
Prod
commit code
GitOps namespace
Kubernetes Cluster
pull images
Pre-Sync Hook
Terraform Pull Request Automation
Kubernetes API
etcd
persistent to database ( if valid)
Custom Security Policies
Kubernetes API Response
Deployment Creation Request
Webhook
validation decision
validating
Admission
admission Controller
terrascan CLI
terrascan as Server
DockerFile
Kubernetes
Helm
terraform
Github
Slack Notification
$ terrascan scan -i <IaC provider> --find-vuln
kustomize
https://github.com/tenable/terrascan
Demo Time
https://github.com/tenable/terrascan