Ravindra BagaleCourses & study guides English Track your progress

S3 Bucket Policy Project 7: Cross-Account ALB/CloudTrail Logs

Sneha Rao (हैदराबाद) central logs. ALB + CloudTrail दुसऱ्या accounts कडून. Service principals (+ कधी ACL).

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

  • Cross-account logs का
  • Service principals
  • Enable + verify
  • ACL vs policy
  • Interview

1. Story

Harshad Joshi (मुंबई) व Claire Thompson (London) → Sneha Rao security bucket.

2. Cross-account का?

हे का लागतं?

Workload स्वतः audit delete नये. Logging account owns bucket; इतर accounts ला resource Allow.

  • वेगळं logging account
  • Service principals
  • SourceAccount
  • Later: deny delete

3. Policy

हे काय आहे?

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowALBLogDelivery",
      "Effect": "Allow",
      "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::rb-central-logs-ap-south-1/alb/AWSLogs/444455556666/*",
      "Condition": {
        "StringEquals": { "aws:SourceAccount": "444455556666" }
      }
    },
    {
      "Sid": "AllowCloudTrailPut",
      "Effect": "Allow",
      "Principal": { "Service": "cloudtrail.amazonaws.com" },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::rb-central-logs-ap-south-1/cloudtrail/AWSLogs/444455556666/*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "444455556666",
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "AllowCloudTrailAclCheck",
      "Effect": "Allow",
      "Principal": { "Service": "cloudtrail.amazonaws.com" },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::rb-central-logs-ap-south-1"
    }
  ]
}

Line-by-line

  1. ALB principal.
  2. Account prefix.
  3. SourceAccount.
  4. Trail ACL.
  5. GetBucketAcl.
  6. Swap ids.

4. CLI

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

aws s3api put-bucket-policy --bucket rb-central-logs-ap-south-1 --policy file://logs.json
# (empty success)

# On workload account: enable ALB access logs to s3://rb-central-logs-ap-south-1/alb
# Enable CloudTrail to s3://rb-central-logs-ap-south-1/cloudtrail

aws s3 ls s3://rb-central-logs-ap-south-1/alb/AWSLogs/444455556666/ --recursive | head
# AWSLogs/444455556666/elasticloadbalancing/ap-south-1/...

5. Allow/deny

# ALLOW — after enabling ALB logs, objects appear under alb/AWSLogs/...
aws s3 ls s3://rb-central-logs-ap-south-1/alb/AWSLogs/444455556666/ | head
# PRE elasticloadbalancing/

# DENY — random IAM user from another account without grant
aws s3 cp s3://rb-central-logs-ap-south-1/alb/secret.log - --profile other
# AccessDenied

6. ACL vs policy

ALB बहुतेक policy; CloudTrail कधी ACL. Docs प्रति service वाचा.

7. Multi-industry

Ecommerce, retail, bank, hospital.

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: cross-account logs

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

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

  1. Bucket + policy.
  2. Enable ALB logs.
  3. Objects appear.
  4. Deny proof.

Cleanup (billing थांबवा)

  1. Cleanup.
  2. Trail 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.
No logsPrefix/account/ACL.
Enable denyPrincipal/Resource.

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

प्र. SourceAccount?

Limit writers.

प्र. Other services?

Per-service principal.

प्र. KMS logs?

Key trust service.

प्र. Org trail?

Still need policy.

13. Interview Q&A

प्र. ALB who?

logdelivery.elasticloadbalancing...

प्र. ACL why?

Owner can read.

प्र. Prove allow?

Objects appear.

प्र. Prove deny?

Other user denied.

प्र. Separate acct?

Protect audit.

प्र. Prefix?

AWSLogs/ACCOUNT.

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

Ravindra Bagale's Tip (EN)

Never give workload admins s3:DeleteObject on the central log bucket.

Ravindra Bagale's Tip (MR)

Workload admin ला central log DeleteObject देऊ नका.

Tip (HI)

Workload admin को central log पर DeleteObject न दें।

घरी करून बघा

  1. ALB ls proof.
  2. SourceAccount risk.
  3. Landing zone sketch.

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

  1. Service + SourceAccount.
  2. AWSLogs prefix.
  3. Trail ACL.
  4. Allow+deny.
  5. Least privilege.

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

Nairobi Ride हा नैरोबी मधला वाहतूक व्यवसाय आहे. Wanjiru Kamau त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे KES मध्ये मोजले जातात आणि AWS resources af-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 16

सोपं Policy

का: Delivery.

काय करायचं: nairobiride-logs policy.

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

सोपं List

का: AWSLogs.

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

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

सोपं Service

का: Delivery.

काय करायचं: Service allow तर 1.

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

सोपं XA

का: Accounts.

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

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

सोपं Versioning

का: State.

काय करायचं: nairobiride-logs ver.

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

सोपं Head

का: Exists.

काय करायचं: nairobiride-logs head.

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

सोपं BPA

का: BPA.

काय करायचं: nairobiride-logs BPA.

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

मध्यम ACL

का: Owner.

काय करायचं: nairobiride-logs acl.

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

मध्यम Location

का: Region.

काय करायचं: nairobiride-logs loc.

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

मध्यम ELB

का: ALB.

काय करायचं: ELB GetBucketAcl.

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

मध्यम ACL cond

का: Ownership.

काय करायचं: acl.

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

मध्यम Deny

का: Least.

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

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

मध्यम Protect

का: Integrity.

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

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

अवघड CloudTrail

का: Trail.

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

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

अवघड Prefix

का: Organize.

काय करायचं: prefix.

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

अवघड Del

का: Cleanup.

काय करायचं: nairobiride-logs 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: Cross-account log bucket. Central log archive. Service principals + prefixes. Bucket → allow → enable → verify. Org trail → archive.
उजळणी card: Cross-account log bucket · PNG download करा · Card page उघडा
उजळणी card: Ownership आणि ACL. Owner-full-control ACL. ACL condition on Put. Random put denied. Failing put proves fence.
उजळणी card: Ownership आणि ACL · PNG download करा · Card page उघडा
तुलना: CloudTrail delivery vs ALB access logs delivery. CloudTrail delivery: CloudTrail principal. ALB access logs delivery: ELB account principal.
तुलना: CloudTrail delivery vs ALB access logs delivery · PNG download करा · Card page उघडा
तुलना: Central log-archive account vs Logs in the app account. Central log-archive account: Harder wipe. Logs in the app account: Weaker isolation.
तुलना: Central log-archive account vs Logs in the app account · PNG download करा · Card page उघडा
मुलाखत card: CloudTrail logs कोण लिहितो?. Service principal cloudtrail. ACL condition. AWSLogs prefix.
मुलाखत card: CloudTrail logs कोण लिहितो? · PNG download करा · Card page उघडा
मुलाखत card: ALB access logs ला काय?. ELB account principal. Enable after policy. ELB prefix.
मुलाखत card: ALB access logs ला काय? · PNG download करा · Card page उघडा
मुलाखत card: Cross-account म्हणजे काय?. Writer ≠ archive account. Resource policy essential. Member → archive.
मुलाखत card: Cross-account म्हणजे काय? · PNG download करा · Card page उघडा
मुलाखत card: Log integrity कशी वाचवायची?. Deny delete + lock + MFA. Separation of duties. Delete denied.
मुलाखत card: Log integrity कशी वाचवायची? · PNG download करा · Card page उघडा

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