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
Copy file name to clipboardExpand all lines: articles/storage/blobs/data-lake-storage-access-control-model.md
+30-15Lines changed: 30 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@ author: jimmart-dev
7
7
ms.subservice: data-lake-storage-gen2
8
8
ms.service: storage
9
9
ms.topic: conceptual
10
-
ms.date: 02/17/2021
10
+
ms.date: 03/07/2023
11
11
ms.author: jammart
12
12
---
13
13
@@ -18,13 +18,14 @@ Data Lake Storage Gen2 supports the following authorization mechanisms:
18
18
- Shared Key authorization
19
19
- Shared access signature (SAS) authorization
20
20
- Role-based access control (Azure RBAC)
21
+
- Attribute-based access control (Azure ABAC)
21
22
- Access control lists (ACL)
22
23
23
-
[Shared Key and SAS authorization](#shared-key-and-shared-access-signature-sas-authorization) grants access to a user (or application) without requiring them to have an identity in Azure Active Directory (Azure AD). With these two forms of authentication, Azure RBAC and ACLs have no effect.
24
+
[Shared Key and SAS authorization](#shared-key-and-shared-access-signature-sas-authorization) grants access to a user (or application) without requiring them to have an identity in Azure Active Directory (Azure AD). With these two forms of authentication, Azure RBAC, Azure ABAC, and ACLs have no effect.
24
25
25
-
Azure RBAC and ACL both require the user (or application) to have an identity in Azure AD. Azure RBAC lets you grant "coarse-grain" access to storage account data, such as read or write access to **all** of the data in a storage account, while ACLs let you grant "fine-grained" access, such as write access to a specific directory or file.
26
+
Azure RBAC and ACL both require the user (or application) to have an identity in Azure AD. Azure RBAC lets you grant "coarse-grain" access to storage account data, such as read or write access to **all** of the data in a storage account. Azure ABAC allows you to refine RBAC role assignments by adding conditions. For example, you can grant read or write access to all data objects in a storage account that have a specific tag. ACLs let you grant "fine-grained" access, such as write access to a specific directory or file.
26
27
27
-
This article focuses on Azure RBAC and ACLs, and how the system evaluates them together to make authorization decisions for storage account resources.
28
+
This article focuses on Azure RBAC, ABAC, and ACLs, and how the system evaluates them together to make authorization decisions for storage account resources.
28
29
29
30
<aid="role-based-access-control"></a>
30
31
@@ -42,24 +43,38 @@ The following roles permit a security principal to access data in a storage acco
42
43
43
44
Roles such as [Owner](../../role-based-access-control/built-in-roles.md#owner), [Contributor](../../role-based-access-control/built-in-roles.md#contributor), [Reader](../../role-based-access-control/built-in-roles.md#reader), and [Storage Account Contributor](../../role-based-access-control/built-in-roles.md#storage-account-contributor) permit a security principal to manage a storage account, but do not provide access to the data within that account. However, these roles (excluding **Reader**) can obtain access to the storage keys, which can be used in various client tools to access the data.
44
45
45
-
## Access control lists (ACLs)
46
+
## Attribute-based access control (Azure ABAC)
46
47
47
-
ACLs give you the ability to apply "finer grain" level of access to directories and files. An *ACL* is a permission construct that contains a series of *ACL entries*. Each ACL entry associates security principal with an access level. To learn more, see [Access control lists (ACLs) in Azure Data Lake Storage Gen2](data-lake-storage-access-control.md).
48
+
Azure ABAC builds on Azure RBAC by adding role assignment conditions based on attributes in the context of specific actions. A role assignment condition is an additional check that you can optionally add to your role assignment to provide more refined access control. You cannot explicitly deny access to specific resources using conditions.
48
49
49
-
## How permissions are evaluated
50
+
For more information on using Azure ABAC to control access to Azure Storage, see [Authorize access to Azure Blob Storage using Azure role assignment conditions](storage-auth-abac.md).
51
+
52
+
For the status of attributes applicable to Data Lake Storage Gen2, see [Status of condition features in Azure Storage](../common/authorize-data-access.md#status-of-condition-features-in-azure-storage).
50
53
51
-
During security principal-based authorization, permissions are evaluated in the following order.
54
+
## Access control lists (ACLs)
52
55
53
-
:one: Azure role assignments are evaluated first and take priority over any ACL assignments.
56
+
ACLs give you the ability to apply "finer grain" level of access to directories and files. An *ACL* is a permission construct that contains a series of *ACL entries*. Each ACL entry associates security principal with an access level. To learn more, see [Access control lists (ACLs) in Azure Data Lake Storage Gen2](data-lake-storage-access-control.md).
54
57
55
-
:two: If the operation is fully authorized based on Azure role assignment, then ACLs are not evaluated at all.
58
+
## How permissions are evaluated
56
59
57
-
:three: If the operation is not fully authorized, then ACLs are evaluated.
60
+
During security principal-based authorization, permissions are evaluated as shown in the following diagram.
58
61
59
62
> [!div class="mx-imgBorder"]
60
63
> 
61
64
62
-
Because of the way that access permissions are evaluated by the system, you **cannot** use an ACL to **restrict** access that has already been granted by a role assignment. That's because the system evaluates Azure role assignments first, and if the assignment grants sufficient access permission, ACLs are ignored.
65
+
1. Azure determines whether a role assignment exists for the principal.
66
+
- If a role assignment exists, the role assignment conditions (2) are evaluated next.
67
+
- If not, the ACLs (3) are evaluated next.
68
+
1. Azure determines whether all of the ABAC role assignment conditions, if any exist, match the attributes of the request.
69
+
- If no conditions exist, access is granted.
70
+
- If conditions exist and all of them match the attributes of the request, access is granted.
71
+
- If conditions exist and at least one of them does not match the attributes of the request, the ACLs (3) are evaluated next.
72
+
1. If access has not been explicitly granted after evaluating the role assignments and conditions, the ACLs are evaluated.
73
+
- If the ACLs permit the requested level of access, access is granted.
74
+
- If not, access is denied.
75
+
76
+
> [!IMPORTANT]
77
+
> Because of the way that access permissions are evaluated by the system, you **cannot** use an ACL to **restrict** access that has already been granted by a role assignment and its conditions. That's because the system evaluates Azure role assignments and conditions first, and if the assignment grants sufficient access permission, ACLs are ignored.
63
78
64
79
The following diagram shows the permission flow for three common operations: listing directory contents, reading a file, and writing a file.
65
80
@@ -68,10 +83,10 @@ The following diagram shows the permission flow for three common operations: lis
68
83
69
84
## Permissions table: Combining Azure RBAC and ACL
70
85
71
-
The following table shows you how to combine Azure roles and ACL entries so that a security principal can perform the operations listed in the **Operation** column. This table shows a column that represents each level of a fictitious directory hierarchy. There's a column for the root directory of the container (`/`), a subdirectory named **Oregon**, a subdirectory of the Oregon directory named **Portland**, and a text file in the Portland directory named **Data.txt**. Appearing in those columns are [short form](data-lake-storage-access-control.md#short-forms-for-permissions) representations of the ACL entry required to grant permissions. **N/A** (_Not applicable_) appears in the column if an ACL entry is not required to perform the operation.
86
+
The following table shows you how to combine Azure roles, conditions, and ACL entries so that a security principal can perform the operations listed in the **Operation** column. This table shows a column that represents each level of a fictitious directory hierarchy. There's a column for the root directory of the container (`/`), a subdirectory named **Oregon**, a subdirectory of the Oregon directory named **Portland**, and a text file in the Portland directory named **Data.txt**. Appearing in those columns are [short form](data-lake-storage-access-control.md#short-forms-for-permissions) representations of the ACL entry required to grant permissions. **N/A** (_Not applicable_) appears in the column if an ACL entry is not required to perform the operation.
0 commit comments