datalake encryption scopes (#4038) (#4068)

This commit is contained in:
microzchang 2022-11-07 13:48:52 +08:00 committed by GitHub
parent bc5ed69892
commit ce76a61246
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 505 additions and 148 deletions

View File

@ -175,6 +175,17 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
* The public access type of the file system.
*/
Models::PublicAccessType AccessType = Models::PublicAccessType::None;
/**
* @brief The encryption scope to use as the default on the filesystem.
*/
Azure::Nullable<std::string> DefaultEncryptionScope;
/**
* @brief If true, prevents any file upload from specifying a different encryption
* scope.
*/
Azure::Nullable<bool> PreventEncryptionScopeOverride;
};
/**

View File

@ -84,6 +84,16 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
* The lease status of the file system.
*/
Models::LeaseStatus LeaseStatus = Models::LeaseStatus::Unlocked;
/**
* The default encryption scope for the file system.
*/
std::string DefaultEncryptionScope = "$account-encryption-key";
/**
* Indicates whether the filesystem's default encryption scope can be overriden.
*/
bool PreventEncryptionScopeOverride = false;
}; // struct FileSystemItemDetails
/**
@ -141,6 +151,16 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
* The Metadata of the file system.
*/
Storage::Metadata Metadata;
/**
* The default encryption scope for the file system.
*/
std::string DefaultEncryptionScope = "$account-encryption-key";
/**
* Indicates whether the filesystem's default encryption scope can be overriden.
*/
bool PreventEncryptionScopeOverride = false;
};
/**
@ -322,6 +342,13 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
*/
Azure::Nullable<std::vector<uint8_t>> EncryptionKeySha256;
/**
* Returns the name of the encryption scope used to encrypt the path contents and application
* metadata. Note that the absence of this header implies use of the default account
* encryption scope.
*/
Nullable<std::string> EncryptionScope;
/**
* The copy ID of the path, if the path is created from a copy operation.
*/

View File

@ -155,6 +155,8 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
Blobs::CreateBlobContainerOptions blobOptions;
blobOptions.Metadata = options.Metadata;
blobOptions.AccessType = Blobs::Models::PublicAccessType(options.AccessType.ToString());
blobOptions.DefaultEncryptionScope = options.DefaultEncryptionScope;
blobOptions.PreventEncryptionScopeOverride = options.PreventEncryptionScopeOverride;
auto result = m_blobContainerClient.Create(blobOptions, context);
Models::CreateFileSystemResult ret;
ret.ETag = std::move(result.Value.ETag);
@ -231,6 +233,8 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
ret.ETag = std::move(result.Value.ETag);
ret.LastModified = std::move(result.Value.LastModified);
ret.Metadata = std::move(result.Value.Metadata);
ret.DefaultEncryptionScope = std::move(result.Value.DefaultEncryptionScope);
ret.PreventEncryptionScopeOverride = result.Value.PreventEncryptionScopeOverride;
return Azure::Response<Models::FileSystemProperties>(
std::move(ret), std::move(result.RawResponse));
}

View File

@ -323,6 +323,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
ret.HttpHeaders = std::move(response.Value.HttpHeaders);
ret.IsServerEncrypted = response.Value.IsServerEncrypted;
ret.EncryptionKeySha256 = std::move(response.Value.EncryptionKeySha256);
ret.EncryptionScope = std::move(response.Value.EncryptionScope);
ret.CopyId = std::move(response.Value.CopyId);
ret.CopySource = std::move(response.Value.CopySource);
ret.CopyStatus = std::move(response.Value.CopyStatus);

View File

@ -177,6 +177,9 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
fileSystem.Details.LeaseDuration = std::move(item.Details.LeaseDuration);
fileSystem.Details.LeaseState = std::move(item.Details.LeaseState);
fileSystem.Details.LeaseStatus = std::move(item.Details.LeaseStatus);
fileSystem.Details.DefaultEncryptionScope = std::move(item.Details.DefaultEncryptionScope);
fileSystem.Details.PreventEncryptionScopeOverride
= item.Details.PreventEncryptionScopeOverride;
pagedResponse.FileSystems.emplace_back(std::move(fileSystem));
}

