Найти неиспользуемую учетную запись хранения Azure ARM

Я достиг 250 учетных записей хранения для моей подписки. Учетные записи хранения были созданы с использованием ARM

Мне нужен способ найти неиспользуемые учетные записи хранения и удалить их. В основном я хочу найти учетные записи хранения с контейнерами, к которым не было доступа в течение 90 дней, и выполнить очистку.

Есть ли способ проверить время последнего доступа или лучший способ очистить с помощью PowerShell или, предпочтительно, лазурного cli

Спасибо


person Kay    schedule 05.10.2020    source источник


Ответы (1)


Что вы можете сделать, так это получить самый последний измененный контейнер из свойства LastModified, а затем проверить, меньше ли эта отметка времени, чем текущая дата минус 90 дней. Нам нужно будет проверить свойства LastModified как на уровне контейнера, так и на уровне больших двоичных объектов.

# Set current context to subscription
Set-AzContext -SubscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# Go through every storage account in your subscription
foreach ($storageAccount in Get-AzStorageAccount) {
    $storageAccountName = $storageAccount.StorageAccountName
    $resourceGroupName = $storageAccount.ResourceGroupName

    # Get key1 storage account key
    $storageAccountKey = (Get-AzStorageAccountKey -Name $storageAccountName -ResourceGroupName $resourceGroupName).Value[0]

    # Create storage account context using above key
    $context = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey

    # fetch all containers
    $containers = Get-AzStorageContainer -Context $context

    $deleteStorageAccount = $false
    foreach ($container in $containers) {

        # First check if container has been modified
        if ($container.LastModified.DateTime -lt (Get-Date).AddDays(-90)) {
            $deleteStorageAccount = $true
            break
        }

        # Get all blobs from container, including deleted blobs
        $blobs = Get-AzStorageBlob -Container $container.Name -Context $context -IncludeDeleted

        # Then check each blob in container
        foreach ($blob in $blobs) {
            if ($blob.LastModified.DateTime -lt (Get-Date).AddDays(-90)) {
                $deleteStorageAccount = $true
                break
            }
        }
    }

    # If this flag is set, storage account has been acccessed in last 90 days
    if ($deleteStorageAccount) {
        Remove-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Force -WhatIf
    }
}

Поскольку это действие может быть чрезвычайно опасным, вы можете запустить Remove-AzStorageAccount с -WhatIf, чтобы увидеть, какие учетные записи хранения будут удалены, прежде чем удалять их на самом деле.

person RoadRunner    schedule 05.10.2020
comment
Это не очень хорошее решение, потому что свойство контейнера LastModified указывает только на изменение контейнера, но не на капли внутри контейнера. Для этого вам нужно просмотреть каждое свойство blob LastModified в каждом контейнере. - person Oleh Tarasenko; 25.03.2021
comment
@OlehTarasenko Очень хорошее замечание, я обновил свой ответ, включив проверку каждой капли. Здесь, вероятно, лучше всего проверить уровень контейнера и BLOB-объекта LastModified. - person RoadRunner; 25.03.2021
comment
Кроме того, поскольку поиск каждого большого двоичного объекта может занять много времени, здесь, вероятно, также потребуется некоторая параллельная обработка. - person RoadRunner; 25.03.2021