prowler-sdk-check
Guides the creation and update of Prowler security checks using standardized SDK patterns.
Install
mkdir -p .claude/skills/prowler-sdk-check && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6540" && unzip -o skill.zip -d .claude/skills/prowler-sdk-check && rm skill.zipInstalls to .claude/skills/prowler-sdk-check
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Creates Prowler security checks following SDK architecture patterns. Trigger: When creating or updating a Prowler SDK security check (implementation + metadata) for any provider (AWS, Azure, GCP, K8s, GitHub, etc.).Key capabilities
- →Generate check boilerplate code
- →Create mandatory metadata JSON files
- →Integrate service-level clients
- →Implement report object models
- →Structure provider-specific security checks
How it works
It follows a strict directory pattern to generate implementation and metadata files that satisfy the Prowler SDK check architecture.
Inputs & outputs
When to use prowler-sdk-check
- →Implement a new security check for AWS or Azure
- →Generate metadata files for security scanning
- →Integrate service-level methods for data collection
- →Standardize check logic using SDK models
About this skill
Check Structure
prowler/providers/{provider}/services/{service}/{check_name}/
├── __init__.py
├── {check_name}.py
└── {check_name}.metadata.json
Step-by-Step Creation Process
1. Prerequisites
- Verify check doesn't exist: Search
prowler/providers/{provider}/services/{service}/ - Ensure provider and service exist - create them first if not
- Confirm service has required methods - may need to add/modify service methods to get data
2. Create Check Files
mkdir -p prowler/providers/{provider}/services/{service}/{check_name}
touch prowler/providers/{provider}/services/{service}/{check_name}/__init__.py
touch prowler/providers/{provider}/services/{service}/{check_name}/{check_name}.py
touch prowler/providers/{provider}/services/{service}/{check_name}/{check_name}.metadata.json
3. Implement Check Logic
from prowler.lib.check.models import Check, Check_Report_{Provider}
from prowler.providers.{provider}.services.{service}.{service}_client import {service}_client
class {check_name}(Check):
"""Ensure that {resource} meets {security_requirement}."""
def execute(self) -> list[Check_Report_{Provider}]:
"""Execute the check logic.
Returns:
A list of reports containing the result of the check.
"""
findings = []
for resource in {service}_client.{resources}:
report = Check_Report_{Provider}(metadata=self.metadata(), resource=resource)
report.status = "PASS" if resource.is_compliant else "FAIL"
report.status_extended = f"Resource {resource.name} compliance status."
findings.append(report)
return findings
4. Create Metadata File
See complete schema below and assets/ folder for complete templates.
For detailed field documentation, see references/metadata-docs.md.
5. Verify Check Detection
uv run python prowler-cli.py {provider} --list-checks | grep {check_name}
6. Run Check Locally
uv run python prowler-cli.py {provider} --log-level ERROR --verbose --check {check_name}
7. Create Tests
See prowler-test-sdk skill for test patterns (PASS, FAIL, no resources, error handling).
Check Naming Convention
{service}_{resource}_{security_control}
Examples:
ec2_instance_public_ip_disableds3_bucket_encryption_enablediam_user_mfa_enabled
Metadata Schema (COMPLETE)
{
"Provider": "aws",
"CheckID": "{check_name}",
"CheckTitle": "Human-readable title",
"CheckType": [
"Software and Configuration Checks/AWS Security Best Practices",
"Software and Configuration Checks/Industry and Regulatory Standards/AWS Foundational Security Best Practices"
],
"ServiceName": "{service}",
"SubServiceName": "",
"ResourceIdTemplate": "",
"Severity": "low|medium|high|critical",
"ResourceType": "AwsEc2Instance|Other",
"ResourceGroup": "security|compute|storage|network",
"Description": "**Bold resource name**. Detailed explanation of what this check evaluates and why it matters.",
"Risk": "What happens if non-compliant. Explain attack vectors, data exposure risks, compliance impact.",
"RelatedUrl": "",
"AdditionalURLs": [
"https://docs.aws.amazon.com/..."
],
"Remediation": {
"Code": {
"CLI": "aws {service} {command} --option value",
"NativeIaC": "```yaml\nResources:\n Resource:\n Type: AWS::{Service}::{Resource}\n Properties:\n Key: value # This line fixes the issue\n```",
"Other": "1. Console steps\n2. Step by step",
"Terraform": "```hcl\nresource \"aws_{service}_{resource}\" \"example\" {\n key = \"value\" # This line fixes the issue\n}\n```"
},
"Recommendation": {
"Text": "Detailed recommendation for remediation.",
"Url": "https://hub.prowler.com/check/{check_name}"
}
},
"Categories": [
"identity-access",
"encryption",
"logging",
"forensics-ready",
"internet-exposed",
"trust-boundaries"
],
"DependsOn": [],
"RelatedTo": [],
"Notes": ""
}
Required Fields
| Field | Description |
|---|---|
Provider | Provider name: aws, azure, gcp, kubernetes, github, m365 |
CheckID | Must match class name and folder name |
CheckTitle | Human-readable title |
Severity | low, medium, high, critical |
ServiceName | Service being checked |
Description | What the check evaluates |
Risk | Security impact of non-compliance |
Remediation.Code.CLI | CLI fix command |
Remediation.Recommendation.Text | How to fix |
Severity Guidelines
| Severity | When to Use |
|---|---|
critical | Direct data exposure, RCE, privilege escalation |
high | Significant security risk, compliance violation |
medium | Defense-in-depth, best practice |
low | Informational, minor hardening |
Check Report Statuses
| Status | When to Use |
|---|---|
PASS | Resource is compliant |
FAIL | Resource is non-compliant |
MANUAL | Requires human verification |
Common Patterns
AWS Check with Regional Resources
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.s3.s3_client import s3_client
class s3_bucket_encryption_enabled(Check):
def execute(self) -> list[Check_Report_AWS]:
findings = []
for bucket in s3_client.buckets.values():
report = Check_Report_AWS(metadata=self.metadata(), resource=bucket)
if bucket.encryption:
report.status = "PASS"
report.status_extended = f"S3 bucket {bucket.name} has encryption enabled."
else:
report.status = "FAIL"
report.status_extended = f"S3 bucket {bucket.name} does not have encryption enabled."
findings.append(report)
return findings
Check with Multiple Conditions
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.ec2.ec2_client import ec2_client
class ec2_instance_hardened(Check):
def execute(self) -> list[Check_Report_AWS]:
findings = []
for instance in ec2_client.instances:
report = Check_Report_AWS(metadata=self.metadata(), resource=instance)
issues = []
if instance.public_ip:
issues.append("has public IP")
if not instance.metadata_options.http_tokens == "required":
issues.append("IMDSv2 not enforced")
if issues:
report.status = "FAIL"
report.status_extended = f"Instance {instance.id} {', '.join(issues)}."
else:
report.status = "PASS"
report.status_extended = f"Instance {instance.id} is properly hardened."
findings.append(report)
return findings
Commands
# Verify detection
uv run python prowler-cli.py {provider} --list-checks | grep {check_name}
# Run check
uv run python prowler-cli.py {provider} --log-level ERROR --verbose --check {check_name}
# Run with specific profile/credentials
uv run python prowler-cli.py aws --profile myprofile --check {check_name}
# Run multiple checks
uv run python prowler-cli.py {provider} --check {check1} {check2} {check3}
Resources
- Templates: See assets/ for complete check and metadata templates (AWS, Azure, GCP)
- Documentation: See references/metadata-docs.md for official Prowler Developer Guide links
When not to use it
- →Non-security feature development
- →UI component creation
Limitations
- →Restricted to Prowler SDK pattern
- →Requires manual implementation of service-level data collection
- →Boilerplate code must be extended with business logic
How it compares
It standardizes the check implementation process, ensuring every new security check is automatically compatible with the existing Prowler framework.
Compared to similar skills
prowler-sdk-check side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| prowler-sdk-check (this skill) | 1 | 2mo | Review | Intermediate |
| cloud-penetration-testing | 3 | 6mo | Review | Advanced |
| building-cloud-siem-with-sentinel | 0 | 2mo | Review | Advanced |
| azure-cloud-security-review | 0 | 4mo | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by prowler-cloud
View all by prowler-cloud →You might also like
cloud-penetration-testing
davila7
This skill should be used when the user asks to "perform cloud penetration testing", "assess Azure or AWS or GCP security", "enumerate cloud resources", "exploit cloud misconfigurations", "test O365 security", "extract secrets from cloud environments", or "audit cloud infrastructure". It provides comprehensive techniques for security assessment across major cloud platforms.
building-cloud-siem-with-sentinel
26zl
This skill covers deploying Microsoft Sentinel as a cloud-native SIEM
azure-cloud-security-review
shyamagu-ms
>
performing-cloud-forensics-investigation
yanacuti1121
Conduct forensic investigations in cloud environments by collecting and
cloud-iam-deep
elementalsouls
Cloud IAM red-team attack chain across AWS, Azure, GCP — focused on EXTERNAL exploitation paths and post-credential-discovery privilege analysis. Covers IAM enumeration (aws iam, az role, gcloud iam), STS/AssumeRole chaining, Azure Managed Identity abuse (via SSRF/leak), GCP service account JSON abu
cloud-defense
transilienceai
Detect and break the cloud post-compromise attack chain (AWS / Azure / GCP) — per-stage CloudTrail / Activity-Log / Audit-Log detection signals and the preventive controls that close each step. Use for cloud detection engineering, hardening, remediation write-ups, or blue-team posture review of the