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
- ALB principal.
- Account prefix.
- SourceAccount.
- Trail ACL.
- GetBucketAcl.
- 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)
- Bucket + policy.
- Enable ALB logs.
- Objects appear.
- Deny proof.
Cleanup (billing थांबवा)
- Cleanup.
- Trail cleanup.
10. सामान्य 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. |
| No logs | Prefix/account/ACL. |
| Enable deny | Principal/Resource. |
11. Troubleshooting checklist
- Region + endpoint.
- Policy + BPA.
- Lab user.
- Sid binary search.
- CloudTrail.
- KMS test.
- VPCe path.
- 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 न दें।
घरी करून बघा
- ALB ls proof.
- SourceAccount risk.
- Landing zone sketch.
थोडक्यात सांगायचं तर
- Service + SourceAccount.
- AWSLogs prefix.
- Trail ACL.
- Allow+deny.
- Least privilege.
15. Policy save करण्याआधी checklist
- Business rule एका वाक्यात.
- Allow vs Deny-unless; Deny wins.
- ARN shapes.
- Condition keys.
- BPA first.
- Allow+deny plan.
- Cleanup plan.
- json.tool.
16. 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.
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
- Error code + request id.
- Bucket + region.
- BPA.
- Explicit Deny.
- Conditions.
- KMS key policy.
- OAC id.
- VPCe path.
- Simulator + CLI.
- Support last.
20. PR review checklist
- Valid JSON.
- Required fields.
- No open write.
- Tests.
- Cleanup.
सराव Tasks
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.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं List
का: AWSLogs.
काय करायचं: list logs.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं Service
का: Delivery.
काय करायचं: Service allow तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
सोपं XA
का: Accounts.
काय करायचं: XA तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
सोपं Versioning
का: State.
काय करायचं: nairobiride-logs ver.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं Head
का: Exists.
काय करायचं: nairobiride-logs head.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं BPA
का: BPA.
काय करायचं: nairobiride-logs BPA.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम ACL
का: Owner.
काय करायचं: nairobiride-logs acl.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Location
का: Region.
काय करायचं: nairobiride-logs loc.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम ELB
का: ALB.
काय करायचं: ELB GetBucketAcl.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
मध्यम ACL cond
का: Ownership.
काय करायचं: acl.
- Task मधल्या top-level keys पासून सुरू करा.
- Child keys 2 spaces ने indent करा (tabs नकोत).
- प्रत्येक property मध्ये task मधली value भरा.
- Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.
मध्यम Deny
का: Least.
काय करायचं: Unrelated deny तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
मध्यम Protect
का: Integrity.
काय करायचं: Protect तर 1.
- Task मधले numbers लिहून घ्या.
- कागदावर step by step काढा.
- Box मध्ये फक्त final उत्तर लिहा.
- Check answer दाबा.
अवघड CloudTrail
का: Trail.
काय करायचं: CloudTrail Put.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
अवघड Prefix
का: Organize.
काय करायचं: prefix.
- Task मधल्या top-level keys पासून सुरू करा.
- Child keys 2 spaces ने indent करा (tabs नकोत).
- प्रत्येक property मध्ये task मधली value भरा.
- Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.
अवघड Del
का: Cleanup.
काय करायचं: nairobiride-logs del.
- 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.