You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Customers running Spark and Hadoop workloads on ADLS Gen2 with an RBAC-only authorization model (no ACLs assigned, all data access governed by Azure RBAC role assignments) are frequently blocked by framework-generated setPermission() calls.
setPermission() is invoked implicitly by:
Hadoop commit protocols (v1 and v2)
Spark's FileOutputCommitter on job commit
distcp when preserving permissions
Hive/Impala when writing partitions
Various other job-orchestration paths
On HNS-enabled accounts, setPermission() translates to a SetAccessControl request on the ADLS Gen2 REST surface, which requires ACL-management permissions (Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action or equivalent via a POSIX ACL entry granting the caller ACL modification rights).
In RBAC-only deployments, callers typically have full data-plane RBAC roles (e.g. Storage Blob Data Contributor) but do not have — and by design do not want — ACL-management permissions. As a result, these framework-generated setPermission() calls fail with 403 AuthorizationPermissionMismatch, breaking otherwise well-configured workloads.
There is currently no way to disable this driver-side behavior without also disabling the explicit ACL management APIs, which some customers still rely on.
Proposed change :-
Introduce an opt-in ABFS configuration:
fs.azure.rbac.only
true
When enabled on an HNS-enabled account, AzureBlobFileSystem#setPermission() is treated as a pure no-op: the call returns successfully without contacting the backend.
Disabled by default — no behavior change for existing deployments.
HNS-only — on non-HNS accounts the flag has no effect; existing driver semantics are preserved.
Scoped strictly to setPermission() — no other API is gated by this flag.
Principal
Flag OFF (today)
Flag ON
No RBAC roles
All operations fail with 403, including FS initialization.
Cannot initialize FS. If FS were somehow initialized, only setPermission() returns success as a no-op that touches nothing. All other operations still fail with 403.
Storage Blob Data Reader
Reads succeed; writes, deletes, setPermission(), and ACL APIs fail with 403.
Same as OFF, except setPermission() returns success as a no-op. Reader still cannot read anything they couldn't already read.
Storage Blob Data Contributor
Data-plane operations succeed; setPermission() and ACL APIs fail with 403.
Data-plane operations succeed. setPermission() succeeds as a no-op. ACL APIs still fail with 403. This is the target use case.
Storage Blob Data Owner (or ACL-management rights)
All operations, including setPermission(), succeed and are applied.
All operations succeed. setPermission() is a no-op (does not apply). ACL APIs, setOwner(), reads, and writes all continue to work normally.
anmolanmol1234
changed the title
Add no op support for set permission for RBAC and HNS enabled
HADOOP-19940. [ABFS] Add no op support for set permission for RBAC and HNS enabled
Jul 15, 2026
The reason will be displayed to describe this comment to others. Learn more.
+1 LGTM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Customers running Spark and Hadoop workloads on ADLS Gen2 with an RBAC-only authorization model (no ACLs assigned, all data access governed by Azure RBAC role assignments) are frequently blocked by framework-generated setPermission() calls.
setPermission() is invoked implicitly by:
Hadoop commit protocols (v1 and v2)
Spark's FileOutputCommitter on job commit
distcp when preserving permissions
Hive/Impala when writing partitions
Various other job-orchestration paths
On HNS-enabled accounts, setPermission() translates to a SetAccessControl request on the ADLS Gen2 REST surface, which requires ACL-management permissions (Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action or equivalent via a POSIX ACL entry granting the caller ACL modification rights).
In RBAC-only deployments, callers typically have full data-plane RBAC roles (e.g. Storage Blob Data Contributor) but do not have — and by design do not want — ACL-management permissions. As a result, these framework-generated setPermission() calls fail with 403 AuthorizationPermissionMismatch, breaking otherwise well-configured workloads.
There is currently no way to disable this driver-side behavior without also disabling the explicit ACL management APIs, which some customers still rely on.
Proposed change :-
Introduce an opt-in ABFS configuration:
When enabled on an HNS-enabled account, AzureBlobFileSystem#setPermission() is treated as a pure no-op: the call returns successfully without contacting the backend.fs.azure.rbac.only
true
Disabled by default — no behavior change for existing deployments.
HNS-only — on non-HNS accounts the flag has no effect; existing driver semantics are preserved.
Scoped strictly to setPermission() — no other API is gated by this flag.
setPermission()returns success as a no-op that touches nothing. All other operations still fail with 403.Storage Blob Data ReadersetPermission(), and ACL APIs fail with 403.setPermission()returns success as a no-op. Reader still cannot read anything they couldn't already read.Storage Blob Data ContributorsetPermission()and ACL APIs fail with 403.setPermission()succeeds as a no-op. ACL APIs still fail with 403. This is the target use case.Storage Blob Data Owner(or ACL-management rights)setPermission(), succeed and are applied.setPermission()is a no-op (does not apply). ACL APIs,setOwner(), reads, and writes all continue to work normally.