Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Expertise in evaluating AWS accounts for compliance — what checks are meaningful, which SCF controls they map to, and how to interpret aws CLI output.
.claude/skills/grcengclub-aws-inspector-expert/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 22% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 51% | 0% |
You are the interpretation layer between raw AWS configuration data and compliance frameworks. Your job is to:
IAM (account-scoped):
| SCF ID | Check | Source of truth | Severity | |---|---|---|---| | IAC-01.1 | Root MFA enabled | iam get-account-summary → AccountMFAEnabled | critical | | IAC-15.1 | No root access keys | iam get-account-summary → AccountAccessKeysPresent | critical | | IAC-02 | Password policy meets baseline | iam get-account-password-policy | high |
S3 (per bucket):
| SCF ID | Check | Severity | |---|---|---| | CRY-05 | Default server-side encryption | high if missing | | DCH-01.2 | All four public access block flags on | critical | | AST-05 | Versioning enabled | medium |
CloudTrail (per home region):
| SCF ID | Check | Severity | |---|---|---| | MON-02 | Multi-region trail exists | high | | MON-02.1 | Log file validation enabled | medium | | MON-02.2 | Trail is actively logging | high |
EBS (per region):
| SCF ID | Check | Severity | |---|---|---| | CRY-05 | Default encryption on | high |
/grc-engineer:gap-assessment handles these automatically. For quick reference:
Treat as blocking. Root MFA missing or S3 public access block missing = you cannot pass an audit. Root access keys = "how is this account still alive?" territory. Prioritize these.
Blocks most audits but isn't a "stop everything" moment. Encryption-at-rest defaults, multi-region CloudTrail, password policy — these need to be fixed before a FedRAMP ATO or SOC 2 Type II.
Almost always means the caller lacks the IAM permission. Common culprits:
s3:GetBucketEncryption denied on buckets owned by other accounts in an organization.cloudtrail:GetTrailStatus requires cloudtrail:GetTrailStatus, separate from DescribeTrails.Remedy: attach SecurityAudit managed policy, or the minimum policy documented in commands/collect.md.
Some checks are per-account, not per-resource. The Finding resource looks like:
json"resource": { "type": "aws_account", "id": "123456789012", "arn": "arn:aws:iam::123456789012:root", "region": null, "account_id": "123456789012" }
This is intentional — it lets gap-assessment count the check once per account, not once per bucket.
After a gap-assessment, guide them to high-leverage remediation:
aws s3control put-public-access-block --account-id <id> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true. Existing public buckets aren't retroactively broken, but new ones are restricted.aws_ebs_encryption_by_default resource + for_each over regions. Also: AWS Config rule to alert if it ever gets disabled.Be honest about coverage gaps:
When a user asks about these, say "not yet" and point to the relevant AWS-native tool (Security Hub, Config, GuardDuty) as complementary.
list-buckets is flat, but per-bucket checks are 3 API calls × N buckets. 1000-bucket accounts take a few minutes; parallelism is bounded to stay under the 3500 req/min default.--regions= for a complete picture.inconclusive, check aws iam simulate-principal-policy to see what's blocked.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→pass | 9,650 | 5,692 | -41% | 1 | 1 | 0% | 1,584 | 2,565 | +62% | 0 | 0 | — |
case-01 | fail→fail | 30,216 | 25,863 | -14% | 1 | 1 | 0% | 5,143 | 5,439 | +6% | 0 | 0 | — |
case-02 | fail→pass | 22,713 | 12,798 | -44% | 1 | 1 | 0% | 3,754 | 3,931 | +5% | 0 | 0 | — |
case-03 | fail→pass | 19,687 | 14,591 | -26% | 1 | 1 | 0% | 3,358 | 4,240 | +26% | 0 | 0 | — |
case-04 | fail→pass | 16,250 | 8,464 | -48% | 1 | 1 | 0% | 2,517 | 3,065 | +22% | 0 | 0 | — |
case-05 | fail→pass | 10,852 | 6,594 | -39% | 1 | 1 | 0% | 1,841 | 2,776 | +51% | 0 | 0 | — |
case-07 | fail→pass | 10,412 | 3,537 | -66% | 1 | 1 | 0% | 1,807 | 2,204 | +22% | 0 | 0 | — |
case-08 | fail→pass | 8,383 | 1,754 | -79% | 1 | 1 | 0% | 1,399 | 1,856 | +33% | 0 | 0 | — |
case-09 | fail→pass | 14,587 | 6,884 | -53% | 1 | 1 | 0% | 2,410 | 2,876 | +19% | 0 | 0 | — |
case-10 | fail→pass | 13,924 | 5,806 | -58% | 1 | 1 | 0% | 2,124 | 2,384 | +12% | 0 | 0 | — |
case-11 | fail→pass | 16,154 | 1,360 | -92% | 1 | 1 | 0% | 2,710 | 1,797 | -34% | 0 | 0 | — |
case-12 | pass→pass | 11,580 | 4,070 | -65% | 1 | 1 | 0% | 1,868 | 2,347 | +26% | 0 | 0 | — |
case-13 | fail→pass | 15,957 | 2,045 | -87% | 1 | 1 | 0% | 2,443 | 1,951 | -20% | 0 | 0 | — |
case-14 | fail→pass | 10,366 | 2,596 | -75% | 1 | 1 | 0% | 1,531 | 2,013 | +31% | 0 | 0 | — |
case-15 | fail→pass | 15,099 | 4,898 | -68% | 1 | 1 | 0% | 2,448 | 2,417 | -1% | 0 | 0 | — |
case-16 | pass→pass | 10,901 | 9,131 | -16% | 1 | 1 | 0% | 1,522 | 2,937 | +93% | 0 | 0 | — |
case-17 | pass→pass | 12,622 | 9,784 | -22% | 1 | 1 | 0% | 1,965 | 3,330 | +69% | 0 | 0 | — |
case-18 | pass→pass | 10,184 | 7,463 | -27% | 1 | 1 | 0% | 1,648 | 2,708 | +64% | 0 | 0 | — |
case-19 | fail→pass | 15,226 | 9,469 | -38% | 1 | 1 | 0% | 2,442 | 3,068 | +26% | 0 | 0 | — |
case-20 | fail→pass | 12,412 | 9,573 | -23% | 1 | 1 | 0% | 1,927 | 3,241 | +68% | 0 | 0 | — |
case-21 | pass→pass | 9,834 | 3,620 | -63% | 1 | 1 | 0% | 1,466 | 2,228 | +52% | 0 | 0 | — |
case-22 | pass→pass | 12,297 | 4,110 | -67% | 1 | 1 | 0% | 1,827 | 2,308 | +26% | 0 | 0 | — |
case-23 | fail→pass | 10,907 | 6,602 | -39% | 1 | 1 | 0% | 1,671 | 2,704 | +62% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +70 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.