From grimoire
Audits cloud-native infrastructure against the OWASP Cloud-Native Application Security Top 10 using Prowler, AWS CLI, kubectl, and Terraform commands.
How this skill is triggered — by the user, by Claude, or both
Slash command
/grimoire:review-cloud-native-securityThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit cloud-native applications against the OWASP Cloud-Native Application Security Top 10 using Prowler, AWS Security Hub, and kubectl — covering C1 through C10 with specific test commands and remediation steps.
Audit cloud-native applications against the OWASP Cloud-Native Application Security Top 10 using Prowler, AWS Security Hub, and kubectl — covering C1 through C10 with specific test commands and remediation steps.
Adopted by: OWASP Cloud-Native Application Security Top 10 is the authoritative vulnerability taxonomy for cloud-native workloads. Prowler (open-source, used by AWS, Stripe, and security consulting firms) automates checks for C1–C10 equivalent categories. AWS Security Hub consolidates findings from GuardDuty, Inspector, Macie, and third-party tools against the AWS Foundational Security Best Practices standard. CIS Benchmarks for AWS (v3.0), GCP (v2.0), and Azure (v2.0) provide detailed test procedures for each vulnerability class. Impact: Cloud Security Alliance's 2022 "Top Threats to Cloud Computing" maps directly to C1–C10. Palo Alto Unit 42's "2023 Cloud-Native Security Report" found 76% of organizations have at least one C1–C10 class vulnerability in production. Organizations using structured cloud security review checklists remediate critical findings 40% faster than those using ad-hoc review (Gartner Cloud Security report, 2022). The OWASP Cloud-Native Top 10 provides completeness guarantees that neither tool-based scanning nor manual review alone achieves. Why best: Cloud-native environments combine container, orchestration, and cloud service vulnerabilities — a reviewer focused on Kubernetes misconfigurations may miss S3 bucket exposure, IAM over-permissioning, or logging gaps. C1–C10 provides a complete cross-layer checklist covering all three tiers of the cloud-native stack.
Sources: OWASP Cloud-Native Application Security Top 10; CIS AWS Foundations Benchmark v3.0; Prowler documentation; Palo Alto Unit 42 Cloud-Native Security Report (2023)
# Install Prowler (comprehensive AWS security scanner)
pip install prowler
# Run Prowler against all CIS and AWS Foundational Security checks
prowler aws --checks cis_level2_1_1 --output-formats json,html
# Or target specific services
prowler aws --services ec2 iam s3 guardduty cloudtrail
# For GCP
prowler gcp --project-id my-project
# AWS: check for public S3 buckets
aws s3api list-buckets --query 'Buckets[*].Name' --output text | \
xargs -I{} aws s3api get-bucket-acl --bucket {} 2>/dev/null | \
grep -i "AllUsers\|AuthenticatedUsers"
# Check Security Group open to internet
aws ec2 describe-security-groups \
--filters "Name=ip-permission.cidr,Values=0.0.0.0/0" \
--query 'SecurityGroups[?IpPermissions[?IpRanges[?CidrIp==`0.0.0.0/0`]] && IpPermissions[?FromPort!=`443` && FromPort!=`80`]].GroupId'
# Kubernetes: check Pod Security Standards
kubectl get namespaces -o json | \
jq '.items[] | {name: .metadata.name, labels: .metadata.labels} |
select(.labels | has("pod-security.kubernetes.io/enforce") | not) |
.name'
Fix: Block public S3 access, restrict security groups, apply restricted Pod Security Standards.
# Check Lambda functions for environment variable injection risk
aws lambda list-functions --query 'Functions[*].FunctionName' --output text | \
xargs -I{} aws lambda get-function-configuration --function-name {} \
--query 'Environment.Variables' 2>/dev/null | grep -v "^null"
Check:
# Check for Lambda functions with public URLs (no auth)
aws lambda list-function-url-configs \
--query 'FunctionUrlConfigs[?AuthType==`NONE`].FunctionArn'
# Check for API Gateway stages without auth
aws apigateway get-rest-apis --query 'items[*].id' --output text | \
xargs -I{} aws apigateway get-resources --rest-api-id {} \
--query 'items[?resourceMethods.GET.authorizationType==`NONE`].path'
Fix: Require IAM or Cognito auth on all Lambda URLs and API Gateway endpoints.
# Check for GitHub Actions using unpinned action versions
grep -r "uses: " .github/workflows/ | grep -v "@[a-f0-9]\{40\}" | grep -v "^#"
# Any result = unpinned action (should be @sha256)
# Check for Terraform providers without version pins
grep -r "required_providers" . -A 20 | grep -v "version"
Fix: Pin all GitHub Actions to commit SHA. Pin Terraform provider versions. Enable code signing.
# Check for secrets in environment variables
aws lambda list-functions --output text --query 'Functions[*].FunctionName' | \
xargs -I{} aws lambda get-function-configuration --function-name {} \
--query 'Environment.Variables' | \
python3 -c "import sys,json; d=json.load(sys.stdin); [print(k) for k in d if any(s in k.upper() for s in ['PASSWORD','SECRET','KEY','TOKEN'])]"
# Check Kubernetes secrets for plaintext credentials
kubectl get secrets --all-namespaces -o json | \
jq '.items[] | .data // {} | to_entries[] | .value | @base64d' 2>/dev/null | \
grep -E "password|secret|key" -i
Fix: Move secrets to Secrets Manager/SSM Parameter Store. Use IRSA instead of credential env vars.
# Find IAM roles with admin access
aws iam list-roles --query 'Roles[*].RoleName' --output text | \
xargs -I{} aws iam list-attached-role-policies --role-name {} \
--query 'AttachedPolicies[?PolicyArn==`arn:aws:iam::aws:policy/AdministratorAccess`]'
# Find IAM policies with wildcards
aws iam list-policies --scope Local --query 'Policies[*].Arn' --output text | \
xargs -I{} aws iam get-policy-version --policy-arn {} --version-id v1 \
--query 'PolicyVersion.Document.Statement[?Effect==`Allow` && Action==`*`]'
# Run IAM Access Analyzer
aws accessanalyzer list-findings --analyzer-arn $(aws accessanalyzer list-analyzers \
--query 'analyzers[0].arn' --output text) --filter '{"resourceType": {"eq": ["AWS::IAM::Role"]}}'
Fix: Replace AdministratorAccess with least-privilege policies. Remove wildcard actions.
# Check VPC flow logs disabled
aws ec2 describe-vpcs --query 'Vpcs[*].VpcId' --output text | \
xargs -I{} aws ec2 describe-flow-logs \
--filter "Name=resource-id,Values={}" \
--query 'FlowLogs[0].FlowLogStatus' 2>/dev/null | grep -v "ACTIVE"
# Check for default VPC in use
aws ec2 describe-vpcs \
--filters "Name=isDefault,Values=true" \
--query 'Vpcs[?State==`available`].VpcId'
Fix: Enable VPC flow logs. Delete default VPC. Implement three-tier subnet architecture.
# AWS Inspector v2 — scan EC2 and Lambda for CVEs
aws inspector2 enable --resource-types EC2 ECR LAMBDA
aws inspector2 list-findings \
--filter-criteria '{"findingSeverity": [{"comparison": "EQUALS", "value": "CRITICAL"}]}' \
--query 'findings[*].title'
Fix: Enable Inspector. Patch HIGH/CRITICAL CVEs within 30 days per org policy.
# Find untagged EC2 instances (untracked resources)
aws ec2 describe-instances \
--query 'Reservations[*].Instances[?!not_null(Tags[?Key==`Environment`])].[InstanceId]' \
--output text
# Find old/unused Lambda functions (last invocation > 90 days)
aws lambda list-functions --query 'Functions[*].FunctionName' --output text | \
xargs -I{} aws cloudwatch get-metric-statistics \
--namespace AWS/Lambda --metric-name Invocations \
--dimensions Name=FunctionName,Value={} \
--start-time $(date -d "90 days ago" +%Y-%m-%dT%H:%M:%S) \
--end-time $(date +%Y-%m-%dT%H:%M:%S) \
--period 7776000 --statistics Sum
# Check CloudTrail enabled in all regions
aws cloudtrail describe-trails --include-shadow-trails \
--query 'trailList[?IsMultiRegionTrail==`true` && HomeRegion==`us-east-1`].Name'
# Check GuardDuty enabled
aws guardduty list-detectors --query 'DetectorIds'
# Check for CloudTrail log file validation
aws cloudtrail describe-trails \
--query 'trailList[?LogFileValidationEnabled!=`true`].Name'
Fix: Enable multi-region CloudTrail with log file validation. Enable GuardDuty in all regions.
□ C1 Configuration — no public S3, no open SGs, restricted Pod Security
□ C2 Injection — cloud event inputs validated, no input in SDK calls
□ C3 Authentication — no public Lambda URLs/APIs without auth, IRSA used
□ C4 Supply chain — GitHub Actions pinned to SHA, provider versions locked
□ C5 Secrets — no credentials in env vars, Secrets Manager used
□ C6 IAM — no wildcard actions, no AdministratorAccess on workloads
□ C7 Network — VPC flow logs enabled, no default VPC, three-tier subnets
□ C8 Vulnerabilities — Inspector enabled, no unpatched CRITICAL CVEs
□ C9 Asset management — all resources tagged, unused resources cleaned
□ C10 Logging — multi-region CloudTrail, GuardDuty, Security Hub enabled
npx claudepluginhub jeffreytse/grimoire-hub --plugin grimoire2plugins reuse this skill
First indexed Jun 11, 2026
Audits cloud-native infrastructure against the OWASP Cloud-Native Application Security Top 10 using Prowler, AWS CLI, kubectl, and Terraform commands.
Audits AWS/Azure/GCP cloud security, hardens containers and Kubernetes, and scans Infrastructure as Code (Terraform, CloudFormation). Reports against CIS Benchmarks, SOC2, PCI-DSS, and HIPAA.
Identifies cloud-native security vulnerabilities including IMDS/SSRF exploitation, IAM misconfigurations, Kubernetes issues, serverless attack vectors, and cloud provider risks during code reviews, IaC audits, and pentesting.