Ravindra BagaleCourses & study guides English Track your progress

S3 Bucket Policy Project 2: फक्त CloudFront OAC Access

मुंबई OTT: Vikram Joshi. Videos S3; CDN = CloudFront. Direct S3 URL = bypass. OAC + policy फक्त CloudFront service principal.

या chapter मध्ये तुम्ही काय शिकाल

  • Private origin का
  • OAC + policy
  • SourceArn + deny
  • OAI + debug
  • Interview

1. रोजचा project story

Mei Lin (Singapore) व Suresh Reddy (Hyderabad) course videos. फक्त CloudFront URL.

Public-website नंतर: private + OAC.

2. OAC-only का?

हे का लागतं?

Public GetObject = CF controls bypass. OAC = फक्त CloudFront.

  • Bucket private; BPA on
  • OAC SigV4
  • Service principal + SourceArn
  • Direct URL 403

3. Policy काय?

हे काय आहे?

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCloudFrontServicePrincipalRead",
      "Effect": "Allow",
      "Principal": { "Service": "cloudfront.amazonaws.com" },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::rb-ott-origin-ap-south-1/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE"
        }
      }
    }
  ]
}

Line-by-line

  1. Service principal.
  2. GetObject.
  3. Origin /*.
  4. SourceArn lock.
  5. No *.
  6. Swap real id.
Viewer → CF → OAC → S3Direct S3
403

4. CLI + output

कसं करायचं (step by step)

# Private bucket
aws s3api create-bucket --bucket rb-ott-origin-ap-south-1 --region ap-south-1 \
  --create-bucket-configuration LocationConstraint=ap-south-1
aws s3api put-public-access-block --bucket rb-ott-origin-ap-south-1 --public-access-block-configuration \
  BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true

# Create OAC, attach to distribution origin, note Distribution ARN, then:
aws s3api put-bucket-policy --bucket rb-ott-origin-ap-south-1 --policy file://oac.json
# (empty success)

echo demo-video-bytes > demo.mp4
aws s3 cp demo.mp4 s3://rb-ott-origin-ap-south-1/videos/demo.mp4

5. Allow आणि deny

# DENY — direct S3 (no CF)
curl -s -o /dev/null -w "%{http_code}\n" \
  https://rb-ott-origin-ap-south-1.s3.ap-south-1.amazonaws.com/videos/demo.mp4
# 403

# ALLOW — via CloudFront domain (after OAC attached)
curl -s -o /dev/null -w "%{http_code}\n" \
  https://d111111abcdef8.cloudfront.net/videos/demo.mp4
# 200

6. OAC vs OAI

TopicOACOAI
AuthSigV4Canonical user
SSE-KMSCleanLimited
AdvicePrefer OACMigrate

7. Multi-industry

OTT, edtech, news, hospital training.

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. Lab: private origin + OAC

Org block नसेल तर ap-south-1 (Mumbai). आधी budget alert.

कसं करायचं (step by step)

  1. Private bucket.
  2. CF + OAC.
  3. Policy + upload.
  4. Deny+allow.

Cleanup (billing थांबवा)

  1. Cleanup CF + bucket.
  2. DNS cleanup.

10. सामान्य errors आणि fixes

प्रत्येक row = खरी चूक. Panic करण्याआधी fix वाचा.

Error / लक्षणFix
IAM Allow + DenyBucket Deny / BPA.
JSON rejectjson.tool + file://.
Simulator ≠ CLIReal CLI.
Wrong ARN/* vs bare.
Condition typoExact spelling.
PrincipalResource policy needs it.
Account BPACheck account switches.
KMS layerKey policy + IAM.
OAC 403ARN/OAI/KMS.
Old * leftRemove *.

11. Troubleshooting checklist

  1. Region + endpoint.
  2. Policy + BPA.
  3. Lab user.
  4. Sid binary search.
  5. CloudTrail.
  6. KMS test.
  7. VPCe path.
  8. Lock cleanup.

12. 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; * नको.

प्र. OAC vs OAI?

OAC current.

प्र. Many CF?

Multiple SourceArn.

प्र. BPA?

Keep on.

प्र. KMS?

Key policy for CF.

13. Interview Q&A

प्र. * + CF?

Bypass.

प्र. Condition?

SourceArn.

प्र. Prove?

403 vs 200.

प्र. OAI new?

Prefer OAC.

प्र. WAF?

On CF.

प्र. Cross-account?

Careful + test.

14. Tips — English, मराठी आणि हिंदी

Ravindra Bagale's Tip (EN)

Never leave a public GetObject on an origin that CloudFront protects — you just built a back door.

Ravindra Bagale's Tip (MR)

CloudFront protect केलेल्या origin वर public GetObject = back door.

Tip (HI)

CloudFront origin पर Principal * न छोड़ें — यह back door है।

घरी करून बघा

  1. 403 vs 200 outputs.
  2. Break ARN; fix.
  3. 90s pitch.

थोडक्यात सांगायचं तर

  1. Private + OAC + SourceArn.
  2. Direct 403.
  3. OAC > OAI.
  4. BPA on.
  5. KMS too.

15. Policy save करण्याआधी checklist

  1. Business rule एका वाक्यात.
  2. Allow vs Deny-unless; Deny wins.
  3. ARN shapes.
  4. Condition keys.
  5. BPA first.
  6. Allow+deny plan.
  7. Cleanup plan.
  8. json.tool.

16. Policy Simulator walkthrough

Simulator identity/resource typos साठी चांगला; BPA/VPCe/KMS miss होऊ शकतात. नंतर खऱ्या path वरून CLI.

  1. Simulator → user/role.
  2. Action + ARN.
  3. Include bucket policy.
  4. CLI confirm.
  5. Mismatch → layers.

17. 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

18. 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.

19. AccessDenied debugging flowchart

  1. Error code + request id.
  2. Bucket + region.
  3. BPA.
  4. Explicit Deny.
  5. Conditions.
  6. KMS key policy.
  7. OAC id.
  8. VPCe path.
  9. Simulator + CLI.
  10. Support last.

20. PR review checklist

  • Valid JSON.
  • Required fields.
  • No open write.
  • Tests.
  • Cleanup.

सराव Tasks

या scenario बद्दल

Vidarbha Cotton Mills हा नागपूर मधला वस्त्रोद्योग व्यवसाय आहे. Ganesh Wankhede त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 16

सोपं Get policy

का: OAC.

काय करायचं: vidarbhacotton-origin policy.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं List origin

का: Inventory.

काय करायचं: list origin.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं OAC

का: Modern.

काय करायचं: OAC तर 1.

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

सोपं Direct deny

का: CF.

काय करायचं: Direct deny तर 1.

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

सोपं BPA

का: BPA.

काय करायचं: vidarbhacotton-origin BPA.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं Head

का: Exists.

काय करायचं: vidarbhacotton-origin head.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Get object

का: Direct.

काय करायचं: get app.js.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Put asset

का: Publish.

काय करायचं: put app.js.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Deny anon

का: Direct block.

काय करायचं: deny anon.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

मध्यम SourceArn

का: Distro.

काय करायचं: SourceArn EDUMMY123.

कसं करायचं:
  1. Task मधल्या top-level keys पासून सुरू करा.
  2. Child keys 2 spaces ने indent करा (tabs नकोत).
  3. प्रत्येक property मध्ये task मधली value भरा.
  4. Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.

मध्यम No *

का: Control.

काय करायचं: * bypass तर 1.

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

मध्यम Invalidate

का: Cache.

काय करायचं: Invalidation तर 1.

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

मध्यम Encryption

का: SSE.

काय करायचं: vidarbhacotton-origin enc.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड OAC GetObject

का: फक्त CF.

काय करायचं: CF GetObject.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

अवघड Service JSON

का: CF.

काय करायचं: Service CF.

कसं करायचं:
  1. Task मधल्या top-level keys पासून सुरू करा.
  2. Child keys 2 spaces ने indent करा (tabs नकोत).
  3. प्रत्येक property मध्ये task मधली value भरा.
  4. Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.

अवघड Del policy

का: Cleanup.

काय करायचं: vidarbhacotton-origin del.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

उजळणी, मुलाखत आणि तुलना cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

उजळणी card: CloudFront OAC only. Direct S3 = bypass CF controls. OAC = CF principal + SourceArn. OAC → policy → deny anon. Videos via CF only.
उजळणी card: CloudFront OAC only · PNG download करा · Card page उघडा
उजळणी card: Direct S3 Deny. * GetObject skips CF. Allow CF; deny direct curl. CF 200 / S3 403. Raw S3 403.
उजळणी card: Direct S3 Deny · PNG download करा · Card page उघडा
तुलना: Origin Access Control vs Origin Access Identity. Origin Access Control: SigV4 + KMS-friendly. Origin Access Identity: Legacy canonical user.
तुलना: Origin Access Control vs Origin Access Identity · PNG download करा · Card page उघडा
तुलना: CloudFront URL vs Direct S3 REST URL. CloudFront URL: Edge controls. Direct S3 REST URL: Bypasses edge.
तुलना: CloudFront URL vs Direct S3 REST URL · PNG download करा · Card page उघडा
मुलाखत card: CloudFront OAC म्हणजे?. Signed origin; CF principal + SourceArn. OAC > OAI. SourceArn pins distro.
मुलाखत card: CloudFront OAC म्हणजे? · PNG download करा · Card page उघडा
मुलाखत card: OAC सोबत Principal * का नको?. * skips CF. Only CF service. Direct 403.
मुलाखत card: OAC सोबत Principal * का नको? · PNG download करा · Card page उघडा
मुलाखत card: OAC deny कसा test?. CF allow / S3 deny. Invalidation. 403 vs 200.
मुलाखत card: OAC deny कसा test? · PNG download करा · Card page उघडा
मुलाखत card: Distribution pin करणारी Condition?. AWS:SourceArn. Id typo breaks CF. distribution/E…
मुलाखत card: Distribution pin करणारी Condition? · PNG download करा · Card page उघडा

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