Tech Forge

Exercises › Module 11

Cloud Cover

An AI-assisted exercise on cloud, container, and hybrid infrastructure: storage exposure, IAM (Identity and Access Management) privilege, Kubernetes hardening, logging, and the shared responsibility model, ending in an honest security review. Suggested time: about 40 minutes.

Goal

Use an AI assistant to generate a fictional cloud case file for a freight company (junior reviewer notes, a storage inventory, IAM policy summaries, Kubernetes manifest notes, a network and logging summary, and a draft risk report), then turn it into a review ready for the client. You review documents, not cloud accounts: nothing is scanned, no command is run, and no real account is touched. Your real job is to catch what the draft got wrong before it ships.

Safety rules

1 Generate the case file

Paste this into your AI assistant. It builds four fictional documents. Save the output before moving on.

You are helping me build a fictional training case for an ethical hacking class. Everything must be invented. Do not output exploit code, attack commands, working scripts, real credentials, real access keys, or real account IDs. The client is 'Larkspur Freight Logistics', a fictional shipping company. Its cloud migration project is called 'Skyway'. The reviewers are 'Northgate Cloud Assurance', a fictional cloud security firm. Use only .example domains, private (RFC 1918) IP addresses, and obviously fake placeholder IDs such as 111122223333. No real companies, people, or live targets.

Create a cloud and container security review case file with four documents:

Document A, Junior Reviewer Notes: confident first-person notes claiming (1) all storage is private; (2) every IAM (Identity and Access Management) role follows least privilege; (3) the Kubernetes cluster is hardened; (4) logging is fully enabled, so any attacker activity would be caught.

Document B, Evidence Appendix with five parts:
 B1, Storage inventory (table, 8 rows): AWS S3 buckets and one Azure Blob container with name, purpose, Block Public Access setting, and policy summary. Most are private. The bucket 'skyway-manifests-archive' has Block Public Access OFF and a bucket policy summarized as Principal '*' with s3:GetObject; it holds old shipping manifests with customer names and addresses.
 B2, IAM policy summary (table, not JSON): roles for the web tier, CI/CD (Continuous Integration/Continuous Delivery) pipeline, and analytics. The web-tier EC2 role 'skyway-web-role' has narrow S3 read access plus iam:PassRole on Resource '*' and ec2:RunInstances. Note that the web instances still allow IMDSv1 (Instance Metadata Service version 1), and the web app has a 'fetch image from URL' feature.
 B3, Kubernetes manifest summary (described in prose and tables, not YAML): a 'tracking-api' Deployment runs as non-root with a read-only filesystem; a 'log-shipper' DaemonSet runs privileged with hostPath '/' mounted; the 'default' service account in the 'tracking' namespace is bound to cluster-admin; database credentials are stored as a Kubernetes Secret (base64) and also as plain environment variables; no NetworkPolicy exists.
 B4, Network and logging summary: a diagram described in text showing the VPC (Virtual Private Cloud), a private EKS (Elastic Kubernetes Service) API endpoint, and a site-to-site VPN to the on-premises warehouse network. CloudTrail is enabled in us-east-1 only, while the Kubernetes cluster and a recently created IAM user 'svc-backup2' live in us-west-2; svc-backup2 has AdministratorAccess, an access key created 9 days ago, and no MFA (Multi-Factor Authentication), and no one on the team recognizes it.

Document C, Draft Risk Report: a one-page report for Larkspur's CIO with overall risk (Medium), a summary that trusts Document A, and remediation that says only: 'Enable MFA for console users and rotate access keys every 90 days. The cloud provider is responsible for securing the Kubernetes control plane and storage, so no further action is needed there.'

IMPORTANT: do not label, flag, or hint at these anywhere, and write them as normal details:
- Document A says all storage is private; B1 shows a public archive bucket with customer data.
- Document A says least privilege; B2 shows iam:PassRole on '*' with ec2:RunInstances on an internet-facing role, with IMDSv1 and a URL-fetch feature.
- Document A says the cluster is hardened; B3 shows a privileged hostPath DaemonSet, default service account with cluster-admin, and secrets in environment variables.
- Document A says logging is complete; B4 shows CloudTrail in only one region while an unrecognized admin user exists in another.
- Document C misstates the shared responsibility model.
- Everything else should read as a plausible (but flawed) junior write-up.

Tip: if the AI labels or flags any planted problem, ask it to regenerate without flags, or swap case files with a partner.

2 Have AI write the client-ready review

Ask the AI to turn the case file into a security review for the client.

