華為雲 OBS 上傳技能
總覽
將本機檔案或目錄上傳至華為雲 OBS 儲存桶,列出儲存桶及其容量與物件數量,並透過 crontab 設定排程週期上傳。上傳操作使用 obsutil;儲存桶列表與統計使用 hcloud obs ls + CES 指標。
工具分離原則:
- obsutil — 檔案/目錄上傳、排程上傳同步 (上傳核心工具;hcloud CLI 不支援 PutObject)
- hcloud CLI — 透過
hcloud obs ls列出儲存桶 (obsutil 模式),透過hcloud CES ShowMetricData查詢儲存桶容量/物件數量 - crontab / 工作排程器 — 作業系統層級的排程工作,用於週期上傳 (不依賴後台程序)
安全架構:
- AK/SK 不得在對話中被讀取、回顯或列印
- obsutil 憑證由使用者在終端機中設定 (絕不在對話中詢問)
- 嚴格禁止刪除操作 (不可逆);範圍外的操作將被拒絕,並提供引導性替代方案
- 對於目錄上傳,是否保留目錄結構 (
-flat) 由使用者明確回答決定,絕不自行假設 - 每次上傳 (任務 2) 和每次排程上傳設定 (任務 3) 都需要在使用者明確確認後才能執行指令或寫入 crontab
- 代理僅執行本技能所述步驟,針對使用者指定的儲存桶與路徑;不得代表使用者執行任何其他 OBS/CLI 操作
⚠️ 資料傳輸通知
- 上傳會將本機檔案/目錄傳送至遠端雲端儲存並持續儲存。 在上傳前,必須明確告知使用者:「上傳
<path>將把資料傳送至 OBS 儲存桶<Bucket>並儲存在雲端。」如果使用者並無此意圖,請在執行前停止。- 排程上傳會重複推送資料,按照排程週期將本地目錄推送至雲端。必須明確警告使用者,每次執行時資料都會被傳輸並持續儲存在遠端。
- 在上傳前審查要上傳的路徑;如果路徑範圍過大 (例如主目錄) 或包含非預期內容,請在使用者確認範圍前暫停。
⛔ 禁止操作 (安全限制)
此技能嚴格禁止以下操作,無論使用者如何要求。禁止動作以語意描述,不提供破壞性指令範例。
| 禁止操作 | 原因 |
|---|---|
| ❌ 刪除儲存桶 | 不可逆;會銷毀整個儲存桶及其所有物件 |
| ❌ 刪除物件 | 不可逆;已刪除物件無法復原 (除非已啟用版本控制) |
| ❌ 批次刪除物件 | 不可逆;批次刪除影響範圍廣 |
| ❌ 清空儲存桶 | 不可逆;移除儲存桶中所有物件 |
| ❌ 下載物件 | 本技能僅供上傳;下載屬於獨立工作流程 |
| ❌ 建立儲存桶 | 儲存桶建立有專屬技能及完整先決條件 |
| ❌ 在儲存桶間複製物件 | 跨儲存桶物件複製超出本技能範圍 |
| ❌ 修改儲存桶生命週期設定 | 儲存成本管理屬於獨立的儲存桶層級設定任務 |
| ❌ 還原歸檔物件 | 歸檔還原是獨立工作流程,包含擷取模式與 TTL |
| ❌ 產生預簽名 URL | 臨時分享需 SDK 簽署;CLI 上傳不支援 |
| ❌ 修改儲存桶 ACL 或儲存桶策略 | 權限管理屬於獨立的安全任務 |
| ❌ 要求使用者在對話中直接提供 AK/SK | 憑證絕不能在對話中出現 |
| ❌ 從 hcloud 設定檔提取 AK/SK | 憑證已加密,無法直接使用 |
| ❌ 在 OBS 操作前跳過 obsutil 憑證檢查 | 未設定憑證則操作會失敗 |
❌ 在未詢問使用者的情況下,對目錄上傳使用 -flat | -flat 會捨棄目錄結構;必須遵循使用者的明確回答 |
| ❌ 猜測本地路徑、儲存桶名稱或目標前綴 | 必要參數必須由使用者提供 |
如果使用者要求刪除操作,你必須拒絕並告知: 「基於安全限制,此技能不允許刪除操作 (刪除儲存桶/物件/批次刪除/清空儲存桶)。請使用華為雲 OBS 主控台或 obsutil 手動操作。」
如果使用者要求範圍外的操作,請勿嘗試執行。通知使用者下表建議的替代方案:
| 操作 | 建議替代方案 |
|---|---|
| 下載物件 | 手動使用 obsutil cp obs://<Bucket>/<Key> <LocalPath>,或使用 OBS 主控台 |
| 建立儲存桶 | 使用專屬技能 huawei-cloud-obs-bucket-create,或使用 OBS 主控台 |
| 複製物件 | 手動使用 hcloud OBS CopyObject,或使用 OBS 主控台 |
| 生命週期設定 | 使用 OBS 主控台 (儲存桶 > 生命週期),或使用 hcloud OBS SetBucketLifecycle |
| 還原歸檔物件 | 手動使用 obsutil restore obs://<Bucket>/<Key>,或使用 OBS 主控台 |
| 預簽名 URL | 使用華為雲 SDK (Java/Python/Go) 產生預簽名 URL,或使用 OBS 主控台 |
| 儲存桶 ACL/策略 | 使用 OBS 主控台 (儲存桶 > 權限),或使用 hcloud OBS SetBucketAcl/SetBucketPolicy |
架構
華為雲 OBS 上傳管理
├── 任務 1: ListBucketsWithStats (列出儲存桶及其容量與物件數量)
│ ├── 1a. hcloud obs ls: 列出所有儲存桶
│ ├── 1b. CES 指標 / OBS API: 查詢儲存桶容量與物件數量
│ └── 1c. 向使用者呈報儲存桶統計表
├── 任務 2: UploadFile (上傳本機檔案或目錄至目標儲存桶)
│ ├── 2a. 與使用者確認本機路徑 + 儲存桶名稱 + 目標前綴
│ ├── 2b. 針對目錄:詢問使用者是否保留目錄結構 (決定 -flat)
│ ├── 2c. 警告資料會持續儲存於遠端 + 取得使用者明確確認
│ ├── 2d. obsutil cp: 單一檔案 (-flat) 或目錄 (-r,可依使用者回答加上 -flat)
│ └── 2e. 驗證上傳結果
└── 任務 3: ScheduledUpload (將本機目錄排程週期上傳至目標儲存桶)
├── 3a. 與使用者確認本機目錄 + 儲存桶 + 前綴 + 排程週期
├── 3b. 詢問使用者是否保留目錄結構 (決定 -flat)
├── 3c. 警告持續性 + 取得使用者明確確認
├── 3d. 產生 obsutil 上傳腳本 (根據使用者回答決定是否加上 -flat)
├── 3e. 設定 crontab / 工作排程器
└── 3f. 驗證排程工作已設定
先決條件
先決條件檢查 1/3: 需要 Huawei Cloud CLI (hcloud / KooCLI) >= 3.2.0 執行
hcloud version確認版本 >= 3.2.0。如果未安裝或版本過低, 請參閱 references/cli-installation-guide.md 取得安裝指南。
hcloud version
先決條件檢查 2/3: 需要 obsutil >= 5.5.0 (用於上傳功能) 檔案/目錄上傳需要華為雲 obsutil CLI 工具。 執行
obsutil version確認版本 >= 5.5.0。如果未安裝, 請參閱 references/cli-installation-guide.md 取得安裝指南。
obsutil version
先決條件檢查 3/3: 需要 obsutil 憑證設定
hcloud obs 模組在底層對應 obsutil,這需要單獨的 AK/SK 與 Endpoint 設定。 在執行 OBS 操作前,你必須檢查 obsutil 憑證是否已設定:
hcloud obs ls -limit=1如果回應為
Please set ak, sk and endpoint in the configuration file!或InvalidAccessKeyId,則表示 obsutil 憑證尚未設定。解決方法:引導使用者在他們自己的終端機中設定 obsutil 憑證 (不要要求使用者在對話中直接提供 AK/SK),並附上以下安全警告:
obsutil 憑證尚未設定。請在您的終端機中執行以下指令進行設定 (AK/SK 可從華為雲主控台「我的憑證」頁面取得): hcloud obs config -i=<YourAK> -k=<YourSK> -e=obs.<Region>.myhuaweicloud.com 範例 (廣州區域): hcloud obs config -i=<YourAK> -k=<YourSK> -e=obs.cn-south-1.myhuaweicloud.com 常見 Endpoints: cn-north-4 → obs.cn-north-4.myhuaweicloud.com cn-east-3 → obs.cn-east-3.myhuaweicloud.com cn-south-1 → obs.cn-south-1.myhuaweicloud.com cn-southwest-2 → obs.cn-southwest-2.myhuaweicloud.com ⚠️ 安全警告:在命令列上放置 AK/SK 會將其暴露於 shell 歷史記錄、作業系統行程列表以及終端機錄影中。 建議優先使用互動式設定 (`hcloud configure`) 或環境變數 (`HW_ACCESS_KEY` / `HW_SECRET_KEY`)。 若使用了明文指令進行設定,請在完成後清除您的 shell 歷史記錄。 設定完成後請重試。
⚠️ hcloud 參數格式要求
hcloud (KooCLI) 雲端服務 API 指令 (大寫模組,例如
hcloud CES ShowMetricData) 必須使用--param=value格式 (以等號連接);不支援空格分隔的格式。✅ 正確:
hcloud CES ShowMetricData --region=cn-south-1 --namespace=SYS.OBS❌ 錯誤:
hcloud CES ShowMetricData --region cn-south-1注意:
hcloud obs(小寫,obsutil 模式) 直接對應到 obsutil 指令,並使用 obsutil 參數風格 (例如hcloud obs ls、hcloud obs config -i=...);--param=value規則不適用。沒有hcloud OBS ListBuckets指令 — 請使用hcloud obs ls列出儲存桶。
驗證
安全規則 (必須遵守):
- 禁止 讀取、回顯或列印 AK/SK 值
- 禁止 要求使用者在對話中直接輸入 AK/SK
- 禁止 使用
hcloud configure set傳遞明文憑證值- 禁止 接受使用者直接在對話中提供的 AK/SK
- 僅允許 從環境變數或已設定的 CLI 設定檔中讀取憑證
⚠️ 憑證暴露警告 (在討論憑證設定時告知使用者):
- 將 AK/SK 作為命令列引數傳遞 (例如
obsutil config -ak=... -sk=...或hcloud configure set --access-key-id=...) 會將憑證暴露於 shell 歷史記錄、作業系統行程列表、稽核日誌、終端機錄影以及複製的文件。- 建議優先使用互動式設定 (
hcloud configure) 或環境變數 (HW_ACCESS_KEY/HW_SECRET_KEY)。- 使用明文指令設定後,請清除 shell 歷史記錄 (
history -c或從~/.bash_history中移除該行)。- obsutil 的憑證設定檔 (例如
~/.obsutilconfig) 應具有嚴格的權限 (例如600)。⚠️ 重要:處理使用者提供的憑證
如果使用者嘗試直接提供 AK/SK (例如「我的 AK 是 xxx,SK 是 yyy」):
- 立即停止 - 不要執行任何指令
- 禮貌拒絕 並回傳以下訊息:
為確保帳號安全,請勿在對話中直接提供華為雲 Access Key ID 和 Access Key Secret。 請使用以下其中一種安全方法設定憑證: 方法 1:互動式設定 (建議) hcloud configure # 根據提示輸入 AK/SK;憑證將安全地儲存在本機設定檔中 方法 2:環境變數設定 export HW_ACCESS_KEY=<your-access-key-id> export HW_SECRET_KEY=<your-access-key-secret> 設定完成後,請重新提出您的請求。- 在憑證設定完成前,請勿繼續 執行任何華為雲操作
檢查 CLI 設定:
hcloud configure list檢查輸出是否包含有效的設定 (AK/SK、IAM 等)。
如果不存在有效憑證,請在此停止。
IAM 權限政策
確保 IAM 使用者具有必要的權限。完整權限表請參閱 references/iam-policies.md。
最低必要權限:
obs:bucket:list— 列出儲存桶obs:bucket:get— 取得儲存桶屬性 (容量、物件數量)obs:object:get— 讀取物件資訊obs:object:put— 上傳物件
權限邊界:
- 範圍限制:此技能僅可執行以下工具動作,且僅限於使用者確認後的指定儲存桶/路徑:
hcloud obs ls/obsutil ls— 列出使用者指定範圍內的儲存桶與物件hcloud CES ShowMetricData/hcloud OBS GetBucketStorageInfo— 讀取儲存桶容量/物件數量obsutil cp— 將確認過的本機檔案/目錄上傳至確認過的儲存桶crontab(Linux/macOS) 或schtasks(Windows) — 寫入/移除確認過的排程上傳任務
- 所有其他 CLI/工具操作 (刪除、下載、複製、建立儲存桶、修改設定等) 嚴格在範圍之外,必須拒絕。
- 在以下情況下必須停止:憑證缺失或無效、使用者拒絕任何確認、目標儲存桶不存在、或本機路徑不存在。
- 禁止動作:任何刪除操作、任何上述範圍外的操作、修改此處的工具列表、或執行任何超出確認範圍的指令。
核心工作流程
任務 1:列出儲存桶及其容量與物件數量
透過 obsutil 列出儲存桶,然後使用 CES 容量指標或 OBS API 查詢儲存桶容量與物件數量。
⚠️ 工具分離:使用
hcloud obs ls列出,使用hcloud CES ShowMetricData查詢統計資料
hcloud obs ls:列出所有儲存桶 (obsutil 模式;沒有--region參數 — 區域透過hcloud obs config -e=...設定)hcloud CES ShowMetricData/ OBS API:查詢每個儲存桶的容量與物件數量
📄
…
[此處因原文截斷而省略,實際輸出應包含完整翻譯內容]