如何在Azure中删除带有审核日志的租用容器?

时间:2019-01-08 11:29:15

标签: azure azure-storage azure-storage-blobs immutability delete-file

这里有一些关于Stackoverflow的问题,但是所有这些都是由于虚拟机及其磁盘而导致的租约。答案是首先删除磁盘,以便能够删除存储帐户/容器。

示例:How do I delete an Azure storage account containing a leased blob?

我的问题是我有一个使用租用容器的自定义审核日志(我们不希望任何人对日志进行操作。)。但是我们将这些日志移到了其他地方,所以现在我想删除旧资源。但由于租约锁定而无法使用。

这很可能是由于我不了解租赁的工作方式。 我的第一个尝试是打破租约并解锁。.已完成:

enter image description here

我的假设是我现在可以删除资源,但是仍然会收到错误消息:

”无法从1个容器中删除1个: auditlog-container:ContainerProtectedFromDeletion:由于ImmutabilityPolicy,可以保护存储帐户stgutauditlog容器auditlog-container免受删除。”

因此,我在查看此ImmutablePolicy时尝试了Blob Containers - Delete Immutability Policy,但收到了错误消息:

{
  "error": {
    "code": "ContainerImmutabilityPolicyFailure",
    "message": "Operation not allowed on immutability policy with incorrect etag."
  }
}

查看eTag,您应该在If-Match标头中设置eTag版本(仅与eTag相关的参数)。但是我尝试添加eTag,尝试了*和其他但仍然相同的消息。

尝试使用Blob Containers - Get Immutability Policy命令尝试获取eTag我只能得到所有已提供的eTag,等等

{
  "id": "/subscriptions/<removed>/resourceGroups/<removed>/providers/Microsoft.Storage/storageAccounts/<removed>/blobServices/default/containers/auditlog-container/immutabilityPolicies/default",
  "name": "default",
  "type": "Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies",
  "etag": "\"<removed>\"",
  "properties": {
    "immutabilityPeriodSinceCreationInDays": 8,
    "state": "Locked"
  }
}

(已删除了上面代码中标记为已删除的一些安全信息)

这里说锁定了...但是我该如何删除该锁定呢?

也无法删除其中的文件,这些选项显示为灰色:

enter image description here

我不知道下一步该怎么做或我错过了什么。如何删除该存储帐户/容器?

有任何帮助!

2 个答案:

答案 0 :(得分:1)

@Swippen,我尝试重现该场景,并在尝试使用Powershell和Storage Explorer删除容器时遇到以下错误,其中不可变策略处于锁定状态。 policy1 policy 但是,当我尝试使用门户网站删除同一容器时。它已成功删除并为我工作,您能否尝试一次使用门户删除容器。 policy3

注意:-不允许删除锁定的不变性策略,唯一的方法是在删除容器内的所有blob之后删除容器。

答案 1 :(得分:0)

如果租约状态可用,我建议您尝试使用下面的Power Shell脚本删除特定的容器。看看这是否对您有帮助。

Login-AzureRmAccount
Set-AzureRmContext -SubscriptionID "yoursubscription id"
$ResourceGroupName = "your resourcegroup name"
$StorageAccountName = "your storage account name"
$StorageContainerNames = "container1, container2"

try{

## Get Storage Details
Write-Output ("Get Storage Account $StorageAccountName Keys")
$Keys = Get-AzureRmStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $StorageAccountName;

Write-Output ("Get Storage Account $StorageAccountName Context")
$StorageContext = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $Keys[0].Value;

## Proccess Each Container
$StorageContainerNames.Split(",") | ForEach {       

    $currentContainer = $_

    Write-Output ("Start Remove for Container $currentContainer")

    ## Remove Container
    if ((Get-AzureStorageContainer -Context $StorageContext | Where-Object { $_.Name -eq $currentContainer })){           

        ## Remove a Blob Container in the Storage Account
        Write-Output ("Removing Container: $currentContainer")
        Remove-AzureStorageContainer -Context $StorageContext -Name $currentContainer -Force;
        Write-Output ("Container $currentContainer Removed")           

    }
    else {

        Write-Warning "Container $currentContainer doesn't exists."

    }
}
}catch {

Write-Error "$_.Exception.Message"

}