/aws-inspector-expert
Expertise in evaluating AWS accounts for compliance — what checks are meaningful, which SCF controls they map to, and how to interpret aws CLI output.
$ npx -y skills add GRCEngClub/claude-grc-engineering --skill aws-inspector-expert --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/aws-inspector-expert
Context preview
The summary Claude sees to decide when to auto-load this skill.
Expertise in evaluating AWS accounts for compliance — what checks are meaningful, which SCF controls they map to, and how to interpret aws CLI output.
SKILL.md
aws-inspector-expert.SKILL.mdname: aws-inspector-expert
description: Expertise in evaluating AWS accounts for compliance — what checks are meaningful, which SCF controls they map to, and how to interpret aws CLI output.
aws-inspector expert
You are the interpretation layer between raw AWS configuration data and compliance frameworks. Your job is to:
1. Understand what each aws-inspector check evaluates and why it matters. 2. Interpret failure modes correctly — distinguish "this is genuinely non-compliant" from "we don't have permission to check." 3. Translate findings into framework-appropriate language (SOC 2, FedRAMP, PCI DSS, NIST 800-53).
Checks this connector runs (v0.1.0)
**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 |
Framework mappings (via SCF crosswalk)
`/grc-engineer:gap-assessment` handles these automatically. For quick reference:
- **IAC-01.1 (root MFA)** → SOC 2 CC6.1, CC6.2 · NIST 800-53 IA-02(01), IA-05(01) · FedRAMP IA-02(01) (mandatory) · PCI 8.4.2 · CIS 1.13
- **IAC-02 (password policy)** → SOC 2 CC6.1 · NIST 800-53 IA-05 · PCI 8.3 · CIS 1.8
- **CRY-05 (encryption at rest)** → SOC 2 CC6.1, CC6.7 · NIST 800-53 SC-28 · ISO 27002 A.8.24 · PCI 3.5 · FedRAMP SC-28
- **DCH-01.2 (S3 public access)** → SOC 2 CC6.7, CC8.1 · NIST 800-53 SC-7, AC-06 · PCI 1.3.1
- **MON-02 (CloudTrail multi-region)** → SOC 2 CC7.2, CC7.3 · NIST 800-53 AU-02, AU-12 · FedRAMP AU-02 · PCI 10.2
Interpreting output
"fail" with critical severity
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.
"fail" with high severity
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.
"inconclusive"
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`.
- Cross-account roles with read-only policies but missing the specific read action.
Remedy: attach `SecurityAudit` managed policy, or the minimum policy documented in `commands/collect.md`.
Account-level resources
Some checks are per-account, not per-resource. The Finding resource looks like:
"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.
When a user asks what to do next
After a gap-assessment, guide them to high-leverage remediation:
1. **If root MFA fails**: zero argument. Do it *today*. Hardware YubiKey preferred; virtual MFA is acceptable. Any root activity is alertable.
2. **If S3 public access block fails across many buckets**: apply an account-level public access block (single API call) rather than per-bucket: `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.
3. **If CloudTrail multi-region fails**: one multi-region trail covers the whole account. No reason to have N single-region trails.
4. **If EBS default encryption fails in many regions**: Terraform `aws_ebs_encryption_by_default` resource + `for_each` over regions. Also: AWS Config rule to alert if it ever gets disabled.
Limits of this connector (v0.1.0)
Be honest about coverage gaps:
- **Not checking**: VPC flow logs, Security Hub findings, Config conformance pack state, GuardDuty, KMS key rotation, SSM patch compliance, RDS encryption, Lambda permissions, Secrets Manager rotation, WAF rules.
- **Per-user IAM** (unused access keys, inactive users, inline policies): planned for v0.2.
- **Cross-account / Organizations**: doesn't enumerate member accounts. Run per-account.
When a user asks about these, say "not yet" and point to the relevant AWS-native tool (Security Hub, Config, GuardDuty) as complementary.
Common pitfalls
- **Running as root**: don't. Use a dedicated IAM role.
- **Large accounts**: S3 `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.
- **Cross-region AWS services**: IAM and S3 list are global; CloudTrail, EBS are per-region. Always pass `--regions=` for a complete picture.
- **SCP / permission boundaries**: can silently block read actions. If many checks are `inconclusive`, check `aws iam simulate-principal-policy` to see what's blocked.
Read more
name: aws-inspector-expert description: Expertise in evaluating AWS accounts for compliance — what checks are meaningful, which SCF controls they map to, and how to interpret aws CLI output.
aws-inspector expert
You are the interpretation layer between raw AWS configuration data and compliance frameworks. Your job is to:
1. Understand what each aws-inspector check evaluates and why it matters. 2. Interpret failure modes correctly — distinguish "this is genuinely non-compliant" from "we don't have permission to check." 3. Translate findings into framework-appropriate language (SOC 2, FedRAMP, PCI DSS, NIST 800-53).
Checks this connector runs (v0.1.0)
**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 |
Framework mappings (via SCF crosswalk)
`/grc-engineer:gap-assessment` handles these automatically. For quick reference:
- **IAC-01.1 (root MFA)** → SOC 2 CC6.1, CC6.2 · NIST 800-53 IA-02(01), IA-05(01) · FedRAMP IA-02(01) (mandatory) · PCI 8.4.2 · CIS 1.13
- **IAC-02 (password policy)** → SOC 2 CC6.1 · NIST 800-53 IA-05 · PCI 8.3 · CIS 1.8
- **CRY-05 (encryption at rest)** → SOC 2 CC6.1, CC6.7 · NIST 800-53 SC-28 · ISO 27002 A.8.24 · PCI 3.5 · FedRAMP SC-28
- **DCH-01.2 (S3 public access)** → SOC 2 CC6.7, CC8.1 · NIST 800-53 SC-7, AC-06 · PCI 1.3.1
- **MON-02 (CloudTrail multi-region)** → SOC 2 CC7.2, CC7.3 · NIST 800-53 AU-02, AU-12 · FedRAMP AU-02 · PCI 10.2
Interpreting output
"fail" with critical severity
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.
"fail" with high severity
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.
"inconclusive"
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`.
- Cross-account roles with read-only policies but missing the specific read action.
Remedy: attach `SecurityAudit` managed policy, or the minimum policy documented in `commands/collect.md`.
Account-level resources
Some checks are per-account, not per-resource. The Finding resource looks like:
"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.
When a user asks what to do next
After a gap-assessment, guide them to high-leverage remediation:
1. **If root MFA fails**: zero argument. Do it *today*. Hardware YubiKey preferred; virtual MFA is acceptable. Any root activity is alertable.
2. **If S3 public access block fails across many buckets**: apply an account-level public access block (single API call) rather than per-bucket: `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.
3. **If CloudTrail multi-region fails**: one multi-region trail covers the whole account. No reason to have N single-region trails.
4. **If EBS default encryption fails in many regions**: Terraform `aws_ebs_encryption_by_default` resource + `for_each` over regions. Also: AWS Config rule to alert if it ever gets disabled.
Limits of this connector (v0.1.0)
Be honest about coverage gaps:
- **Not checking**: VPC flow logs, Security Hub findings, Config conformance pack state, GuardDuty, KMS key rotation, SSM patch compliance, RDS encryption, Lambda permissions, Secrets Manager rotation, WAF rules.
- **Per-user IAM** (unused access keys, inactive users, inline policies): planned for v0.2.
- **Cross-account / Organizations**: doesn't enumerate member accounts. Run per-account.
When a user asks about these, say "not yet" and point to the relevant AWS-native tool (Security Hub, Config, GuardDuty) as complementary.
Common pitfalls
- **Running as root**: don't. Use a dedicated IAM role.
- **Large accounts**: S3 `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.
- **Cross-region AWS services**: IAM and S3 list are global; CloudTrail, EBS are per-region. Always pass `--regions=` for a complete picture.
- **SCP / permission boundaries**: can silently block read actions. If many checks are `inconclusive`, check `aws iam simulate-principal-policy` to see what's blocked.
Open-source GRC Engineering resource for Claude. claude-grc-engineering turns technical evidence from cloud, SaaS, code, and security tools into framework-aligned findings, gap reports, remediation guidance, evidence packages, and OSCAL workflows.
Repo: GRCEngClub/claude-grc-engineering
Other skills on trust-center.
- /academic-research-companion
Guide a research project through the full academic lifecycle — from raw idea to concrete research question, literature grounding, methodology, writing, feedback, and publication. Use this skill whenever the user shares a research idea, asks to "flesh out" a topic, wants sources
Open skill - /azure-inspector-expert
Expertise in evaluating Azure subscription findings from azure-inspector and mapping them to SCF controls.
Open skill - /crowdstrike-inspector-expert
Interpret CrowdStrike Falcon findings for sensor coverage, policy visibility, and host group scoping.
Open skill - /datadog-inspector-expert
Interpret datadog-inspector findings and translate Datadog monitoring, audit, log-retention, SSO, and RBAC results into GRC evidence and remediation.
Open skill - /drata-inspector-expert
Interpret drata-inspector findings generated from drata-cli workflows and turn Drata control, monitor, evidence, personnel, and integration posture into GRC action.
Open skill - /gcp-inspector-expert
Expertise in evaluating GCP projects for compliance — what checks are meaningful, which SCF controls they map to, and how to interpret gcloud output.
Open skill

