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 잠금을 추가합니다. 이 잠금은 계정의 제어 평면 삭제를 제한하지만, 모든 데이터 삭제나 잠금 해제 권한을 가진 사용자의 작업을 막는 보장은 아닙니다.

참조