diff --git a/src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.cs b/src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.cs index aa76c26d113a..283269655e6c 100644 --- a/src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.cs +++ b/src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.cs @@ -45,6 +45,13 @@ public void TestStorageBlobContainer() TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobContainer"); } + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void TestStorageBlobContainerEncryptionScope() + { + TestController.NewInstance.RunPsTest(_logger, "Test-StorageBlobContainerEncryptionScope"); + } + [Fact] [Trait(Category.AcceptanceType, Category.CheckIn)] public void TestStorageBlobContainerLegalHold() diff --git a/src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.ps1 b/src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.ps1 index c7099ab6a5fe..3c869e465b8b 100644 --- a/src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.ps1 +++ b/src/Storage/Storage.Management.Test/ScenarioTests/StorageBlobTests.ps1 @@ -143,6 +143,78 @@ function Test-StorageBlobContainer } } +<# +.SYNOPSIS +Test StorageAccount container with Encryption Scope +.DESCRIPTION +SmokeTest +#> +function Test-StorageBlobContainerEncryptionScope +{ + # Setup + $rgname = Get-StorageManagementTestResourceName; + + try + { + # Test + $stoname = 'sto' + $rgname; + $stotype = 'Standard_LRS'; + $loc = Get-ProviderLocation ResourceManagement; + $kind = 'StorageV2' + $containerName = "container"+ $rgname + $containerName2 = "container2"+ $rgname + $scopeName = "testscope" + $scopeName2 = "testscope2" + + Write-Verbose "RGName: $rgname | Loc: $loc" + New-AzResourceGroup -Name $rgname -Location $loc; + + New-AzStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -Type $stotype -Kind $kind + $stos = Get-AzStorageAccount -ResourceGroupName $rgname; + + # create Scope + New-AzStorageEncryptionScope -ResourceGroupName $rgname -StorageAccountName $stoname -EncryptionScopeName $scopeName -StorageEncryption + $scope = Get-AzStorageEncryptionScope -ResourceGroupName $rgname -StorageAccountName $stoname -EncryptionScopeName $scopeName + Assert-AreEqual $rgname $scope.ResourceGroupName + Assert-AreEqual $stoname $scope.StorageAccountName + Assert-AreEqual $scopeName $scope.Name + Assert-AreEqual "Microsoft.Storage" $scope.Source + Assert-AreEqual "Enabled" $scope.State + + # update Scope + $scope = Update-AzStorageEncryptionScope -ResourceGroupName $rgname -StorageAccountName $stoname -EncryptionScopeName $scopeName -State Disabled + Assert-AreEqual "Disabled" $scope.State + $scope = Update-AzStorageEncryptionScope -ResourceGroupName $rgname -StorageAccountName $stoname -EncryptionScopeName $scopeName -State Enabled + Assert-AreEqual "Enabled" $scope.State + + #List Scope + New-AzStorageEncryptionScope -ResourceGroupName $rgname -StorageAccountName $stoname -EncryptionScopeName $scopeName2 -StorageEncryption + $scopes = Get-AzStorageEncryptionScope -ResourceGroupName $rgname -StorageAccountName $stoname + Assert-AreEqual 2 $scopes.Count + + #create container + New-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName -DefaultEncryptionScope $scopename -PreventEncryptionScopeOverride $true + $container = Get-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName + Assert-AreEqual $rgname $container.ResourceGroupName + Assert-AreEqual $stoname $container.StorageAccountName + Assert-AreEqual $containerName $container.Name + Assert-AreEqual $scopename $container.DefaultEncryptionScope + Assert-AreEqual $true $container.DenyEncryptionScopeOverride + New-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName2 -DefaultEncryptionScope $scopename2 -PreventEncryptionScopeOverride $false + $container2 = Get-AzRmStorageContainer -ResourceGroupName $rgname -StorageAccountName $stoname -Name $containerName2 + Assert-AreEqual $rgname $container2.ResourceGroupName + Assert-AreEqual $stoname $container2.StorageAccountName + Assert-AreEqual $containerName2 $container2.Name + Assert-AreEqual $scopename2 $container2.DefaultEncryptionScope + Assert-AreEqual false $container2.DenyEncryptionScopeOverride + + } + finally + { + # Cleanup + Clean-ResourceGroup $rgname + } +} function Test-StorageBlobContainerLegalHold { diff --git a/src/Storage/Storage.Management.Test/ScenarioTests/StorageDataPlaneTests.ps1 b/src/Storage/Storage.Management.Test/ScenarioTests/StorageDataPlaneTests.ps1 index c9bd8100160f..c7f302accab6 100644 --- a/src/Storage/Storage.Management.Test/ScenarioTests/StorageDataPlaneTests.ps1 +++ b/src/Storage/Storage.Management.Test/ScenarioTests/StorageDataPlaneTests.ps1 @@ -286,6 +286,17 @@ function Test-Blob $immutabilityPolicy = Get-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName -ContainerName $containerName Remove-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName -ContainerName $containerName -Etag $immutabilityPolicy.Etag + # Encryption Scope Test + $scopename = "testscope" + $containerName2 = "testscopecontainer" + New-AzStorageEncryptionScope -ResourceGroupName $ResourceGroupName -StorageAccountName $storageAccountName -EncryptionScopeName $scopename -StorageEncryption + $container = New-AzStorageContainer -Name $containerName2 -Context $storageContext -DefaultEncryptionScope $scopeName2 -PreventEncryptionScopeOverride $true + Assert-AreEqual $scopename $container.BlobContainerProperties.DefaultEncryptionScope + Assert-AreEqual $true $container.BlobContainerProperties.PreventEncryptionScopeOverride + $blob = Set-AzStorageBlobContent -Context $storageContext -File $localSrcFile -Container $containerName -Blob encryscopetest -EncryptionScope $scopename + Assert-AreEqual $scopename $blob.BlobProperties.EncryptionScope + Remove-AzStorageContainer -Name $containerName2 -Force -Context $storageContext + # Clean Storage Account Remove-AzStorageContainer -Name $containerName -Force -Context $storageContext diff --git a/src/Storage/Storage.Management.Test/SessionRecords/Microsoft.Azure.Commands.Management.Storage.Test.ScenarioTests.StorageBlobTests/TestStorageBlobContainerEncryptionScope.json b/src/Storage/Storage.Management.Test/SessionRecords/Microsoft.Azure.Commands.Management.Storage.Test.ScenarioTests.StorageBlobTests/TestStorageBlobContainerEncryptionScope.json new file mode 100644 index 000000000000..359f82b7424b --- /dev/null +++ b/src/Storage/Storage.Management.Test/SessionRecords/Microsoft.Azure.Commands.Management.Storage.Test.ScenarioTests.StorageBlobTests/TestStorageBlobContainerEncryptionScope.json @@ -0,0 +1,1764 @@ +{ + "Entries": [ + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/providers/Microsoft.Storage?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Byb3ZpZGVycy9NaWNyb3NvZnQuU3RvcmFnZT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "feb92d6a-78db-40f5-bb9c-362de055ae90" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11992" + ], + "x-ms-request-id": [ + "ded78290-8267-4314-bbd9-a2b357757e56" + ], + "x-ms-correlation-request-id": [ + "ded78290-8267-4314-bbd9-a2b357757e56" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132023Z:ded78290-8267-4314-bbd9-a2b357757e56" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:23 GMT" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "12336" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/providers/Microsoft.Storage\",\r\n \"namespace\": \"Microsoft.Storage\",\r\n \"authorizations\": [\r\n {\r\n \"applicationId\": \"a6aa9161-5291-40bb-8c5c-923b567bee3b\",\r\n \"roleDefinitionId\": \"070ab87f-0efc-4423-b18b-756f3bdb0236\"\r\n },\r\n {\r\n \"applicationId\": \"e406a681-f3d4-42a8-90b6-c2b029497af1\"\r\n }\r\n ],\r\n \"resourceTypes\": [\r\n {\r\n \"resourceType\": \"storageAccounts\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\",\r\n \"2016-01-01\",\r\n \"2015-06-15\",\r\n \"2015-05-01-preview\"\r\n ],\r\n \"capabilities\": \"CrossResourceGroupResourceMove, CrossSubscriptionResourceMove, SystemAssignedResourceIdentity\"\r\n },\r\n {\r\n \"resourceType\": \"operations\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\",\r\n \"2016-01-01\",\r\n \"2015-06-15\",\r\n \"2015-05-01-preview\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"locations/asyncoperations\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\",\r\n \"2016-01-01\",\r\n \"2015-06-15\",\r\n \"2015-05-01-preview\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"storageAccounts/listAccountSas\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"storageAccounts/listServiceSas\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"storageAccounts/blobServices\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"storageAccounts/tableServices\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"storageAccounts/queueServices\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"storageAccounts/fileServices\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"locations\",\r\n \"locations\": [],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-07-01\",\r\n \"2016-01-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"locations/usages\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"locations/deleteVirtualNetworkOrSubnets\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-07-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"usages\",\r\n \"locations\": [],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\",\r\n \"2016-01-01\",\r\n \"2015-06-15\",\r\n \"2015-05-01-preview\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"checkNameAvailability\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-03-01-preview\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\",\r\n \"2016-05-01\",\r\n \"2016-01-01\",\r\n \"2015-06-15\",\r\n \"2015-05-01-preview\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"locations/checkNameAvailability\",\r\n \"locations\": [\r\n \"East US\",\r\n \"East US 2\",\r\n \"West US\",\r\n \"West Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"Central US\",\r\n \"North Europe\",\r\n \"Brazil South\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"Australia Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 (Stage)\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2019-06-01\",\r\n \"2019-04-01\",\r\n \"2018-11-01\",\r\n \"2018-07-01\",\r\n \"2018-02-01\",\r\n \"2017-10-01\",\r\n \"2017-06-01\",\r\n \"2016-12-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"storageAccounts/services\",\r\n \"locations\": [\r\n \"East US\",\r\n \"West US\",\r\n \"East US 2 (Stage)\",\r\n \"West Europe\",\r\n \"North Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"East US 2\",\r\n \"Central US\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"Brazil South\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2014-04-01\"\r\n ]\r\n },\r\n {\r\n \"resourceType\": \"storageAccounts/services/metricDefinitions\",\r\n \"locations\": [\r\n \"East US\",\r\n \"West US\",\r\n \"East US 2 (Stage)\",\r\n \"West Europe\",\r\n \"North Europe\",\r\n \"East Asia\",\r\n \"Southeast Asia\",\r\n \"Japan East\",\r\n \"Japan West\",\r\n \"North Central US\",\r\n \"South Central US\",\r\n \"East US 2\",\r\n \"Central US\",\r\n \"Australia East\",\r\n \"Australia Southeast\",\r\n \"Brazil South\",\r\n \"South India\",\r\n \"Central India\",\r\n \"West India\",\r\n \"Canada East\",\r\n \"Canada Central\",\r\n \"West US 2\",\r\n \"West Central US\",\r\n \"UK South\",\r\n \"UK West\",\r\n \"Korea Central\",\r\n \"Korea South\",\r\n \"France Central\",\r\n \"South Africa North\",\r\n \"UAE North\",\r\n \"Switzerland North\",\r\n \"Germany West Central\",\r\n \"Norway East\",\r\n \"East US 2 EUAP\",\r\n \"Central US EUAP\"\r\n ],\r\n \"apiVersions\": [\r\n \"2014-04-01\"\r\n ]\r\n }\r\n ],\r\n \"registrationState\": \"Registered\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourcegroups/pstestrg8811?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlZ3JvdXBzL3BzdGVzdHJnODgxMT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"location\": \"West US\"\r\n}", + "RequestHeaders": { + "x-ms-client-request-id": [ + "fa98f001-f0c4-4dc0-8a2c-fa4c11ccc1b5" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "29" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1195" + ], + "x-ms-request-id": [ + "0a073523-5f57-4868-8848-902c137fa46b" + ], + "x-ms-correlation-request-id": [ + "0a073523-5f57-4868-8848-902c137fa46b" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132026Z:0a073523-5f57-4868-8848-902c137fa46b" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:26 GMT" + ], + "Content-Length": [ + "177" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811\",\r\n \"name\": \"pstestrg8811\",\r\n \"location\": \"westus\",\r\n \"properties\": {\r\n \"provisioningState\": \"Succeeded\"\r\n }\r\n}", + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/providers/Microsoft.Storage/checkNameAvailability?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Byb3ZpZGVycy9NaWNyb3NvZnQuU3RvcmFnZS9jaGVja05hbWVBdmFpbGFiaWxpdHk/YXBpLXZlcnNpb249MjAxOS0wNi0wMQ==", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"name\": \"stopstestrg8811\",\r\n \"type\": \"Microsoft.Storage/storageAccounts\"\r\n}", + "RequestHeaders": { + "x-ms-client-request-id": [ + "849f8786-5805-4eb6-a646-2231ee0ebfc5" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "81" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "d8eabfd7-8b0c-4920-9697-5c25a9c39adf" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11999" + ], + "x-ms-correlation-request-id": [ + "d8ca3603-64dd-4a94-889c-5f75513e3d54" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132027Z:d8ca3603-64dd-4a94-889c-5f75513e3d54" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:27 GMT" + ], + "Content-Length": [ + "22" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"nameAvailable\": true\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMT9hcGktdmVyc2lvbj0yMDE5LTA2LTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"sku\": {\r\n \"name\": \"Standard_LRS\"\r\n },\r\n \"kind\": \"StorageV2\",\r\n \"location\": \"West US\"\r\n}", + "RequestHeaders": { + "x-ms-client-request-id": [ + "c294b941-4051-4d54-84c5-800eaa07ad6d" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "99" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/providers/Microsoft.Storage/locations/westus/asyncoperations/4386c103-820d-4bdf-990a-6a52ca8350d5?monitor=true&api-version=2019-06-01" + ], + "Retry-After": [ + "17" + ], + "x-ms-request-id": [ + "4386c103-820d-4bdf-990a-6a52ca8350d5" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-correlation-request-id": [ + "a26cf890-6c3b-4812-a7d0-f9c0fe6bde3e" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132033Z:a26cf890-6c3b-4812-a7d0-f9c0fe6bde3e" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:33 GMT" + ], + "Content-Type": [ + "text/plain; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/providers/Microsoft.Storage/locations/westus/asyncoperations/4386c103-820d-4bdf-990a-6a52ca8350d5?monitor=true&api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Byb3ZpZGVycy9NaWNyb3NvZnQuU3RvcmFnZS9sb2NhdGlvbnMvd2VzdHVzL2FzeW5jb3BlcmF0aW9ucy80Mzg2YzEwMy04MjBkLTRiZGYtOTkwYS02YTUyY2E4MzUwZDU/bW9uaXRvcj10cnVlJmFwaS12ZXJzaW9uPTIwMTktMDYtMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "1b5c772d-099c-4a08-86c8-0e437910c844" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11998" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-correlation-request-id": [ + "8bc743bb-2443-4545-a595-5e8e62eff8b6" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132051Z:8bc743bb-2443-4545-a595-5e8e62eff8b6" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:51 GMT" + ], + "Content-Length": [ + "1256" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"sku\": {\r\n \"name\": \"Standard_LRS\",\r\n \"tier\": \"Standard\"\r\n },\r\n \"kind\": \"StorageV2\",\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811\",\r\n \"name\": \"stopstestrg8811\",\r\n \"type\": \"Microsoft.Storage/storageAccounts\",\r\n \"location\": \"westus\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"privateEndpointConnections\": [],\r\n \"networkAcls\": {\r\n \"bypass\": \"AzureServices\",\r\n \"virtualNetworkRules\": [],\r\n \"ipRules\": [],\r\n \"defaultAction\": \"Allow\"\r\n },\r\n \"supportsHttpsTrafficOnly\": true,\r\n \"encryption\": {\r\n \"services\": {\r\n \"file\": {\r\n \"keyType\": \"Account\",\r\n \"enabled\": true,\r\n \"lastEnabledTime\": \"2020-03-30T13:20:33.1312089Z\"\r\n },\r\n \"blob\": {\r\n \"keyType\": \"Account\",\r\n \"enabled\": true,\r\n \"lastEnabledTime\": \"2020-03-30T13:20:33.1312089Z\"\r\n }\r\n },\r\n \"keySource\": \"Microsoft.Storage\"\r\n },\r\n \"accessTier\": \"Hot\",\r\n \"provisioningState\": \"Succeeded\",\r\n \"creationTime\": \"2020-03-30T13:20:33.0374783Z\",\r\n \"primaryEndpoints\": {\r\n \"dfs\": \"https://stopstestrg8811.dfs.core.windows.net/\",\r\n \"web\": \"https://stopstestrg8811.z22.web.core.windows.net/\",\r\n \"blob\": \"https://stopstestrg8811.blob.core.windows.net/\",\r\n \"queue\": \"https://stopstestrg8811.queue.core.windows.net/\",\r\n \"table\": \"https://stopstestrg8811.table.core.windows.net/\",\r\n \"file\": \"https://stopstestrg8811.file.core.windows.net/\"\r\n },\r\n \"primaryLocation\": \"westus\",\r\n \"statusOfPrimary\": \"available\"\r\n }\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMT9hcGktdmVyc2lvbj0yMDE5LTA2LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "bdf10905-da0d-41ca-9813-ec59493993ce" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "8af8d87b-a8df-4cd8-a04e-d3039b8eb713" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11997" + ], + "x-ms-correlation-request-id": [ + "a9c51f99-2726-471a-b675-fbc548fe0ff2" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132052Z:a9c51f99-2726-471a-b675-fbc548fe0ff2" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:52 GMT" + ], + "Content-Length": [ + "1256" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"sku\": {\r\n \"name\": \"Standard_LRS\",\r\n \"tier\": \"Standard\"\r\n },\r\n \"kind\": \"StorageV2\",\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811\",\r\n \"name\": \"stopstestrg8811\",\r\n \"type\": \"Microsoft.Storage/storageAccounts\",\r\n \"location\": \"westus\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"privateEndpointConnections\": [],\r\n \"networkAcls\": {\r\n \"bypass\": \"AzureServices\",\r\n \"virtualNetworkRules\": [],\r\n \"ipRules\": [],\r\n \"defaultAction\": \"Allow\"\r\n },\r\n \"supportsHttpsTrafficOnly\": true,\r\n \"encryption\": {\r\n \"services\": {\r\n \"file\": {\r\n \"keyType\": \"Account\",\r\n \"enabled\": true,\r\n \"lastEnabledTime\": \"2020-03-30T13:20:33.1312089Z\"\r\n },\r\n \"blob\": {\r\n \"keyType\": \"Account\",\r\n \"enabled\": true,\r\n \"lastEnabledTime\": \"2020-03-30T13:20:33.1312089Z\"\r\n }\r\n },\r\n \"keySource\": \"Microsoft.Storage\"\r\n },\r\n \"accessTier\": \"Hot\",\r\n \"provisioningState\": \"Succeeded\",\r\n \"creationTime\": \"2020-03-30T13:20:33.0374783Z\",\r\n \"primaryEndpoints\": {\r\n \"dfs\": \"https://stopstestrg8811.dfs.core.windows.net/\",\r\n \"web\": \"https://stopstestrg8811.z22.web.core.windows.net/\",\r\n \"blob\": \"https://stopstestrg8811.blob.core.windows.net/\",\r\n \"queue\": \"https://stopstestrg8811.queue.core.windows.net/\",\r\n \"table\": \"https://stopstestrg8811.table.core.windows.net/\",\r\n \"file\": \"https://stopstestrg8811.file.core.windows.net/\"\r\n },\r\n \"primaryLocation\": \"westus\",\r\n \"statusOfPrimary\": \"available\"\r\n }\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzP2FwaS12ZXJzaW9uPTIwMTktMDYtMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "605c0fa6-2d90-414e-b5ab-5e37fa7be42b" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "52a754c3-2c65-40cc-b69e-570a44788e90" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11996" + ], + "x-ms-correlation-request-id": [ + "24caee6d-81e1-4dfe-bc0a-0d26d7605c88" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132052Z:24caee6d-81e1-4dfe-bc0a-0d26d7605c88" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:52 GMT" + ], + "Content-Length": [ + "1268" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"sku\": {\r\n \"name\": \"Standard_LRS\",\r\n \"tier\": \"Standard\"\r\n },\r\n \"kind\": \"StorageV2\",\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811\",\r\n \"name\": \"stopstestrg8811\",\r\n \"type\": \"Microsoft.Storage/storageAccounts\",\r\n \"location\": \"westus\",\r\n \"tags\": {},\r\n \"properties\": {\r\n \"privateEndpointConnections\": [],\r\n \"networkAcls\": {\r\n \"bypass\": \"AzureServices\",\r\n \"virtualNetworkRules\": [],\r\n \"ipRules\": [],\r\n \"defaultAction\": \"Allow\"\r\n },\r\n \"supportsHttpsTrafficOnly\": true,\r\n \"encryption\": {\r\n \"services\": {\r\n \"file\": {\r\n \"keyType\": \"Account\",\r\n \"enabled\": true,\r\n \"lastEnabledTime\": \"2020-03-30T13:20:33.1312089Z\"\r\n },\r\n \"blob\": {\r\n \"keyType\": \"Account\",\r\n \"enabled\": true,\r\n \"lastEnabledTime\": \"2020-03-30T13:20:33.1312089Z\"\r\n }\r\n },\r\n \"keySource\": \"Microsoft.Storage\"\r\n },\r\n \"accessTier\": \"Hot\",\r\n \"provisioningState\": \"Succeeded\",\r\n \"creationTime\": \"2020-03-30T13:20:33.0374783Z\",\r\n \"primaryEndpoints\": {\r\n \"dfs\": \"https://stopstestrg8811.dfs.core.windows.net/\",\r\n \"web\": \"https://stopstestrg8811.z22.web.core.windows.net/\",\r\n \"blob\": \"https://stopstestrg8811.blob.core.windows.net/\",\r\n \"queue\": \"https://stopstestrg8811.queue.core.windows.net/\",\r\n \"table\": \"https://stopstestrg8811.table.core.windows.net/\",\r\n \"file\": \"https://stopstestrg8811.file.core.windows.net/\"\r\n },\r\n \"primaryLocation\": \"westus\",\r\n \"statusOfPrimary\": \"available\"\r\n }\r\n }\r\n ]\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9lbmNyeXB0aW9uU2NvcGVzL3Rlc3RzY29wZT9hcGktdmVyc2lvbj0yMDE5LTA2LTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"source\": \"Microsoft.Storage\"\r\n }\r\n}", + "RequestHeaders": { + "x-ms-client-request-id": [ + "44b24706-13ac-4ba3-bb6e-303adf1f7f35" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "63" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "4a4bddb8-7c2e-4fbc-bb33-2d2c9b6894e0" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "f1255436-0730-4630-94a3-d03539f8ef1f" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132053Z:f1255436-0730-4630-94a3-d03539f8ef1f" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:52 GMT" + ], + "Content-Length": [ + "386" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/encryptionScopes\",\r\n \"name\": \"testscope\",\r\n \"properties\": {\r\n \"source\": \"Microsoft.Storage\",\r\n \"keyVaultProperties\": {},\r\n \"creationTime\": \"2020-03-30T13:20:52.8192778Z\",\r\n \"state\": \"Enabled\"\r\n }\r\n}", + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9lbmNyeXB0aW9uU2NvcGVzL3Rlc3RzY29wZT9hcGktdmVyc2lvbj0yMDE5LTA2LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "ab048c77-3c6f-44cd-9354-37c7e06bf8ec" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "298b9014-08cc-4263-bad4-2ec8bcbf85a3" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11995" + ], + "x-ms-correlation-request-id": [ + "21a4b727-eed5-45d4-937f-83e8a0d49da1" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132053Z:21a4b727-eed5-45d4-937f-83e8a0d49da1" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:53 GMT" + ], + "Content-Length": [ + "386" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/encryptionScopes\",\r\n \"name\": \"testscope\",\r\n \"properties\": {\r\n \"source\": \"Microsoft.Storage\",\r\n \"keyVaultProperties\": {},\r\n \"creationTime\": \"2020-03-30T13:20:52.8192778Z\",\r\n \"state\": \"Enabled\"\r\n }\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9lbmNyeXB0aW9uU2NvcGVzL3Rlc3RzY29wZT9hcGktdmVyc2lvbj0yMDE5LTA2LTAx", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"state\": \"Disabled\"\r\n }\r\n}", + "RequestHeaders": { + "x-ms-client-request-id": [ + "2f4b82cf-e00a-4ecc-b993-e518aea413d1" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "53" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "1749f631-44c0-4122-8e82-d13157f8b481" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1197" + ], + "x-ms-correlation-request-id": [ + "a781a0e2-15dd-48ae-a179-c2b36b125944" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132053Z:a781a0e2-15dd-48ae-a179-c2b36b125944" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:53 GMT" + ], + "Content-Length": [ + "387" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/encryptionScopes\",\r\n \"name\": \"testscope\",\r\n \"properties\": {\r\n \"source\": \"Microsoft.Storage\",\r\n \"keyVaultProperties\": {},\r\n \"creationTime\": \"2020-03-30T13:20:52.8192778Z\",\r\n \"state\": \"Disabled\"\r\n }\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9lbmNyeXB0aW9uU2NvcGVzL3Rlc3RzY29wZT9hcGktdmVyc2lvbj0yMDE5LTA2LTAx", + "RequestMethod": "PATCH", + "RequestBody": "{\r\n \"properties\": {\r\n \"state\": \"Enabled\"\r\n }\r\n}", + "RequestHeaders": { + "x-ms-client-request-id": [ + "445f5a88-71ed-4120-9067-2c18603a132a" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "52" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "bb0f2a7c-9cc0-4ffe-8a1c-4e3f36610128" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1196" + ], + "x-ms-correlation-request-id": [ + "d9f37deb-aad1-49c3-af36-dabbdb36c823" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132054Z:d9f37deb-aad1-49c3-af36-dabbdb36c823" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:54 GMT" + ], + "Content-Length": [ + "386" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/encryptionScopes\",\r\n \"name\": \"testscope\",\r\n \"properties\": {\r\n \"source\": \"Microsoft.Storage\",\r\n \"keyVaultProperties\": {},\r\n \"creationTime\": \"2020-03-30T13:20:52.8192778Z\",\r\n \"state\": \"Enabled\"\r\n }\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope2?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9lbmNyeXB0aW9uU2NvcGVzL3Rlc3RzY29wZTI/YXBpLXZlcnNpb249MjAxOS0wNi0wMQ==", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"source\": \"Microsoft.Storage\"\r\n }\r\n}", + "RequestHeaders": { + "x-ms-client-request-id": [ + "3f7047fe-0b8a-4c86-9528-804d9c5470d5" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "63" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "24d5cb7f-1b32-4f5a-97aa-49b41fdd96b5" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1195" + ], + "x-ms-correlation-request-id": [ + "2e633442-0b67-43de-9116-39d10ff83f17" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132054Z:2e633442-0b67-43de-9116-39d10ff83f17" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:54 GMT" + ], + "Content-Length": [ + "388" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope2\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/encryptionScopes\",\r\n \"name\": \"testscope2\",\r\n \"properties\": {\r\n \"source\": \"Microsoft.Storage\",\r\n \"keyVaultProperties\": {},\r\n \"creationTime\": \"2020-03-30T13:20:54.5464304Z\",\r\n \"state\": \"Enabled\"\r\n }\r\n}", + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9lbmNyeXB0aW9uU2NvcGVzP2FwaS12ZXJzaW9uPTIwMTktMDYtMDE=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "af114a90-e288-4b7c-8fb8-c34ef6637900" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "27be76af-6d28-4697-9b2a-5698135514a6" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11994" + ], + "x-ms-correlation-request-id": [ + "a9093030-30e7-49da-9608-fa6da809a603" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132055Z:a9093030-30e7-49da-9608-fa6da809a603" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:54 GMT" + ], + "Content-Length": [ + "787" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"value\": [\r\n {\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/encryptionScopes\",\r\n \"name\": \"testscope\",\r\n \"properties\": {\r\n \"source\": \"Microsoft.Storage\",\r\n \"keyVaultProperties\": {},\r\n \"creationTime\": \"2020-03-30T13:20:52.8192778Z\",\r\n \"state\": \"Enabled\"\r\n }\r\n },\r\n {\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/encryptionScopes/testscope2\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/encryptionScopes\",\r\n \"name\": \"testscope2\",\r\n \"properties\": {\r\n \"source\": \"Microsoft.Storage\",\r\n \"keyVaultProperties\": {},\r\n \"creationTime\": \"2020-03-30T13:20:54.5464304Z\",\r\n \"state\": \"Enabled\"\r\n }\r\n }\r\n ]\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/blobServices/default/containers/containerpstestrg8811?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9ibG9iU2VydmljZXMvZGVmYXVsdC9jb250YWluZXJzL2NvbnRhaW5lcnBzdGVzdHJnODgxMT9hcGktdmVyc2lvbj0yMDE5LTA2LTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"defaultEncryptionScope\": \"testscope\",\r\n \"denyEncryptionScopeOverride\": true\r\n }\r\n}", + "RequestHeaders": { + "x-ms-client-request-id": [ + "d5ad2e64-5a8c-4dce-adfe-cf2bbd943e0a" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "113" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"0x8D7D4AD2D82160C\"" + ], + "x-ms-request-id": [ + "72c23250-663a-4a08-bb44-1b39bbba4cbe" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1194" + ], + "x-ms-correlation-request-id": [ + "d3a2968f-00c6-4b43-bce3-486de0d2e792" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132055Z:d3a2968f-00c6-4b43-bce3-486de0d2e792" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:55 GMT" + ], + "Content-Length": [ + "438" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/blobServices/default/containers/containerpstestrg8811\",\r\n \"name\": \"containerpstestrg8811\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/blobServices/containers\",\r\n \"properties\": {\r\n \"defaultEncryptionScope\": \"testscope\",\r\n \"denyEncryptionScopeOverride\": true,\r\n \"hasImmutabilityPolicy\": false,\r\n \"hasLegalHold\": false\r\n }\r\n}", + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/blobServices/default/containers/containerpstestrg8811?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9ibG9iU2VydmljZXMvZGVmYXVsdC9jb250YWluZXJzL2NvbnRhaW5lcnBzdGVzdHJnODgxMT9hcGktdmVyc2lvbj0yMDE5LTA2LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "519437a7-e85f-4d2a-ab3b-3c388dffa377" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"0x8D7D4AD2D82160C\"" + ], + "x-ms-request-id": [ + "fd6d1575-c9dc-4f86-b57b-dc6c708ab01a" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11993" + ], + "x-ms-correlation-request-id": [ + "2275835f-b4a2-4730-a59a-cda21f21fa47" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132056Z:2275835f-b4a2-4730-a59a-cda21f21fa47" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:56 GMT" + ], + "Content-Length": [ + "636" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/blobServices/default/containers/containerpstestrg8811\",\r\n \"name\": \"containerpstestrg8811\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/blobServices/containers\",\r\n \"etag\": \"\\\"0x8D7D4AD2D82160C\\\"\",\r\n \"properties\": {\r\n \"defaultEncryptionScope\": \"testscope\",\r\n \"denyEncryptionScopeOverride\": true,\r\n \"publicAccess\": \"None\",\r\n \"leaseStatus\": \"Unlocked\",\r\n \"leaseState\": \"Available\",\r\n \"lastModifiedTime\": \"2020-03-30T13:20:55Z\",\r\n \"legalHold\": {\r\n \"hasLegalHold\": false,\r\n \"tags\": []\r\n },\r\n \"hasImmutabilityPolicy\": false,\r\n \"hasLegalHold\": false\r\n }\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/blobServices/default/containers/container2pstestrg8811?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9ibG9iU2VydmljZXMvZGVmYXVsdC9jb250YWluZXJzL2NvbnRhaW5lcjJwc3Rlc3RyZzg4MTE/YXBpLXZlcnNpb249MjAxOS0wNi0wMQ==", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"defaultEncryptionScope\": \"testscope2\",\r\n \"denyEncryptionScopeOverride\": false\r\n }\r\n}", + "RequestHeaders": { + "x-ms-client-request-id": [ + "1a6235e0-1f88-4674-8633-69c6c1a2c444" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "115" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"0x8D7D4AD2E8E8656\"" + ], + "x-ms-request-id": [ + "05d878b4-e539-4b12-b4d1-c93811da0a04" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1193" + ], + "x-ms-correlation-request-id": [ + "522616e4-1193-4dd4-a236-271ae1a51bbe" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132057Z:522616e4-1193-4dd4-a236-271ae1a51bbe" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:57 GMT" + ], + "Content-Length": [ + "442" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/blobServices/default/containers/container2pstestrg8811\",\r\n \"name\": \"container2pstestrg8811\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/blobServices/containers\",\r\n \"properties\": {\r\n \"defaultEncryptionScope\": \"testscope2\",\r\n \"denyEncryptionScopeOverride\": false,\r\n \"hasImmutabilityPolicy\": false,\r\n \"hasLegalHold\": false\r\n }\r\n}", + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/blobServices/default/containers/container2pstestrg8811?api-version=2019-06-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlR3JvdXBzL3BzdGVzdHJnODgxMS9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3N0b3BzdGVzdHJnODgxMS9ibG9iU2VydmljZXMvZGVmYXVsdC9jb250YWluZXJzL2NvbnRhaW5lcjJwc3Rlc3RyZzg4MTE/YXBpLXZlcnNpb249MjAxOS0wNi0wMQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "d278110d-9571-4976-aade-fbee350f71db" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Storage.StorageManagementClient/15.0.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "ETag": [ + "\"0x8D7D4AD2E8E8656\"" + ], + "x-ms-request-id": [ + "4b0fe876-d23d-4ba1-b103-8ee1dc41b203" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Server": [ + "Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11992" + ], + "x-ms-correlation-request-id": [ + "29619a23-3c8d-4a06-9ed5-ee03934a95c2" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132057Z:29619a23-3c8d-4a06-9ed5-ee03934a95c2" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:20:57 GMT" + ], + "Content-Length": [ + "640" + ], + "Content-Type": [ + "application/json" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourceGroups/pstestrg8811/providers/Microsoft.Storage/storageAccounts/stopstestrg8811/blobServices/default/containers/container2pstestrg8811\",\r\n \"name\": \"container2pstestrg8811\",\r\n \"type\": \"Microsoft.Storage/storageAccounts/blobServices/containers\",\r\n \"etag\": \"\\\"0x8D7D4AD2E8E8656\\\"\",\r\n \"properties\": {\r\n \"defaultEncryptionScope\": \"testscope2\",\r\n \"denyEncryptionScopeOverride\": false,\r\n \"publicAccess\": \"None\",\r\n \"leaseStatus\": \"Unlocked\",\r\n \"leaseState\": \"Available\",\r\n \"lastModifiedTime\": \"2020-03-30T13:20:57Z\",\r\n \"legalHold\": {\r\n \"hasLegalHold\": false,\r\n \"tags\": []\r\n },\r\n \"hasImmutabilityPolicy\": false,\r\n \"hasLegalHold\": false\r\n }\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/resourcegroups/pstestrg8811?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL3Jlc291cmNlZ3JvdXBzL3BzdGVzdHJnODgxMT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "2902fda9-8adb-4fa1-976f-53f949730a7c" + ], + "Accept-Language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01" + ], + "Retry-After": [ + "15" + ], + "x-ms-ratelimit-remaining-subscription-deletes": [ + "14999" + ], + "x-ms-request-id": [ + "5958798b-ac92-4f94-990a-7011e8d7b8ea" + ], + "x-ms-correlation-request-id": [ + "5958798b-ac92-4f94-990a-7011e8d7b8ea" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132100Z:5958798b-ac92-4f94-990a-7011e8d7b8ea" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:21:00 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01" + ], + "Retry-After": [ + "15" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11991" + ], + "x-ms-request-id": [ + "2a765eee-2cf8-497e-ac32-eaa5f1efc785" + ], + "x-ms-correlation-request-id": [ + "2a765eee-2cf8-497e-ac32-eaa5f1efc785" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132116Z:2a765eee-2cf8-497e-ac32-eaa5f1efc785" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:21:15 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01" + ], + "Retry-After": [ + "15" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11990" + ], + "x-ms-request-id": [ + "d1f0dca4-886e-438d-ac58-2e57035fef72" + ], + "x-ms-correlation-request-id": [ + "d1f0dca4-886e-438d-ac58-2e57035fef72" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132131Z:d1f0dca4-886e-438d-ac58-2e57035fef72" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:21:30 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01" + ], + "Retry-After": [ + "15" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11989" + ], + "x-ms-request-id": [ + "368bc03a-0d07-4ffa-875b-c9761f4608af" + ], + "x-ms-correlation-request-id": [ + "368bc03a-0d07-4ffa-875b-c9761f4608af" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132147Z:368bc03a-0d07-4ffa-875b-c9761f4608af" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:21:47 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01" + ], + "Retry-After": [ + "15" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11988" + ], + "x-ms-request-id": [ + "9aac9145-74ce-42ef-a41f-31dc633c7524" + ], + "x-ms-correlation-request-id": [ + "9aac9145-74ce-42ef-a41f-31dc633c7524" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132202Z:9aac9145-74ce-42ef-a41f-31dc633c7524" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:22:02 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01" + ], + "Retry-After": [ + "15" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11987" + ], + "x-ms-request-id": [ + "b1228b34-4156-4da0-9d25-de5cc0b86515" + ], + "x-ms-correlation-request-id": [ + "b1228b34-4156-4da0-9d25-de5cc0b86515" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132218Z:b1228b34-4156-4da0-9d25-de5cc0b86515" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:22:17 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01" + ], + "Retry-After": [ + "15" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11986" + ], + "x-ms-request-id": [ + "f691c125-cd39-4a09-aaa9-f8019602f8e6" + ], + "x-ms-correlation-request-id": [ + "f691c125-cd39-4a09-aaa9-f8019602f8e6" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132233Z:f691c125-cd39-4a09-aaa9-f8019602f8e6" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:22:32 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01" + ], + "Retry-After": [ + "15" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11985" + ], + "x-ms-request-id": [ + "0babe14e-2b35-451e-9a20-d20422c78204" + ], + "x-ms-correlation-request-id": [ + "0babe14e-2b35-451e-9a20-d20422c78204" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132248Z:0babe14e-2b35-451e-9a20-d20422c78204" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:22:48 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "Location": [ + "https://management.azure.com/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01" + ], + "Retry-After": [ + "15" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11984" + ], + "x-ms-request-id": [ + "8ca2896f-e0fb-45a8-905e-4f58b5ac1dd2" + ], + "x-ms-correlation-request-id": [ + "8ca2896f-e0fb-45a8-905e-4f58b5ac1dd2" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132304Z:8ca2896f-e0fb-45a8-905e-4f58b5ac1dd2" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:23:03 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11983" + ], + "x-ms-request-id": [ + "fbf3c999-eb87-418c-9adb-c184c08178be" + ], + "x-ms-correlation-request-id": [ + "fbf3c999-eb87-418c-9adb-c184c08178be" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132319Z:fbf3c999-eb87-418c-9adb-c184c08178be" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:23:19 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/45b60d85-fd72-427a-a708-f994d26e593e/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1QU1RFU1RSRzg4MTEtV0VTVFVTIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2016-09-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvNDViNjBkODUtZmQ3Mi00MjdhLWE3MDgtZjk5NGQyNmU1OTNlL29wZXJhdGlvbnJlc3VsdHMvZXlKcWIySkpaQ0k2SWxKRlUwOVZVa05GUjFKUFZWQkVSVXhGVkVsUFRrcFBRaTFRVTFSRlUxUlNSemc0TVRFdFYwVlRWRlZUSWl3aWFtOWlURzlqWVhScGIyNGlPaUozWlhOMGRYTWlmUT9hcGktdmVyc2lvbj0yMDE2LTA5LTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "FxVersion/4.6.28207.03", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.18363.", + "Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient/1.3.9" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "11982" + ], + "x-ms-request-id": [ + "23396372-24e3-444f-ad27-9c90cb9a387d" + ], + "x-ms-correlation-request-id": [ + "23396372-24e3-444f-ad27-9c90cb9a387d" + ], + "x-ms-routing-request-id": [ + "SOUTHEASTASIA:20200330T132320Z:23396372-24e3-444f-ad27-9c90cb9a387d" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": [ + "nosniff" + ], + "Date": [ + "Mon, 30 Mar 2020 13:23:20 GMT" + ], + "Expires": [ + "-1" + ], + "Content-Length": [ + "0" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + } + ], + "Names": { + "Test-StorageBlobContainerEncryptionScope": [ + "pstestrg8811" + ] + }, + "Variables": { + "SubscriptionId": "45b60d85-fd72-427a-a708-f994d26e593e" + } +} \ No newline at end of file diff --git a/src/Storage/Storage.Management/Az.Storage.psd1 b/src/Storage/Storage.Management/Az.Storage.psd1 index 9ca2e2534940..bbc870e9bbff 100644 --- a/src/Storage/Storage.Management/Az.Storage.psd1 +++ b/src/Storage/Storage.Management/Az.Storage.psd1 @@ -178,7 +178,9 @@ CmdletsToExport = 'Get-AzStorageAccount', 'Get-AzStorageAccountKey', 'New-AzStorageBlobRangeToRestore', 'Restore-AzStorageBlobRange', 'Set-AzDataLakeGen2AclRecursive', 'Update-AzDataLakeGen2AclRecursive', - 'Remove-AzDataLakeGen2AclRecursive' + 'Remove-AzDataLakeGen2AclRecursive', + 'New-AzStorageEncryptionScope','Update-AzStorageEncryptionScope', + 'Get-AzStorageEncryptionScope' # Variables to export from this module # VariablesToExport = @() diff --git a/src/Storage/Storage.Management/Blob/NewAzureStorageContainer.cs b/src/Storage/Storage.Management/Blob/NewAzureStorageContainer.cs index 8aa00f5176a9..127a4dd895bb 100644 --- a/src/Storage/Storage.Management/Blob/NewAzureStorageContainer.cs +++ b/src/Storage/Storage.Management/Blob/NewAzureStorageContainer.cs @@ -35,12 +35,28 @@ public class NewAzureStorageContainerCommand : StorageBlobBaseCmdlet /// private const string AccountObjectParameterSet = "AccountObject"; + /// + /// AccountName EncryptionScope Parameter Set + /// + private const string AccountNameEncryptionScopeParameterSet = "AccountNameEncryptionScope"; + + /// + /// Account object EncryptionScope parameter set + /// + private const string AccountObjectEncryptionScopeParameterSet = "AccountObjectEncryptionScope"; + [Parameter( Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "Resource Group Name.", ParameterSetName = AccountNameParameterSet)] + [Parameter( + Position = 0, + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Resource Group Name.", + ParameterSetName = AccountNameEncryptionScopeParameterSet)] [ValidateNotNullOrEmpty] public string ResourceGroupName { get; set; } @@ -50,6 +66,12 @@ public class NewAzureStorageContainerCommand : StorageBlobBaseCmdlet ValueFromPipelineByPropertyName = true, HelpMessage = "Storage Account Name.", ParameterSetName = AccountNameParameterSet)] + [Parameter( + Position = 1, + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Storage Account Name.", + ParameterSetName = AccountNameEncryptionScopeParameterSet)] [Alias(AccountNameAlias)] [ValidateNotNullOrEmpty] public string StorageAccountName { get; set; } @@ -59,6 +81,11 @@ public class NewAzureStorageContainerCommand : StorageBlobBaseCmdlet ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = AccountObjectParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Storage account object", + ValueFromPipeline = true, + ValueFromPipelineByPropertyName = true, + ParameterSetName = AccountObjectEncryptionScopeParameterSet)] [ValidateNotNullOrEmpty] public PSStorageAccount StorageAccount { get; set; } @@ -70,6 +97,35 @@ public class NewAzureStorageContainerCommand : StorageBlobBaseCmdlet [ValidateNotNullOrEmpty] public string Name { get; set; } + [Parameter(HelpMessage = "Default the container to use specified encryption scope for all writes.", + Mandatory = true, + ParameterSetName = AccountNameEncryptionScopeParameterSet)] + [Parameter(HelpMessage = "Default the container to use specified encryption scope for all writes.", + Mandatory = true, + ParameterSetName = AccountObjectEncryptionScopeParameterSet)] + [ValidateNotNullOrEmpty] + public string DefaultEncryptionScope { get; set; } + + [Parameter(HelpMessage = "Block override of encryption scope from the container default.", + Mandatory = true, + ParameterSetName = AccountNameEncryptionScopeParameterSet)] + [Parameter(HelpMessage = "Block override of encryption scope from the container default.", + Mandatory = true, + ParameterSetName = AccountObjectEncryptionScopeParameterSet)] + [ValidateNotNullOrEmpty] + public bool PreventEncryptionScopeOverride + { + get + { + return preventEncryptionScopeOverride is null ? false : preventEncryptionScopeOverride.Value; + } + set + { + preventEncryptionScopeOverride = value; + } + } + private bool? preventEncryptionScopeOverride; + [Parameter(HelpMessage = "Container PublicAccess", Mandatory = false)] [ValidateNotNullOrEmpty] public PSPublicAccess PublicAccess @@ -112,6 +168,8 @@ public override void ExecuteCmdlet() this.StorageAccountName, this.Name, new BlobContainer( + defaultEncryptionScope: this.DefaultEncryptionScope, + denyEncryptionScopeOverride: this.preventEncryptionScopeOverride, publicAccess: (PublicAccess?)this.publicAccess, metadata: MetadataDictionary)); diff --git a/src/Storage/Storage.Management/ChangeLog.md b/src/Storage/Storage.Management/ChangeLog.md index d65d300b5c22..99faa2317ba8 100644 --- a/src/Storage/Storage.Management/ChangeLog.md +++ b/src/Storage/Storage.Management/ChangeLog.md @@ -18,6 +18,14 @@ - Additional information about change #1 --> ## Upcoming Release +* Support create/update/get/list EncryptionScope of a Storage account + - `New-AzStorageEncryptionScope` + - `Update-AzStorageEncryptionScope` + - `Get-AzStorageEncryptionScope` +* Supported create container and upload blob with Encryption Scope setting + - `New-AzRmStorageContainer` + - `New-AzStorageContainer` + - `Set-AzStorageBlobContent` ## Version 3.1.0 * Supported upload Azure File size up to 4 TiB diff --git a/src/Storage/Storage.Management/Models/PSContainer.cs b/src/Storage/Storage.Management/Models/PSContainer.cs index ffde1d85b6fd..87a0e8f4222e 100644 --- a/src/Storage/Storage.Management/Models/PSContainer.cs +++ b/src/Storage/Storage.Management/Models/PSContainer.cs @@ -45,6 +45,8 @@ public PSContainer(StorageModels.ListContainerItem container) this.LeaseDuration = container.LeaseDuration; this.HasLegalHold = container.HasLegalHold; this.HasImmutabilityPolicy = container.HasImmutabilityPolicy; + this.DefaultEncryptionScope = container.DefaultEncryptionScope; + this.DenyEncryptionScopeOverride = container.DenyEncryptionScopeOverride; } public PSContainer(BlobContainer container) @@ -65,6 +67,8 @@ public PSContainer(BlobContainer container) this.LeaseDuration = container.LeaseDuration; this.HasLegalHold = container.HasLegalHold; this.HasImmutabilityPolicy = container.HasImmutabilityPolicy; + this.DefaultEncryptionScope = container.DefaultEncryptionScope; + this.DenyEncryptionScopeOverride = container.DenyEncryptionScopeOverride; } [Ps1Xml(Label = "ResourceGroupName", Target = ViewControl.List, Position = 0)] @@ -106,6 +110,10 @@ public PSContainer(BlobContainer container) [Ps1Xml(Label = "HasImmutabilityPolicy", Target = ViewControl.List, Position = 6)] public bool? HasImmutabilityPolicy { get; set; } + public string DefaultEncryptionScope { get; set; } + + public bool? DenyEncryptionScopeOverride { get; set; } + public static string ParseResourceGroupFromId(string idFromServer) { diff --git a/src/Storage/Storage.Management/Models/PSEncryptionScope.cs b/src/Storage/Storage.Management/Models/PSEncryptionScope.cs new file mode 100644 index 000000000000..d4400973229a --- /dev/null +++ b/src/Storage/Storage.Management/Models/PSEncryptionScope.cs @@ -0,0 +1,110 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.Common.Authentication.Abstractions; +using Microsoft.Azure.Management.Storage; +using Microsoft.Azure.Management.Storage.Models; +using Microsoft.WindowsAzure.Commands.Common.Attributes; +using Microsoft.WindowsAzure.Commands.Common.Storage; +using Microsoft.WindowsAzure.Commands.Storage.Adapters; +using Microsoft.Azure.Storage; +using System; +using System.Collections.Generic; +using StorageModels = Microsoft.Azure.Management.Storage.Models; + +namespace Microsoft.Azure.Commands.Management.Storage.Models +{ + // wrapper of EncryptionScope + public class PSEncryptionScope + { + public PSEncryptionScope(StorageModels.EncryptionScope scope) + { + this.ResourceGroupName = ParseResourceGroupFromId(scope.Id); + this.StorageAccountName = ParseStorageAccountNameFromId(scope.Id); + this.Id = scope.Id; + this.Name = scope.Name; + this.Type = scope.Type; + this.LastModifiedTime = scope.LastModifiedTime; + this.CreationTime = scope.CreationTime; + this.Source = scope.Source; + this.State = scope.State; + this.KeyVaultProperties = scope.KeyVaultProperties is null ? null : new PSEncryptionScopeKeyVaultProperties(scope.KeyVaultProperties); + } + + [Ps1Xml(Label = "ResourceGroupName", Target = ViewControl.List, Position = 0)] + public string ResourceGroupName { get; set; } + + [Ps1Xml(Label = "StorageAccountName", Target = ViewControl.List, Position = 1)] + public string StorageAccountName { get; set; } + + public string Id { get; set; } + + [Ps1Xml(Label = "Name", Target = ViewControl.List, Position = 2)] + public string Name { get; set; } + + public string Type { get; set; } + + public string Source { get; set; } + + public string State { get; set; } + + public PSEncryptionScopeKeyVaultProperties KeyVaultProperties { get; set; } + + [Ps1Xml(Label = "LastModifiedTime", Target = ViewControl.List, Position = 4)] + public DateTime? LastModifiedTime { get; set; } + + public DateTime? CreationTime { get; set; } + + public static string ParseResourceGroupFromId(string idFromServer) + { + if (!string.IsNullOrEmpty(idFromServer)) + { + string[] tokens = idFromServer.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + + return tokens[3]; + } + + return null; + } + + public static string ParseStorageAccountNameFromId(string idFromServer) + { + if (!string.IsNullOrEmpty(idFromServer)) + { + string[] tokens = idFromServer.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + + return tokens[7]; + } + + return null; + } + + } + + //wrapper of EncryptionScopeKeyVaultProperties + public class PSEncryptionScopeKeyVaultProperties + { + public PSEncryptionScopeKeyVaultProperties(StorageModels.EncryptionScopeKeyVaultProperties keyVaultProperties) + { + if (keyVaultProperties != null) + { + this.keyUri = keyVaultProperties.KeyUri; + } + } + + public string keyUri { get; set; } + } + + +} diff --git a/src/Storage/Storage.Management/Storage.Management.format.ps1xml b/src/Storage/Storage.Management/Storage.Management.format.ps1xml index 542bde95a419..a0721fe79461 100644 --- a/src/Storage/Storage.Management/Storage.Management.format.ps1xml +++ b/src/Storage/Storage.Management/Storage.Management.format.ps1xml @@ -631,5 +631,54 @@ + + Microsoft.Azure.Commands.Management.Storage.Models.PSEncryptionScope + + Microsoft.Azure.Commands.Management.Storage.Models.PSEncryptionScope + + + $_.ResourceGroupName + ", StorageAccountName: " + $_.StorageAccountName + + + + + + + Left + + + + Left + 20 + + + + Left + + + + Left + + + + + + + Name + + + State + + + Source + + + $_.KeyVaultProperties.keyUri + + + + + + \ No newline at end of file diff --git a/src/Storage/Storage.Management/StorageAccount/GetAzureStorageEncryptionScope.cs b/src/Storage/Storage.Management/StorageAccount/GetAzureStorageEncryptionScope.cs new file mode 100644 index 000000000000..e73b996598d8 --- /dev/null +++ b/src/Storage/Storage.Management/StorageAccount/GetAzureStorageEncryptionScope.cs @@ -0,0 +1,120 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.Management.Storage.Models; +using Microsoft.Azure.Management.Storage; +using Microsoft.Azure.Management.Storage.Models; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Management.Automation; +using Microsoft.Azure.Management.Internal.Resources.Utilities.Models; +using Microsoft.Rest.Azure; +using Microsoft.WindowsAzure.Commands.Utilities.Common; + +namespace Microsoft.Azure.Commands.Management.Storage +{ + [Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "StorageEncryptionScope", DefaultParameterSetName = AccountNameParameterSet), OutputType(typeof(PSEncryptionScope))] + public class GetAzureStorageEncryptionScopeCommand : StorageFileBaseCmdlet + { + /// + /// AccountName Parameter Set + /// + private const string AccountNameParameterSet = "AccountName"; + + /// + /// Account object parameter set + /// + private const string AccountObjectParameterSet = "AccountObject"; + + [Parameter( + Position = 0, + Mandatory = true, + HelpMessage = "Resource Group Name.", + ParameterSetName = AccountNameParameterSet)] + [ValidateNotNullOrEmpty] + public string ResourceGroupName { get; set; } + + [Parameter( + Position = 1, + Mandatory = true, + HelpMessage = "Storage Account Name.", + ParameterSetName = AccountNameParameterSet)] + [Alias(AccountNameAlias)] + [ValidateNotNullOrEmpty] + public string StorageAccountName { get; set; } + + [Parameter(Mandatory = true, + HelpMessage = "Storage account object", + ValueFromPipeline = true, + ParameterSetName = AccountObjectParameterSet)] + [ValidateNotNullOrEmpty] + public PSStorageAccount StorageAccount { get; set; } + + [Alias("Name")] + [Parameter(Mandatory = false, + HelpMessage = "Azure Storage EncryptionScope name")] + [ValidateNotNullOrEmpty] + public string EncryptionScopeName { get; set; } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + switch (ParameterSetName) + { + case AccountObjectParameterSet: + this.ResourceGroupName = StorageAccount.ResourceGroupName; + this.StorageAccountName = StorageAccount.StorageAccountName; + break; + default: + // For AccountNameParameterSet, the ResourceGroupName and StorageAccountName can get from input directly + break; + } + + if (this.EncryptionScopeName == null) + { + IPage scopes = this.StorageClient.EncryptionScopes.List( + this.ResourceGroupName, + this.StorageAccountName); + WriteEncryptionScopeList(scopes); + + while (scopes.NextPageLink != null) + { + scopes = this.StorageClient.EncryptionScopes.ListNext(scopes.NextPageLink); + WriteEncryptionScopeList(scopes); + } + } + else + { + var scope = this.StorageClient.EncryptionScopes.Get( + this.ResourceGroupName, + this.StorageAccountName, + this.EncryptionScopeName); + + WriteObject(new PSEncryptionScope(scope)); + } + } + + protected void WriteEncryptionScopeList(IEnumerable scopes) + { + if (scopes != null) + { + List output = new List(); + scopes.ForEach(s => output.Add(new PSEncryptionScope(s))); + WriteObject(output, true); + } + } + } +} diff --git a/src/Storage/Storage.Management/StorageAccount/NewAzureStorageEncryptionScope.cs b/src/Storage/Storage.Management/StorageAccount/NewAzureStorageEncryptionScope.cs new file mode 100644 index 000000000000..b64bbfd3fc7b --- /dev/null +++ b/src/Storage/Storage.Management/StorageAccount/NewAzureStorageEncryptionScope.cs @@ -0,0 +1,161 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.Management.Storage.Models; +using Microsoft.Azure.Management.Storage; +using Microsoft.Azure.Management.Storage.Models; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Management.Automation; +using Microsoft.Azure.Management.Internal.Resources.Utilities.Models; + +namespace Microsoft.Azure.Commands.Management.Storage +{ + [Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "StorageEncryptionScope", DefaultParameterSetName = AccountNameParameterSet, SupportsShouldProcess = true), OutputType(typeof(PSEncryptionScope))] + public class NewAzureStorageEncryptionScopeCommand : StorageFileBaseCmdlet + { + /// + /// AccountName Parameter Set + /// + private const string AccountNameParameterSet = "AccountName"; + + /// + /// Account object parameter set + /// + private const string AccountObjectParameterSet = "AccountObject"; + + /// + /// AccountName KeyVault Parameter Set + /// + private const string AccountNameKeyVaultParameterSet = "AccountNameKeyVault"; + + /// + /// Account object KeyVault parameter set + /// + private const string AccountObjectKeyVaultParameterSet = "AccountObjectKeyVault"; + + [Parameter( + Position = 0, + Mandatory = true, + HelpMessage = "Resource Group Name.", + ParameterSetName = AccountNameParameterSet)] + [Parameter( + Position = 0, + Mandatory = true, + HelpMessage = "Resource Group Name.", + ParameterSetName = AccountNameKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public string ResourceGroupName { get; set; } + + [Parameter( + Position = 1, + Mandatory = true, + HelpMessage = "Storage Account Name.", + ParameterSetName = AccountNameParameterSet)] + [Parameter( + Position = 1, + Mandatory = true, + HelpMessage = "Storage Account Name.", + ParameterSetName = AccountNameKeyVaultParameterSet)] + [Alias(AccountNameAlias)] + [ValidateNotNullOrEmpty] + public string StorageAccountName { get; set; } + + [Parameter(Mandatory = true, + HelpMessage = "Storage account object", + ValueFromPipeline = true, + ParameterSetName = AccountObjectParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Storage account object", + ValueFromPipeline = true, + ParameterSetName = AccountObjectKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public PSStorageAccount StorageAccount { get; set; } + + [Alias("Name")] + [Parameter(Mandatory = true, + HelpMessage = "Azure Storage EncryptionScope name")] + [ValidateNotNullOrEmpty] + public string EncryptionScopeName { get; set; } + + [Parameter(Mandatory = true, + HelpMessage = "Create encryption scope with keySource as Microsoft.Storage.", + ParameterSetName = AccountNameParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Create encryption scope with keySource as Microsoft.Storage.", + ParameterSetName = AccountObjectParameterSet)] + [ValidateNotNullOrEmpty] + public SwitchParameter StorageEncryption { get; set; } + + [Parameter(Mandatory = true, + HelpMessage = "Create encryption scope with keySource as Microsoft.Keyvault", + ParameterSetName = AccountNameKeyVaultParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Create encryption scope with keySource as Microsoft.Keyvault", + ParameterSetName = AccountObjectKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public SwitchParameter KeyvaultEncryption { get; set; } + + [Parameter(Mandatory = true, + HelpMessage = "The key Uri ", + ParameterSetName = AccountNameKeyVaultParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Create encryption scope with keySource as Microsoft.Keyvault", + ParameterSetName = AccountObjectKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public string KeyUri { get; set; } + + + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + if (ShouldProcess(this.EncryptionScopeName, "Create Encryption scope")) + { + switch (ParameterSetName) + { + case AccountObjectParameterSet: + case AccountObjectKeyVaultParameterSet: + this.ResourceGroupName = StorageAccount.ResourceGroupName; + this.StorageAccountName = StorageAccount.StorageAccountName; + break; + default: + // For AccountNameParameterSet, the ResourceGroupName and StorageAccountName can get from input directly + break; + } + + EncryptionScope scope = new EncryptionScope(); + if (this.KeyvaultEncryption.IsPresent) + { + scope.Source = EncryptionScopeSource.MicrosoftKeyVault; + scope.KeyVaultProperties = new EncryptionScopeKeyVaultProperties(this.KeyUri); + } + else + { + scope.Source = EncryptionScopeSource.MicrosoftStorage; + } + + scope = this.StorageClient.EncryptionScopes.Put( + this.ResourceGroupName, + this.StorageAccountName, + this.EncryptionScopeName, + scope); + + WriteObject(new PSEncryptionScope(scope)); + } + } + } +} diff --git a/src/Storage/Storage.Management/StorageAccount/UpdateAzureStorageEncryptionScope.cs b/src/Storage/Storage.Management/StorageAccount/UpdateAzureStorageEncryptionScope.cs new file mode 100644 index 000000000000..cfee60b98cbf --- /dev/null +++ b/src/Storage/Storage.Management/StorageAccount/UpdateAzureStorageEncryptionScope.cs @@ -0,0 +1,224 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.Management.Storage.Models; +using Microsoft.Azure.Management.Storage; +using Microsoft.Azure.Management.Storage.Models; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Management.Automation; +using Microsoft.Azure.Management.Internal.Resources.Utilities.Models; + +namespace Microsoft.Azure.Commands.Management.Storage +{ + [Cmdlet("Update", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "StorageEncryptionScope", DefaultParameterSetName = AccountNameParameterSet, SupportsShouldProcess = true), OutputType(typeof(PSEncryptionScope))] + public class UpdateAzureStorageEncryptionScopeCommand : StorageFileBaseCmdlet + { + /// + /// AccountName Parameter Set + /// + private const string AccountNameParameterSet = "AccountName"; + + /// + /// Account object parameter set + /// + private const string AccountObjectParameterSet = "AccountObject"; + + /// + /// EncryptionScope object parameter set + /// + private const string EncryptionScopeObjectParameterSet = "EncryptionScopeObject"; + + /// + /// AccountName KeyVault Parameter Set + /// + private const string AccountNameKeyVaultParameterSet = "AccountNameKeyVault"; + + /// + /// Account object KeyVault parameter set + /// + private const string AccountObjectKeyVaultParameterSet = "AccountObjectKeyVault"; + + /// + /// EncryptionScope object KeyVault parameter set + /// + private const string EncryptionScopeObjectKeyVaultParameterSet = "EncryptionScopeObjectKeyVault"; + + [Parameter( + Position = 0, + Mandatory = true, + HelpMessage = "Resource Group Name.", + ParameterSetName = AccountNameParameterSet)] + [Parameter( + Position = 0, + Mandatory = true, + HelpMessage = "Resource Group Name.", + ParameterSetName = AccountNameKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public string ResourceGroupName { get; set; } + + [Parameter( + Position = 1, + Mandatory = true, + HelpMessage = "Storage Account Name.", + ParameterSetName = AccountNameParameterSet)] + [Parameter( + Position = 1, + Mandatory = true, + HelpMessage = "Storage Account Name.", + ParameterSetName = AccountNameKeyVaultParameterSet)] + [Alias(AccountNameAlias)] + [ValidateNotNullOrEmpty] + public string StorageAccountName { get; set; } + + [Parameter(Mandatory = true, + HelpMessage = "Storage account object", + ValueFromPipeline = true, + ParameterSetName = AccountObjectParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Storage account object", + ValueFromPipeline = true, + ParameterSetName = AccountObjectKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public PSStorageAccount StorageAccount { get; set; } + + [Parameter(Mandatory = true, + HelpMessage = "EncryptionScope object", + ValueFromPipeline = true, + ParameterSetName = EncryptionScopeObjectParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "EncryptionScope object", + ValueFromPipeline = true, + ParameterSetName = EncryptionScopeObjectKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public PSEncryptionScope InputObject { get; set; } + + [Alias("Name")] + [Parameter(Mandatory = true, + HelpMessage = "Azure Storage EncryptionScope name", + ParameterSetName = AccountObjectParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Azure Storage EncryptionScope name", + ParameterSetName = AccountObjectKeyVaultParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Azure Storage EncryptionScope name", + ParameterSetName = AccountNameParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Azure Storage EncryptionScope name", + ParameterSetName = AccountNameKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public string EncryptionScopeName { get; set; } + + [Parameter(Mandatory = false, + HelpMessage = "Create encryption scope with keySource as Microsoft.Storage.", + ParameterSetName = AccountNameParameterSet)] + [Parameter(Mandatory = false, + HelpMessage = "Create encryption scope with keySource as Microsoft.Storage.", + ParameterSetName = AccountObjectParameterSet)] + [Parameter(Mandatory = false, + HelpMessage = "Create encryption scope with keySource as Microsoft.Storage.", + ParameterSetName = EncryptionScopeObjectParameterSet)] + [ValidateNotNullOrEmpty] + public SwitchParameter StorageEncryption { get; set; } + + [Parameter(Mandatory = true, + HelpMessage = "Create encryption scope with keySource as Microsoft.Keyvault", + ParameterSetName = AccountNameKeyVaultParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Create encryption scope with keySource as Microsoft.Keyvault", + ParameterSetName = AccountObjectKeyVaultParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "Create encryption scope with keySource as Microsoft.Keyvault", + ParameterSetName = EncryptionScopeObjectKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public SwitchParameter KeyvaultEncryption { get; set; } + + [Parameter(Mandatory = true, + HelpMessage = "The key Uri.", + ParameterSetName = AccountNameKeyVaultParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "The key Uri.", + ParameterSetName = AccountObjectKeyVaultParameterSet)] + [Parameter(Mandatory = true, + HelpMessage = "The key Uri.", + ParameterSetName = EncryptionScopeObjectKeyVaultParameterSet)] + [ValidateNotNullOrEmpty] + public string KeyUri { get; set; } + + [Parameter(Mandatory = false, + HelpMessage = "Update encryption scope State, Possible values include: 'Enabled', 'Disabled'.")] + [ValidateSet(EncryptionScopeState.Enabled, + EncryptionScopeState.Disabled, + IgnoreCase = true)] + public string State { get; set; } + + public override void ExecuteCmdlet() + { + base.ExecuteCmdlet(); + + if (ShouldProcess(this.EncryptionScopeName, "Update Encryption scope")) + { + switch (ParameterSetName) + { + case AccountObjectParameterSet: + case AccountObjectKeyVaultParameterSet: + this.ResourceGroupName = StorageAccount.ResourceGroupName; + this.StorageAccountName = StorageAccount.StorageAccountName; + break; + case EncryptionScopeObjectParameterSet: + case EncryptionScopeObjectKeyVaultParameterSet: + this.ResourceGroupName = InputObject.ResourceGroupName; + this.StorageAccountName = InputObject.StorageAccountName; + this.EncryptionScopeName = InputObject.Name; + break; + default: + // For AccountNameParameterSet, the ResourceGroupName and StorageAccountName can get from input directly + break; + } + + EncryptionScope scope = new EncryptionScope(); + if (this.KeyvaultEncryption.IsPresent) + { + scope.Source = EncryptionScopeSource.MicrosoftKeyVault; + scope.KeyVaultProperties = new EncryptionScopeKeyVaultProperties(this.KeyUri); + } + if (this.StorageEncryption.IsPresent) + { + scope.Source = EncryptionScopeSource.MicrosoftStorage; + } + + if (this.State != null) + { + if (this.State.Equals(EncryptionScopeState.Enabled, StringComparison.CurrentCultureIgnoreCase)) + { + scope.State = EncryptionScopeState.Enabled; + } + if (this.State.Equals(EncryptionScopeState.Disabled, StringComparison.CurrentCultureIgnoreCase)) + { + scope.State = EncryptionScopeState.Disabled; + } + } + + scope = this.StorageClient.EncryptionScopes.Patch( + this.ResourceGroupName, + this.StorageAccountName, + this.EncryptionScopeName, + scope); + + WriteObject(new PSEncryptionScope(scope)); + } + } + } +} diff --git a/src/Storage/Storage.Management/help/Az.Storage.md b/src/Storage/Storage.Management/help/Az.Storage.md index 7b7e418e96a6..dc8b3b362d1e 100644 --- a/src/Storage/Storage.Management/help/Az.Storage.md +++ b/src/Storage/Storage.Management/help/Az.Storage.md @@ -104,6 +104,9 @@ Gets the stored access policy or policies for an Azure storage container. ### [Get-AzStorageCORSRule](Get-AzStorageCORSRule.md) Gets CORS rules for a Storage service type. +### [Get-AzStorageEncryptionScope](Get-AzStorageEncryptionScope.md) +Get or list encryption scopes from a Storage account. + ### [Get-AzStorageFile](Get-AzStorageFile.md) Lists directories and files for a path. @@ -209,6 +212,9 @@ Creates an Azure Storage context. ### [New-AzStorageDirectory](New-AzStorageDirectory.md) Creates a directory. +### [New-AzStorageEncryptionScope](New-AzStorageEncryptionScope.md) +Creates an encryption scope for a Storage account. + ### [New-AzStorageFileSASToken](New-AzStorageFileSASToken.md) Generates a shared access signature token for a Storage file. @@ -404,6 +410,9 @@ Update the NetworkRule property of a Storage account ### [Update-AzStorageBlobServiceProperty](Update-AzStorageBlobServiceProperty.md) Modifies the service properties for the Azure Storage Blob service. +### [Update-AzStorageEncryptionScope](Update-AzStorageEncryptionScope.md) +Modify an encryption scope for a Storage account. + ### [Update-AzStorageFileServiceProperty](Update-AzStorageFileServiceProperty.md) Modifies the service properties for the Azure Storage File service. diff --git a/src/Storage/Storage.Management/help/Get-AzStorageEncryptionScope.md b/src/Storage/Storage.Management/help/Get-AzStorageEncryptionScope.md new file mode 100644 index 000000000000..a5c8e04c5455 --- /dev/null +++ b/src/Storage/Storage.Management/help/Get-AzStorageEncryptionScope.md @@ -0,0 +1,151 @@ +--- +external help file: Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll-Help.xml +Module Name: Az.Storage +online version: https://docs.microsoft.com/en-us/powershell/module/az.storage/get-azstorageencryptionscope +schema: 2.0.0 +--- + +# Get-AzStorageEncryptionScope + +## SYNOPSIS +Get or list encryption scopes from a Storage account. + +## SYNTAX + +### AccountName (Default) +``` +Get-AzStorageEncryptionScope [-ResourceGroupName] [-StorageAccountName] + [-EncryptionScopeName ] [-DefaultProfile ] [] +``` + +### AccountObject +``` +Get-AzStorageEncryptionScope -StorageAccount [-EncryptionScopeName ] + [-DefaultProfile ] [] +``` + +## DESCRIPTION +The **Get-AzStorageEncryptionScope** cmdlet gets or lists encryption scopes from a Storage account. + +## EXAMPLES + +### Example 1: Get a single encryption scope +``` +PS C:\> Get-AzStorageEncryptionScope -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" -EncryptionScopeName $scopename + + + ResourceGroupName: myresourcegroup, StorageAccountName: mystorageaccount + +Name State Source KeyVaultKeyUri +---- ----- ------ -------------- +testscope Disabled Microsoft.Keyvault https://keyvalutname.vault.azure.net:443/keys/keyname +``` + +This command gets a single encryption scope. + +### Example 2: List all encryption scopes of a Storage account +``` +PS C:\> Get-AzStorageEncryptionScope -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" + + + ResourceGroupName: myresourcegroup, StorageAccountName: mystorageaccount + +Name State Source KeyVaultKeyUri +---- ----- ------ -------------- +testscope Disabled Microsoft.Keyvault https://keyvalutname.vault.azure.net:443/keys/keyname +scope2 Enabled Microsoft.Storage +``` + +This command lists all encryption scopes of a Storage account. + +## PARAMETERS + +### -DefaultProfile +The credentials, account, tenant, and subscription used for communication with Azure. + +```yaml +Type: Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer +Parameter Sets: (All) +Aliases: AzContext, AzureRmContext, AzureCredential + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -EncryptionScopeName +Azure Storage EncryptionScope name + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: Name + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ResourceGroupName +Resource Group Name. + +```yaml +Type: System.String +Parameter Sets: AccountName +Aliases: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -StorageAccount +Storage account object + +```yaml +Type: Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount +Parameter Sets: AccountObject +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -StorageAccountName +Storage Account Name. + +```yaml +Type: System.String +Parameter Sets: AccountName +Aliases: AccountName + +Required: True +Position: 1 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +### Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount + +## OUTPUTS + +### Microsoft.Azure.Commands.Management.Storage.Models.PSEncryptionScope + +## NOTES + +## RELATED LINKS diff --git a/src/Storage/Storage.Management/help/New-AzRmStorageContainer.md b/src/Storage/Storage.Management/help/New-AzRmStorageContainer.md index 17ff888470a7..32e2baac8deb 100644 --- a/src/Storage/Storage.Management/help/New-AzRmStorageContainer.md +++ b/src/Storage/Storage.Management/help/New-AzRmStorageContainer.md @@ -19,12 +19,26 @@ New-AzRmStorageContainer [-ResourceGroupName] [-StorageAccountName] ] ``` +### AccountNameEncryptionScope +``` +New-AzRmStorageContainer [-ResourceGroupName] [-StorageAccountName] -Name + -DefaultEncryptionScope -PreventEncryptionScopeOverride [-PublicAccess ] + [-Metadata ] [-DefaultProfile ] [-WhatIf] [-Confirm] [] +``` + ### AccountObject ``` New-AzRmStorageContainer -StorageAccount -Name [-PublicAccess ] [-Metadata ] [-DefaultProfile ] [-WhatIf] [-Confirm] [] ``` +### AccountObjectEncryptionScope +``` +New-AzRmStorageContainer -StorageAccount -Name -DefaultEncryptionScope + -PreventEncryptionScopeOverride [-PublicAccess ] [-Metadata ] + [-DefaultProfile ] [-WhatIf] [-Confirm] [] +``` + ## DESCRIPTION The **New-AzRmStorageContainer** cmdlet creates a Storage blob container @@ -45,8 +59,45 @@ PS C:\>New-AzRmStorageContainer -StorageAccount $accountObject -ContainerName "m This command creates a Storage blob container with Storage account object and container name, with public access as Blob. +### Example 3: Create a storage container with EncryptionScope setting +``` +PS C:\> $c = New-AzRmStorageContainer -ResourceGroupName "myResourceGroup" -AccountName "myStorageAccount" -Name testcontainer -DefaultEncryptionScope "testscope" -PreventEncryptionScopeOverride $true + +PS C:\> $c + + ResourceGroupName: myResourceGroup, StorageAccountName: myStorageAccount + +Name PublicAccess LastModified HasLegalHold HasImmutabilityPolicy +---- ------------ ------------ ------------ --------------------- +testcontainer False False + +PS C:\> $c.DefaultEncryptionScope +testscope + +PS C:\> $c.DenyEncryptionScopeOverride +True +``` + +This command creates a storage container with a defalt encryptionScope, and blocks override of encryption scope from the container default. +Then show the related container properties. + ## PARAMETERS +### -DefaultEncryptionScope +Default the container to use specified encryption scope for all writes. + +```yaml +Type: System.String +Parameter Sets: AccountNameEncryptionScope, AccountObjectEncryptionScope +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -DefaultProfile The credentials, account, tenant, and subscription used for communication with azure. @@ -92,6 +143,21 @@ Accept pipeline input: True (ByPropertyName, ByValue) Accept wildcard characters: False ``` +### -PreventEncryptionScopeOverride +Block override of encryption scope from the container default. + +```yaml +Type: System.Boolean +Parameter Sets: AccountNameEncryptionScope, AccountObjectEncryptionScope +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -PublicAccess Container PublicAccess @@ -113,7 +179,7 @@ Resource Group Name. ```yaml Type: System.String -Parameter Sets: AccountName +Parameter Sets: AccountName, AccountNameEncryptionScope Aliases: Required: True @@ -128,7 +194,7 @@ Storage account object ```yaml Type: Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount -Parameter Sets: AccountObject +Parameter Sets: AccountObject, AccountObjectEncryptionScope Aliases: Required: True @@ -143,7 +209,7 @@ Storage Account Name. ```yaml Type: System.String -Parameter Sets: AccountName +Parameter Sets: AccountName, AccountNameEncryptionScope Aliases: AccountName Required: True diff --git a/src/Storage/Storage.Management/help/New-AzStorageContainer.md b/src/Storage/Storage.Management/help/New-AzStorageContainer.md index f905e724f4ba..1378323cbc63 100644 --- a/src/Storage/Storage.Management/help/New-AzStorageContainer.md +++ b/src/Storage/Storage.Management/help/New-AzStorageContainer.md @@ -13,12 +13,21 @@ Creates an Azure storage container. ## SYNTAX +### ContainerName (Default) ``` New-AzStorageContainer [-Name] [[-Permission] ] [-Context ] [-ServerTimeoutPerRequest ] [-ClientTimeoutPerRequest ] [-DefaultProfile ] [-ConcurrentTaskCount ] [] ``` +### EncryptionScope +``` +New-AzStorageContainer [-Name] [[-Permission] ] + -DefaultEncryptionScope -PreventEncryptionScopeOverride [-Context ] + [-ServerTimeoutPerRequest ] [-ClientTimeoutPerRequest ] + [-DefaultProfile ] [-ConcurrentTaskCount ] [] +``` + ## DESCRIPTION The **New-AzStorageContainer** cmdlet creates an Azure storage container. @@ -39,6 +48,19 @@ PS C:\>"container1 container2 container3".split() | New-AzStorageContainer -Perm This example creates multiple storage containers. It uses the **Split** method of the .NET **String** class and then passes the names on the pipeline. +### Example 3: Create an Azure storage container with Encryption Scope +``` +PS C:\> $container = New-AzStorageContainer -Name "mycontainer" -DefaultEncryptionScope "myencryptscope" -PreventEncryptionScopeOverride $true + +PS C:\> $container.BlobContainerProperties.DefaultEncryptionScope +myencryptscope + +PS C:\> $container.BlobContainerProperties.PreventEncryptionScopeOverride +True +``` + +This command creates a storage container, with default Encryption Scope as myencryptscope, and prevert blob upload with different Encryption Scope to this container. + ## PARAMETERS ### -ClientTimeoutPerRequest @@ -92,6 +114,21 @@ Accept pipeline input: True (ByPropertyName, ByValue) Accept wildcard characters: False ``` +### -DefaultEncryptionScope +Default the container to use specified encryption scope for all writes. + +```yaml +Type: System.String +Parameter Sets: EncryptionScope +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -DefaultProfile The credentials, account, tenant, and subscription used for communication with Azure. @@ -150,6 +187,21 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PreventEncryptionScopeOverride +Block override of encryption scope from the container default. + +```yaml +Type: System.Boolean +Parameter Sets: EncryptionScope +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -ServerTimeoutPerRequest Specifies the service side time-out interval, in seconds, for a request. If the specified interval elapses before the service processes the request, the storage service returns an error. diff --git a/src/Storage/Storage.Management/help/New-AzStorageEncryptionScope.md b/src/Storage/Storage.Management/help/New-AzStorageEncryptionScope.md new file mode 100644 index 000000000000..b0296b9ab0e3 --- /dev/null +++ b/src/Storage/Storage.Management/help/New-AzStorageEncryptionScope.md @@ -0,0 +1,240 @@ +--- +external help file: Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll-Help.xml +Module Name: Az.Storage +online version: https://docs.microsoft.com/en-us/powershell/module/az.storage/new-azstorageencryptionscope +schema: 2.0.0 +--- + +# New-AzStorageEncryptionScope + +## SYNOPSIS +Creates an encryption scope for a Storage account. + +## SYNTAX + +### AccountName (Default) +``` +New-AzStorageEncryptionScope [-ResourceGroupName] [-StorageAccountName] + -EncryptionScopeName [-StorageEncryption] [-DefaultProfile ] [-WhatIf] + [-Confirm] [] +``` + +### AccountNameKeyVault +``` +New-AzStorageEncryptionScope [-ResourceGroupName] [-StorageAccountName] + -EncryptionScopeName [-KeyvaultEncryption] -KeyUri + [-DefaultProfile ] [-WhatIf] [-Confirm] [] +``` + +### AccountObject +``` +New-AzStorageEncryptionScope -StorageAccount -EncryptionScopeName + [-StorageEncryption] [-DefaultProfile ] [-WhatIf] [-Confirm] [] +``` + +### AccountObjectKeyVault +``` +New-AzStorageEncryptionScope -StorageAccount -EncryptionScopeName + [-KeyvaultEncryption] -KeyUri [-DefaultProfile ] [-WhatIf] [-Confirm] + [] +``` + +## DESCRIPTION +The **New-AzStorageEncryptionScope** cmdlet creates an encryption scope for a Storage account. + +## EXAMPLES + +### Example 1: Create an encryption scope with Storage Encryption +``` +PS C:\> New-AzStorageEncryptionScope -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" -EncryptionScopeName testscope -StorageEncryption + + ResourceGroupName: myresourcegroup, StorageAccountName: mystorageaccount + +Name State Source KeyVaultKeyUri +---- ----- ------ -------------- +testscope Enabled Microsoft.Storage +``` + +This command creates an encryption scope with Storage Encryption. + +### Example 2: Create an encryption scope with Keyvault Encryption +``` +PS C:\> New-AzStorageEncryptionScope -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" -EncryptionScopeName testscope -KeyvaultEncryption -KeyUri "https://keyvalutname.vault.azure.net:443/keys/keyname/34a0ba563b4243d9a0ef2b1d3c0c7d57" + + ResourceGroupName: myresourcegroup, StorageAccountName: mystorageaccount + +Name State Source KeyVaultKeyUri +---- ----- ------ -------------- +testscope Enabled Microsoft.Keyvault https://keyvalutname.vault.azure.net:443/keys/keyname/34a0ba563b4243d9a0ef2b1d3c0c7d57 +``` + +This command creates an encryption scope with Keyvault Encryption. +The Storage account Identity need have get,wrapkey,unwrapkey permissions to the keyvault key. + +## PARAMETERS + +### -DefaultProfile +The credentials, account, tenant, and subscription used for communication with Azure. + +```yaml +Type: Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer +Parameter Sets: (All) +Aliases: AzContext, AzureRmContext, AzureCredential + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -EncryptionScopeName +Azure Storage EncryptionScope name + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: Name + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -KeyUri +The key Uri + +```yaml +Type: System.String +Parameter Sets: AccountNameKeyVault, AccountObjectKeyVault +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -KeyvaultEncryption +Create encryption scope with keySource as Microsoft.Keyvault + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: AccountNameKeyVault, AccountObjectKeyVault +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ResourceGroupName +Resource Group Name. + +```yaml +Type: System.String +Parameter Sets: AccountName, AccountNameKeyVault +Aliases: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -StorageAccount +Storage account object + +```yaml +Type: Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount +Parameter Sets: AccountObject, AccountObjectKeyVault +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -StorageAccountName +Storage Account Name. + +```yaml +Type: System.String +Parameter Sets: AccountName, AccountNameKeyVault +Aliases: AccountName + +Required: True +Position: 1 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -StorageEncryption +Create encryption scope with keySource as Microsoft.Storage. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: AccountName, AccountObject +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Confirm +Prompts you for confirmation before running the cmdlet. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: cf + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -WhatIf +Shows what would happen if the cmdlet runs. +The cmdlet is not run. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: wi + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +### Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount + +## OUTPUTS + +### Microsoft.Azure.Commands.Management.Storage.Models.PSEncryptionScope + +## NOTES + +## RELATED LINKS diff --git a/src/Storage/Storage.Management/help/Set-AzStorageBlobContent.md b/src/Storage/Storage.Management/help/Set-AzStorageBlobContent.md index 9cd8b0f94e85..e40b510a8b6d 100644 --- a/src/Storage/Storage.Management/help/Set-AzStorageBlobContent.md +++ b/src/Storage/Storage.Management/help/Set-AzStorageBlobContent.md @@ -17,17 +17,18 @@ Uploads a local file to an Azure Storage blob. ``` Set-AzStorageBlobContent [-File] [-Container] [-Blob ] [-BlobType ] [-Properties ] [-Metadata ] [-PremiumPageBlobTier ] - [-StandardBlobTier ] [-Force] [-AsJob] [-Context ] [-ServerTimeoutPerRequest ] - [-ClientTimeoutPerRequest ] [-DefaultProfile ] [-ConcurrentTaskCount ] - [-WhatIf] [-Confirm] [] + [-StandardBlobTier ] [-EncryptionScope ] [-Force] [-AsJob] [-Context ] + [-ServerTimeoutPerRequest ] [-ClientTimeoutPerRequest ] + [-DefaultProfile ] [-ConcurrentTaskCount ] [-WhatIf] [-Confirm] + [] ``` ### ContainerPipeline ``` Set-AzStorageBlobContent [-File] [-Blob ] -CloudBlobContainer [-BlobType ] [-Properties ] [-Metadata ] - [-PremiumPageBlobTier ] [-StandardBlobTier ] [-Force] [-AsJob] - [-Context ] [-ServerTimeoutPerRequest ] [-ClientTimeoutPerRequest ] + [-PremiumPageBlobTier ] [-StandardBlobTier ] [-EncryptionScope ] [-Force] + [-AsJob] [-Context ] [-ServerTimeoutPerRequest ] [-ClientTimeoutPerRequest ] [-DefaultProfile ] [-ConcurrentTaskCount ] [-WhatIf] [-Confirm] [] ``` @@ -35,10 +36,10 @@ Set-AzStorageBlobContent [-File] [-Blob ] -CloudBlobContainer < ### BlobPipeline ``` Set-AzStorageBlobContent [-File] -CloudBlob [-BlobType ] [-Properties ] - [-Metadata ] [-PremiumPageBlobTier ] [-StandardBlobTier ] [-Force] - [-AsJob] [-Context ] [-ServerTimeoutPerRequest ] [-ClientTimeoutPerRequest ] - [-DefaultProfile ] [-ConcurrentTaskCount ] [-WhatIf] [-Confirm] - [] + [-Metadata ] [-PremiumPageBlobTier ] [-StandardBlobTier ] + [-EncryptionScope ] [-Force] [-AsJob] [-Context ] [-ServerTimeoutPerRequest ] + [-ClientTimeoutPerRequest ] [-DefaultProfile ] [-ConcurrentTaskCount ] + [-WhatIf] [-Confirm] [] ``` ## DESCRIPTION @@ -105,6 +106,16 @@ index.html BlockBlob 403116 text/html 20 This command uploads the file c:\temp\index.html to the container named contosouploads with specified blob properties, and set StandardBlobTier as Cool. This command gets ContentType value set to blob properties by [System.Web.MimeMapping]::GetMimeMapping() API. +### Example 7: Upload a file to a blob with Encryption Scope +``` +PS C:\> $blob = Set-AzStorageBlobContent -File "mylocalfile" -Container "mycontainer" -Blob "myblob" -EncryptionScope "myencryptscope" + +PS C:\> $blob.BlobProperties.EncryptionScope +myencryptscope +``` + +This command uploads a file to a blob with Encryption Scope. + ## PARAMETERS ### -AsJob @@ -276,6 +287,21 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -EncryptionScope +Encryption scope to be used when making requests to the blob. + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -File Specifies a local file path for a file to upload as blob content. diff --git a/src/Storage/Storage.Management/help/Update-AzStorageEncryptionScope.md b/src/Storage/Storage.Management/help/Update-AzStorageEncryptionScope.md new file mode 100644 index 000000000000..c30d693a1a4b --- /dev/null +++ b/src/Storage/Storage.Management/help/Update-AzStorageEncryptionScope.md @@ -0,0 +1,310 @@ +--- +external help file: Microsoft.Azure.PowerShell.Cmdlets.Storage.Management.dll-Help.xml +Module Name: Az.Storage +online version: https://docs.microsoft.com/en-us/powershell/module/az.storage/update-azstorageencryptionscope +schema: 2.0.0 +--- + +# Update-AzStorageEncryptionScope + +## SYNOPSIS +Modify an encryption scope for a Storage account. + +## SYNTAX + +### AccountName (Default) +``` +Update-AzStorageEncryptionScope [-ResourceGroupName] [-StorageAccountName] + -EncryptionScopeName [-StorageEncryption] [-State ] + [-DefaultProfile ] [-WhatIf] [-Confirm] [] +``` + +### AccountNameKeyVault +``` +Update-AzStorageEncryptionScope [-ResourceGroupName] [-StorageAccountName] + -EncryptionScopeName [-KeyvaultEncryption] -KeyUri [-State ] + [-DefaultProfile ] [-WhatIf] [-Confirm] [] +``` + +### AccountObject +``` +Update-AzStorageEncryptionScope -StorageAccount -EncryptionScopeName + [-StorageEncryption] [-State ] [-DefaultProfile ] [-WhatIf] [-Confirm] + [] +``` + +### AccountObjectKeyVault +``` +Update-AzStorageEncryptionScope -StorageAccount -EncryptionScopeName + [-KeyvaultEncryption] -KeyUri [-State ] [-DefaultProfile ] [-WhatIf] + [-Confirm] [] +``` + +### EncryptionScopeObject +``` +Update-AzStorageEncryptionScope -InputObject [-StorageEncryption] [-State ] + [-DefaultProfile ] [-WhatIf] [-Confirm] [] +``` + +### EncryptionScopeObjectKeyVault +``` +Update-AzStorageEncryptionScope -InputObject [-KeyvaultEncryption] -KeyUri + [-State ] [-DefaultProfile ] [-WhatIf] [-Confirm] [] +``` + +## DESCRIPTION +The **Update-AzStorageEncryptionScope** cmdlet modifies an encryption scope for a Storage account. + +## EXAMPLES + +### Example 1: Disable an encryption scope +``` +PS C:\> Update-AzStorageEncryptionScope -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" -EncryptionScopeName testscope -State Disabled + + ResourceGroupName: myresourcegroup, StorageAccountName: mystorageaccount + +Name State Source KeyVaultKeyUri +---- ----- ------ -------------- +testscope Disabled Microsoft.Storage +``` + +This command disables an encryption scope. + +### Example 2: Enable an encryption scope +``` +PS C:\> Update-AzStorageEncryptionScope -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" -EncryptionScopeName testscope -State Enabled + + ResourceGroupName: myresourcegroup, StorageAccountName: mystorageaccount + +Name State Source KeyVaultKeyUri +---- ----- ------ -------------- +testscope Enabled Microsoft.Storage +``` + +This command enables an encryption scope. + +### Example 3: Update an encryption scope to use Storage Encryption +``` +PS C:\> Update-AzStorageEncryptionScope -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" -EncryptionScopeName testscope -StorageEncryption + + ResourceGroupName: myresourcegroup, StorageAccountName: mystorageaccount + +Name State Source KeyVaultKeyUri +---- ----- ------ -------------- +testscope Enabled Microsoft.Storage +``` + +This command updates an encryption scope to use Storage Encryption. + +### Example 4: Update an encryption scope to use Keyvault Encryption +``` +PS C:\> Update-AzStorageEncryptionScope -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" -EncryptionScopeName testscope -KeyvaultEncryption -KeyUri "https://keyvalutname.vault.azure.net:443/keys/keyname/34a0ba563b4243d9a0ef2b1d3c0c7d57" + + ResourceGroupName: myresourcegroup, StorageAccountName: mystorageaccount + +Name State Source KeyVaultKeyUri +---- ----- ------ -------------- +testscope Enabled Microsoft.Keyvault https://keyvalutname.vault.azure.net:443/keys/keyname/34a0ba563b4243d9a0ef2b1d3c0c7d57 +``` + +This command updtaes an encryption scope to use Keyvault Encryption. +The Storage account Identity need have get,wrapkey,unwrapkey permissions to the keyvault key. + +## PARAMETERS + +### -DefaultProfile +The credentials, account, tenant, and subscription used for communication with Azure. + +```yaml +Type: Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer +Parameter Sets: (All) +Aliases: AzContext, AzureRmContext, AzureCredential + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -EncryptionScopeName +Azure Storage EncryptionScope name + +```yaml +Type: System.String +Parameter Sets: AccountName, AccountNameKeyVault, AccountObject, AccountObjectKeyVault +Aliases: Name + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -InputObject +EncryptionScope object + +```yaml +Type: Microsoft.Azure.Commands.Management.Storage.Models.PSEncryptionScope +Parameter Sets: EncryptionScopeObject, EncryptionScopeObjectKeyVault +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -KeyUri +The key Uri + +```yaml +Type: System.String +Parameter Sets: AccountNameKeyVault, AccountObjectKeyVault, EncryptionScopeObjectKeyVault +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -KeyvaultEncryption +Create encryption scope with keySource as Microsoft.Keyvault + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: AccountNameKeyVault, AccountObjectKeyVault, EncryptionScopeObjectKeyVault +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ResourceGroupName +Resource Group Name. + +```yaml +Type: System.String +Parameter Sets: AccountName, AccountNameKeyVault +Aliases: + +Required: True +Position: 0 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -State +Update encryption scope State, Possible values include: 'Enabled', 'Disabled'. + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: +Accepted values: Enabled, Disabled + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -StorageAccount +Storage account object + +```yaml +Type: Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount +Parameter Sets: AccountObject, AccountObjectKeyVault +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -StorageAccountName +Storage Account Name. + +```yaml +Type: System.String +Parameter Sets: AccountName, AccountNameKeyVault +Aliases: AccountName + +Required: True +Position: 1 +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -StorageEncryption +Create encryption scope with keySource as Microsoft.Storage. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: AccountName, AccountObject, EncryptionScopeObject +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Confirm +Prompts you for confirmation before running the cmdlet. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: cf + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -WhatIf +Shows what would happen if the cmdlet runs. +The cmdlet is not run. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: wi + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +### Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount + +## OUTPUTS + +### Microsoft.Azure.Commands.Management.Storage.Models.PSEncryptionScope + +## NOTES + +## RELATED LINKS diff --git a/src/Storage/Storage/Blob/Cmdlet/NewAzureStorageContainer.cs b/src/Storage/Storage/Blob/Cmdlet/NewAzureStorageContainer.cs index 9a37728a09f2..fd641a3ae770 100644 --- a/src/Storage/Storage/Blob/Cmdlet/NewAzureStorageContainer.cs +++ b/src/Storage/Storage/Blob/Cmdlet/NewAzureStorageContainer.cs @@ -22,14 +22,27 @@ namespace Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet using System.Management.Automation; using System.Security.Permissions; using System.Threading.Tasks; + using global::Azure.Storage.Blobs; + using global::Azure.Storage.Blobs.Models; + using global::Azure; /// /// create a new azure container /// - [Cmdlet("New", Azure.Commands.ResourceManager.Common.AzureRMConstants.AzurePrefix + "StorageContainer"),OutputType(typeof(AzureStorageContainer))] + [Cmdlet("New", Azure.Commands.ResourceManager.Common.AzureRMConstants.AzurePrefix + "StorageContainer", DefaultParameterSetName = ContainerNameParameterSet),OutputType(typeof(AzureStorageContainer))] [Alias("New-" + Azure.Commands.ResourceManager.Common.AzureRMConstants.AzurePrefix + "DatalakeGen2FileSystem")] public class NewAzureStorageContainerCommand : StorageCloudBlobCmdletBase { + /// + /// Container Name parameter + /// + private const string ContainerNameParameterSet = "ContainerName"; + + /// + /// Container create with EncryptionScope parameter + /// + private const string EncryptionScopeParameterSet = "EncryptionScope"; + [Alias("N", "Container")] [Parameter(Position = 0, Mandatory = true, HelpMessage = "Container name", ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)] @@ -47,6 +60,29 @@ public BlobContainerPublicAccessType? Permission } private BlobContainerPublicAccessType accessLevel = BlobContainerPublicAccessType.Off; + [Parameter(HelpMessage = "Default the container to use specified encryption scope for all writes.", + Mandatory = true, + ParameterSetName = EncryptionScopeParameterSet)] + [ValidateNotNullOrEmpty] + public string DefaultEncryptionScope { get; set; } + + [Parameter(HelpMessage = "Prevent override of encryption scope from the container default.", + Mandatory = true, + ParameterSetName = EncryptionScopeParameterSet)] + [ValidateNotNullOrEmpty] + public bool PreventEncryptionScopeOverride + { + get + { + return preventEncryptionScopeOverride is null ? false : preventEncryptionScopeOverride.Value; + } + set + { + preventEncryptionScopeOverride = value; + } + } + private bool? preventEncryptionScopeOverride; + /// /// Initializes a new instance of the NewAzureStorageContainerCommand class. /// @@ -77,18 +113,37 @@ internal async Task CreateAzureContainer(long taskId, IStorageBlobManagement loc BlobRequestOptions requestOptions = RequestOptions; CloudBlobContainer container = localChannel.GetContainerReference(name); + BlobContainerClient containerClient = AzureStorageContainer.GetTrack2BlobContainerClient(container, localChannel.StorageContext); - BlobContainerPermissions permissions = new BlobContainerPermissions(); - - permissions.PublicAccess = accesslevel; + PublicAccessType containerPublicAccess = PublicAccessType.None; + if (accesslevel == BlobContainerPublicAccessType.Blob) + { + containerPublicAccess = PublicAccessType.Blob; + } + else if (accesslevel == BlobContainerPublicAccessType.Container) + { + containerPublicAccess = PublicAccessType.BlobContainer; + } - bool created = await localChannel.CreateContainerIfNotExistsAsync(container, permissions.PublicAccess, requestOptions, OperationContext, CmdletCancellationToken).ConfigureAwait(false); + global::Azure.Storage.Blobs.Models.BlobContainerEncryptionScopeOptions encryptionScopeOption = null; + if (this.DefaultEncryptionScope != null) + { + encryptionScopeOption = new global::Azure.Storage.Blobs.Models.BlobContainerEncryptionScopeOptions() + { + // parameterset can ensure the 2 parameters must be set together. + DefaultEncryptionScope = this.DefaultEncryptionScope, + PreventEncryptionScopeOverride = this.preventEncryptionScopeOverride.Value + }; + } - if (!created) + Response responds = await containerClient.CreateIfNotExistsAsync(containerPublicAccess, null, encryptionScopeOption, CmdletCancellationToken).ConfigureAwait(false); + if (responds == null || responds.Value == null) // Container already exist so not created again { throw new ResourceAlreadyExistException(String.Format(Resources.ContainerAlreadyExists, name)); } + BlobContainerPermissions permissions = new BlobContainerPermissions() { PublicAccess = accesslevel }; + container.FetchAttributes(); WriteCloudContainerObject(taskId, localChannel, container, permissions); } diff --git a/src/Storage/Storage/Blob/Cmdlet/SetAzureStorageBlobContent.cs b/src/Storage/Storage/Blob/Cmdlet/SetAzureStorageBlobContent.cs index 1a6fffa2181a..f571e26527b3 100644 --- a/src/Storage/Storage/Blob/Cmdlet/SetAzureStorageBlobContent.cs +++ b/src/Storage/Storage/Blob/Cmdlet/SetAzureStorageBlobContent.cs @@ -43,7 +43,7 @@ namespace Microsoft.WindowsAzure.Commands.Storage.Blob /// /// download blob from azure /// - [Cmdlet("Set", Azure.Commands.ResourceManager.Common.AzureRMConstants.AzurePrefix + "StorageBlobContent", SupportsShouldProcess = true, DefaultParameterSetName = ManualParameterSet),OutputType(typeof(AzureStorageBlob))] + [Cmdlet("Set", Azure.Commands.ResourceManager.Common.AzureRMConstants.AzurePrefix + "StorageBlobContent", SupportsShouldProcess = true, DefaultParameterSetName = ManualParameterSet), OutputType(typeof(AzureStorageBlob))] public class SetAzureBlobContentCommand : StorageDataMovementCmdletBase { /// @@ -202,8 +202,22 @@ public string StandardBlobTier } private StandardBlobTier? standardBlobTier = null; + [Parameter(HelpMessage = "Encryption scope to be used when making requests to the blob.", + Mandatory = false)] + [ValidateNotNullOrEmpty] + public string EncryptionScope { get; set; } + private BlobUploadRequestQueue UploadRequests = new BlobUploadRequestQueue(); - + + protected override bool UseTrack2Sdk() + { + if (!string.IsNullOrEmpty(EncryptionScope)) + { + return true; + } + return false; + } + /// /// Initializes a new instance of the SetAzureBlobContentCommand class. /// @@ -376,13 +390,13 @@ protected override void DoEndProcessing() } else { - taskGenerator = (taskId) => UploadBlobwithSdk(taskId, localChannel, uploadRequest.Item1, uploadRequest.Item2); + taskGenerator = (taskId) => UploadBlobwithSdk(taskId, localChannel, uploadRequest.Item1, uploadRequest.Item2); } RunTask(taskGenerator); } base.DoEndProcessing(); - } + } /// /// set blob AccessTier @@ -396,7 +410,7 @@ private async Task SetBlobTier(IStorageBlobManagement localChannel, StorageBlob. { return; } - + StorageBlob.BlobRequestOptions requestOptions = RequestOptions; // The Blob Type and Blob Tier must match, since already checked they are match at the begin of ExecuteCmdlet(). @@ -416,7 +430,14 @@ private async Task SetBlobTier(IStorageBlobManagement localChannel, StorageBlob. /// internal virtual async Task UploadBlobwithSdk(long taskId, IStorageBlobManagement localChannel, string filePath, StorageBlob.CloudBlob blob) { - BlobClientOptions options = null; + BlobClientOptions options = this.ClientOptions; + if (!string.IsNullOrEmpty(this.EncryptionScope)) + { + options = new BlobClientOptions() + { + EncryptionScope = this.EncryptionScope, + }; + } if (this.Force.IsPresent || !blob.Exists() @@ -445,15 +466,16 @@ internal virtual async Task UploadBlobwithSdk(long taskId, IStorageBlobManagemen } }); + BlobBaseClient outputBlobClient = null; using (FileStream stream = System.IO.File.OpenRead(ResolvedFileName)) { //block blob if (string.Equals(blobType, BlockBlobType, StringComparison.InvariantCultureIgnoreCase)) { BlobClient blobClient = GetTrack2BlobClient(blob, localChannel.StorageContext, options); + outputBlobClient = blobClient; StorageTransferOptions trasnferOption = new StorageTransferOptions() { MaximumConcurrency = this.GetCmdletConcurrency() }; BlobUploadOptions uploadOptions = new BlobUploadOptions(); - uploadOptions.Metadata = metadata; uploadOptions.HttpHeaders = blobHttpHeaders; uploadOptions.Conditions = this.BlobRequestConditions; @@ -478,8 +500,8 @@ internal virtual async Task UploadBlobwithSdk(long taskId, IStorageBlobManagemen throw new ArgumentException(String.Format("File size {0} Bytes is invalid for PageBlob, must be a multiple of 512 bytes.", fileSize.ToString())); } pageblobClient = GetTrack2PageBlobClient(blob, localChannel.StorageContext, options); + outputBlobClient = pageblobClient; PageBlobCreateOptions createOptions = new PageBlobCreateOptions(); - createOptions.Metadata = metadata; createOptions.HttpHeaders = blobHttpHeaders; createOptions.Conditions = this.PageBlobRequestConditions; @@ -488,8 +510,8 @@ internal virtual async Task UploadBlobwithSdk(long taskId, IStorageBlobManagemen else //append { appendblobClient = GetTrack2AppendBlobClient(blob, localChannel.StorageContext, options); + outputBlobClient = appendblobClient; AppendBlobCreateOptions createOptions = new AppendBlobCreateOptions(); - createOptions.Metadata = metadata; createOptions.HttpHeaders = blobHttpHeaders; createOptions.Conditions = this.AppendBlobRequestConditions; @@ -558,8 +580,8 @@ internal virtual async Task UploadBlobwithSdk(long taskId, IStorageBlobManagemen BlobName)); } } - - WriteCloudBlobObject(taskId, localChannel, blob); + AzureStorageBlob outputBlob = new AzureStorageBlob(outputBlobClient, localChannel.StorageContext, null, ClientOptions); + OutputStream.WriteObject(taskId, outputBlob); } } @@ -643,7 +665,7 @@ public override void ExecuteCmdlet() { type = StorageBlob.BlobType.PageBlob; } - else + else { type = StorageBlob.BlobType.Unspecified; }