Ravindra BagaleCourses & study guides English Track your progress

S3 Bucket Policy Project 6: Upload वर SSE-KMS Enforce

Deepak Nair (बेंगलुरु) bank: प्रत्येक Put = SSE-KMS CMK. Deny unless encryption = aws:kms (+ key ARN).

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

  • SSE-KMS enforce का
  • Header conditions
  • CLI allow/deny
  • Key policy
  • Interview

1. Story

Shruti Kulkarni (पुणे) व Pieter de Vries (Amsterdam) — CMK on every object.

2. KMS Put का?

हे का लागतं?

Default encryption मदत; चुकीच्या header वर Deny = misconfig SDK थांबते.

  • Header = aws:kms
  • Optional key ARN
  • Default encryption
  • IAM + key policy

3. Policy

हे काय आहे?

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyIncorrectEncryption",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::rb-bank-docs-ap-south-1/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "aws:kms"
        }
      }
    },
    {
      "Sid": "DenyWrongKmsKey",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::rb-bank-docs-ap-south-1/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:ap-south-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
      }
    }
  ]
}

Line-by-line

  1. No KMS header → Deny.
  2. Encryption header.
  3. Wrong key Deny.
  4. /* only.
  5. IAM + KMS.
  6. Default = KMS.

4. CLI

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

KEY=arn:aws:kms:ap-south-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
aws s3api put-bucket-policy --bucket rb-bank-docs-ap-south-1 --policy file://kms-enforce.json

# ALLOW
aws s3 cp report.pdf s3://rb-bank-docs-ap-south-1/report.pdf --sse aws:kms --sse-kms-key-id "$KEY"
# upload success

# DENY — no SSE
aws s3 cp report.pdf s3://rb-bank-docs-ap-south-1/bad.pdf
# An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

5. Allow/deny

Allow: --sse aws:kms. Deny: no SSE / AES256.

# DENY SSE-S3
aws s3 cp report.pdf s3://rb-bank-docs-ap-south-1/aes.pdf --sse AES256
# AccessDenied

6. Key policy

Bucket ≠ key

Header बरोबर असूनही key policy trust नसेल तर Put fail. Caller (+ S3) ला key grant.

7. Multi-industry

Banking, health-tech, insurance, govt.

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: SSE-KMS

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

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

  1. CMK + default.
  2. Policy.
  3. Allow/deny.
  4. AES256 deny.

Cleanup (billing थांबवा)

  1. Cleanup.
  2. Key grants.

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.
Header+DenyKey policy.
Default onlyKeep Deny.

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

प्र. S3 vs KMS?

AES256 vs CMK.

प्र. Bucket key?

Cost reduce.

प्र. Multipart?

Parts too.

प्र. Copy?

Test copy.

13. Interview Q&A

प्र. Enforce?

Header conditions.

प्र. Default only?

Need Deny.

प्र. KMS who?

Upload+read+key policy.

प्र. Audit?

KMS ok / AES deny.

प्र. Cross-account?

Both sides.

प्र. Missing header?

Denied.

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

Ravindra Bagale's Tip (EN)

Default encryption + Deny wrong encryption is the pair interviewers love to hear.

Ravindra Bagale's Tip (MR)

Default encryption + Deny wrong = interview pair.

Tip (HI)

Default encryption और गलत encryption पर Deny — interview में यही जोड़ी बताएं।

घरी करून बघा

  1. Capture both.
  2. Key policy read.
  3. Bucket Keys 45s.

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

  1. KMS Deny.
  2. Pair.
  3. Key policy.
  4. Negative tests.
  5. Multipart.

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 बद्दल

Ahmednagar Sugar Co-op हा अहिल्यानगर मधला साखर सहकारी व्यवसाय आहे. Balasaheb Pawar त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 16

सोपं Policy

का: SSE.

काय करायचं: nagarsugar-kms policy.

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

सोपं Default SSE

का: Default.

काय करायचं: nagarsugar-kms enc.

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

सोपं Missing

का: Enforce.

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

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

सोपं Key policy

का: Two.

काय करायचं: Key policy तर 1.

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

सोपं List

का: Inventory.

काय करायचं: nagarsugar-kms list.

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

सोपं Head

का: Exists.

काय करायचं: nagarsugar-kms head.

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

सोपं BPA

का: BPA.

काय करायचं: nagarsugar-kms BPA.

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

मध्यम Put KMS

का: Allow.

काय करायचं: put SSE-KMS.

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

मध्यम Get

का: Read.

काय करायचं: get secret.txt.

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

मध्यम Allow Put

का: Baseline.

काय करायचं: allow Put.

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

मध्यम SSE header

का: Condition.

काय करायचं: aws:kms.

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

मध्यम AES256

का: Different.

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

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

मध्यम Default

का: Deny.

काय करायचं: Deny helps तर 1.

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

अवघड Deny no KMS

का: Header.

काय करायचं: deny without KMS.

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

अवघड Key id

का: CMK.

काय करायचं: key arn.

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

अवघड Del

का: Cleanup.

काय करायचं: nagarsugar-kms 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: SSE-KMS upload enforce. No plaintext at rest. Deny unless aws:kms header. Default + Deny → tests. Reject AES256-only.
उजळणी card: SSE-KMS upload enforce · PNG download करा · Card page उघडा
उजळणी card: Bucket vs KMS key policy. Need KMS key policy too. Grants; XA; deletion window. Wrong key fail / right ok. Reader Decrypt grant.
उजळणी card: Bucket vs KMS key policy · PNG download करा · Card page उघडा
तुलना: SSE-KMS vs SSE-S3 (AES256). SSE-KMS: aws:kms + key policy. SSE-S3 (AES256): AES256 simpler.
तुलना: SSE-KMS vs SSE-S3 (AES256) · PNG download करा · Card page उघडा
तुलना: Default bucket encryption vs Deny-without-SSE header. Default bucket encryption: Helps good clients. Deny-without-SSE header: Blocks bad clients.
तुलना: Default bucket encryption vs Deny-without-SSE header · PNG download करा · Card page उघडा
मुलाखत card: KMS enforce करणारा header?. SSE header aws:kms. Deny if not aws:kms. No --sse → deny.
मुलाखत card: KMS enforce करणारा header? · PNG download करा · Card page उघडा
मुलाखत card: Key policy का महत्त्वाचं?. Need KMS perms. XA grants. Get fails KMS.
मुलाखत card: Key policy का महत्त्वाचं? · PNG download करा · Card page उघडा
मुलाखत card: या Deny साठी SSE-S3 पुरेसं का?. AES256 ≠ aws:kms. Pick per compliance. AES256 denied.
मुलाखत card: या Deny साठी SSE-S3 पुरेसं का? · PNG download करा · Card page उघडा
मुलाखत card: Default encryption vs Deny?. Default + Deny belt/suspenders. Both. Fail closed.
मुलाखत card: Default encryption vs Deny? · PNG download करा · Card page उघडा

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