A hands-on path that follows GRC Engineering for AWS: A Hands-On Guide to Governance, Risk, and Compliance Engineering by AJ Yawn. Each week produces portfolio artifacts you can publish.
• Create AWS Organization (mgmt + 2 member accounts, free-tier).
• Install AWS CLI, SAM/CFN CLI, Git, Python 3.11, VS Code.
• Clone book repo: git clone https://github.com/ajy0127/thegrcengineeringbook.git
• Create private repo grc-engineering-portfolio for all lab work.
- Read Ch 1 First-Principles Revolution & Ch 2 GRC Engineering 101.
- Write a one-page press release (Amazon “working-backwards” style) describing an ideal future-state compliance program.
- Commit to portfolio repo (
docs/press-release.md).
- Enable AWS Config in sandbox Account A
a. Console → Config → Get started → Record all resources → Include global resources. - Add 3 managed rules:
•s3-bucket-server-side-encryption-enabled
•iam-password-policy
•ec2-instance-managed-by-ssm - Start AWS Audit Manager
a. Audit Manager → Create assessment → Framework = AWS Foundational Security → link to Config. - Verify evidence appears in assessment dashboard.
- Document commands & screenshots in
runbooks/bootstrap-compliance.md.
- Org CloudTrail (management account)
aws cloudtrail create-trail --name org-trail --is-organization-trail --s3-bucket-name org-trail-logs --enable-log-file-validation - GuardDuty
a. Enable delegated admin.
b.aws guardduty create-detector --enablein each member via delegated script. - Security Hub
a. Delegated admin → Settings → Enable organization. - Commit CFN/Terraform definitions to
infra/security-baseline/and push screenshots.
Lab 1 – Convert baseline to IaC
- Export current Config/GuardDuty/Security Hub settings.
- Translate into CloudFormation YAML or Terraform HCL.
- Validate (
cfn-lintorterraform validate) and deploy to dev account.
Lab 2 – Org Guardrail (SCP)
- Policy JSON in
scp/deny-all-ec2.json. - Create & attach:
POLICY_ID=$(aws organizations create-policy \
--name "DenyAllEC2" \
--type SERVICE_CONTROL_POLICY \
--content file://scp/deny-all-ec2.json \
--query 'Policy.PolicySummary.Id' --output text)
aws organizations attach-policy --policy-id $POLICY_ID --target-id <ACCOUNT_ID>- Test in target account:
aws ec2 describe-instances→ expect AccessDenied.
Lab 1 – Lambda Compliance Logger
cd labs/lambda-violation-logger- Build & deploy:
sam build && sam deploy --guided(runtime Python 3.11). - Note Lambda ARN for next lab.
Lab 2 – EventBridge Rule & Alerting
- Create EventBridge rule:
• Source =aws.config
• DetailType =Config Rules Compliance Change
• Filter wherecomplianceType=NON_COMPLIANT. - Target = Lambda ARN; add SNS topic
compliance-alertsemail subscription. - Test: Make an S3 bucket public in dev account → verify Lambda log + email.
- Reflection: In
journal.mdrecord mean-time-to-remediate vs weekly scan baseline.
Lab 3 – Pre-built Config Remediations
- Deploy S3 bucket encryption remediation using SSM document
AWSConfigRemediation-EnableS3BucketEncryption. - Deploy Security-group SSH restriction remediation (
AWSConfigRemediation-RemoveUnrestrictedSourceInSecurityGroup) to block0.0.0.0/0 :22. - Deploy IAM password-policy remediation (
AWSConfigRemediation-SetIAMPasswordPolicy). - Create
RemediationRolewith least-privilege policy granting only the actions required by the above SSM documents. - Tune memory (≥512 MB) and 60-second timeout for remediation Lambdas; document rationale.
- Record mean-time-to-remediate (MTTR) before/after automation in
journal.md.
Lab 4 – Evidence & Log Forwarding
- Create CloudWatch subscription filters or Kinesis Firehose to stream Lambda & Config remediation logs to a centralized security-logs account or S3 archival bucket.
- Verify logs contain structured JSON fields for audit (timestamp, rule, resourceId, action).
- Note storage location and retention policy in
runbooks/logging.md.
• Write Python script listing all S3 buckets + encryption status across Org; export CSV.
• Mini-lab – Custom Tagging Remediation:
- Author Lambda that auto-tags EC2/S3/RDS resources missing required tags.
- Create Config custom rule to detect untagged resources and set Lambda as remediation target.
- Add unit tests; deploy with SAM and validate.
• Add GitHub Action to run nightly.
• Fork FAFO repo; deploy in sandbox.
• Submit two PRs: documentation fix & new control check.
• Write blog/LinkedIn post summarizing lessons.
• Self-assess technical & soft skills; draft 90-day up-skill plan.
• Publish GitHub repo with READMEs.
• Record 3-min Loom tour of event-driven pipeline; link in README.
• Draft STAR stories from labs.
• Update LinkedIn headline: GRC Engineer | AWS Security Automation.
• Conduct mock interview.
• Monthly: run automated access review; archive report in Audit Manager.
• Daily: ensure CloudWatch Logs export job is running and buckets have lifecycle policy → Glacier after 90 days.
• Quarterly: add one new Config rule + remediation.
• Annually: present automation lessons to security leadership.
Use GitHub Projects board → To Do | In Progress | Done.
Commit at least one artifact + journal.md reflection each week.
Outcome: Org-wide guardrails, event-driven remediation, continuous evidence, and a public portfolio that proves your GRC engineering skills.