<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/ceph-io-mastering-iam-in-ceph-multi-tenancy-access-control-and-why-acls-must-die-y8jhvxkpk" -->

---
title: Ceph.io — Mastering IAM in Ceph: Multi-Tenancy, Access...
description: Ceph Object Gateway (RGW) now supports AWS-compatible IAM Accounts (introduced in Squid 19.2.0), providing a policy-based alternative to legacy S3 ACLs. The...
canonical: https://daily.dev/posts/ceph-io-mastering-iam-in-ceph-multi-tenancy-access-control-and-why-acls-must-die-y8jhvxkpk
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Ceph.io — Mastering IAM in Ceph: Multi-Tenancy, Access Control, and Why ACLs Must Die | daily.dev
og:description: Ceph Object Gateway (RGW) now supports AWS-compatible IAM Accounts (introduced in Squid 19.2.0), providing a policy-based alternative to legacy S3 ACLs. The...
og:url: https://daily.dev/posts/ceph-io-mastering-iam-in-ceph-multi-tenancy-access-control-and-why-acls-must-die-y8jhvxkpk
og:image: https://api.daily.dev/og/posts/Y8jHvxKPk.png
og:image:alt: Ceph.io — Mastering IAM in Ceph: Multi-Tenancy, Access Control, and Why ACLs Must Die
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Ceph.io — Mastering IAM in Ceph: Multi-Tenancy, Access Control, and Why ACLs Must Die

