Every GitHub repository, read for risk before it ships
Install the read-only CloudLens GitHub App. CloudLens scans every repository for secrets — even in git history — insecure code, vulnerable packages, IaC and GitHub Actions, then checks each pull request against your policy and traces deploy workflows to the AWS roles they assume.
- 1Sam opens #412 with a Stripe live key
The diff adds a hard-coded sk_live key to payments/config.py.
- 2CloudLens scans the pull request head
The new secret fails the org policy. The CloudLens code scan check run fails with one annotation.
- 3Merging is blocked, then unblocked
Because the check is required, #412 can't merge. Sam moves the key to the secret manager and the check passes.
Code risk ships long before anyone looks
A secret, a vulnerable package or a risky workflow is cheapest to fix in review, and most expensive once it is in production.
Deleted is not gone
What usually happens: A developer removes a cloud key from the code. It stays in git history, readable by anyone who can clone the repository.
How CloudLens resolves it: Gitleaks reads the last 2,000 commits too, so the key is found, rotated and purged.
ResolvedReviewers miss what scanners catch
What usually happens: A pull request adds a live payment key in a config file. Two approvals later, it is on main.
How CloudLens resolves it: The CloudLens check fails on the new secret, and a required check blocks the merge.
ResolvedCI has production access
What usually happens: GitHub Actions holds long-lived cloud keys or an over-trusting role, and nobody connects it to what it can change.
How CloudLens resolves it: Every pipeline file is judged line by line, and its role or key is traced to the AWS resources it can reach.
ResolvedRead-only, set up once in GitHub
Install the CloudLens GitHub App on your organization and pick the repositories it may read.
Read-only App · each scan gets a one-repo, contents:read token that is revoked after use.
- Metadata · read
- Contents · read
- Administration · read
- Actions · read
- Checks · not requested
- 1Choose GitHub
GitHub App · github.com.
- 2See exactly what is granted
Metadata: Read · Contents: Read · Administration: Read · Actions: Read · Checks: Not requested.
- 3Repositories are found and scanned
5 repositories in the lumora-retail organization start their first scan.
Secrets, code, packages, IaC and CI — in one pass
Every repository is scanned by Gitleaks (current files and git history), Opengrep running CloudLens's own rules, and Trivy for dependencies, SBOM, licences and IaC, with zizmor for GitHub Actions.
Each finding carries its evidence and the fix. Send it to Jira, Slack or Microsoft Teams in one click.
- Secrets + history
- SAST
- SCA + SBOM
- IaC + Dockerfiles
- CI/CD config
- 1Four engines run on each repository
Results are grouped into secrets, code, dependencies, IaC and CI/CD.
- 2A key that was deleted, but not gone
A cloud access key removed six weeks ago is still in commit 4f2a91c.
- 3Fix it, and track it
Three steps to rotate and purge it, and SEC-91 opened in Jira from the finding.
A failing check, right on the pull request
Automatic scans need Pull requests: read and the pull_request event added to the App. The check run is posted when you grant Checks: write; make it a required check to block the merge.
The PR head is scanned in full and compared with the default branch by fingerprint, so only new findings count. Your policy passes, warns or fails on new secrets, vulnerabilities, code findings and misconfigurations.
- pull_request event
- New findings only
- Pass / warn / fail policy
- Check run + annotations
- 1Sam opens #412 with a Stripe live key
The diff adds a hard-coded sk_live key to payments/config.py.
- 2CloudLens scans the pull request head
The new secret fails the org policy. The CloudLens code scan check run fails with one annotation.
- 3Merging is blocked, then unblocked
Because the check is required, #412 can't merge. Sam moves the key to the secret manager and the check passes.
GitHub Actions, judged line by line
.github/workflows/deploy.yml is parsed as text — never executed — and every risky line is flagged with its rule and severity.
The roles a pipeline assumes are matched to your AWS roles, and their OIDC trust is judged. So you see what a compromised pipeline could change in production.
- pull_request_target runs fork code with secrets
- every job gets a write token
- action not pinned to a commit SHA
- PR title expanded into a shell command
- 1Open .github/workflows/deploy.yml
4 lines are flagged as the file is read.
- 2Each line gets a rule and severity
dangerous-triggers: pull_request_target runs fork code with secrets · excessive-permissions: every job gets a write token.
- 3Traced to the cloud
The deploy-prod role leads to the checkout-api service and orders-db in prod-core.
What CloudLens reads in GitHub today
Straight from the product. Where something is not assessed, we say so rather than imply it.
One week with GitHub connected
Lumora Retail is a fictional company. The steps are how CloudLens behaves.
Lumora Retail is a fictional company. The people, names and numbers are sample data.
Installs the App on lumora-retail
Finds a key nobody knew about
Fixes the deploy workflow
Blocks a new secret at review
Scan your repositories with read-only access
The rest of your code and CI
GitLab
Group access token · gitlab.com or your self-managed GitLab
Learn moreBitbucket
Workspace access token · Bitbucket Cloud
Learn moreAzure DevOps
Personal access token · dev.azure.com
Learn moreJenkins
Through your code host · Any repository CloudLens scans
Learn moreRead-only
CloudLens never pushes, comments or merges. On GitHub, the one write is a check run, and only if you grant Checks: write.
History included
Secrets are looked for in the last 2,000 commits within a year, not just today's files.
Code to cloud
Container images, Terraform and pipeline roles are matched to the AWS resources they run as or deploy.
One finding list
Code findings sit next to cloud findings in Atlas, with the same Jira, Slack and Teams actions.
GitHub FAQ
Metadata, contents, administration and actions, all read. Each scan uses a token narrowed to one repository with contents: read, and revokes it afterwards.
Yes, once you add Pull requests: read and the pull_request event to the App. You can also scan any pull request by number from CloudLens.
CloudLens posts a check run when you grant Checks: write. Make that check required in branch protection and a failing scan blocks the merge. CloudLens does not comment on pull requests.
Not today. The App works with github.com organizations.
Ready to see CloudLens in action?
Connect a read-only AWS role or Azure service principal. We'll walk you through your bill, your security graph and the first things worth fixing.