Huawei Cloud OBS アップロードスキル
概要
ローカルファイルまたはディレクトリをHuawei Cloud OBSバケットにアップロードし、容量とオブジェクト数を含むバケット一覧を表示し、crontabを介した定期的なアップロードをスケジュールします。アップロード操作にはobsutilを使用し、バケット一覧/統計情報にはhcloud obs ls + CES メトリクスを使用します。
ツール分離の原則:
- obsutil — ファイル/ディレクトリアップロード、スケジュールされたアップロード同期(アップロードの中核ツール; hcloud CLIにはPutObjectのサポートがありません)
- hcloud CLI —
hcloud obs lsによるバケット一覧(obsutilモード)、hcloud CES ShowMetricDataによるバケット容量/オブジェクト数の統計 - crontab / タスクスケジューラ — 定期的なアップロードのためのOSレベルのスケジュールタスク(デーモンプロセス依存なし)
セキュリティアーキテクチャ:
- AK/SKは会話内で読み取り、エコー、印刷されることは決してありません
- obsutilの認証情報はユーザーが自身のターミナルで設定します(会話内で尋ねることはありません)
- 削除操作は固く禁止されています(元に戻せません); 範囲外の操作は拒否され、代替案が案内されます
- ディレクトリアップロード時に、ディレクトリ構造を保持するかどうか(
-flat)は顧客の明示的な回答に基づいて決定され、決して推測されません - すべてのアップロード(タスク2)およびすべてのスケジュールアップロード設定(タスク3)には、コマンドまたはcrontabの書き込みの前にユーザーの明示的な確認が必要です
- エージェントは、ユーザーが指定した正確なバケットとパスに対して、このスキルに記述されたステップのみを実行します。ユーザーに代わって他のOBS/CLIアクションを実行することは決してありません
⚠️ データ送信に関する通知
- アップロードは、ローカルファイル/ディレクトリをリモートクラウドストレージに転送し、そこに永続化します。 アップロード前に、ユーザーに明確に伝えてください:"
<パス>をアップロードすると、データはOBSバケット<Bucket>に送信され、クラウドに保存されます。" ユーザーがこれを意図していなかった場合は、実行を停止してください。- スケジュールアップロードは、ローカルディレクトリからクラウドへ定期的にデータを繰り返しプッシュします。 ユーザーに対して、各実行でデータがリモートに送信され永続化されることを明示的に警告してください。
- 実行前にアップロードするパスを確認してください。パスが広範囲(例:ホームディレクトリ)であるか、予期しないコンテンツを含む場合は、アップロード前にユーザーと範囲を確認してください。
⛔ 禁止操作(セキュリティ制約)
このスキルは、ユーザーからの要求に関わらず、以下の操作を固く禁じます。禁止アクションは意味的に記述されており、破壊的なコマンド例は提供されません。
| 禁止操作 | 理由 |
|---|---|
| ❌ バケットの削除 | 元に戻せません。バケット全体とすべてのオブジェクトを破壊します |
| ❌ オブジェクトの削除 | 元に戻せません。削除されたオブジェクトは(バージョニングが有効でない限り)復元できません |
| ❌ オブジェクトの一括削除 | 元に戻せません。一括削除は影響範囲が広いです |
| ❌ バケットの空にする | 元に戻せません。バケット内のすべてのオブジェクトを削除します |
| ❌ オブジェクトのダウンロード | このスキルはアップロード専用です。ダウンロードは別のワークフローです |
| ❌ バケットの作成 | バケット作成には、完全な前提条件を備えた専用スキルがあります |
| ❌ バケット間のオブジェクトコピー | バケット間オブジェクトコピーはこのスキルの範囲外です |
| ❌ バケットライフサイクル設定の変更 | ストレージコスト管理は別のバケットレベル設定タスクです |
| ❌ アーカイブオブジェクトの復元 | アーカイブ復元は、取得モードとTTLを含む別のワークフローです |
| ❌ 署名付きURLの生成 | 一時的な共有にはSDK署名が必要です。CLIアップロードではサポートされていません |
| ❌ バケットACLまたはバケットポリシーの変更 | 権限管理は別のセキュリティタスクです |
| ❌ 会話内で直接AK/SKの提供をユーザーに求める | 認証情報は会話内に決して表示されてはなりません |
| ❌ hcloud設定ファイルからAK/SKを抽出する | 認証情報は暗号化されており、直接使用できません |
| ❌ OBS操作の前にobsutil認証情報チェックをスキップする | 認証情報が設定されていないと操作は失敗します |
❌ 顧客に尋ねずにディレクトリアップロードで-flatを使用する | -flatはディレクトリ構造を破棄します。顧客の明示的な回答に従う必要があります |
| ❌ ローカルパス、バケット名、ターゲットプレフィックスを推測する | 必須パラメータはユーザーによって提供されなければなりません |
ユーザーが削除操作を要求した場合、拒否して次のように伝えなければなりません: "セキュリティ制約により、このスキルでは削除操作(バケット削除/オブジェクト削除/一括削除/バケット空にする)は許可されていません。Huawei Cloud 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 | Huawei Cloud SDK(Java/Python/Go)を使用して署名付きURLを生成するか、OBSコンソールを使用してください |
| バケットACL/ポリシー | OBSコンソール(バケット > 権限)を使用するか、hcloud OBS SetBucketAcl/SetBucketPolicy を使用してください |
アーキテクチャ
Huawei Cloud 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 が必要(アップロード機能用) ファイル/ディレクトリアップロードには、Huawei Cloud obsutil CLIツールが必要です。
obsutil versionを実行してバージョンが 5.5.0 以上であることを確認してください。インストールされていない場合は、 references/cli-installation-guide.md を参照してインストールしてください。
obsutil version
前提条件チェック 3/3: obsutil認証情報の設定が必要
hcloud obsモジュールは内部的にobsutilにマッピングされており、これには個別のAK/SKおよびエンドポイント設定が必要です。 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はHuawei Cloudコンソールの「マイ認証情報」ページから取得できます): 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 一般的なエンドポイント: 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を入力すると、シェル履歴やOSプロセス一覧に公開されます。 対話型設定(`hcloud configure`)または環境変数(HW_ACCESS_KEY / HW_SECRET_KEY)を推奨します。 設定後、プレーンテキストのコマンドを使用した場合はシェル履歴を消去してください。 設定が完了したら再試行してください。
⚠️ 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=...)、認証情報がシェル履歴、OSプロセス一覧、監査ログ、端末録画、コピーされたドキュメントに公開されます。- 対話型設定(
hcloud configure)または環境変数(HW_ACCESS_KEY/HW_SECRET_KEY)を推奨します。- プレーンテキストコマンドで設定した後は、シェル履歴を消去してください(
history -cまたは~/.bash_historyから該当行を削除)。- obsutilの認証情報設定ファイル(例:
~/.obsutilconfig)は、制限された権限(例:600)に設定する必要があります。⚠️ 重要: ユーザー提供の認証情報の処理
ユーザーが直接AK/SKを提供しようとした場合(例: 「私のAKはxxx、SKはyyyです」):
- 直ちに停止 - コマンドを実行しないでください
- 丁寧に拒否し、以下のメッセージを返してください:
アカウントのセキュリティのため、会話内でHuawei Cloud 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> 設定が完了したら、リクエストを再試行してください。- 認証情報が設定されるまで、Huawei Cloud操作の実行を続行しないでください
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: 各バケットの容量とオブジェクト数を照会
📄
…
[翻訳のため省略]