您是否曾經不小心刪除資料?不幸的是,許多人都有過這樣的經歷,因此大多數個人電腦操作系統都有一個垃圾桶,可以讓您復原檔案。在企業方面,這些意外刪除的規模可能就大得多了——有時涉及數百萬甚至數十億個對象。此外還存在有人未經授權存取您的資料,並進行勒索攻擊,試圖扣押或者刪除資料的可能!

Google Cloud 最近推出了 Cloud Storage 的軟刪除功能,這是一個重要的全新資料保護功能,與所有現有 Cloud Storage 功能和工作負載相容。它以企業規模,透過為您提供保留和恢復最近刪除資料的方法,來提高對意外和惡意資料刪除的保護。有了軟刪除,您可能會發現您的組織在整理舊資料時效率更高,因為軟刪除還在出現錯誤時提供了撤銷機制。

在這篇文章中,我們為您提供了優化軟刪除設置所需的工具和見解,即使是在大規模下,這樣您就能根據資料的業務重要性來保護資料。

軟刪除如何運作?如何收費?

啟用軟刪除後,被刪除的物件將在設置在該 bucket 上的軟刪除保留期內,保持在隱藏的軟刪除狀態,而不是被永久刪除。如果您需要恢復任何軟刪除的物件,只需運行恢復操作,它們就會被複製回活躍狀態。
我們為所有現有 bucket 啟用了七天的軟刪除保留期,並將其設為新建立 bucket 的預設值。預設啟用軟刪除是因為意外刪除事件過於常見,而儲存在 Cloud Storage 中的大部分資料都是業務關鍵的。此外,您可以選擇7到90天之間的任何天數,也可以完全禁用該功能。

軟刪除的使用會根據最近刪除物件的儲存類別進行收費。在許多情況下,這只會使費用增加幾個百分點,這代表軟刪除提供保護的良好價值。然而,對於包含大量短期(頻繁刪除)資料的 bucket,啟用軟刪除可能會導致費用大幅增加,因為一個物價在一小時後被刪除,會按照物件活躍的一小時加上七天的軟刪除使用進行計費。

您的資料有多重要?

為了使軟刪除在經濟影響最小的情況下保護您免受資料刪除風險,我們建議您問自己以下三個問題:

  1. 我組織的資料有多重要?我們是否儲存了可以輕易重新生成的臨時物件或媒體轉碼?在這些情況下,軟刪除保護不太可能值得。我們儲存的資料丟失會使業務或客戶關係處於風險之中嗎?如果會,軟刪除可能提供了重要的保護。
  2. 我們目前擁有什麼樣的資料保護?如果 Cloud Storage 是您業務關鍵資料的唯一副本,那麼軟刪除保護就比您在另一個 Google Cloud 區域、地端或其他雲端供應商上儲存所有資料的長期備份重要得多。
  3. 我們能夠承擔多少資料保護成本?軟刪除可以比傳統的企業備份便宜得多,但仍然會對帳單產生重大影響,主要取決於您的刪除率。我們建議要考慮軟刪除的成本相對於您的整體 Google Cloud 費用,而不是僅僅是儲存,因為它保護了您的業務資料,這些資料是您整體工作負載所依賴的。您可能會發現,對所有 bucket 保持啟用軟刪除只會對您的雲端帳單產生個位數百分比的影響,這也許值得,因為它提供了對意外和惡意刪除事件的保護。

一旦您對在哪裡以及使用多少軟刪除有了一個良好的概念,下一步就取決於您的架構選擇和組織雲端存在的總體複雜性。接下來,我們將介紹如何評估軟刪除的影響,並根據這些資訊採取行動,首先是 bucket 級別的指標,然後是在專案內對 bucket 級別設置採取行動、使用Terraform 進行管理,最後是組織級別的管理方法。

評估 bucket 級別的影響

您可以使用 Cloud Monitoring 指標來估算 bucket 級別的軟刪除成本,並使用指標探索器(Metrics Explorer)將其視覺化。您可能希望檢查一些代表不同類型資料集的 bucket,以更好地了解哪些 bucket 的保護成本更高。

