一键导入
website-infra
Deploys AWS CloudFormation infrastructure stacks for the website (S3, CloudFront, Route 53, ACM, and optionally contact form API).
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Deploys AWS CloudFormation infrastructure stacks for the website (S3, CloudFront, Route 53, ACM, and optionally contact form API).
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Build and deploy a production-ready Trust Center for any company. Use this skill whenever someone asks to create a trust center, compliance portal, security page, or wants to publish their SOC 2/SOC 3/ISO 27001/HIPAA/compliance posture publicly. Also triggers when someone mentions gated document access for audit reports, NDA-based document sharing, or wants to replace paid trust center tools like Secureframe, Vanta, Drata, or SafeBase. Even if they just say "I need a place to share my SOC 2 with customers" — that's a trust center. Use this skill.
NIST Cybersecurity Framework v2.0 expert. Reference-depth knowledge of the six Functions (Govern, Identify, Protect, Detect, Respond, Recover), Categories and Subcategories, Profiles (Current vs Target), Tiers, Implementation Examples, and the practitioner workflow of using CSF as a board-readable cybersecurity outcomes language. Backed by the SCF crosswalk for control-by-control mechanics.
Verbatim reference for all 320 NIST 800-171A Rev 2 assessment objectives, plus the Rev 2 → Rev 3 control crosswalk. Use for AO-level lookups (e.g., 3.1.1[c]), evidence planning, and forward-mapping to Rev 3. Pairs with cmmc-expert.
CMMC v2.0 expert for DoD contractors. Covers NIST 800-171 Rev 2 (14 families, 110 controls), SPRS scoring, POA&M rules, 32 CFR Part 170, DFARS clauses, scoping, ESP/CSP, C3PAO assessment lifecycle, and Rev 2 → Rev 3 transition.
Interpret testssl-inspector normalized findings, recommend remediations, and tie evidence back to SCF anchor controls plus SOC 2 / NIST 800-53 r5 / PCI DSS 4.0.1 / ISO 27002:2022 equivalents derived from SCF crosswalks.
Scaffolds a complete React/Vite website project from site-config.json. Generates components, styles, and configuration based on the site type and plan data.
| name | website-infra |
| description | Deploys AWS CloudFormation infrastructure stacks for the website (S3, CloudFront, Route 53, ACM, and optionally contact form API). |
| allowed-tools | Bash, Read, Write, Edit, Glob |
You are running the /grc-portfolio:infra skill. Your job is to deploy the AWS infrastructure needed to host the website using CloudFormation.
Find site-config.json:
$ARGUMENTS for a project directory pathRead it and validate that status.preflightComplete === true. If not, tell the user to run /grc-portfolio:preflight first.
Based on features.customDomain:
$TOOLKIT_DIR/cloudformation/website-infrastructure.yaml$TOOLKIT_DIR/cloudformation/website-infrastructure-no-domain.yamlRun the validation script:
$TOOLKIT_DIR/scripts/validate-stack.sh <template-path> <aws.profile>
If validation fails, report the error and stop.
Use aws cloudformation deploy — it is idempotent (creates the stack on
first run, applies a change-set on subsequent runs) and waits for completion
inline, so the user doesn't need a separate wait step.
With custom domain:
aws cloudformation deploy \
--stack-name <aws.stackName> \
--template-file <template-path> \
--parameter-overrides \
ProjectName=<projectName> \
DomainName=<aws.domain> \
HostedZoneId=<aws.hostedZoneId> \
CertificateArn=<aws.certArn> \
--profile <aws.profile> \
--region us-east-1 \
--no-fail-on-empty-changeset
Without custom domain:
aws cloudformation deploy \
--stack-name <aws.stackName> \
--template-file <template-path> \
--parameter-overrides ProjectName=<projectName> \
--profile <aws.profile> \
--region us-east-1 \
--no-fail-on-empty-changeset
Note: Check the actual template parameters first by reading the template file, as parameter names may differ from the examples above. Use the actual parameter names from the template.
The deploy command can take 5-15 minutes (especially with CloudFront distribution creation). Tell the user it's in progress and approximately how long it might take.
If the deploy fails, retrieve the failure reason:
aws cloudformation describe-stack-events \
--stack-name <aws.stackName> \
--profile <aws.profile> \
--region us-east-1 \
--query "StackEvents[?ResourceStatus=='CREATE_FAILED' || ResourceStatus=='UPDATE_FAILED'].[LogicalResourceId,ResourceStatusReason]" \
--output table
aws cloudformation describe-stacks \
--stack-name <aws.stackName> \
--profile <aws.profile> \
--region us-east-1 \
--query "Stacks[0].Outputs"
Extract and save to site-config.json:
aws.bucketName -- the S3 bucket nameaws.distributionId -- the CloudFront distribution IDaws.cloudFrontUrl -- the CloudFront domain name (e.g., d123abc.cloudfront.net)If features.contactForm is true:
Ask the user for two SES-verified email addresses (no defaults — the stack will refuse to deploy without them):
SESFromEmail: verified sender identitySESToEmail: recipient inbox for submissionsIf either is not yet verified in SES, stop and instruct the user to verify
them in the AWS Console (SES → Verified identities → Create identity)
before continuing. Save both to aws.sesFromEmail and aws.sesToEmail
in site-config.json.
Deploy the contact form stack:
aws cloudformation deploy \
--template-file $TOOLKIT_DIR/cloudformation/contact-form-api.yaml \
--stack-name <projectName>-contact-form-api \
--parameter-overrides "SESFromEmail=<aws.sesFromEmail>" "SESToEmail=<aws.sesToEmail>" \
--capabilities CAPABILITY_IAM \
--profile <aws.profile> \
--region us-east-1 \
--no-fail-on-empty-changeset
aws cloudformation describe-stacks \
--stack-name <projectName>-contact-form-api \
--profile <aws.profile> \
--region us-east-1 \
--query "Stacks[0].Outputs[?OutputKey=='ApiEndpoint'].OutputValue" \
--output text
Save to aws.contactApiEndpoint in config.
Package and deploy the Lambda function code (reference $TOOLKIT_DIR/scripts/deploy-contact-api.sh for the pattern -- create temp dir, copy handler, install @aws-sdk/client-ses, zip, update function code). The function name is <projectName>-contact-form-api-handler (derived from the stack name in the template).
If using a custom domain, tell the user:
dig NS <domain>Get the nameservers:
aws route53 get-hosted-zone --id <aws.hostedZoneId> --profile <aws.profile> --query "DelegationSet.NameServers"
Update site-config.json:
aws.bucketName, aws.distributionId, aws.cloudFrontUrlaws.contactApiEndpoint (if contact form)status.infraDeployed = trueTell the user:
/grc-portfolio:deploy next to push the built site to AWS$TOOLKIT_DIR = read from site-config.json toolkitDir field$ARGUMENTS = arguments passed after /infra (expected: project directory path)