View File

@ -646,6 +646,67 @@ namespace Azure { namespace Storage { namespace Test {
}
}
TEST_F(DataLakeFileSystemClientTest, EncryptionScope)
{
auto const& testEncryptionScope = GetTestEncryptionScope();
// without EncryptionScope
{
auto properties = m_fileSystemClient->GetProperties().Value;
EXPECT_EQ(properties.DefaultEncryptionScope, AccountEncryptionKey);
EXPECT_EQ(properties.PreventEncryptionScopeOverride, false);
}
// with EncryptionScope
{
std::string fileSystemName = GetFileSystemValidName() + "1";
std::string pathName = GetTestName() + "1";
auto fileSystemClient = m_dataLakeServiceClient->GetFileSystemClient(fileSystemName);
Files::DataLake::CreateFileSystemOptions createOptions;
createOptions.DefaultEncryptionScope = testEncryptionScope;
createOptions.PreventEncryptionScopeOverride = true;
EXPECT_NO_THROW(fileSystemClient.Create(createOptions));
auto properties = fileSystemClient.GetProperties().Value;
EXPECT_EQ(properties.DefaultEncryptionScope, createOptions.DefaultEncryptionScope.Value());
EXPECT_EQ(
properties.PreventEncryptionScopeOverride,
createOptions.PreventEncryptionScopeOverride.Value());
Files::DataLake::ListFileSystemsOptions listFileSystemOptions;
listFileSystemOptions.Prefix = fileSystemName;
auto fileSystems
= m_dataLakeServiceClient->ListFileSystems(listFileSystemOptions).FileSystems;
for (auto& fileSystem : fileSystems)
{
if (fileSystem.Name == fileSystemName)
{
EXPECT_EQ(
fileSystem.Details.DefaultEncryptionScope,
createOptions.DefaultEncryptionScope.Value());
EXPECT_EQ(
fileSystem.Details.PreventEncryptionScopeOverride,
createOptions.PreventEncryptionScopeOverride.Value());
}
}
auto fileClient = fileSystemClient.GetFileClient(pathName);
fileClient.Create();
Files::DataLake::ListPathsOptions listOptions;
for (auto page = fileSystemClient.ListPaths(false, listOptions); page.HasPage();
page.MoveToNextPage())
{
for (auto& path : page.Paths)
{
if (path.Name == pathName)
{
EXPECT_TRUE(path.EncryptionScope.HasValue());
EXPECT_EQ(path.EncryptionScope.Value(), testEncryptionScope);
}
}
}
auto fileProperties = fileClient.GetProperties().Value;
EXPECT_TRUE(fileProperties.EncryptionScope.HasValue());
EXPECT_EQ(fileProperties.EncryptionScope.Value(), testEncryptionScope);
fileSystemClient.Delete();
}
}
TEST_F(DataLakeFileSystemClientTest, GetSetAccessPolicy_LIVEONLY_)
{
CHECK_SKIP_TEST();

View File

@ -443,7 +443,7 @@ namespace Azure { namespace Storage { namespace Test {
}
// Encryption scope
const auto encryptionScope = GetTestEncryptionScope();
const std::string encryptionScope = GetTestEncryptionScope();
{
auto sasBuilderWithEncryptionScope = fileSasBuilder;
sasBuilderWithEncryptionScope.EncryptionScope = encryptionScope;
@ -451,16 +451,16 @@ namespace Azure { namespace Storage { namespace Test {
auto fileClientEncryptionScopeSas = Files::DataLake::DataLakeFileClient(
fileUrl + sasBuilderWithEncryptionScope.GenerateSasToken(*keyCredential));
fileClientEncryptionScopeSas.Create();
auto pRawResponse = fileClientEncryptionScopeSas.GetProperties().RawResponse;
ASSERT_TRUE(pRawResponse->GetHeaders().count("x-ms-encryption-scope") != 0);
EXPECT_EQ(pRawResponse->GetHeaders().at("x-ms-encryption-scope"), encryptionScope);
auto properties = fileClientEncryptionScopeSas.GetProperties().Value;
ASSERT_TRUE(properties.EncryptionScope.HasValue());
EXPECT_EQ(properties.EncryptionScope.Value(), encryptionScope);
fileClientEncryptionScopeSas = Files::DataLake::DataLakeFileClient(
fileUrl + sasBuilderWithEncryptionScope.GenerateSasToken(userDelegationKey, accountName));
fileClientEncryptionScopeSas.Create();
pRawResponse = fileClientEncryptionScopeSas.GetProperties().RawResponse;
ASSERT_TRUE(pRawResponse->GetHeaders().count("x-ms-encryption-scope") != 0);
EXPECT_EQ(pRawResponse->GetHeaders().at("x-ms-encryption-scope"), encryptionScope);
properties = fileClientEncryptionScopeSas.GetProperties().Value;
ASSERT_TRUE(properties.EncryptionScope.HasValue());
EXPECT_EQ(properties.EncryptionScope.Value(), encryptionScope);
}
{
auto sasBuilderWithEncryptionScope = directorySasBuilder;
@ -470,9 +470,9 @@ namespace Azure { namespace Storage { namespace Test {
directory1Url
+ sasBuilderWithEncryptionScope.GenerateSasToken(userDelegationKey, accountName));
directoryClientEncryptionScopeSas.Create();
auto pRawResponse = directoryClientEncryptionScopeSas.GetProperties().RawResponse;
ASSERT_TRUE(pRawResponse->GetHeaders().count("x-ms-encryption-scope") != 0);
EXPECT_EQ(pRawResponse->GetHeaders().at("x-ms-encryption-scope"), encryptionScope);
auto properties = directoryClientEncryptionScopeSas.GetProperties().Value;
ASSERT_TRUE(properties.EncryptionScope.HasValue());
EXPECT_EQ(properties.EncryptionScope.Value(), encryptionScope);
}
}

View File

@ -164,6 +164,8 @@ namespace Azure { namespace Storage { namespace Test {
return fileSystem.Name == name;
});
EXPECT_EQ(iter->Name.substr(0U, m_fileSystemPrefixA.size()), m_fileSystemPrefixA);
EXPECT_EQ(iter->Details.DefaultEncryptionScope, AccountEncryptionKey);
EXPECT_FALSE(iter->Details.PreventEncryptionScopeOverride);
EXPECT_NE(result.end(), iter);
}
for (const auto& name : m_fileSystemNameSetB)

View File

@ -0,0 +1,248 @@
{
"networkCallRecords": [
{
"Headers": {
"user-agent": "azsdk-cpp-storage-blobs/12.7.0-beta.1 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "170e4d27-443c-44f4-4c79-6c6de2a25903",
"x-ms-version": "2021-04-10"
},
"Method": "PUT",
"Response": {
"BODY": "",
"REASON_PHRASE": "Created",
"STATUS_CODE": "201",
"content-length": "0",
"date": "Wed, 19 Oct 2022 08:30:01 GMT",
"etag": "\"0x8DAB1AC1E2D695A\"",
"last-modified": "Wed, 19 Oct 2022 08:30:02 GMT",
"server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
"x-ms-client-request-id": "170e4d27-443c-44f4-4c79-6c6de2a25903",
"x-ms-request-id": "48e2e4ad-601e-0006-1d94-e3e110000000",
"x-ms-version": "2021-04-10"
},
"Url": "https://REDACTED.blob.core.windows.net/datalakefilesystemclienttestencryptionscope?restype=container"
},
{
"Headers": {
"user-agent": "azsdk-cpp-storage-blobs/12.7.0-beta.1 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "d7368d32-5270-4d59-600e-32a8f828da92",
"x-ms-version": "2021-04-10"
},
"Method": "GET",
"Response": {
"BODY": "",
"REASON_PHRASE": "OK",
"STATUS_CODE": "200",
"content-length": "0",
"date": "Wed, 19 Oct 2022 08:30:02 GMT",
"etag": "\"0x8DAB1AC1E2D695A\"",
"last-modified": "Wed, 19 Oct 2022 08:30:02 GMT",
"server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
"x-ms-client-request-id": "d7368d32-5270-4d59-600e-32a8f828da92",
"x-ms-default-encryption-scope": "$account-encryption-key",
"x-ms-deny-encryption-scope-override": "false",
"x-ms-has-immutability-policy": "false",
"x-ms-has-legal-hold": "false",
"x-ms-immutable-storage-with-versioning-enabled": "false",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-request-id": "48e2e60b-601e-0006-5794-e3e110000000",
"x-ms-version": "2021-04-10"
},
"Url": "https://REDACTED.blob.core.windows.net/datalakefilesystemclienttestencryptionscope?restype=container"
},
{
"Headers": {
"user-agent": "azsdk-cpp-storage-blobs/12.7.0-beta.1 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "58518cde-80b0-42a8-7b2f-9fecba6936a4",
"x-ms-version": "2021-04-10"
},
"Method": "PUT",
"Response": {
"BODY": "",
"REASON_PHRASE": "Created",
"STATUS_CODE": "201",
"content-length": "0",
"date": "Wed, 19 Oct 2022 08:30:02 GMT",
"etag": "\"0x8DAB1AC1E8A48DB\"",
"last-modified": "Wed, 19 Oct 2022 08:30:03 GMT",
"server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
"x-ms-client-request-id": "58518cde-80b0-42a8-7b2f-9fecba6936a4",
"x-ms-request-id": "48e2e6eb-601e-0006-2194-e3e110000000",
"x-ms-version": "2021-04-10"
},
"Url": "https://REDACTED.blob.core.windows.net/datalakefilesystemclienttestencryptionscope1?restype=container"
},
{
"Headers": {
"user-agent": "azsdk-cpp-storage-blobs/12.7.0-beta.1 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "fc3854b0-af74-4bdf-68fc-1add4510d0c0",
"x-ms-version": "2021-04-10"
},
"Method": "GET",
"Response": {
"BODY": "",
"REASON_PHRASE": "OK",
"STATUS_CODE": "200",
"content-length": "0",
"date": "Wed, 19 Oct 2022 08:30:02 GMT",
"etag": "\"0x8DAB1AC1E8A48DB\"",
"last-modified": "Wed, 19 Oct 2022 08:30:03 GMT",
"server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
"x-ms-client-request-id": "fc3854b0-af74-4bdf-68fc-1add4510d0c0",
"x-ms-default-encryption-scope": "EncryptionScopeForTest",
"x-ms-deny-encryption-scope-override": "true",
"x-ms-has-immutability-policy": "false",
"x-ms-has-legal-hold": "false",
"x-ms-immutable-storage-with-versioning-enabled": "false",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-request-id": "48e2e7b0-601e-0006-5994-e3e110000000",
"x-ms-version": "2021-04-10"
},
"Url": "https://REDACTED.blob.core.windows.net/datalakefilesystemclienttestencryptionscope1?restype=container"
},
{
"Headers": {
"user-agent": "azsdk-cpp-storage-blobs/12.7.0-beta.1 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "42ad38c2-b5f2-44e0-56bc-5d354ce94bba",
"x-ms-version": "2021-04-10"
},
"Method": "GET",
"Response": {
"BODY": "<?xml version=\"1.0\" encoding=\"utf-8\"?><EnumerationResults ServiceEndpoint=\"https://zchangdatalake.blob.core.windows.net/\"><Prefix>datalakefilesystemclienttestencryptionscope1</Prefix><Containers><Container><Name>datalakefilesystemclienttestencryptionscope1</Name><Properties><Last-Modified>Wed, 19 Oct 2022 08:30:03 GMT</Last-Modified><Etag>\"0x8DAB1AC1E8A48DB\"</Etag><LeaseStatus>unlocked</LeaseStatus><LeaseState>available</LeaseState><DefaultEncryptionScope>EncryptionScopeForTest</DefaultEncryptionScope><DenyEncryptionScopeOverride>true</DenyEncryptionScopeOverride><HasImmutabilityPolicy>false</HasImmutabilityPolicy><HasLegalHold>false</HasLegalHold><ImmutableStorageWithVersioningEnabled>false</ImmutableStorageWithVersioningEnabled></Properties></Container></Containers><NextMarker /></EnumerationResults>",
"REASON_PHRASE": "OK",
"STATUS_CODE": "200",
"content-type": "application/xml",
"date": "Wed, 19 Oct 2022 08:30:02 GMT",
"server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
"transfer-encoding": "chunked",
"x-ms-client-request-id": "42ad38c2-b5f2-44e0-56bc-5d354ce94bba",
"x-ms-request-id": "48e2e8ad-601e-0006-3a94-e3e110000000",
"x-ms-version": "2021-04-10"
},
"Url": "https://REDACTED.blob.core.windows.net?comp=list&prefix=datalakefilesystemclienttestencryptionscope1"
},
{
"Headers": {
"user-agent": "azsdk-cpp-storage-files-datalake/12.4.0-beta.2 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "108c6b67-9dd1-4bc0-6f3d-e157b42d90d4",
"x-ms-version": "2021-06-08"
},
"Method": "PUT",
"Response": {
"BODY": "",
"REASON_PHRASE": "Created",
"STATUS_CODE": "201",
"content-length": "0",
"date": "Wed, 19 Oct 2022 08:30:04 GMT",
"etag": "\"0x8DAB1AC1F9F85BB\"",
"last-modified": "Wed, 19 Oct 2022 08:30:04 GMT",
"server": "Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0",
"x-ms-client-request-id": "108c6b67-9dd1-4bc0-6f3d-e157b42d90d4",
"x-ms-encryption-scope": "EncryptionScopeForTest",
"x-ms-request-id": "07418966-401f-0073-2f94-e38a3c000000",
"x-ms-request-server-encrypted": "true",
"x-ms-version": "2021-06-08"
},
"Url": "https://REDACTED.dfs.core.windows.net/datalakefilesystemclienttestencryptionscope1/EncryptionScope1?resource=file"
},
{
"Headers": {
"user-agent": "azsdk-cpp-storage-files-datalake/12.4.0-beta.2 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "8ca8d63a-5679-4e14-56b4-c9f9283e2f61",
"x-ms-version": "2021-06-08"
},
"Method": "GET",
"Response": {
"BODY": "{\"paths\":[{\"EncryptionScope\":\"EncryptionScopeForTest\",\"contentLength\":\"0\",\"creationTime\":\"133106418049385915\",\"etag\":\"0x8DAB1AC1F9F85BB\",\"expiryTime\":\"0\",\"group\":\"$superuser\",\"lastModified\":\"Wed, 19 Oct 2022 08:30:04 GMT\",\"name\":\"EncryptionScope1\",\"owner\":\"$superuser\",\"permissions\":\"rw-r-----\"}]}\n",
"REASON_PHRASE": "OK",
"STATUS_CODE": "200",
"content-type": "application/json;charset=utf-8",
"date": "Wed, 19 Oct 2022 08:30:04 GMT",
"server": "Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0",
"transfer-encoding": "chunked",
"x-ms-client-request-id": "8ca8d63a-5679-4e14-56b4-c9f9283e2f61",
"x-ms-request-id": "074189a2-401f-0073-6b94-e38a3c000000",
"x-ms-version": "2021-06-08"
},
"Url": "https://REDACTED.dfs.core.windows.net/datalakefilesystemclienttestencryptionscope1?recursive=false&resource=filesystem"
},
{
"Headers": {
"user-agent": "azsdk-cpp-storage-blobs/12.7.0-beta.1 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "9eb37fa8-fadf-4d4a-6c7f-b959e3b20bc5",
"x-ms-version": "2021-04-10"
},
"Method": "HEAD",
"Response": {
"BODY": "",
"REASON_PHRASE": "OK",
"STATUS_CODE": "200",
"accept-ranges": "bytes",
"content-length": "0",
"content-type": "application/octet-stream",
"date": "Wed, 19 Oct 2022 08:30:04 GMT",
"etag": "\"0x8DAB1AC1F9F85BB\"",
"last-modified": "Wed, 19 Oct 2022 08:30:04 GMT",
"server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
"x-ms-access-tier": "Hot",
"x-ms-access-tier-inferred": "true",
"x-ms-blob-type": "BlockBlob",
"x-ms-client-request-id": "9eb37fa8-fadf-4d4a-6c7f-b959e3b20bc5",
"x-ms-creation-time": "Wed, 19 Oct 2022 08:30:04 GMT",
"x-ms-encryption-scope": "EncryptionScopeForTest",
"x-ms-group": "$superuser",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-owner": "$superuser",
"x-ms-permissions": "rw-r-----",
"x-ms-request-id": "48e2ee6e-601e-0006-0994-e3e110000000",
"x-ms-resource-type": "file",
"x-ms-server-encrypted": "true",
"x-ms-version": "2021-04-10"
},
"Url": "https://REDACTED.blob.core.windows.net/datalakefilesystemclienttestencryptionscope1/EncryptionScope1"
},
{
"Headers": {
"user-agent": "azsdk-cpp-storage-blobs/12.7.0-beta.1 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "6f01c327-0579-4957-77c3-2980960d398d",
"x-ms-version": "2021-04-10"
},
"Method": "DELETE",
"Response": {
"BODY": "",
"REASON_PHRASE": "Accepted",
"STATUS_CODE": "202",
"content-length": "0",
"date": "Wed, 19 Oct 2022 08:30:05 GMT",
"server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
"x-ms-client-request-id": "6f01c327-0579-4957-77c3-2980960d398d",
"x-ms-request-id": "48e2ef54-601e-0006-6194-e3e110000000",
"x-ms-version": "2021-04-10"
},
"Url": "https://REDACTED.blob.core.windows.net/datalakefilesystemclienttestencryptionscope1?restype=container"
},
{
"Headers": {
"user-agent": "azsdk-cpp-storage-blobs/12.7.0-beta.1 (Windows 10 Enterprise 6.3 22621 22621.1.amd64fre.ni_release.220506-1250)",
"x-ms-client-request-id": "2dd8b336-e42d-498a-4fb9-ae9d1ee72b03",
"x-ms-version": "2021-04-10"
},
"Method": "DELETE",
"Response": {
"BODY": "",
"REASON_PHRASE": "Accepted",
"STATUS_CODE": "202",
"content-length": "0",
"date": "Wed, 19 Oct 2022 08:30:05 GMT",
"server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
"x-ms-client-request-id": "2dd8b336-e42d-498a-4fb9-ae9d1ee72b03",
"x-ms-request-id": "48e2f037-601e-0006-3094-e3e110000000",
"x-ms-version": "2021-04-10"
},
"Url": "https://REDACTED.blob.core.windows.net/datalakefilesystemclienttestencryptionscope?restype=container"
}
]
}