儲存指標
最近,我們引入了新的儲存指標,允許您按儲存類別分解物件數量、字節數和字節秒數,然後進一步按活躍狀態、非當前狀態、軟刪除狀態和多部分狀態分解。即使超出您可能想要執行的任何軟刪除分析,這些分解也非常有用。此外,您現在可以使用新的 deleted_bytes 指標來檢查刪除率:
storage/v2/deleted_bytes 指標是每個 bucket 已刪除字節的增量計數,按儲存類別分組。即使軟刪除被禁用或設置為不同的保留期,也可以用它來估算軟刪除的計費影響。

軟刪除的絕對成本可以按公式計算:軟刪除保留期 × 刪除字節數 × 儲存價格。舉例來說,啟用7天軟刪除策略並在一個月內刪除100,000 GB的成本為:(7 / 30.4375天) × 100,000 GB × $0.02/GB月 = $459.96(其中30.4375是每月的平均天數)。

軟刪除的相對成本也可以透過將 storage/v2/deleted_bytes 指標與現有的 storage/v2/total_byte_seconds 指標進行比較來計算:軟刪除保留期 × 刪除字節數 / 總字節數。延續上述範例,假設一個月內儲存1,000,000 GB-月,啟用軟刪除的相對成本為:(7 / 30.4375天) × 100,000 GB / 1,000,000 GB = 2.3%影響。

指標探索器 (Metrics Explorer)

您可以使用指標探索器建立圖表,以視覺化方式呈現特定儲存貯體的預估軟刪除費用:

  1. 在 Google Cloud 控制台的導航面板中,選擇 Monitoring,再選擇 Metrics explorer。
  2. 確認在語言切換中選擇了MQL
  3. 在查詢編輯器中輸入以下查詢:
{
fetch gcs_bucket :: storage.googleapis.com/storage/v2/deleted_bytes
| value val(0) * 604800.0’s’
| group_by [resource.bucket_name, metric.storage_class], window(), .sum;
fetch gcs_bucket :: storage.googleapis.com/storage/v2/total_byte_seconds
| filter metric.type != ‘soft-deleted-object’
| group_by [resource.bucket_name, metric.storage_class], window(1d), .mean
| group_by [resource.bucket_name, metric.storage_class], window(), .sum
}
| every 30d
| within 360d
| ratio

注意:此查詢假設7天(604,800秒)的軟刪除窗口。

在專案內採取行動

如果您是儲存管理員,負責專案內軟刪除設置的決策,您可能希望手動查看 bucket 列表,根據業務知識決定哪些應該受到保護、哪些可以不用軟刪除。對於大量 bucket,您可能會選擇使用上述指標生成超過計費影響臨界點(例如20%影響)的 bucket 列表,然後在這些 bucket 上禁用軟刪除。

為此,我們在 Github 上發布了一個軟刪除計費影響 Python 腳本,該腳本會產生專案中超過您指定計費影響百分比的 bucket 列表,同時考慮 bucket 內物件的儲存類別。該腳本還可以根據指定的相對成本臨界點更新軟刪除策略。

我們建議您使用 Google Cloud CLI 配置專案內一個或多個 bucket 的軟刪除設置。安裝並登入後,以下 gcloud storage 指令是您可能需要採取的操作範例,用於在指定專案內啟用、更新或禁用軟刪除策略:

# Set your project ID
$ gcloud config set project $MY_PROJECT_ID# Disable Soft Delete on one bucket
$ gcloud storage buckets update –clear-soft-delete gs://example-bucket# Disable Soft Delete on a list of buckets
$ cat buckets.txt | gcloud storage buckets update -I –clear-soft-delete# Disable Soft Delete on all buckets in the project
$ gcloud storage buckets update –clear-soft-delete gs://*# Enable Soft Delete on one bucket
$ gcloud storage buckets update –soft-delete-duration=7d gs://example-bucket

# Enable Soft Delete on a list of buckets
$ cat buckets.txt | gcloud storage buckets update -I –soft-delete-duration=7d

# Enable Soft Delete on all buckets in the project with a 14-day retention duration
$ gcloud storage buckets update –soft-delete-duration=14d gs://*

使用 Terraform 採取行動