**[Ceph](https://daily.dev/sources/ceph)** · 24 min read · 0 upvotes · 0 comments

## Summary

Ceph Object Gateway (RGW) now supports AWS-compatible IAM Accounts (introduced in Squid 19.2.0), providing a policy-based alternative to legacy S3 ACLs. The post walks through why ACLs are dangerous - silent public exposure, object ownership confusion, the authenticated-read trap, and WRITE_ACP privilege escalation - citing the 2017 Verizon and 2019 Facebook/Instagram breaches as real-world examples. It then demonstrates disabling ACLs via Block Public Access and IAM deny policies, and shows how to implement secure cross-account data sharing using IAM role assumption instead of ACLs, complete with audit log examples. It closes with a roadmap of upcoming Ceph security features: BucketOwnerEnforced (merged for Tentacle/v20.3.0), S3Control Block Public Access (in review), and future Organizational Units/SCPs for immutable multi-account policy enforcement.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://ceph.io/en/news/blog/2026/mastering-iam>

## Questions this post answers

### How do I disable ACLs on an S3 bucket in Ceph RGW and prevent them from being used?

Enable Block Public Access on the bucket with put-public-access-block (BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets all set to true), then attach an IAM policy denying s3:PutObjectAcl, s3:PutObjectVersionAcl, and s3:PutBucketAcl to every user and group as a security baseline. Ceph also merged BucketOwnerEnforced support in v20.3.0 (Tentacle) via the PutBucketOwnershipControls API, which disables ACLs entirely and forces bucket-owner object ownership.

_Teams locking down object storage permissions can track Ceph security releases like this on daily.dev._

### How do I share data between two Ceph RGW IAM accounts without using ACLs or bucket policies?

Create an IAM role in the account that owns the bucket, with a trust policy naming the specific user or account allowed to assume it and a permission policy granting only the needed S3 actions (e.g., s3:GetObject, s3:ListBucket) scoped to the target bucket. The other account's user calls sts:AssumeRole to get temporary credentials (1-12 hours), accesses the bucket as a same-account principal, and no bucket policy is required since only the AssumeRole call crosses accounts.

_Anyone designing cross-account storage access can compare approaches like this via daily.dev._

### What is WRITE_ACP permission in S3/Ceph RGW ACLs and why is it dangerous?

WRITE_ACP is the ACL permission that lets a grantee modify a bucket's or object's own ACL, effectively granting permission to rewrite permissions. If a contractor or other untrusted principal is given WRITE_ACP alongside WRITE access, they can later call put-bucket-acl to change the ACL to public-read, exposing the bucket to the entire internet even though they were never granted that access directly.

_Developers auditing ACL misconfigurations can follow storage security breakdowns like this on daily.dev._

## Similar posts on daily.dev

- [S3 Compatibility Doesn't Guarantee S3-Level Security](https://daily.dev/posts/s3-compatibility-doesn-t-guarantee-s3-level-security-mor31muje) · InfoQ · 0 upvotes · 0 comments
- [How to automate Ceph RGW user management on OpenShift with GitOps](https://daily.dev/posts/how-to-automate-ceph-rgw-user-management-on-openshift-with-gitops-tbj5qemtw) · Red Hat Developer · 0 upvotes · 0 comments
- [Introducing attribute-based access control for Amazon S3 general purpose buckets](https://daily.dev/posts/introducing-attribute-based-access-control-for-amazon-s3-general-purpose-buckets-5rdbbb8ga) · AWS · 1 upvotes · 0 comments
- [SCPs, RCPs, and a Kill Switch: A Real AWS Organization Setup](https://daily.dev/posts/scps-rcps-and-a-kill-switch-a-real-aws-organization-setup-hbiabc3ec) · AWS Fundamentals · 2 upvotes · 0 comments
- [Ceph.io — \[CVE\] \[URGENT\] Squid v19.2.6 and Tentacle v20.2.4 released](https://daily.dev/posts/ceph-io-cve-urgent-squid-v19-2-6-and-tentacle-v20-2-4-released-bzynabdep) · Ceph · 5 upvotes · 0 comments

---

Tags: [#aws-s3](https://daily.dev/tags/aws-s3), [#iam](https://daily.dev/tags/iam), [#multi-tenancy](https://daily.dev/tags/multi-tenancy)

[View this post on daily.dev](https://daily.dev/posts/ceph-io-mastering-iam-in-ceph-multi-tenancy-access-control-and-why-acls-must-die-y8jhvxkpk)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Ceph.io — Mastering IAM in Ceph: Multi-Tenancy, Access Control, and Why ACLs Must Die","url":"https://daily.dev/posts/ceph-io-mastering-iam-in-ceph-multi-tenancy-access-control-and-why-acls-must-die-y8jhvxkpk","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/ceph-io-mastering-iam-in-ceph-multi-tenancy-access-control-and-why-acls-must-die-y8jhvxkpk"},"datePublished":"2026-08-23T12:18:30.927Z","dateModified":"2026-08-23T12:24:25.599Z","description":"Ceph Object Gateway (RGW) now supports AWS-compatible IAM Accounts (introduced in Squid 19.2.0), providing a policy-based alternative to legacy S3 ACLs. The...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3d6fadbb46a352aedd7ab1042f4b2c87?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3d6fadbb46a352aedd7ab1042f4b2c87?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Ceph","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Ceph","logo":"https://media.daily.dev/image/upload/s--nHzZM4Ap--/f_auto,q_auto/v1787487446/logos/ceph?_a=BAMAMicg0","url":"https://daily.dev/sources/ceph"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/ceph-io-mastering-iam-in-ceph-multi-tenancy-access-control-and-why-acls-must-die-y8jhvxkpk","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"aws-s3,iam,multi-tenancy","timeRequired":"PT24M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Ceph","item":"https://daily.dev/sources/ceph"},{"@type":"ListItem","position":3,"name":"Ceph.io — Mastering IAM in Ceph: Multi-Tenancy, Access Control, and Why ACLs Must Die"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/ceph-io-mastering-iam-in-ceph-multi-tenancy-access-control-and-why-acls-must-die-y8jhvxkpk#faq","mainEntity":[{"@type":"Question","name":"How do I disable ACLs on an S3 bucket in Ceph RGW and prevent them from being used?","acceptedAnswer":{"@type":"Answer","text":"Enable Block Public Access on the bucket with put-public-access-block (BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets all set to true), then attach an IAM policy denying s3:PutObjectAcl, s3:PutObjectVersionAcl, and s3:PutBucketAcl to every user and group as a security baseline. Ceph also merged BucketOwnerEnforced support in v20.3.0 (Tentacle) via the PutBucketOwnershipControls API, which disables ACLs entirely and forces bucket-owner object ownership. Teams locking down object storage permissions can track Ceph security releases like this on daily.dev."}},{"@type":"Question","name":"How do I share data between two Ceph RGW IAM accounts without using ACLs or bucket policies?","acceptedAnswer":{"@type":"Answer","text":"Create an IAM role in the account that owns the bucket, with a trust policy naming the specific user or account allowed to assume it and a permission policy granting only the needed S3 actions (e.g., s3:GetObject, s3:ListBucket) scoped to the target bucket. The other account's user calls sts:AssumeRole to get temporary credentials (1-12 hours), accesses the bucket as a same-account principal, and no bucket policy is required since only the AssumeRole call crosses accounts. Anyone designing cross-account storage access can compare approaches like this via daily.dev."}},{"@type":"Question","name":"What is WRITE_ACP permission in S3/Ceph RGW ACLs and why is it dangerous?","acceptedAnswer":{"@type":"Answer","text":"WRITE_ACP is the ACL permission that lets a grantee modify a bucket's or object's own ACL, effectively granting permission to rewrite permissions. If a contractor or other untrusted principal is given WRITE_ACP alongside WRITE access, they can later call put-bucket-acl to change the ACL to public-read, exposing the bucket to the entire internet even though they were never granted that access directly. Developers auditing ACL misconfigurations can follow storage security breakdowns like this on daily.dev."}}]}
```