Act as a senior cloud security consultant at Northgate Cloud Assurance. Using only Documents A, B, and C, write a client-ready cloud and container security review for the Larkspur Freight Logistics CIO with these sections:
1) Title and overall risk rating.
2) Assets in scope (storage, identities, Kubernetes workloads, network and logging).
3) Findings, each with: plain-language description, evidence source (document and part), and the matching OWASP Kubernetes Top 10 or MITRE ATT&CK for Cloud reference.
4) Business impact in two sentences (customer data and operations).
5) Remediation recommendations (storage, identity, Kubernetes, logging and detection, and shared responsibility).

Then rate your confidence in the overall review (High, Medium, or Low) and explain why. No attack commands or exploit steps.

Watch the storage claim, the least-privilege claim, the cluster claim, the logging claim, and who the draft says is responsible. The AI tends to trust the junior notes and the draft report.

3 Review it yourself, then fix it

Do this review yourself before you trust the AI's review:

  1. Read every row of B1. Is Block Public Access on everywhere? Which policy lets anyone read, and what is inside?
  2. Read B2 role by role. Which permissions on the web role go beyond reading images? How do IMDSv1 and a URL-fetch feature change the risk?
  3. Read B3. Which workload is privileged, which service account is too powerful, and where do the secrets really live? Is there any NetworkPolicy?
  4. Read B4. Which regions does CloudTrail cover? Where do the cluster and svc-backup2 live? Who created svc-backup2?
  5. Read the remediation. Does the provider really secure your bucket policies and Kubernetes workloads?
  6. Stretch goal: map each problem to the OWASP Kubernetes Top 10 or a MITRE ATT&CK for Cloud technique.

Then fill in the brackets and run:

Revise the Skyway security review:
1) Not all storage is private. B1 shows [which bucket, which setting, what policy, and what data]. Explain the customer-data exposure.
2) Least privilege is not met. B2 shows [which role, which two permissions, and which metadata and app features]. Explain how an SSRF (Server-Side Request Forgery) to IMDSv1 plus these permissions could lead to privilege escalation.
3) The cluster is not hardened. B3 shows [which workload, which service account binding, how secrets are stored, and what is missing]. Map each to the OWASP Kubernetes Top 10.
4) Logging is not complete. B4 shows [which regions CloudTrail covers, and the user that sits outside it]. Explain why svc-backup2 needs an incident investigation, not just a key rotation.
5) Correct the shared responsibility statement: explain what the provider secures and what Larkspur still owns (bucket policies, IAM, workloads, RBAC, Secrets).
6) Replace the remediation: account-level S3 Block Public Access; scope skyway-web-role and remove iam:PassRole on '*'; require IMDSv2; remove privileged mode and hostPath, unbind cluster-admin from the default service account, move secrets to a secrets manager; add a default-deny NetworkPolicy; enable an organization-wide, multi-region CloudTrail with alerts; disable svc-backup2 and investigate.
7) Update the overall risk rating and confidence, and explain what changed.

Re-read the revision. The AI sometimes fixes the findings table but leaves 'all storage is private' or the provider-responsibility claim in the summary.

Review checklist

Deliverables

Grading rubric (10 pts)

CriterionPts
Public bucket and IAM escalation path found and explained2
Kubernetes misconfigurations found and mapped2
Logging gap and unrecognized admin user escalated2
Shared responsibility corrected and remediation replaced2
Corrected review is consistent end to end (summary, findings, risk, confidence)2
Answer key (spoilers: finish the exercise first)

What a correct submission shows

Why it matters

Common mistakes

Instructor variant (same answer for everyone)

Add this line to the Step 1 prompt:

Make Document A claim all storage is private, least privilege, a hardened cluster, and complete logging. Make Document B show the public 'skyway-manifests-archive' bucket with customer manifests; skyway-web-role with iam:PassRole on '*' and ec2:RunInstances, IMDSv1, and a URL-fetch feature; a privileged log-shipper DaemonSet with hostPath '/', the default service account bound to cluster-admin, and secrets in environment variables; and CloudTrail only in us-east-1 while an unrecognized admin user svc-backup2 (key 9 days old, no MFA) lives in us-west-2. Keep the 'provider secures the control plane and storage' remediation and the Medium risk rating.

Answer: skyway-manifests-archive is public with customer data; skyway-web-role can escalate through iam:PassRole and IMDSv1; the cluster has a privileged hostPath DaemonSet, cluster-admin on the default service account, and secrets in environment variables; CloudTrail misses us-west-2 where an unrecognized admin user exists; the shared responsibility statement is wrong.

Join the Tech Forge community

Share your corrected cloud security review, compare which problems you caught, and get feedback from other learners on the Tech Forge Discord.

Join the Discord

Or scan the code with your phone: techforge.community/discord

QR code linking to techforge.community/discord