Skill
AI 비서에게 Longbridge Skill로 실시간 HK·US 주식 데이터와 거래 기능을 직접 제공
AWS 보안용 Claude Code 플러그인, 읽기 전용 감사·SCP 방어·착륙구역 설계·IAM 최소 권한 검토·보안 검사 제공
Claude Code skills for AWS security: a plugin with five skills for a read-only account audit, SCP guardrail builder and linter, blast-radius landing zone design, IAM least-privilege review and Securit
스킬Python · DockerfileGitHub @basitalisandhu온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Claude Code skills for AWS security: a plugin with five skills for a read-only account audit, SCP guardrail builder and linter, blast-radius landing zone design, IAM least-privilege review and Security Hub and GuardDuty triage. Tested standard-library scripts evaluate saved aws CLI output offline.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
AWS security skills for Claude Code: account audit, SCP guardrails, blast-radius landing zones, IAM least privilege, Security Hub triage, agent-safe access, incident response runbooks, spend guardrails, sandbox guardrails, agent session audit.README 전문 보기 ↗AWS security skills for Claude Code: account audit, SCP guardrails, blast-radius landing zones, IAM least privilege, Security Hub triage, agent-safe access, incident response runbooks, spend guardrails, sandbox guardrails, agent session audit, preventive controls for Security Hub findings.
aws-security-skills is a Claude Code plugin marketplace with one plugin, aws-security, holding eleven skills. Each skill is a fixed procedure plus a tested Python script (standard library only). The skills tell Claude which read-only aws CLI commands to run and where to save the JSON, or which short spec to write; the scripts then evaluate that saved output, or generate policies and runbooks from the spec, offline, so results are repeatable, reviewable by someone without account access, and produced without the script ever touching AWS.
It is written for cloud and platform engineers who look after one or many AWS accounts, especially multi-account organizations governed by service control policies. It exists because the same questions come up on every account (is root protected, is CloudTrail on, can this role escalate, which SCPs go where, what do we fix first in Security Hub, what may an AI agent do here, what do we do in the first hour of an incident, how do we stop a runaway bill), and a scripted procedure answers them the same way each time.
Common searches it answers: a CIS AWS Foundations benchmark style account check, a Well-Architected security pillar review of account structure, a permission boundary for an AI agent role, and an audit of what an AI agent did in an AWS account from CloudTrail ("what did the agent do in our AWS account?", unused permissions of an agent role), and the preventive control for a failing Security Hub control ("how do we stop this finding coming back?", SCP, declarative policy and IaC check for S3, EBS, IMDSv2 and root user findings).
No network access from the scripts, no telemetry. Nothing in this repository changes an AWS account: every skill proposes fix commands and runs one only after you confirm that exact command.
Generated from the committed fixtures by scripts/render_demo.py; run python3 scripts/render_demo.py to regenerate it.
In a Claude Code session:
/plugin marketplace add basitalisandhu/aws-security-skills
/plugin install aws-security@aws-security-skills
Then ask, for example: "Audit the AWS account I am logged into, regions us-east-1 and ap-southeast-2." Claude follows aws-account-audit: it shows the caller identity, collects read-only CLI output into ./aws-audit-<date>/, runs the audit script, and reports findings with evidence.
From a shell:
claude plugin marketplace add basitalisandhu/aws-security-skills
claude plugin install aws-security@aws-security-skills --scope user
To try it without installing, clone the repository and start Claude Code with claude --plugin-dir ./plugins/aws-security. The scripts also run on their own:
python3 plugins/aws-security/skills/aws-account-audit/scripts/audit_account.py tests/fixtures/account-audit/insecure --as-of 2026-10-01
python3 plugins/aws-security/skills/scp-guardrails/scripts/scp_builder.py plugins/aws-security/skills/scp-guardrails/references/example-spec.yaml
python3 plugins/aws-security/skills/agent-safe-aws-access/scripts/agent_access.py plan --spec plugins/aws-security/skills/agent-safe-aws-access/references/example-spec.yaml
python3 plugins/aws-security/skills/aws-incident-response-runbook/scripts/ir_runbook.py triage --guardduty tests/fixtures/incident/guardduty-findings.json
python3 plugins/aws-security/skills/preventive-control-mapper/scripts/preventive_map.py --findings tests/fixtures/preventive-map/securityhub-findings.json
Requirements: Python 3.11 or newer as python3. AWS CLI v2 and read-only credentials (the SecurityAudit or ReadOnlyAccess managed policy) for the collection steps only.
The plugin installs as shown in the Quickstart. The skill scripts are also published as one container image on GitHub Packages (linux/amd64 and linux/arm64) for running them without a checkout, for example in CI. The image's entrypoint is aws-security <subcommand> [args]; mount the files to read at /work, which is the working directory:
docker run --rm -v "$PWD:/work" ghcr.io/basitalisandhu/aws-security-skills:0.6.1 audit /work/exports
docker run --rm -v "$PWD:/work" ghcr.io/basitalisandhu/aws-security-skills:0.6.1 iam-review /work/policy.json
docker run --rm -v "$PWD:/work" ghcr.io/basitalisandhu/aws-security-skills:0.6.1 scp-build /work/scp-spec.yaml --out /work/scps
docker run --rm -v "$PWD:/work" ghcr.io/basitalisandhu/aws-security-skills:0.6.1 ir-runbook triage --guardduty /work/findings.json --out /work/ir
docker run --rm ghcr.io/basitalisandhu/aws-security-skills:0.6.1 --help
This pack is also part of claude-skills, which holds every skill I maintain as one marketplace: /plugin marketplace add basitalisandhu/claude-skills.
| Subcommand | Script (skill) |
|---|---|
audit | audit_account.py (aws-account-audit) |
scp-build | scp_builder.py (scp-guardrails) |
scp-lint | scp_lint.py (scp-guardrails) |
blast-radius | blast_radius.py (landing-zone-blast-radius) |
iam-review | iam_review.py (iam-least-privilege-review) |
triage | triage_findings.py (security-hub-triage) |
agent-access | agent_access.py (agent-safe-aws-access) |
ir-runbook | ir_runbook.py (aws-incident-response-runbook) |
spend | spend_guardrails.py (aws-spend-guardrails) |
sandbox | sandbox_pack.py (sandbox-account-guardrail-pack) |
agent-audit | agent_session_audit.py (aws-agent-session-audit) |
preventive-map | preventive_map.py (preventive-control-mapper) |
Every subcommand passes its arguments to the script unchanged, so aws-security <subcommand> --help shows the same options as the script. Output files land in the mounted folder. The image has no pip dependencies and runs as uid 1000; on Linux add --user "$(id -u):$(id -g)" if the mounted folder is not writable by that uid. From a checkout, python3 scripts/cli.py is the same dispatcher.
Each image is signed with cosign (keyless) and has a build provenance attestation and an SPDX SBOM (attached to the GitHub Release). To verify:
cosign verify ghcr.io/basitalisandhu/aws-security-skills:0.6.1 \
--certificate-identity-regexp '^https://github.com/basitalisandhu/aws-security-skills/' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
gh attestation verify oci://ghcr.io/basitalisandhu/aws-security-skills:0.6.1 --owner basitalisandhu
aws-account-auditscp-guardrailslanding-zone-blast-radiusiam-least-privilege-reviewsecurity-hub-triageagent-safe-aws-accessaws-incident-response-runbookaws-spend-guardrailssandbox-account-guardrail-packaws-agent-session-auditpreventive-control-mapper| Skill | Triggers on | What it produces |
|---|---|---|
aws-account-audit | "audit this account", baseline, handover, after an incident | audit_account.py findings with severity, evidence and a fix command to review, plus the checks it could not evaluate |
scp-guardrails | write, review or debug SCPs; a region SCP broke IAM | scp_builder.py deny-list SCPs packed under the 10,240-character SCP quota and scp_lint.py findings; a guardrail catalog with side effects |
landing-zone-blast-radius | design an organization, place a new workload | blast_radius.py OU tree, account names, foundation accounts, SCP attachment map and blast-radius table |
iam-least-privilege-review | review or tighten a policy, "can this role escalate?" | iam_review.py ranked findings (wildcards, PassRole, AssumeRole, escalation paths) and a tightened policy template |
security-hub-triage | a findings backlog, weekly security review | triage_findings.py findings grouped by control and resource, suppression counts and an owner-assigned action list |
agent-safe-aws-access | give an AI agent AWS access, review an agent role, cut off an agent session | agent_access.py trust, permission and boundary policies, a sandbox SCP, the assume-role command and a kill switch; a review of an existing role |
aws-incident-response-runbook | leaked key, compromised instance, public bucket, suspicious IAM activity, ransomware, crypto-mining | ir_runbook.py Markdown runbook (read-only inventory, confirmed containment, evidence, eradication, recovery, checklist, timeline and communications templates), chosen from GuardDuty findings or by name |
aws-spend-guardrails | budget alerts, cost anomalies, sandbox spend limits, a cost spike | spend_guardrails.py Budgets and Cost Anomaly Detection JSON, spend-deny SCPs, and a cost review with anomaly flags |
sandbox-account-guardrail-pack | create or tighten a sandbox or experimentation OU | sandbox_pack.py SCPs, account baseline checklist, auto-expiry design with a Lambda sweeper in pseudocode, budget files and a README for sandbox users |
aws-account-audit evaluates these checks: root MFA, root access keys, a multi-region CloudTrail trail, trail log file validation, trail logging status, GuardDuty enabled, Security Hub enabled, account-level S3 public access block, per-bucket public access block, security groups open to 0.0.0.0/0 or ::/0 on 22, 3389 or all traffic, IAM users with a console password and no MFA, access keys older than 90 days (configurable), customer managed or inline policies with "Action": "*" on "Resource": "*", default VPC in use, EBS encryption by default, and the account password policy.
Not covered: KMS key policies and rotation, snapshot and AMI sharing, Lambda and other resource policies, bucket policies and ACLs themselves, IAM Access Analyzer findings, AWS Config rules, VPC flow logs, GuardDuty protection plans, Security Hub standards selection, and any service not named above. iam-least-privilege-review reads policy text only and does not evaluate Conditions, permissions boundaries, SCPs or resource policies. scp-guardrails lints structure and known mistakes; it does not simulate requests.
agent-safe-aws-access plans five task types (read-only inventory over a vetted list of services, deploy one CloudFormation stack, invoke one Lambda function, read one log group prefix, read one S3 prefix) and reviews one role from get-account-authorization-details for broad grants, missing boundary, boundary gaps, long sessions and weak trust. Not covered: other task types, resource policies, SCP evaluation in review, and Conditions (a statement counts as allowing its actions). aws-incident-response-runbook covers six scenarios (leaked access key, compromised EC2 instance, public S3 bucket, suspicious IAM activity, ransomware against S3 or EBS, crypto-mining) and maps GuardDuty EC2, Runtime, IAMUser and S3 finding types to them. Not covered: Kubernetes, RDS, Lambda and malware-scan findings, forensics tooling, and legal or notification advice. aws-spend-guardrails generates cost and usage budgets, one anomaly monitor and spend-deny SCPs, and reviews daily Cost Explorer exports with a median-based rule. Not covered: savings or rightsizing advice, currency conversion, and anomalies that grow slowly. sandbox-account-guardrail-pack generates the SCPs, checklist, expiry design, budget files and user README. Not covered: deploying any of it, and automatic deletion of anything other than EC2 instances and unattached EBS volumes. aws-agent-session-audit reads lookup-events output, delivered CloudTrail log files (gzipped or not) and JSON lines of records, filtered by role session name. Not covered: events CloudTrail did not record, credentials other than the agent role session, and Conditions, boundaries or SCPs when comparing grants.
preventive-control-mapper covers 25 Security Hub controls (S3.1, S3.2, S3.3, S3.5, S3.8, EC2.1, EC2.2, EC2.7, EC2.8, EC2.9, EC2.13, EC2.19, EC2.182, IAM.4, IAM.6, IAM.9, CloudTrail.1, CloudTrail.2, Config.1, GuardDuty.1, KMS.4, RDS.1, RDS.2, RDS.3, Lambda.1), each checked against AWS documentation; every other failing control is listed as unmapped, never dropped. It names an SCP only where a condition key or action was verified, so some controls offer an IaC check and a Config rule alone. SCPs do not apply to the management account or service-linked roles.
All findings come from saved data at one point in time and the permissions of the collecting role. They need human verification before any change.
--out or --output. They open no sockets and run no subprocesses; they never call AWS.aws CLI commands listed in each skill with --output json. The one exception is aws iam generate-credential-report, which builds the IAM credential report and changes no configuration..gitignore excludes aws-audit-*/.Report security problems privately: see SECURITY.md.
Does it need admin access? No. Collection needs read-only access; the SecurityAudit or ReadOnlyAccess managed policy covers the listed commands. With fewer permissions some calls fail, and the audit lists those checks as not evaluated.
Does any script call AWS? No. Scripts read local files only. The tests run fully offline on hand-written fixtures that use the documentation account id 123456789012.
Will it change my account? Not unless you confirm a specific fix command in the conversation. The skills are written to stop and ask.
Can I use it on many accounts? Run the audit once per account (assume a read-only role in each), then use security-hub-triage on the organization-wide Security Hub export from the delegated administrator account.
Why are SCP sizes measured without whitespace? The builders write compact JSON and measure that form, so what you upload is what was measured against the 10,240-character SCP quota. The AWS CLI and SDKs keep whitespace when they upload a policy (only the console strips it), so scp_lint.py also warns when a file is over the limit as written.
Does it replace Security Hub, Prowler or IAM Access Analyzer? No. It is a scripted procedure for common checks and design questions inside Claude Code; use those tools for broad continuous coverage.
python3 -m pytest -q # offline tests for every script
python3 -m ruff check .
python3 scripts/validate_plugins.py # structure, frontmatter, scripts, README and house style
claude plugin validate --strict . && claude plugin validate --strict ./plugins/aws-security
Every script exits 0 (clean), 1 (findings to review) or 2 (bad input or usage); the plugin README has the table and real output samples from the fixtures. Each skill folder also has a README.md with one real sample run; tests/test_readme_samples.py re-runs every sampled command.
See CONTRIBUTING.md for the ground rules and docs/good-first-issues.md for a place to start.
| Project | What it is |
|---|---|
| claude-dev-skills | Claude Code skills for everyday development: code review, debugging, CI and containers, data, docs and security basics |
| agent-security-skills | Claude Code plugin for securing LLM agents: threat modelling, config audits, prompt injection review, MCP server review |
| basitalisandhu | The maintainer's profile and other projects |
| This pack is also part of claude-skills | All packs in one repository; this plugin's pages are at https://basitalisandhu.github.io/claude-skills/plugins/aws-security/ |
MIT. See LICENSE.
aws-agent-session-audit | "what did the agent do in our AWS account?", after an agent session, before widening an agent role | agent_session_audit.py window, actions by service with reads, writes and errors, resources touched, 7 checks (logging tampering, IAM writes, destructive calls, outside the allow list, console, denied bursts, other regions) and a remove-these-permissions proposal, as Markdown or JSON |
preventive-control-mapper | "how do we stop this finding coming back?", after a findings clean-up, turning Security Hub or Prowler failures into guardrails | preventive_map.py per failing Security Hub control: SCP statement, account setting, EC2 declarative policy and IaC check (strongest first, with caveats), the Config rule that detects a regression, a merged SCP draft with its size against the 10,240-character limit, and the unmapped controls |