Globally unique resources that provide access to data management services and serve as the parent namespace for the services.
Hi @NateS-5294 , This is all fixable yourself and doesn't need Microsoft. The reason it looks impossible is that the rule you're hitting has nothing to do with legal holds or immutability policies, which is exactly why you can't find any.
Once version-level immutability support is turned on, containers and accounts have to be empty before they can be deleted, whether or not anything is actually under retention. The docs say it twice, once for containers and once for accounts. From Configure immutability policies for blob versions:
"If version-level immutability support is enabled for a container and the container contains one or more blobs, then you must delete all blobs in the container before you can delete the container, even if there are no immutability policies in effect for the container or its blobs."
"If version-level immutability support is enabled for the storage account and the account contains one or more containers, then you must delete all containers before you delete the storage account, even if there are no immutability policies in effect for the account or containers."
The bit that matters in both is "even if there are no immutability policies in effect". Your hasImmutabilityPolicy: false and hasLegalHold: false readings are correct, they just don't help you. There's no expiry date to wait for here either. Nothing is actually under retention, so nothing is going to lapse on its own. It stays blocked until you empty the containers yourself.
And the reason you can't switch the setting off, from the same page:
"Version-level immutability cannot be disabled after it is enabled on the storage account, although unlocked policies can be deleted."
So it's a one way door, which is what PropertyIsImmutable is telling you.
Working order is a single pass over every version, including the current ones, deleting each by version ID. Then the containers, then the account.
Versions are where this gets tedious, and you've already noticed most of what's in there are versions rather than current blobs. Deleting a blob doesn't take its previous versions with it, so you'll need to enumerate them and delete each one by ID. Something like az storage blob list --include v to enumerate, paging past that 5,000 marker you hit, then az storage blob delete --version-id <id> for each. Snapshots are separate again, so --delete-snapshots include on the blob deletes.
Worth checking that syntax against the CLI reference before you script it against 5,000 objects. I'm going from memory on the flags.
As for whether they'll actually go: the docs say a previous version can be deleted, and that it's a time-based retention policy that prevents it. Yours show expiryTime null and policyMode null, so there's nothing in effect and they should delete fine. If a particular version refuses, that one has a policy on it, and if the policy is unlocked you can delete it on that version first.
Help make this community better for everyone: if this answer resolved your issue, please accept it or leave an upvote. If not, share more details in a comment so we can continue the discussion and find the right solution.