agentleFS
Microsoft AzureKnown publisherAzure/git-ape/.github/community-skills/aws-security-analyzer/SKILL.md

aws-security-analyzer

Skill274 starsChanged 28 days agoMITView on GitHub

Analyze CloudFormation templates and AWS resource configurations against security best practices. Produces per-resource security assessment with severity ratings. Use during template generation before deployment confirmation or to audit existing AWS configurations.

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 5 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    When user asks "is this secure?" or "check security" for an AWS deployment

    line 19
  2. Distinctive:

    Every "✅ Applied" status MUST cite the exact CloudFormation property path and its value that proves the control is in place.

    line 28
  3. Distinctive:

    Before generating the security report:

    line 55
  4. Distinctive:

    Search the template JSON/YAML for the exact property path

    line 150
  5. Distinctive:

    After analyzing all resources:

    line 172

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

AWS Security Analyzer

Analyze AWS resource configurations and CloudFormation templates against security best practices. Produces a per-resource security assessment report with severity ratings and actionable recommendations.

When to Use

  • During CloudFormation template creation — analyze before deployment
  • To audit an existing template for security gaps
  • When user asks "is this secure?" or "check security" for an AWS deployment
  • Post-deployment security review of resource configurations

Verification Integrity Rules (CRITICAL)

Every claim in the security report MUST be verifiable against the CloudFormation template or resource configuration. Never fabricate, assume, or misrepresent security status.

Rule 1: Cite Exact Evidence

Every "✅ Applied" status MUST cite the exact CloudFormation property path and its value that proves the control is in place. If you cannot point to a specific property in the template, you cannot mark it as applied.

# ✅ CORRECT — cites exact property
| Encryption at rest | 🔴 Critical | ✅ Applied | `Properties.StorageEncrypted: true` | Explicitly set in template |

# ❌ WRONG — no evidence from template
| Encryption at rest | 🔴 Critical | ✅ Applied | N/A | AWS encrypts RDS by default |

Rule 2: Distinguish Explicit Config vs AWS Defaults

AWS provides some security controls by default. These are NOT the same as explicitly configured controls.

StatusIconMeaningWhen to Use
✅ Applied✅Explicitly configured in the CloudFormation templateProperty exists in template with secure value
🔄 AWS Default🔄AWS provides this automatically, NOT in templateControl exists due to AWS platform behavior, not template config
⚠️ Not applied⚠️Control is missing and should be consideredProperty absent from template, no AWS default covers it
❌ Misconfigured❌Property exists but set to an insecure valueProperty in template with wrong/insecure value

Rule 3: Never Use Misleading Framing

Describe security status accurately and literally. Do not soften or reframe risks.

Rule 4: Verify Before Reporting

Before generating the security report:

  1. Re-read the CloudFormation template or configuration
  2. For each "✅ Applied" entry: search the template for the cited property
  3. For network exposure: check if any resource has a public IP or is publicly accessible
  4. For encryption claims: distinguish between AWS default encryption and explicitly configured encryption
  5. Cross-check property paths — use correct CloudFormation property names

Rule 5: When Uncertain, Mark as Unknown

| {check} | {severity} | ❓ Unknown | {property} | Unable to verify — property path unclear |

Never guess. Never fabricate. When in doubt, flag it.

Security Checklists by Service

S3 Buckets

CheckSeverityProperty Path
Block public access🔴 CriticalProperties.PublicAccessBlockConfiguration.BlockPublicAcls: true + all 4 flags
Encryption at rest🔴 CriticalProperties.BucketEncryption.ServerSideEncryptionConfiguration
Versioning enabled🟠 HighProperties.VersioningConfiguration.Status: Enabled
Access logging🟡 MediumProperties.LoggingConfiguration
MFA delete🟡 MediumCLI/SDK only — cannot set via CloudFormation
HTTPS-only bucket policy🟠 HighAWS::S3::BucketPolicy with aws:SecureTransport: false deny

IAM Roles and Policies

CheckSeverityProperty Path
No wildcard actions on sensitive services🔴 CriticalCheck Action: "*" or Action: "s3:*" in policy statements
No wildcard resources with sensitive actions🔴 CriticalCheck Resource: "*" paired with write/admin actions
MFA condition for sensitive roles🟠 HighCondition.Bool.aws:MultiFactorAuthPresent: true in trust policy
ExternalId for cross-account roles🟠 HighCondition.StringEquals.sts:ExternalId in trust policy
Permission boundary🟡 MediumProperties.PermissionsBoundary

Lambda Functions

CheckSeverityProperty Path
Dedicated execution role (not AdministratorAccess)🔴 CriticalProperties.Role — check attached role policies
Environment variable encryption🟠 HighProperties.KmsKeyArn for KMS encryption of env vars
VPC configuration (if accessing private resources)🟡 MediumProperties.VpcConfig
Reserved concurrency set🔵 LowProperties.ReservedConcurrentExecutions
No secrets in environment variables🔴 CriticalCheck Properties.Environment.Variables values

EC2 Instances

