S3 Bucket Policy Project 1: Public Read-Only Static Website
पुणे bakery: Priya Deshmukh. Internet = फक्त read; upload/delete नको. Public read-only website policy + BPA काळजीपूर्वक.
या chapter मध्ये तुम्ही काय शिकाल
- Public site ला tight GetObject का
- JSON line-by-line
- CLI + allow/deny + cleanup
- BPA + AccessDenied
- Interview
1. रोजचा project story
Ananya Sharma (जयपूर) व Lukas Weber (Berlin) static HTML. Principal "*" GetObject; Put/Delete = admin IAM. Ship, test, cleanup.
संबंधित survey: S3 bucket policy examples. इथे पूर्ण project lab.
2. ही policy का?
हे का लागतं?
Static files = public read, write बंद. त्याच bucket मध्ये PII = leak. वेगळा public bucket.
- कोणीही GET
- Anonymous PUT/DELETE नको
- Admin = IAM
- BPA: policy allow, ACL बंद
3. Policy काय आहे?
हे काय आहे?
Resource-based. एक Allow: Principal *, GetObject, BUCKET/*.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::rb-bakery-site-ap-south-1/*"
}
]
}
Line-by-line
- Version — सध्याची language.
- Sid — review label.
- Effect Allow.
- Principal *.
- फक्त GetObject.
- Resource /*.
4. कसं करायचं (CLI + output)
कसं करायचं (step by step)
# Create bucket in Mumbai
aws s3api create-bucket --bucket rb-bakery-site-ap-south-1 --region ap-south-1 \
--create-bucket-configuration LocationConstraint=ap-south-1
# {"Location": "http://rb-bakery-site-ap-south-1.s3.amazonaws.com/"}
# BPA: allow public policy; keep ACL blocks on
aws s3api put-public-access-block --bucket rb-bakery-site-ap-south-1 --public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=false,RestrictPublicBuckets=false
aws s3api put-bucket-policy --bucket rb-bakery-site-ap-south-1 --policy file://public-read.json
# (empty success)
echo "<h1>Menu - Priya Bakery Pune</h1>" > index.html
aws s3 cp index.html s3://rb-bakery-site-ap-south-1/index.html --content-type text/html
aws s3 website s3://rb-bakery-site-ap-south-1/ --index-document index.html --error-document index.html
5. Test: allow आणि deny
# ALLOW — anonymous GET
curl -s -o /dev/null -w "%{http_code}\n" \
https://rb-bakery-site-ap-south-1.s3.ap-south-1.amazonaws.com/index.html
# 200
# DENY — anonymous PUT
curl -s -o /dev/null -w "%{http_code}\n" -X PUT --data hack \
https://rb-bakery-site-ap-south-1.s3.ap-south-1.amazonaws.com/hack.txt
# 403
Security note
ListBucket world ला नको — keys leak. Production: project 2 (CloudFront OAC).
6. Multi-industry
Ecommerce, NGO, school, museum, QR menu.
7. Security checklist
- वेगळा public bucket; PII नको
- फक्त GetObject
- ACL block ठेवा
- नंतर CloudFront HTTPS
8. AccessDenied debugging आणि Policy Simulator
AccessDenied क्रम: BPA → bucket Deny → IAM Allow → KMS → VPCe → ACL. Simulator BPA/VPC/KMS miss करू शकतो — खऱ्या CLI ने test.
# Decode
aws s3api get-bucket-policy --bucket BUCKET --query Policy --output text | python3 -m json.tool
aws s3api get-public-access-block --bucket BUCKET
aws iam simulate-principal-policy --policy-source-arn ARN \
--action-names s3:GetObject --resource-arns arn:aws:s3:::BUCKET/key.txt
aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=GetObject --max-items 5
9. Industries आणि roles
- Frontend sites
- DevOps as code
- Security review
10. Lab: public read-only bakery site
Org block नसेल तर ap-south-1 (Mumbai). आधी budget alert.
कसं करायचं (step by step)
- Bucket create.
- BPA + policy + upload.
- Allow+deny proof.
- Website endpoint.
Cleanup (billing थांबवा)
- Cleanup bucket.
- Account BPA restore.
11. सामान्य errors आणि fixes
प्रत्येक row = खरी चूक. Panic करण्याआधी fix वाचा.
| Error / लक्षण | Fix |
|---|---|
| IAM Allow + Deny | Bucket Deny / BPA. |
| JSON reject | json.tool + file://. |
| Simulator ≠ CLI | Real CLI. |
| Wrong ARN | /* vs bare. |
| Condition typo | Exact spelling. |
| Principal | Resource policy needs it. |
| Account BPA | Check account switches. |
| KMS layer | Key policy + IAM. |
| Website 403 | BPA/key. |
| ListBucket * | Remove. |
12. Troubleshooting checklist
- Region + endpoint.
- Policy + BPA.
- Lab user.
- Sid binary search.
- CloudTrail.
- KMS test.
- VPCe path.
- Lock cleanup.
13. FAQ
प्र. Bucket = IAM?
नाही — resource vs identity; Deny wins; cross-account दोन्ही.
प्र. ACL 2026?
Owner enforced; logs कधी ACL.
प्र. BPA?
Public ACL/policy blocks.
प्र. AccessDenied fast?
Layer checklist; * नको.
प्र. * लागते?
Anonymous हो; better = OAC.
प्र. HTTPS?
Website endpoint HTTP; CF = HTTPS.
प्र. फक्त index?
Specific ARNs.
प्र. Fast revoke?
Delete policy / BPA.
14. Interview Q&A
प्र. /* का?
Object vs bucket-level.
प्र. BPA flag?
BlockPublicPolicy.
प्र. ListBucket *?
नाही — key leak.
प्र. Safest?
Private + OAC.
प्र. Prove?
GET 200 + PUT 403.
प्र. Allow vs Deny?
Deny wins.
15. Tips — English, मराठी आणि हिंदी
Ravindra Bagale's Tip (EN)
Ship public assets in their own bucket. Treat Principal * like a fire alarm — rare and reviewed.
Ravindra Bagale's Tip (MR)
Public assets वेगळ्या bucket मध्ये. Principal * = fire alarm — दुर्मिळ व review.
Tip (HI)
Public assets अलग bucket में रखें। Principal * को तिमाही review करें.
घरी करून बघा
- Lab वर 200 व 403.
- एक key; बाकी 403.
- BPA 60s.
थोडक्यात सांगायचं तर
- GetObject for *.
- BPA tune.
- Allow+deny.
- Next: OAC.
- No PII.
16. Policy save करण्याआधी checklist
- Business rule एका वाक्यात.
- Allow vs Deny-unless; Deny wins.
- ARN shapes.
- Condition keys.
- BPA first.
- Allow+deny plan.
- Cleanup plan.
- json.tool.
17. Policy Simulator walkthrough
Simulator identity/resource typos साठी चांगला; BPA/VPCe/KMS miss होऊ शकतात. नंतर खऱ्या path वरून CLI.
- Simulator → user/role.
- Action + ARN.
- Include bucket policy.
- CLI confirm.
- Mismatch → layers.
18. Copy-paste runbook
# 0) Region + names
export AWS_REGION=ap-south-1
export BUCKET=rb-lab-$(date +%s)-ap-south-1
# 1) Create + show BPA
aws s3api create-bucket --bucket $BUCKET --region $AWS_REGION \
--create-bucket-configuration LocationConstraint=$AWS_REGION
aws s3api get-public-access-block --bucket $BUCKET || true
# 2) Validate + apply policy
python3 -m json.tool policy.json >/dev/null
aws s3api put-bucket-policy --bucket $BUCKET --policy file://policy.json
aws s3api get-bucket-policy --bucket $BUCKET --query Policy --output text | python3 -m json.tool | head
# 3) Allow test + Deny test (fill per project)
# ... project-specific curls / aws s3 cp ...
# 4) Cleanup
aws s3 rm s3://$BUCKET --recursive || true
aws s3api delete-bucket-policy --bucket $BUCKET || true
aws s3api delete-bucket --bucket $BUCKET
19. Industry story bank
वरील प्रत्येक project एक industry story वापरतो. इतर industries मध्ये फक्त bucket/principal/Condition बदला.
- Healthcare: SSE-KMS + OrgID + MFA.
- Fintech: IP + HTTPS + OAC.
- EdTech: OAC only.
- Logistics: VPCe.
- Media: Object Lock.
- Retail: prefix public read.
- SaaS: prefix homes.
- Gov: OrgID + MFA + Lock.
20. AccessDenied debugging flowchart
- Error code + request id.
- Bucket + region.
- BPA.
- Explicit Deny.
- Conditions.
- KMS key policy.
- OAC id.
- VPCe path.
- Simulator + CLI.
- Support last.
21. PR review checklist
- Valid JSON.
- Required fields.
- No open write.
- Tests.
- Cleanup.
सराव Tasks
Maple Leaf Books हा टोरांटो मधला पुस्तक विक्री व्यवसाय आहे. Emily Tremblay त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे CAD मध्ये मोजले जातात आणि AWS resources ca-central-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 16
सोपं Objects list
का: Site files.
काय करायचं: s3://mapleleafbooks-web list.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं Get policy
का: Policy वाचा.
काय करायचं: mapleleafbooks-web policy.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं BPA blocks
का: BPA.
काय करायचं: BPA block तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
सोपं GetObject
का: Read.
काय करायचं: Get not Put तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
सोपं Head
का: Exists.
काय करायचं: mapleleafbooks-web head.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Website config
का: Static hosting.
काय करायचं: website index.html.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Get website
का: Hosting confirm.
काय करायचं: mapleleafbooks-web website.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम BPA get
का: BPA.
काय करायचं: mapleleafbooks-web BPA.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Deny Put
का: No write.
काय करायचं: deny public Put.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
मध्यम Index JSON
का: Index.
काय करायचं: Suffix index.html.
- Task मधल्या top-level keys पासून सुरू करा.
- Child keys 2 spaces ने indent करा (tabs नकोत).
- प्रत्येक property मध्ये task मधली value भरा.
- Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.
मध्यम Website EP
का: Index.
काय करायचं: Website EP तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
मध्यम 403
का: Debug.
काय करायचं: AccessDenied code?
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
अवघड Put index
का: Homepage.
काय करायचं: put index.html.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Public GetObject
का: Static read.
काय करायचं: public GetObject.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
अवघड Error JSON
का: 404.
काय करायचं: error.html.
- Task मधल्या top-level keys पासून सुरू करा.
- Child keys 2 spaces ने indent करा (tabs नकोत).
- प्रत्येक property मध्ये task मधली value भरा.
- Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.
अवघड Delete policy
का: Cleanup.
काय करायचं: mapleleafbooks-web del policy.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
उजळणी, मुलाखत आणि तुलना cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.








अजून cards: Ravi Sir's Cards.