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