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/immutable-legal-hold-overview.md
+21-10Lines changed: 21 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,20 +1,20 @@
1
1
---
2
2
title: Legal holds for immutable blob data
3
3
titleSuffix: Azure Storage
4
-
description: A legal hold stores blob data in a Write-Once, Read-Many (WORM) format until it is explicitly cleared. Use a legal hold when the period of time that the data must be kept in a WORM state is unknown.
4
+
description: A legal hold stores blob data in a Write-Once, Read-Many (WORM) format until it's explicitly cleared. Use a legal hold when the period of time that the data must be kept in a WORM state is unknown.
5
5
services: storage
6
6
author: normesta
7
7
8
8
ms.service: storage
9
9
ms.topic: conceptual
10
-
ms.date: 12/01/2021
10
+
ms.date: 09/14/2022
11
11
ms.author: normesta
12
12
ms.subservice: blobs
13
13
---
14
14
15
15
# Legal holds for immutable blob data
16
16
17
-
A legal hold is a temporary immutability policy that can be applied for legal investigation purposes or general protection policies. A legal hold stores blob data in a Write-Once, Read-Many (WORM) format until it is explicitly cleared. When a legal hold is in effect, blobs can be created and read, but not modified or deleted. Use a legal hold when the period of time that the data must be kept in a WORM state is unknown.
17
+
A legal hold is a temporary immutability policy that can be applied for legal investigation purposes or general protection policies. A legal hold stores blob data in a Write-Once, Read-Many (WORM) format until it's explicitly cleared. When a legal hold is in effect, blobs can be created and read, but not modified or deleted. Use a legal hold when the period of time that the data must be kept in a WORM state is unknown.
18
18
19
19
For more information about immutability policies for Blob Storage, see [Store business-critical blob data with immutable storage](immutable-storage-overview.md).
20
20
@@ -23,11 +23,11 @@ For more information about immutability policies for Blob Storage, see [Store bu
23
23
A legal hold policy can be configured at either of the following scopes:
24
24
25
25
- Version-level policy: A legal hold can be configured on an individual blob version level for granular management of sensitive data.
26
-
- Container-level policy: A legal hold that is configured at the container level applies to all blobs in that container. Individual blobs cannot be configured with their own immutability policies.
26
+
- Container-level policy: A legal hold that is configured at the container level applies to all blobs in that container. Individual blobs can't be configured with their own immutability policies.
27
27
28
28
### Version-level policy scope
29
29
30
-
To configure a legal hold on a blob version, you must first enable version-level immutability on the storage account or the parent container. Version-level immutability cannot be disabled after it is enabled. For more information, [Enable support for version-level immutability](immutable-policy-configure-version-scope.md#enable-support-for-version-level-immutability).
30
+
To configure a legal hold on a blob version, you must first enable version-level immutability on the storage account or the parent container. Version-level immutability can't be disabled after it's enabled. For more information, [Enable support for version-level immutability](immutable-policy-configure-version-scope.md#enable-support-for-version-level-immutability).
31
31
32
32
After version-level immutability is enabled for a storage account or a container, a legal hold can no longer be set at the container level. Legal holds must be applied to individual blob versions. A legal hold may be configured for the current version or a previous version of a blob.
33
33
@@ -37,9 +37,9 @@ To learn more about enabling a version-level legal hold, see [Configure or clear
37
37
38
38
### Container-level scope
39
39
40
-
When you configure a legal hold for a container, that hold applies to all objects in the container. When the legal hold is cleared, clients can once again write and delete objects in the container, unless there is also a time-based retention policy in effect for the container.
40
+
A legal hold for a containerapplies to all objects in the container. When the legal hold is cleared, clients can once again write and delete objects in the container, unless there's also a time-based retention policy in effect for the container.
41
41
42
-
When a legal hold is applied to a container, all existing blobs move into an immutable WORM state in less than 30 seconds. All new blobs that are uploaded to that policy-protected container will also move into an immutable state. Once all blobs are in an immutable state, overwrite or delete operations in the immutable container are not allowed. In the case of an account with a hierarchical namespace, blobs cannot be renamed or moved to a different directory.
42
+
When a legal hold is applied to a container, all existing blobs move into an immutable WORM state in less than 30 seconds. All new blobs that are uploaded to that policy-protected container will also move into an immutable state. Once all blobs are in an immutable state, overwrite or delete operations in the immutable container aren't allowed. In an account that has a hierarchical namespace, blobs can't be renamed or moved to a different directory.
43
43
44
44
To learn how to configure a legal hold with container-level scope, see [Configure or clear a legal hold](immutable-policy-configure-container-scope.md#configure-or-clear-a-legal-hold).
45
45
@@ -51,16 +51,27 @@ A container-level legal hold must be associated with one or more user-defined al
51
51
52
52
Each container with a legal hold in effect provides a policy audit log. The log contains the user ID, command type, time stamps, and legal hold tags. The audit log is retained for the lifetime of the policy, in accordance with the SEC 17a-4(f) regulatory guidelines.
53
53
54
-
The [Azure Activity log](../../azure-monitor/essentials/platform-logs-overview.md) provides a more comprehensive log of all management service activities. [Azure resource logs](../../azure-monitor/essentials/platform-logs-overview.md) retain information about data operations. It is the user's responsibility to store those logs persistently, as might be required for regulatory or other purposes.
54
+
The [Azure Activity log](../../azure-monitor/essentials/platform-logs-overview.md) provides a more comprehensive log of all management service activities. [Azure resource logs](../../azure-monitor/essentials/platform-logs-overview.md) retain information about data operations. It's the user's responsibility to store those logs persistently, as might be required for regulatory or other purposes.
55
55
56
56
#### Limits
57
57
58
58
The following limits apply to container-level legal holds:
59
59
60
60
- For a storage account, the maximum number of containers with a legal hold setting is 10,000.
61
-
- For a container, the maximum number of legal hold tags is ten.
61
+
- For a container, the maximum number of legal hold tags is 10.
62
62
- The minimum length of a legal hold tag is three alphanumeric characters. The maximum length is 23 alphanumeric characters.
63
-
- For a container, a maximum of ten legal hold policy audit logs are retained for the duration of the policy.
63
+
- For a container, a maximum of 10 legal hold policy audit logs are retained for the duration of the policy.
64
+
65
+
## Allow protected append blobs writes
66
+
67
+
Append blobs are composed of blocks of data and optimized for data append operations required by auditing and logging scenarios. By design, append blobs only allow the addition of new blocks to the end of the blob. Regardless of immutability, modification or deletion of existing blocks in an append blob is fundamentally not allowed. To learn more about append blobs, see [About Append Blobs](/rest/api/storageservices/understanding-block-blobs--append-blobs--and-page-blobs#about-append-blobs).
68
+
69
+
The **AllowProtectedAppendWritesAll** property setting allows for writing new blocks to an append blob while maintaining immutability protection and compliance. If this setting is enabled, you can create an append blob directly in the policy-protected container, and then continue to add new blocks of data to the end of the append blob with the Append Block operation. Only new blocks can be added; any existing blocks can't be modified or deleted. Enabling this setting doesn't affect the immutability behavior of block blobs or page blobs.
70
+
71
+
> [!NOTE]
72
+
> This property is available only for container-level policies. This property is not available for version-level policies.
73
+
74
+
This setting also adds the ability to write new blocks to a block blob. The Blob Storage API doesn't provide a way for applications to do this directly. However, applications can accomplish this by using append and flush methods that are available in the Data Lake Storage Gen2 API. Also, this property enables Microsoft applications such as Azure Data Factory to append blocks of data by using internal APIs. If your workloads depend on any of these tools, then you can use this property to avoid errors that can appear when those tools attempt to append data to blobs.
@@ -32,11 +32,22 @@ To configure a time-based retention policy on a container, use the Azure portal,
32
32
To configure a time-based retention policy on a container with the Azure portal, follow these steps:
33
33
34
34
1. Navigate to the desired container.
35
-
1. Select the **More** button on the right, then select **Access policy**.
36
-
1. In the **Immutable blob storage** section, select **Add policy**.
37
-
1. In the **Policy type** field, select **Time-based retention**, and specify the retention period in days.
38
-
1. To create a policy with container scope, do not check the box for **Enable version-level immutability**.
39
-
1. If desired, select **Allow additional protected appends** to enable writes to append blobs that are protected by an immutability policy. For more information, see [Allow protected append blobs writes](immutable-time-based-retention-policy-overview.md#allow-protected-append-blobs-writes).
35
+
36
+
2. Select the **More** button on the right, then select **Access policy**.
37
+
38
+
3. In the **Immutable blob storage** section, select **Add policy**.
39
+
40
+
4. In the **Policy type** field, select **Time-based retention**, and specify the retention period in days.
41
+
42
+
5. To create a policy with container scope, do not check the box for **Enable version-level immutability**.
43
+
44
+
6. Choose whether to allow protected append writes.
45
+
46
+
The **Append blobs** option enables your workloads to add new blocks of data to the end of an append blob by using the [Append Block](/rest/api/storageservices/append-block) operation.
47
+
48
+
The **Block and append blobs** option provides you with the same permissions as the **Append blobs** option but adds the ability to write new blocks to a block blob. The Blob Storage API does not provide a way for applications to do this directly. However, applications can accomplish this by using append and flush methods that are available in the Data Lake Storage Gen2 API. Also, some Microsoft applications use internal APIs to create block blobs and then append to them. If your workloads depend on any of these tools, then you can use this property to avoid errors that can appear when those tools attempt to append blocks to a block blob.
49
+
50
+
To learn more about these options, see [Allow protected append blobs writes](immutable-time-based-retention-policy-overview.md#allow-protected-append-blobs-writes).
40
51
41
52
:::image type="content" source="media/immutable-policy-configure-container-scope/configure-retention-policy-container-scope.png" alt-text="Screenshot showing how to configure immutability policy scoped to container":::
To allow protected append writes, set the `-AllowProtectedAppendWrite` or `-AllowProtectedAppendWriteAll` parameter to `true`.
70
+
71
+
The **AllowProtectedAppendWrite** option enables your workloads to add new blocks of data to the end of an append blob by using the [Append Block](/rest/api/storageservices/append-block) operation.
72
+
73
+
The **AllowProtectedAppendWriteAll** option provides you with the same permissions as the **AllowProtectedAppendWrite** option but adds the ability to write new blocks to a block blob. The Blob Storage API does not provide a way for applications to do this directly. However, applications can accomplish this by using append and flush methods that are available in the Data Lake Storage Gen2 API. Also, some Microsoft applications use internal APIs to create block blobs and then append to them. If your workloads depend on any of these tools, then you can use this property to avoid errors that can appear when those tools attempt to append blocks to a block blob.
74
+
75
+
To learn more about these options, see [Allow protected append blobs writes](immutable-time-based-retention-policy-overview.md#allow-protected-append-blobs-writes).
76
+
58
77
### [Azure CLI](#tab/azure-cli)
59
78
60
79
To configure a time-based retention policy on a container with Azure CLI, call the [az storage container immutability-policy create](/cli/azure/storage/container/immutability-policy#az-storage-container-immutability-policy-create) command, providing the retention interval in days. Remember to replace placeholder values in angle brackets with your own values:
@@ -67,6 +86,14 @@ az storage container immutability-policy create \
67
86
--period 10
68
87
```
69
88
89
+
To allow protected append writes, set the `--allow-protected-append-writes` or `--allow-protected-append-writes-all` parameter to `true`.
90
+
91
+
The **--allow-protected-append-writes** option enables your workloads to add new blocks of data to the end of an append blob by using the [Append Block](/rest/api/storageservices/append-block) operation.
92
+
93
+
The **--allow-protected-append-writes-all** option provides you with the same permissions as the **--allow-protected-append-writes** option but adds the ability to write new blocks to a block blob. The Blob Storage API does not provide a way for applications to do this directly. However, applications can accomplish this by using append and flush methods that are available in the Data Lake Storage Gen2 API. Also, some Microsoft applications use internal APIs to create block blobs and then append to them. If your workloads depend on any of these tools, then you can use this property to avoid errors that can appear when those tools attempt to append blocks to a block blob.
94
+
95
+
To learn more about these options, see [Allow protected append blobs writes](immutable-time-based-retention-policy-overview.md#allow-protected-append-blobs-writes).
@@ -133,7 +160,7 @@ az storage container immutability-policy extend \
133
160
--container-name <container> \
134
161
--period 21 \
135
162
--if-match $etag \
136
-
--allow-protected-append-writes true
163
+
--allow-protected-append-writes-all true
137
164
```
138
165
139
166
To delete an unlocked policy, call the [az storage container immutability-policy delete](/cli/azure/storage/container/immutability-policy#az-storage-container-immutability-policy-delete) command.
@@ -200,9 +227,26 @@ A legal hold stores immutable data until the legal hold is explicitly cleared. T
200
227
To configure a legal hold on a container with the Azure portal, follow these steps:
201
228
202
229
1. Navigate to the desired container.
203
-
1. Select the **More** button and choose **Access policy**.
204
-
1. Under the **Immutable blob versions** section, select **Add policy**.
205
-
1. Choose **Legal hold** as the policy type, and select **OK** to apply it.
230
+
231
+
2. Select the **More** button and choose **Access policy**.
232
+
233
+
3. Under the **Immutable blob versions** section, select **Add policy**.
234
+
235
+
4. Choose **Legal hold** as the policy type.
236
+
237
+
5. Add one or more legal hold tags.
238
+
239
+
6. Choose whether to allow protected append writes, and then select **Save**.
240
+
241
+
The **Append blobs** option enables your workloads to add new blocks of data to the end of an append blob by using the [Append Block](/rest/api/storageservices/append-block) operation.
242
+
243
+
This setting also adds the ability to write new blocks to a block blob. The Blob Storage API does not provide a way for applications to do this directly. However, applications can accomplish this by using append and flush methods that are available in the Data Lake Storage Gen2 API. Also, this property enables Microsoft applications such as Azure Data Factory to append blocks of data by using internal APIs. If your workloads depend on any of these tools, then you can use this property to avoid errors that can appear when those tools attempt to append data to blobs.
244
+
245
+
To learn more about these options, see [Allow protected append blobs writes](immutable-legal-hold-overview.md#allow-protected-append-blobs-writes).
246
+
247
+
:::image type="content" source="media/immutable-policy-configure-container-scope/configure-retention-policy-container-scope-legal-hold.png" alt-text="Screenshot showing how to configure legal hold policy scoped to container.":::
248
+
249
+
After you've configured the immutability policy, you will see that it is scoped to the container:
206
250
207
251
The following image shows a container with both a time-based retention policy and legal hold configured.
208
252
@@ -218,7 +262,8 @@ To configure a legal hold on a container with PowerShell, call the [Add-AzRmStor
To clear a legal hold, call the [Remove-AzRmStorageContainerLegalHold](/powershell/module/az.storage/remove-azrmstoragecontainerlegalhold) command:
@@ -239,7 +284,8 @@ az storage container legal-hold set \
239
284
--tags tag1 tag2 \
240
285
--container-name <container> \
241
286
--account-name <storage-account> \
242
-
--resource-group <resource-group>
287
+
--resource-group <resource-group> \
288
+
--allow-protected-append-writes-all true
243
289
```
244
290
245
291
To clear a legal hold, call the [az storage container legal-hold clear](/cli/azure/storage/container/legal-hold#az-storage-container-legal-hold-clear) command:
@@ -249,7 +295,7 @@ az storage container legal-hold clear \
0 commit comments