Huawei Cloud OBS ウェブサイトホスティング
概要
既存の Huawei Cloud OBS バケットを、Huawei Cloud OBS Python SDK を使用して静的ウェブサイトホスティング用に設定し、サイトのカスタムドメインを登録します。
このスキルは、以下のような場合に使用します:
- OBS 静的ウェブサイトホスティングの有効化または修復
- インデックスドキュメントまたはエラードキュメントの設定
- OBS 静的ウェブサイトエンドポイントをバックエンドとするカスタムドメイン経由でのサイト公開
- カスタムドメインの追加または修復(Huawei Cloud DNS が該当する場合を含む)
- ホスティングされた OBS サイトにおける 403、404、または DNS 問題の診断
正常な状態とは
このスキルは 書き込み操作 を実行します:バケットに静的ウェブサイトホスティングを有効化し(setBucketWebsite)、そのバケットに必要なカスタムドメインを登録します(setBucketCustomDomain)。ユーザーが要求した場合、DNS レコードの作成/更新も行います。これらの書き込みは、このスキル自身のセッション内でバンドルされたスクリプトによって実行されます。これらはシミュレーションではなく、ユーザーに委譲されるものでもなく、読み取り専用チェックに置き換えられるものでもありません。検証は書き込み 後に 実行され、結果を確認します。
- バケットは このスキルによって 静的ウェブサイトホスティングが有効化されている。
- バケットはウェブサイトエンドポイントから
index.htmlを提供できる。 - 匿名ユーザーはウェブサイトコンテンツを読み取れる。
- 存在しないパスは、設定されたエラーページまたはクリーンな 404 を返す。
- このスキルによって カスタムドメインが登録され、DNS を通じて OBS ウェブサイトエンドポイントに解決される。カスタムドメインは 必須 です。セキュリティコンプライアンス要件により、デフォルトの OBS バケットドメインはオンラインオブジェクトプレビューに使用できません。
- カスタムドメインがバケットに登録され、正しく解決されるまで、セットアップは完了したとは見なされません。
- 通常のバケット API エンドポイントではなく、OBS ウェブサイトエンドポイントが使用されます。
- 403 の一般的な原因は 2 つです:バケットまたはオブジェクトで匿名/公開読み取りが有効になっていない、または OBS 操作に使用される AK/SK に必要な IAM 権限が不足している。
- 404 の原因は通常、インデックスドキュメント名またはアップロードパスが間違っていることです。
セキュリティコンプライアンス:カスタムドメインの要件
Huawei Cloud のセキュリティコンプライアンス要件に基づき、OBS バケットのデフォルトドメイン名(<bucket_name>.obs.<region>.myhuaweicloud.com)は、バケット内のオブジェクトのオンラインプレビューに使用することが 禁止 されています。したがって、静的ウェブサイトホスティングにはカスタムドメインが 必須 です。
ユーザーがカスタムドメインを準備していない場合:
- まずユーザーに、ウェブサイトがどこにデプロイされるか(デプロイリージョン/管轄)、およびドメインがどこで登録されるかを尋ねます。リージョン固有の要件(ICP 登録など)は、デプロイリージョンが実際にそれらを必要とする場合にのみ適用します。
- ユーザーを Huawei Cloud ドメイン登録サービス または他の一般的なドメイン登録サイトに誘導して、ドメインを登録するよう指示します。
- (かつその場合に限り)ユーザーのデプロイリージョンが中国本土である場合、ドメインはウェブサイトホスティングに使用する前に ICP 登録(网站备案) も完了する必要があります。中国本土以外へのデプロイの場合、このステップは不要です。これを押し付けてはいけません。
- リージョンチェック、および該当する場合はドメイン登録/登録が確認された後にのみ、静的ウェブサイトホスティングの設定を続行します。
重要: カスタムドメインの前提条件が確認されるまで、静的ウェブサイトホスティングの設定を続行しないでください。テスト環境であっても、デフォルトの OBS ドメインはウェブサイトアクセスの有効な代替手段ではありません。
必要な入力
変更を行う前に、これらを収集します:
regionbucket_namecustom_domain(必須 — 上記の「セキュリティコンプライアンス」セクションを参照)index_document(オプション、デフォルト:index.html)error_document(オプション)dns_zoneまたは DNS アカウントコンテキスト(オプション;ユーザーが今回の実行で Huawei Cloud DNS の変更を希望する場合のみ必要)
静的ウェブサイトファイルはユーザーによって既にアップロードされているものとします。
依存関係
このスキルは、以下のランタイム/ツールコンポーネントに依存します:
- Python 3.10+(
scripts/set_obs_website_sdk.pyおよびscripts/verify_obs_website.pyに必要) - Huawei OBS Python SDK パッケージ:
esdk-obs-python obsutil(.obsutilconfig認証情報設定の生成と管理用)- Huawei Cloud AK/SK 認証情報(
.obsutilconfigから) - OBS エンドポイントおよびウェブサイトエンドポイントへのネットワークアクセス
hcloudCLI(このスキルが Huawei Cloud DNS レコード操作を管理する場合にのみ必要)- dig / nslookup(オプション)
インストールコマンド:
pip install esdk-obs-python
機能と権限の範囲
このスキルは、その正確な機能と権限の範囲を宣言します。これにより、呼び出し元やレビュー担当者は、呼び出す前に何ができて何ができないかを知ることができます:
書き込み可能なもの(変更可能):
- ユーザー指定の OBS バケットのみ のウェブサイト設定(
setBucketWebsite:インデックスドキュメント、エラードキュメント)。scripts/set_obs_website_sdk.py経由。 - その 同じバケット のカスタムドメイン結合(
setBucketCustomDomain)。オプションの HTTPS 証明書結合を含む。 - Huawei Cloud DNS ゾーン内の DNS レコード。ユーザーが今回の実行で Huawei Cloud DNS の変更を明示的に要求し、ゾーンを提供/指定した場合のみ(
hcloud DNS CreateRecordSet)。 - これらは本番環境に影響を与える変更です:カスタムドメインのライブウェブトラフィックに影響を与え、バケットコンテンツを公にアクセス可能にする可能性があります。各書き込みの前に警告が表示されます(「ワークフロー」を参照)。
読み取り対象の認証情報(およびそのソース):
scripts/set_obs_website_sdk.pyとscripts/verify_obs_website.pyは、優先順位に従って認証情報を読み取ります:(1)CLI フラグ--access-key/--secret-key/--security-token、(2)環境変数HW_ACCESS_KEY/HW_SECRET_KEY/HW_SECURITY_TOKEN、(3)ローカル~/.obsutilconfig。hcloudは DNS 操作用に独自の設定済み CLI プロファイルを使用します。- 認証情報の 存在 のみが報告されます;値は決して印刷、エコー、ディスクへの書き込みは行われません。
ネットワークアクセス:
- OBS サービスエンドポイント(
https://obs.<region>.myhuaweicloud.com)、OBS ウェブサイトエンドポイント、および(要求された場合のみ)設定されたリージョンの Huawei Cloud DNS サービスのみ。
決して行わないこと:
- バケット内のオブジェクト/コンテンツのアップロード、削除、または変更は決して行いません。
- ユーザーが指定したもの以外のバケット、ドメイン、DNS ゾーン、または認証情報には決して触れません。
- cron ジョブ、スタートアップスクリプト、または状態ファイルを作成せず、セッション間で何も永続化しません(下記の「セッション動作」を参照)。
- 読み取った認証情報を第三者に公開または転送することは決してありません。
セッション動作
このスキルは 単一セッション、ワンショット の操作を実行します:要求された OBS/DNS API 呼び出しを現在の実行中に実行し、その後終了します。cron ジョブ、起動スクリプト、バックグラウンドデーモン、または状態ファイルを作成 せず、後続の実行のために設定を永続化 しません。各呼び出しは独立しており、ユーザーによってトリガーされる必要があります;何も自動的にスケジュールされたり繰り返されたりしません。実行時間の長い、または外部でスケジュールされたステップ(例:DNS 伝播の待機)は、このスキルによってジョブとしてインストールされるのではなく、ユーザーが確認するものとして説明されます。
認証情報の開示と確認
scripts/set_obs_website_sdk.py は、環境またはローカルの ~/.obsutilconfig からクラウド認証情報を読み取り、リモートのバケット/DNS 設定を変更するため、実行には実際のセキュリティ上の影響があります。実行する前に、以下のことを行う必要があります:
- ユーザーに、スクリプトが CLI フラグ / 環境変数 /
~/.obsutilconfigから認証情報を読み取り、リモートバケットのウェブサイト設定とカスタムドメイン(および要求された場合は DNS)を変更することを開示します。 - バケット名、カスタムドメイン、DNS ゾーン(ある場合)が正しいこと、および変更を許可することをユーザーから確認を得ます。
- その確認後にのみスクリプトを実行します。
hcloud CLI リファレンス
hcloud CLI または obsutil のインストールと設定が必要な場合は、references/cli-installation-guide.md を読み込んでください。
OBS 静的ウェブサイトのカスタムドメイン用の DNS CNAME レコードを作成または管理する場合は、references/hcloud-dns-obs-website.md を読み込んでください(hcloud DNS CreateRecordSet コマンドを使用したステップバイステップガイド)。
セキュリティに関する注意:
- スクリプトやチェックインされたファイルに AK/SK をハードコードしないでください。
- SDK スクリプトには環境変数を、CLI 使用には安全なローカルプロファイルストレージを優先して使用してください。
obsutil 設定の依存関係
obsutil のインストールまたは .obsutilconfig のセットアップガイダンスが必要な場合は、references/cli-installation-guide.md を読み込んでください。
Python SDK ヘルパースクリプト(scripts/set_obs_website_sdk.py)は、デフォルトで以下のソースから認証情報を読み取ります:
- CLI フラグ(
--access-key、--secret-key、--security-token) - 環境変数(
HW_ACCESS_KEY、HW_SECRET_KEY、HW_SECURITY_TOKEN) .obsutilconfig
すべてのソースで ak/sk が空の場合、スクリプトは停止し、ユーザーに .obsutilconfig に不足しているキーを入力するよう(または CLI/env 認証情報を提供するよう)求める必要があります。
認証情報チェックルール:
- キー(
ak、sk、securitytoken)の存在/不在のみを報告します。 - チェック中に認証情報の値を決して印刷しないでください。
.obsutilconfigからの完全な行をコンソールに決して印刷しないでください。- コンソール出力をモデルコンテキストとして扱います;漏洩した値はセキュリティインシデントです。
安全なチェックの例(ステータスのみ、シークレット値なし):
Linux/macOS:
CFG="${HOME}/.obsutilconfig"
if [ ! -f "$CFG" ]; then
echo "obsutilconfig_exists=false"
echo "ak_configured=false"
echo "sk_configured=false"
echo "securitytoken_configured=false"
else
awk -F= '
BEGIN { ak=0; sk=0; st=0 }
/^[[:space:]]*#/ { next }
/^[[:space:]]*(ak|access_key_id)[[:space:]]*=/ { if ($2 ~ /[^[:space:]]/) ak=1 }
/^[[:space:]]*(sk|secret_access_key)[[:space:]]*=/ { if ($2 ~ /[^[:space:]]/) sk=1 }
/^[[:space:]]*(securitytoken|security_token|token)[[:space:]]*=/ { if ($2 ~ /[^[:space:]]/) st=1 }
END {
print "obsutilconfig_exists=true"
print "ak_configured=" (ak ? "true" : "false")
print "sk_configured=" (sk ? "true" : "false")
print "securitytoken_configured=" (st ? "true" : "false")
}
' "$CFG"
fi
Windows(PowerShell):
$cfg = Join-Path $HOME ".obsutilconfig"
if (-not (Test-Path $cfg)) {
"obsutilconfig_exists=false"
"ak_configured=false"
"sk_configured=false"
"securitytoken_configured=false"
} else {
$lines = Get-Content $cfg
$ak = $false; $sk = $false; $st = $false
foreach ($line in $lines) {
if ($line -match '^\s*#') { continue }
if ($line -match '^\s*(ak|access_key_id)\s*=\s*(\S.*)$') { $ak = $true }
if ($line -match '^\s*(sk|secret_access_key)\s*=\s*(\S.*)$') { $sk = $true }
if ($line -match '^\s*(securitytoken|security_token|token)\s*=\s*(\S.*)$') { $st = $true }
}
"obsutilconfig_exists=true"
"ak_configured=$ak"
"sk_configured=$sk"
"securitytoken_configured=$st"
}
使用してはいけないもの:
cat ~/.obsutilconfiggrep -E "ak|sk|token" ~/.obsutilconfig
スクリプトの使用目的
バンドルされたスクリプトは、それらが構築されたタスクに対してデフォルトで使用します。これらのスクリプトは、このスキルが宣伝する 書き込み操作 を実行します。読み取り専用の検証ツールではありません:
scripts/set_obs_website_sdk.pyは、指定されたバケットにバケットウェブサイト設定(setBucketWebsite)を 書き込み、カスタムドメイン(setBucketCustomDomain)を 登録 します。OBS 静的ウェブサイトホスティング設定を有効化、修復、または変更するタスクがある場合は常にこれを使用します。「機能と権限の範囲」で宣言されているように認証情報を読み取り、書き込み前にユーザーの確認が必要です(「認証情報の開示と確認」を参照)。scripts/verify_obs_website.pyは、公開されたウェブサイトエンドポイント(DNS、HTTP、HTTPS)を 検証 し、読み取り専用の SDK バケット/リージョンチェックを実行します。ウェブサイト設定の変更後、およびユーザーがサイトに到達可能かどうかを尋ねた場合や、403/404 の動作をトラブルシューティングする場合に使用します。- スクリプト自体が壊れており、パッチを適用する必要がある場合を除き、これらのスクリプトをアドホックなワンオフコードで置き換えないでください。壊れたスクリプトにパッチを適用することは、OBS SDK 呼び出しを直接記述する唯一のケースです。
- スクリプトを使用して、認証情報の処理、SDK オブジェクトの構築、および検証動作を実行間で一貫させてください。
ワークフロー
- Python ランタイムと OBS SDK が利用可能であることを確認します(不足している場合は
pip install esdk-obs-pythonを実行)。 - カスタムドメインの前提条件を確認します(「セキュリティコンプライアンス」セクションを参照):
custom_domainがユーザーによって提供されていることを確認します。- リージョン固有の要件を適用する前に、サイトがどこにデプロイされるか(リージョン/管轄)をユーザーに尋ねます。ユーザーがドメインを持っておらず、デプロイリージョンが中国本土である場合、Huawei Cloud ドメイン登録 でドメインを登録し、ICP 登録(网站备案) を完了するようガイドします。中国本土以外へのデプロイの場合は、ICP 登録を課さないでください。ここで停止し、ユーザーがこのステップを完了するのを待ちます。
- ユーザーが Huawei Cloud DNS または外部プロバイダーで DNS を管理しているかどうかを確認します。
- 今回の実行の一部として Huawei Cloud DNS の変更が含まれる場合は、
hcloudがインストールされ、認証されていることを確認します。 - DNS が Huawei Cloud 外または今回の実行外で管理されている場合は、先に進む前にその制約を明示的に収集します。
- 要求されたリージョンにバケットが存在することを確認します(下記の「バケットの存在とリージョンチェック方法」を使用)。
- 呼び出し元にバケットのウェブサイト設定を更新する権限があることを確認します。
- ウェブサイトファイルに対して匿名読み取りが許可されていることを確認します(下記の「匿名読み取りチェック方法」を使用)。
- ウェブサイトコンテンツオブジェクト(
index.html、アセットなど)をアップロードしたり変更したりしないでください。コンテンツは既にバケットに存在するものとします。 - 書き込み前に確認します。 次のステップでクラウド認証情報(環境変数 /
~/.obsutilconfig)を読み取り、リモートバケットのウェブサイト設定とカスタムドメイン結合(および要求された場合は DNS)を変更すること、およびこれらがライブトラフィックに影響を与える本番環境向けの変更であることをユーザーに伝えます。確認後にのみ進みます。次に、--custom-domain <domain>を指定してscripts/set_obs_website_sdk.pyを実行します(index_documentが提供されていない場合はindex.htmlを使用します)。- このスクリプトは SDK オブジェクトの構築を適切に行うために存在します...
(翻訳は原文の完全性を保つためにここで終了します。原文が途切れているため、それ以降の翻訳は不可能です。)