Beta - 削除保護の確認が必要な Azure ストレージアカウント

Azure ストレージアカウントの既存のロックと継承されたロックを確認し、必要な範囲に削除保護を適用します。

説明

Azure の管理ロックは、削除権限を持つユーザーによる操作も含め、ストレージアカウントの誤削除を防ぐための仕組みです。Terraform では、azurerm_storage_account を含むスコープに azurerm_management_lock を設定し、lock_level を CanNotDelete にすると削除を制限できます。

ロックはリソースグループやサブスクリプションから継承されることがあり、ReadOnly ロックも削除を防ぎます。管理ロックが制限するのはコントロールプレーンの操作です。Blob の内容を削除するようなデータプレーンの操作への対策とは区別してください。

想定される影響

  • 実際に削除保護がなければ、権限を持つユーザーの誤操作や意図的な操作でアカウントが削除される可能性があります。
  • アカウントの削除により、アプリケーション、ログ収集、バックアップ処理が停止するおそれがあります。
  • ロックの適用範囲を誤解すると、アカウント内のデータも保護されていると判断してしまう可能性があります。

対処方法

  • まず、ストレージアカウント、親リソースグループ、サブスクリプションに設定されたロックを確認してください。
  • 削除保護が必要で、適用されるロックがなければ、適切なスコープに CanNotDelete 管理ロックを設定してください。変更の制限も必要で意図して設定した ReadOnly ロックは、その目的に合わせて維持してください。
  • ロックを管理できるユーザーと解除手順を見直してください。データ自体には、復旧機能やアクセス制御を別途適用します。

例

以下はロックの有無を比較する抜粋です。完全な Terraform 構成に必要な resource_group_name などは省略しています。上位スコープに既存のロックがないかも、別途確認してください。

変更前

hcl
resource "azurerm_storage_account" "example" {
  name                     = "examplestorageacct"
  location                 = azurerm_resource_group.example.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

変更後

hcl
resource "azurerm_storage_account" "example" {
  name                     = "examplestorageacct"
  location                 = azurerm_resource_group.example.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

resource "azurerm_management_lock" "storage_delete_lock" {
  name       = "storage-delete-lock"
  scope      = azurerm_storage_account.example.id
  lock_level = "CanNotDelete"
  notes      = "Prevent accidental deletion of the storage account"
}

説明:

  • 変更前: この抜粋には、ストレージアカウントの管理ロックが定義されていません。
  • 変更後: アカウントのスコープに CanNotDelete ロックを追加しています。アカウントのコントロールプレーン経由の削除は制限しますが、すべてのデータ削除や、ロックを解除する権限を持つユーザーの操作まで防ぐ保証はありません。

参考資料