Discover risky non-human identities and privilege paths across AWS, Azure, GCP, GitHub, and Kubernetes
Project description
๐ NHInsight
Discover risky non-human identities and privilege paths across AWS, Azure, GCP, GitHub, and Kubernetes.
Why NHInsight?
Non-human identities outnumber humans 80:1 in most orgs โ and growing 44% year-over-year. Enterprise NHI tools charge $50K+/year. NHInsight does it for free โ open source, runs locally, no telemetry.
Quick Start
pip install nhinsight # install from PyPI
nhinsight demo # see it in action (no credentials needed)
Try it in 30 seconds โ
nhinsight demoruns with built-in sample data so you can see findings, attack paths, and risk scores instantly.
Scan a real environment
# Single provider
nhinsight scan --aws
# Multi-provider with attack path analysis
nhinsight scan --all --attack-paths
# CI/CD workflow scanning (no cloud creds required)
nhinsight scan --github-workflows .github/workflows --attack-paths
# Docker (zero install)
docker run --rm chvemula/nhinsight demo
Run in Your CI/CD Pipeline
Add NHInsight to any GitHub Actions workflow โ no cloud credentials needed for workflow scanning:
# .github/workflows/nhi-scan.yml
name: NHI Security Scan
on: [push, pull_request]
jobs:
nhi-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cvemula1/NHInsight@main
with:
attack-paths: "true" # enable attack path analysis
fail-on: "high" # block PRs with high+ severity findings
The action scans your .github/workflows directory, writes findings to the PR summary, and fails the check if any identity risk meets the severity threshold. Add cloud provider credentials to also scan live infrastructure:
- uses: cvemula1/NHInsight@main
with:
providers: "--aws --azure"
attack-paths: "true"
fail-on: "critical"
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
Example: Identity Risk Findings
| Severity | Identity | Provider | Risk |
|---|---|---|---|
| ๐ด CRITICAL | deploy-bot |
AWS | AdministratorAccess policy attached |
| ๐ด CRITICAL | terraform-deployer |
GCP | Service account has roles/owner |
| ๐ HIGH | aks-cluster-sp |
Azure | SP has Contributor at subscription scope |
| ๐ก MEDIUM | ci-runner-mi |
Azure | Self-hosted runner MI accesses Key Vault + AKS + ACR |
| ๐ก MEDIUM | deploy-sa |
K8s | Bound to cluster-admin ClusterRole |
Example: Attack Paths Detected
| Blast | Path | Risk |
|---|---|---|
| 86 | GitHub Actions โ Managed Identity โ Key Vault โ AKS โ K8s Secrets |
PR trigger can reach production secrets via MI |
| 83 | GitHub Actions โ Managed Identity โ Terraform Apply |
Self-hosted runner MI can modify infrastructure |
| 80 | GitHub Actions โ OIDC โ AWS IAM Role โ S3 + Secrets Manager |
Workflow assumes admin role via OIDC federation |
| 75 | K8s ServiceAccount โ IRSA โ IAM Role (AdministratorAccess) |
Pod escape leads to full AWS account access |
What It Finds
- Overprivileged service accounts and roles (admin, owner, contributor)
- Stale or unrotated credentials (access keys, SA keys, app secrets)
- Wildcard trust relationships and open role assumptions
- Dangerous Kubernetes service account bindings (cluster-admin, legacy tokens)
- Risky GitHub deploy keys, app permissions, and admin-scoped tokens
- GitHub Actions CI/CD risks โ OIDC misconfigurations, Managed Identity abuse, self-hosted runner exposure
- Cloud resource access from workflows โ Key Vault, ACR, AKS, Storage, SQL, Terraform, Helm, and 40+ resource patterns
- Cross-cloud attack paths from entry points to privileged resources
42 risk checks across 5 providers + CI/CD workflows. See all risk codes.
Supported Providers
- AWS โ IAM users, roles, access keys, policies, MFA, trust relationships
- Azure โ Service principals, managed identities, app secrets/certs, RBAC
- GCP โ Service accounts, SA keys, project IAM bindings
- GitHub โ Apps, deploy keys, webhooks, permissions
- Kubernetes โ ServiceAccounts, RBAC, Secrets, IRSA/Workload Identity
Key Capabilities
- Attack path analysis โ cross-cloud identity chains with blast radius scoring
- NIST SP 800-53 scoring โ compliance mapping with letter grades
- IGA governance scores โ ownership, rotation, least-privilege hygiene
- AI explanations โ optional OpenAI-powered risk summaries (
--explain) - SARIF output โ plug into GitHub Security tab or CI/CD (
-f sarif) - Zero agents โ read-only API calls, nothing installed in your infra
Install Options
pip install nhinsight # Core (AWS included by default)
pip install nhinsight[all] # All 5 providers + AI explanations
pip install nhinsight[azure] # Just Azure
pip install nhinsight[gcp,k8s] # Mix and match
Docker examples
# Scan AWS
docker run --rm -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY \
chvemula/nhinsight scan --aws
# Scan Azure
docker run --rm \
-e AZURE_TENANT_ID -e AZURE_CLIENT_ID \
-e AZURE_CLIENT_SECRET -e AZURE_SUBSCRIPTION_ID \
chvemula/nhinsight scan --azure
# Scan GCP
docker run --rm -e GCP_PROJECT=my-project \
-v ~/.config/gcloud:/root/.config/gcloud:ro \
chvemula/nhinsight scan --gcp
# Scan Kubernetes
docker run --rm -v ~/.kube/config:/root/.kube/config:ro \
chvemula/nhinsight scan --k8s
# Scan GitHub
docker run --rm -e GITHUB_TOKEN \
chvemula/nhinsight scan --github --github-org acme-corp
# Multi-provider + JSON
docker run --rm -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY \
-e GCP_PROJECT=my-project -v ~/.config/gcloud:/root/.config/gcloud:ro \
chvemula/nhinsight scan --aws --gcp --attack-paths -f json
Authentication
NHInsight uses read-only access via each provider's standard SDK credentials. No agents, no custom auth.
| Provider | Quick Auth |
|---|---|
| AWS | aws configure or env vars or instance role |
| Azure | az login or service principal env vars |
| GCP | gcloud auth application-default login or SA key |
| GitHub | export GITHUB_TOKEN=ghp_... |
| Kubernetes | Uses ~/.kube/config current context |
Detailed auth setup per provider
AWS
Uses the standard boto3 credential chain:
| Method | How |
|---|---|
| Environment variables | AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY |
| Named profile | export AWS_PROFILE=prod or --aws-profile prod |
| Instance role / ECS task role | Automatic on EC2/ECS/Lambda |
| SSO | aws sso login --profile prod then --aws-profile prod |
# Minimum IAM permissions needed (read-only):
# iam:ListUsers, iam:ListRoles, iam:ListAccessKeys,
# iam:ListMFADevices, iam:GetLoginProfile,
# iam:ListUserPolicies, iam:ListAttachedUserPolicies,
# iam:ListRolePolicies, iam:ListAttachedRolePolicies,
# iam:GetAccessKeyLastUsed
nhinsight scan --aws
nhinsight scan --aws --aws-profile prod --aws-region us-east-1
Azure
Uses Azure Identity DefaultAzureCredential:
| Method | How |
|---|---|
| Azure CLI | az login (simplest for local dev) |
| Service Principal | AZURE_CLIENT_ID + AZURE_CLIENT_SECRET + AZURE_TENANT_ID |
| Managed Identity | Automatic on Azure VMs/AKS/Functions |
| Environment variables | AZURE_TENANT_ID + AZURE_SUBSCRIPTION_ID |
# Required API permissions:
# Microsoft Graph: Application.Read.All, Directory.Read.All
# Azure RBAC: Microsoft.Authorization/roleAssignments/read
az login
nhinsight scan --azure
nhinsight scan --azure --azure-tenant-id TENANT --azure-subscription-id SUB
GCP
Uses Google Application Default Credentials (ADC):
| Method | How |
|---|---|
| gcloud CLI | gcloud auth application-default login (simplest for local dev) |
| Service Account key | export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json |
| Workload Identity | Automatic on GKE/Cloud Run/Cloud Functions |
| Environment variable | export GCP_PROJECT=my-project or --gcp-project my-project |
# Required IAM roles (read-only):
# roles/iam.serviceAccountViewer (list SAs + keys)
# roles/resourcemanager.projectIamViewer (read IAM policy)
gcloud auth application-default login
nhinsight scan --gcp --gcp-project my-project
GitHub
Uses a Personal Access Token or GitHub App token:
| Method | How |
|---|---|
| PAT (classic) | export GITHUB_TOKEN=ghp_... โ needs read:org, repo scopes |
| PAT (fine-grained) | Org-level read access to administration, webhooks, deploy keys |
| GitHub App | Install app on org, use installation token |
| GitHub Enterprise | --github-base-url https://github.company.com/api/v3 |
export GITHUB_TOKEN=ghp_your_token
nhinsight scan --github --github-org acme-corp
nhinsight scan --github --github-org acme --github-base-url https://ghe.company.com/api/v3
Kubernetes
Uses the standard kubeconfig credential chain:
| Method | How |
|---|---|
| Current context | Automatic โ uses ~/.kube/config default context |
| Specific context | --kube-context prod-cluster |
| Custom kubeconfig | --kubeconfig /path/to/kubeconfig |
| In-cluster | Automatic when running inside a pod |
| Namespace filter | --kube-namespace payments (default: all) |
# Required RBAC (read-only):
# ServiceAccounts, Secrets, Deployments, Pods: get, list
# ClusterRoleBindings, RoleBindings: get, list
nhinsight scan --k8s
nhinsight scan --k8s --kube-context prod --kube-namespace payments
Attack Path Analysis
NHInsight builds an identity graph and traces paths from entry points (keys, tokens, SAs) to privileged targets (admin roles, owner bindings, cluster-admin):
nhinsight scan --aws --k8s --gcp --attack-paths
nhinsight scan --github-workflows .github/workflows --attack-paths
Example chains NHInsight detects:
- K8s โ AWS โ ServiceAccount โ IRSA role โ IAM role with AdministratorAccess
- K8s โ GCP โ ServiceAccount โ Workload Identity โ SA with roles/owner
- GitHub โ AWS โ Deploy key โ workflow โ OIDC โ IAM role with S3FullAccess
- GitHub Actions โ Azure โ Managed Identity โ Key Vault secrets, AKS cluster, ACR registry
- GitHub Actions โ IaC โ Self-hosted runner MI โ Terraform apply (infrastructure control)
- GitHub Actions โ K8s โ MI โ AKS credentials โ kubectl exec, Helm deployments
flowchart LR
subgraph GitHub Actions
wf1["deploy.yml<br/>(self-hosted runner)"]
wf2["ci.yml<br/>(OIDC)"]
end
subgraph Cloud Identity
mi["Managed Identity"]
oidc_aws["OIDC โ AWS Role"]
oidc_az["OIDC โ Azure SP"]
end
subgraph Azure Resources
kv{{"Key Vault<br/>secrets"}}
aks{{"AKS Cluster"}}
acr["ACR Registry"]
sql[("Azure SQL")]
storage[("Storage Account")]
end
subgraph AWS Resources
s3[("S3 Bucket")]
secrets{{"Secrets Manager"}}
eks{{"EKS Cluster"}}
iam{{"IAM Roles"}}
end
subgraph Kubernetes
helm["Helm Deploy"]
k8s_secret{{"K8s Secrets"}}
kubectl["kubectl exec"]
end
subgraph IaC
tf{{"Terraform Apply"}}
end
wf1 -->|"az login --identity"| mi
wf2 -->|"OIDC token"| oidc_aws
wf2 -->|"OIDC token"| oidc_az
mi -->|"secret access"| kv
mi -->|"get-credentials"| aks
mi -->|"acr login"| acr
mi -->|"query"| sql
mi -->|"blob upload"| storage
oidc_aws -->|"assumes role"| iam
iam -->|"s3 cp"| s3
iam -->|"get-secret"| secrets
iam -->|"eks get-token"| eks
aks -->|"helm upgrade"| helm
aks -->|"create secret"| k8s_secret
aks -->|"exec"| kubectl
mi -->|"tf apply"| tf
style wf1 fill:#24292e,stroke:#444,color:#fff
style wf2 fill:#24292e,stroke:#444,color:#fff
style mi fill:#0078d4,stroke:#005a9e,color:#fff
style oidc_aws fill:#FF9900,stroke:#232F3E,color:#232F3E
style oidc_az fill:#0078d4,stroke:#005a9e,color:#fff
style kv fill:#c00,stroke:#900,color:#fff
style aks fill:#326CE5,stroke:#1a3a6e,color:#fff
style acr fill:#0078d4,stroke:#005a9e,color:#fff
style sql fill:#0078d4,stroke:#005a9e,color:#fff
style storage fill:#0078d4,stroke:#005a9e,color:#fff
style s3 fill:#FF9900,stroke:#232F3E,color:#232F3E
style secrets fill:#c00,stroke:#900,color:#fff
style eks fill:#FF9900,stroke:#232F3E,color:#232F3E
style iam fill:#FF9900,stroke:#232F3E,color:#232F3E
style helm fill:#0f1689,stroke:#0a0f5c,color:#fff
style k8s_secret fill:#c00,stroke:#900,color:#fff
style kubectl fill:#326CE5,stroke:#1a3a6e,color:#fff
style tf fill:#7b42bc,stroke:#5c2d91,color:#fff
GitHub Actions Workflow Scanning
Scan CI/CD workflows for identity and resource access attack paths:
nhinsight scan --github-workflows path/to/.github/workflows --attack-paths
Detects 40+ resource access patterns across:
| Category | Resources Detected |
|---|---|
| Azure | Key Vault, ACR, AKS, Storage, SQL, CosmosDB, DNS, AD, IAM, Functions, Web Apps |
| AWS | S3, Secrets Manager, IAM, EC2, Lambda, ECR, EKS, RDS, DynamoDB, CloudFormation |
| GCP | Compute, GKE, Secret Manager, Cloud SQL, IAM, Cloud Storage |
| Kubernetes | kubectl apply/exec, secret creation, resource mutation |
| Deployments | Helm, Docker push, Terraform/Pulumi apply, Ansible |
| External | Cloudflare DNS/CDN |
Also detects: OIDC permission misconfigurations, PR-trigger cloud auth risks, self-hosted runner Managed Identity exposure, and composite action inlining.
Each path includes:
- Blast radius scoring โ 0โ100 composite based on privilege level and cross-system reach
- Fix guidance โ per-edge remediation recommendations
Mermaid Diagrams
Generate copy-pasteable Mermaid diagrams for PRs, docs, and reviews:
# Mermaid output alongside terminal results
nhinsight scan --aws --k8s --mermaid
# Demo with Mermaid diagrams
nhinsight demo --mermaid
# Render from saved JSON (for CI pipelines)
nhinsight scan --all --attack-paths -f json -o findings.json
nhinsight graph --input findings.json
nhinsight graph --input findings.json --split # one diagram per path
Example output (paste into any Mermaid-compatible renderer โ GitHub, Notion, VS Code):
flowchart LR
subgraph Kubernetes
sa["prod/deploy-sa"]
end
subgraph AWS
role{{"eks-admin-role"}}
end
sa -->|"IRSA โ eks-admin-role"| role
style sa fill:#326CE5,stroke:#1a3a6e,color:#fff
style role fill:#FF9900,stroke:#232F3E,color:#232F3E
Risk Codes
All 42 risk codes by provider
AWS
| Risk | Code | Severity |
|---|---|---|
| Admin/PowerUser policy attached | AWS_ADMIN_ACCESS |
Critical |
Role trust allows any principal (*) |
AWS_WILDCARD_TRUST |
Critical |
| Access key not rotated (>365 days) | AWS_KEY_NOT_ROTATED |
High |
| Console access without MFA | AWS_NO_MFA |
High |
| Inactive key not deleted | AWS_KEY_INACTIVE |
Medium |
Azure
| Risk | Code | Severity |
|---|---|---|
| SP with Owner/Contributor at subscription scope | AZURE_SP_DANGEROUS_ROLE |
Critical |
| SP with elevated role at resource group scope | AZURE_SP_ELEVATED_ROLE |
Medium |
| Managed Identity with dangerous role at subscription scope | AZURE_MI_DANGEROUS_ROLE |
High |
| Disabled SP still has RBAC bindings | AZURE_SP_DISABLED_WITH_ROLES |
Medium |
| App credential expired | AZURE_CRED_EXPIRED |
High |
| App credential expiring within 30 days | AZURE_CRED_EXPIRING_SOON |
Medium |
| Client secret not rotated (>365 days) | AZURE_SECRET_NOT_ROTATED |
High |
GCP
| Risk | Code | Severity |
|---|---|---|
| SA with roles/owner or roles/editor | GCP_SA_DANGEROUS_ROLE |
Critical |
| SA with compute.admin, storage.admin, etc. | GCP_SA_DANGEROUS_ROLE |
High |
| Disabled SA still has IAM bindings | GCP_SA_DISABLED_WITH_ROLES |
Medium |
| GCP-managed SA with dangerous roles | GCP_MANAGED_SA_OVERPRIVILEGED |
High |
| SA key not rotated (>365 days) | GCP_KEY_NOT_ROTATED |
High |
| SA key expired | GCP_KEY_EXPIRED |
High |
| SA key expiring within 30 days | GCP_KEY_EXPIRING_SOON |
Medium |
| SA key disabled but not deleted | GCP_KEY_DISABLED |
Low |
Kubernetes
| Risk | Code | Severity |
|---|---|---|
| SA bound to cluster-admin | K8S_CLUSTER_ADMIN |
Critical |
| Legacy long-lived SA token secret | K8S_LEGACY_SA_TOKEN |
High |
| Automount token on privileged SA | K8S_AUTOMOUNT_PRIVILEGED |
High |
| Using default SA in default namespace | K8S_DEFAULT_SA |
Medium |
| Orphaned SA (no running pods) | K8S_ORPHANED_SA |
Medium |
| SA has secrets but no IRSA/Workload Identity | K8S_NO_WORKLOAD_IDENTITY |
Medium |
| Deployments using default SA | K8S_DEPLOY_DEFAULT_SA |
Medium |
| Opaque secret contains credential-like keys | K8S_SECRET_CREDENTIALS |
Medium |
| TLS secret not managed by cert-manager | K8S_TLS_UNMANAGED |
Low |
GitHub
| Risk | Code | Severity |
|---|---|---|
| Token with admin scope | GH_ADMIN_SCOPE |
High |
| Token has full repo access | GH_REPO_WRITE |
Medium |
| App with dangerous write perms | GH_APP_DANGEROUS_PERMS |
High |
| Deploy key with write access | GH_DEPLOY_KEY_WRITE |
Medium |
| Inactive webhook | GH_WEBHOOK_INACTIVE |
Low |
GitHub Actions / CI/CD
| Risk | Code | Severity |
|---|---|---|
| OIDC workflow assumes admin-like role | GH_OIDC_ADMIN_ROLE |
High |
| Cloud auth triggered on pull_request | GH_OIDC_PR_TRIGGER |
High |
| Self-hosted runner uses Managed Identity | GH_WF_SELF_HOSTED_MI |
High |
| Workflow missing id-token: write permission | GH_OIDC_NO_PERMISSION |
Medium |
| Workflow reads Key Vault secrets | GH_WF_KEYVAULT_SECRETS |
Medium |
| Workflow fetches AKS credentials | GH_WF_AKS_ACCESS |
Medium |
| OIDC role ARN is a dynamic reference | GH_OIDC_DYNAMIC_ROLE |
Info |
Universal
| Risk | Code | Severity |
|---|---|---|
| Identity unused for 90+ days | STALE_IDENTITY |
Medium |
| No owner or creator identified | NO_OWNER |
Low |
Configuration
Environment variables and CLI flags
All settings can be set via environment variables, CLI flags, or both (CLI flags take precedence):
| Setting | Env Var | CLI Flag | Default |
|---|---|---|---|
| AWS profile | AWS_PROFILE |
--aws-profile |
default chain |
| AWS region | AWS_DEFAULT_REGION |
--aws-region |
default chain |
| Azure tenant | AZURE_TENANT_ID |
--azure-tenant-id |
โ |
| Azure subscription | AZURE_SUBSCRIPTION_ID |
--azure-subscription-id |
โ |
| GCP project | GCP_PROJECT |
--gcp-project |
โ |
| GitHub token | GITHUB_TOKEN |
โ | โ |
| GitHub org | GITHUB_ORG |
--github-org |
โ |
| Kubeconfig | KUBECONFIG |
--kubeconfig |
~/.kube/config |
| K8s context | KUBE_CONTEXT |
--kube-context |
current context |
| K8s namespace | KUBE_NAMESPACE |
--kube-namespace |
all |
| Stale threshold | NHINSIGHT_STALE_DAYS |
--stale-days |
90 days |
| Rotation threshold | NHINSIGHT_ROTATION_MAX_DAYS |
โ | 365 days |
| AI explanations | OPENAI_API_KEY |
--explain |
โ |
See .env.example for a ready-to-copy template.
CLI Reference
Full CLI flags
nhinsight scan [OPTIONS] Discover and analyze NHIs
--aws Scan AWS IAM
--azure Scan Azure AD / Entra ID
--gcp Scan GCP IAM
--github Scan GitHub org
--k8s Scan Kubernetes cluster
--all Scan all available providers
--github-workflows [PATH] Scan GitHub Actions workflows (default: .github/workflows)
--attack-paths Trace privilege escalation chains across providers
--mermaid Output attack paths as Mermaid diagrams
--ci-summary Compact markdown summary for CI/PR usage
--fail-on {critical,high,medium,low} Exit code 1 if severity threshold met (CI gating)
--format, -f {table,json,sarif} Output format (default: table)
--output, -o FILE Write output to file
--explain Add AI-powered explanations (requires OPENAI_API_KEY)
--ascii ASCII-safe output (no emoji; auto in CI)
--stale-days N Days without use before flagging (default: 90)
--verbose, -v Verbose logging
--aws-profile PROFILE AWS named profile
--aws-region REGION AWS region
--azure-tenant-id ID Azure tenant ID
--azure-subscription-id ID Azure subscription ID
--gcp-project PROJECT GCP project ID
--github-org ORG GitHub organization
--github-base-url URL GitHub Enterprise base URL
--kubeconfig PATH Path to kubeconfig
--kube-context CTX Kubernetes context
--kube-namespace NS Namespace (default: all)
nhinsight demo Show demo scan with sample data
nhinsight report --demo Generate formatted markdown report
nhinsight graph --input FILE Render Mermaid diagrams from saved JSON
nhinsight version Show version
Development
git clone https://github.com/cvemula1/NHInsight.git
cd NHInsight
pip install -e ".[all,dev]"
make test # 260 tests, <2 seconds
Makefile targets and architecture
Makefile targets
| Target | What It Does |
|---|---|
make dev |
Install editable with all extras + dev deps |
make test |
Run pytest |
make lint |
Run ruff linter |
make demo |
Run demo with sample data |
make scan-aws |
Scan AWS IAM |
make scan-gcp |
Scan GCP IAM |
make scan-azure |
Scan Azure AD |
make scan-all |
Scan all providers |
make docker |
Build Docker image |
make docker-demo |
Run demo in Docker |
make clean |
Remove build artifacts |
Architecture
nhinsight/
โโโ cli.py # CLI entry point (argparse)
โโโ core/
โ โโโ models.py # Identity, RiskFlag, ScanResult, enums
โ โโโ config.py # NHInsightConfig (env vars + CLI flags)
โ โโโ output.py # Table, JSON, SARIF formatters
โ โโโ mermaid.py # Mermaid diagram renderer for attack paths
โ โโโ ci_summary.py # Compact CI/PR markdown summary
โโโ providers/
โ โโโ base.py # Abstract BaseProvider interface
โ โโโ aws.py # AWS IAM discovery (boto3)
โ โโโ azure.py # Azure AD / Entra ID discovery (Graph + RBAC)
โ โโโ gcp.py # GCP IAM discovery (google-api-python-client)
โ โโโ github.py # GitHub org discovery (PyGithub)
โ โโโ kubernetes.py # Kubernetes discovery (kubernetes client)
โโโ analyzers/
โ โโโ classification.py # Human vs machine classification
โ โโโ risk.py # Risk analysis (42 checks)
โ โโโ scoring.py # NIST SP 800-53 + IGA governance scoring
โ โโโ graph.py # Identity graph model (nodes, edges, BFS)
โ โโโ attack_paths.py # Attack path detection + blast radius
โ โโโ workflow_scanner.py # GitHub Actions CI/CD scanner (40+ resource patterns)
โโโ explain/
โโโ llm.py # Optional LLM explanations (OpenAI)
Roadmap
- v0.1 โ 5 providers, 42 risk checks, attack paths, NIST scoring, SARIF, AI explanations, Docker
- v0.1.1 โ GitHub Actions workflow scanner, 40+ resource access patterns, MI/OIDC attack paths, Mermaid diagrams, CI gating (
--fail-on), GitHub Action - v0.2 โ OPA/Rego policies, ML classification, anomaly detection, IAM right-sizing
- v0.3 โ Slack, Teams, Jira, PagerDuty, webhook integrations
- v0.4 โ SIEM export, scheduled scans, drift detection, dashboard API
- v0.5 โ Auto-remediation, least-privilege generation, AI agent, PR-based fixes
Contributing
See CONTRIBUTING.md for development guidelines.
Related Projects
- ChangeTrail โ unified timeline of infrastructure changes
License
MIT โ see LICENSE
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nhinsight-0.2.3.tar.gz.
File metadata
- Download URL: nhinsight-0.2.3.tar.gz
- Upload date:
- Size: 108.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ef951b94fb703a087a44447217009b32aab9b57cde7f162fc87bac769489bd7
|
|
| MD5 |
be13a7a16bd7c85d68709d626d8704df
|
|
| BLAKE2b-256 |
375a1e25f6e74d13448b439afe287600cfdbf45cd131b91ac41d69ab3848e566
|
File details
Details for the file nhinsight-0.2.3-py3-none-any.whl.
File metadata
- Download URL: nhinsight-0.2.3-py3-none-any.whl
- Upload date:
- Size: 89.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2390fac22bea089277ca5514d2a18015830f63ce51004be3d77deddd5d85f9c0
|
|
| MD5 |
93d622ad720d6a3a09373b9340dbcfd1
|
|
| BLAKE2b-256 |
d4770c235acbece0fa97560c45deec1e23d10eccca1eee9cc6504f65d51e0650
|