如果您使用 Terraform 這樣的協作層(Orchestration Layer),適應軟刪除應該就像更新模板並為每個工作負載決定軟刪除保留期一樣簡單。這可能還包括為短期資料創建新模板,以便為從這些模板創建的 bucket 禁用軟刪除。一旦您定義了設置,Terraform 可以更新現有 bucket 以符合模板,並使用您預期的設置創建新 bucket。使用 Terraform,主要需要做的是更新模板以包含軟刪除策略。以下是在 google_storage_bucket 資源中設置軟刪除保留期為七天(604,800秒)的範例:

resource “google_storage_bucket” “bucket” {
name = “example-bucket”
location = “US”

soft_delete_policy {
retention_duration_seconds = 604800
}

}

若要禁用軟刪除,只需設定 retention_duration_seconds = 0

在大型組織中採取行動

如果您為擁有數千個專案和數百萬個 bucket 的大型企業工作,並且大多數情況下不使用協作層(Orchestration Layer),那麼手動方法並不實際,您將需要大規模地做出決策。如果是這種情況,我們建議您首先了解 bucket 級別的指標以及如何在專案內採取行動,如前所述。在本節中,我們將這些技術擴展到組織級別。我們假設您已經安裝了最新版本的 gcloud CLI,這在本節中會用到。

要在即使是最複雜的組織中實施政策,您可能需要使用 gcloud 指令列環境分三步進行:

  1. 獲取許可權:確保您可以列出和更改整個組織的 bucket 級別設置
  2. 評估:決定一個影響臨界點,超過該臨界點您將禁用軟刪除,並取得超過該臨界點的 bucket 列表
  3. 採取行動:在該 bucket 列表上禁用軟刪除

獲取許可權

在您做任何事情之前,需要確定一個擁有足夠存取許可權,以分析和更改整個組織 bucket 級別配置的人。這可能是一個現有的組織管理員。或者,組織管理員可以創建一個自定義角色並將其分配給您或另一位管理員,專門管理軟刪除設置:

gcloud iam roles create storageBucketsUpdate \
–organization=example-organization-id-1 \
–title=”Storage bucket update” \
–description=”Grants permission to get, list, and update Storage buckets.” \
–stage=GA \
–permissions=”storage.buckets.get,storage.buckets.list,storage.buckets.update”gcloud organization add-iam-policy-binding example-organization-id-1 \
–member=’user:test-user@example.com’ \
–role=’storageBucketsUpdate’ \
–condition=’expression=request.time < timestamp(“2024-07-01T00:00:00Z”),\
title=expires_2024_07_01,\
description=Expires at midnight on 2024-07-01′

注意,一旦所有工作完成並且您的 bucket 都已更新,如果不再需要持續存取這些設置的角色,組織管理員可以安全地刪除此自定義角色:

gcloud iam roles delete storageBucketsUpdate –organization=example-organization-id-1

評估

有了在整個組織中操作 bucket 級別配置的權限,您可以應用專案級別分析,獲取超過您選擇的影響臨界點的所有 bucket 列表。或者,您可以選擇在組織中的所有 bucket 上應用統一設置,如 0d 或 14d。

採取行動

要更新所有專案中所有 bucket 的軟刪除策略,您可以迭代所有專案,對每個專案中的 bucket 進行適當更改。例如,以下指令會禁用整個組織中所有 bucket 的軟刪除:

gcloud projects list –format=”value(projectId)” | while read project
do
gcloud storage buckets update –project=$project –clear-soft-delete gs://*
done

或者,您可以使用 projects list 的 filter 選項只針對您專案的一部進行操作。例如,您可能希望更新具有特定標籤(–filter=”labels.environment:prod”)或具有某個父項(–filter=”parent.id:123456789″)的專案。

作為最佳實踐,我們建議您考慮用一個指令替換上述每個專案的操作,該指令有選擇性地禁用特定 bucket ID 的軟刪除。例如,您可以迭代您的專案列表,為每個專案運行軟刪除計費影響 Python 腳本,根據您選擇的影響臨界點%更新 bucket 設置,從而獲得更具針對性的結果。

本文翻譯並改寫自 Google Cloud 官方部落格。希望大家都有透過宏庭科技這篇文章對使用軟刪除保護業務關鍵資料,同時將計費影響最小化更有信心!我們期待能持續將最熱門、最前線的話題帶到您面前。