CheckSeverityProperty Path
IMDSv2 required🔴 CriticalProperties.MetadataOptions.HttpTokens: required
No public IP (backend instances)🔴 CriticalProperties.NetworkInterfaces[].AssociatePublicIpAddress: false
EBS volumes encrypted🟠 HighProperties.BlockDeviceMappings[].Ebs.Encrypted: true
IAM instance profile (not access keys)🔴 CriticalProperties.IamInstanceProfile
Security group not open to 0.0.0.0/0 on port 22🔴 CriticalCheck AWS::EC2::SecurityGroup ingress rules

RDS Instances

CheckSeverityProperty Path
Storage encrypted🔴 CriticalProperties.StorageEncrypted: true
Not publicly accessible🔴 CriticalProperties.PubliclyAccessible: false
Multi-AZ enabled (prod)🟠 HighProperties.MultiAZ: true
Backup retention period🟠 HighProperties.BackupRetentionPeriod >= 7
Deletion protection🟠 HighProperties.DeletionProtection: true
SSL enforcement🟡 MediumParameter group rds.force_ssl: 1

ECS/EKS

CheckSeverityProperty Path (ECS)
Task role (not execution role) for app permissions🔴 CriticalProperties.TaskRoleArn in task definition
Secrets from Secrets Manager (not env vars)🔴 CriticalContainer secrets array, not environment
Private subnets only🟠 HighProperties.NetworkConfiguration.AwsvpcConfiguration.AssignPublicIp: DISABLED
Container read-only root filesystem🟡 MediumContainer readonlyRootFilesystem: true
No privileged containers🔴 CriticalContainer privileged: false or absent

Procedure

1. Extract Resources from Template

Parse the CloudFormation template to identify all resources and their types:

  • AWS::S3::Bucket
  • AWS::IAM::Role / AWS::IAM::Policy
  • AWS::Lambda::Function
  • AWS::EC2::Instance / AWS::EC2::SecurityGroup
  • AWS::RDS::DBInstance
  • AWS::ECS::TaskDefinition / AWS::EKS::Cluster
  • etc.

2. Run Security Checks

For each resource, apply the relevant service checklist above. For each check:

  1. Search the template JSON/YAML for the exact property path
  2. Determine status: ✅ Applied, 🔄 AWS Default, ⚠️ Not applied, ❌ Misconfigured
  3. Record the actual property value found (or "absent" if not in template)

3. Format Report

For each resource, produce a security table:

### 🪣 S3: my-data-bucket (AWS::S3::Bucket)

| Check | Severity | Status | Evidence | Notes |
|-------|----------|--------|----------|-------|
| Block public access | 🔴 Critical | ✅ Applied | `PublicAccessBlockConfiguration.BlockPublicAcls: true` (all 4 flags set) | |
| Encryption at rest | 🔴 Critical | ✅ Applied | `BucketEncryption.Rules[0].ApplyServerSideEncryptionByDefault.SSEAlgorithm: aws:kms` | |
| Versioning | 🟠 High | ✅ Applied | `VersioningConfiguration.Status: Enabled` | |
| Access logging | 🟡 Medium | ⚠️ Not applied | `LoggingConfiguration` absent | Consider enabling for audit trail |
| HTTPS-only policy | 🟠 High | ⚠️ Not applied | No bucket policy found | Add deny for aws:SecureTransport: false |

4. Evaluate Security Gate

After analyzing all resources:

Count critical and high severity issues that are ⚠️ Not applied or ❌ Misconfigured.

## 🔒 Security Gate

| Severity | Total Checks | ✅ Passed | ⚠️ Issues |
|----------|-------------|---------|---------|
| 🔴 Critical | X | Y | Z |
| 🟠 High | X | Y | Z |
| 🟡 Medium | X | Y | Z |
| 🔵 Low | X | Y | Z |

If Z (Critical + High issues) = 0:

## 🟢 SECURITY GATE: PASSED

All Critical and High severity checks pass. Deployment may proceed.

If Z (Critical + High issues) > 0:

## 🔴 SECURITY GATE: BLOCKED

{N} Critical/High severity issue(s) must be resolved before deployment.

### Required Fixes:
1. [Resource Name] — [Check]: [Recommended fix with exact CloudFormation property]
2. ...

**Options:**
A. Accept proposed fixes → I will update the template and re-run security analysis
B. Provide alternative security settings → I will incorporate and re-run
C. Override: type "I accept the security risk" (will be logged as OVERRIDDEN)

The gate loops until PASSED or explicitly overridden — no shortcutting allowed.

5. Propose Fixes

For each issue, provide the exact CloudFormation YAML or JSON change needed:

# Fix: Enable S3 encryption
Properties:
  BucketEncryption:
    ServerSideEncryptionConfiguration:
      - ServerSideEncryptionByDefault:
          SSEAlgorithm: aws:kms
          KMSMasterKeyID: !Ref MyKMSKey

# Fix: Require IMDSv2 on EC2
Properties:
  MetadataOptions:
    HttpTokens: required
    HttpEndpoint: enabled

Severity Classification

LevelIconDefinition
Critical🔴Direct path to data breach, privilege escalation, or data loss. Must fix.
High🟠Significantly increases attack surface or blast radius. Should fix.
Medium🟡Defense-in-depth control. Recommended for production.
Low🔵Minor hardening. Nice-to-have.

References

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.