Que fait Huawei Cloud OBS Website Host ?
Présentation
Configurez un bucket OBS Huawei Cloud existant pour l'hébergement de site web statique avec le SDK Python Huawei Cloud OBS et enregistrez un domaine personnalisé pour le site.
Utilisez cette compétence lorsque l'utilisateur souhaite :
- activer ou réparer l'hébergement de site web statique OBS
- définir un document d'index ou un document d'erreur
- rendre le site accessible via un domaine personnalisé soutenu par le point de terminaison du site web statique OBS
- ajouter ou réparer un domaine personnalisé, y compris Huawei Cloud DNS lorsque cela est applicable
- diagnostiquer les erreurs 403, 404 ou les problèmes DNS sur un site OBS hébergé
Ce à quoi ressemble un bon résultat
Cette compétence effectue des opérations d'écriture : elle active l'hébergement de site web statique sur un bucket (setBucketWebsite) et enregistre le domaine personnalisé requis sur ce bucket (setBucketCustomDomain). Lorsque l'utilisateur le demande, elle crée/met à jour également les enregistrements DNS. Ces écritures sont exécutées par les scripts fournis dans la session de cette compétence — elles ne sont ni simulées, ni différées à l'utilisateur, ni remplacées par des vérifications en lecture seule. La vérification s'exécute après les écritures pour confirmer le résultat.
- L'hébergement de site web statique est activé sur le bucket par cette compétence.
- Le bucket peut servir
index.htmldepuis le point de terminaison du site web. - Les utilisateurs anonymes peuvent lire le contenu du site web.
- Un chemin manquant renvoie la page d'erreur configurée ou une erreur 404 nette.
- Un domaine personnalisé est enregistré par cette compétence et résout le point de terminaison du site web OBS via DNS. Un domaine personnalisé est obligatoire — le domaine de bucket OBS par défaut n'est pas autorisé pour la prévisualisation en ligne des objets conformément aux exigences de conformité de sécurité.
- La configuration n'est pas considérée comme terminée tant que le domaine personnalisé n'est pas enregistré sur le bucket et ne résout pas correctement.
- Le point de terminaison du site web OBS est utilisé, pas le point de terminaison API normal du bucket.
- Une erreur 403 a généralement deux causes courantes : la lecture anonyme/publique n'est pas activée sur le bucket ou les objets, ou les AK/SK utilisés pour les opérations OBS ne disposent pas des autorisations IAM nécessaires.
- Une erreur 404 signifie généralement que le nom du document d'index ou le chemin de téléversement est incorrect.
Conformité de Sécurité : Exigence de Domaine Personnalisé
Conformément aux exigences de conformité de sécurité Huawei Cloud, le nom de domaine par défaut du bucket OBS (<nom_bucket>.obs.<région>.myhuaweicloud.com) est interdit pour la prévisualisation en ligne des objets dans le bucket. Un domaine personnalisé est donc obligatoire pour l'hébergement de site web statique.
Si l'utilisateur n'a pas de domaine personnalisé préparé :
- Demandez d'abord à l'utilisateur où le site sera déployé (région de déploiement / juridiction), et où le domaine sera enregistré. N'appliquez les exigences spécifiques à la région (telles que le dépôt ICP) que lorsque la région de déploiement les impose réellement.
- Orientez l'utilisateur vers l'enregistrement d'un domaine via le Service d'enregistrement de domaine Huawei Cloud, ou d'autres sites d'enregistrement de domaine courants.
- Si (et seulement si) la région de déploiement de l'utilisateur est la Chine continentale, le domaine doit également effectuer un dépôt ICP (网站备案) avant de pouvoir être utilisé pour l'hébergement de site web. Pour les déploiements en dehors de la Chine continentale, cette étape n'est pas requise — ne l'imposez pas.
- Ce n'est qu'après la vérification de la région et, le cas échéant, la confirmation de l'enregistrement/dépôt du domaine que la configuration de l'hébergement de site web statique peut continuer.
Important : Ne procédez pas à la configuration de l'hébergement de site web statique tant que la condition préalable du domaine personnalisé n'est pas confirmée. Le domaine OBS par défaut n'est pas une alternative valide pour l'accès au site web, même dans l'environnement de test.
Entrées Requises
Collectez ces éléments avant d'apporter des modifications :
regionbucket_namecustom_domain(obligatoire — voir la section Conformité de Sécurité ci-dessus)index_document(optionnel, par défaut :index.html)error_document(optionnel)dns_zoneou contexte de compte DNS (optionnel ; requis uniquement si l'utilisateur souhaite des modifications Huawei Cloud DNS dans cette exécution)
Supposons que les fichiers du site web statique sont déjà téléversés par l'utilisateur.
Dépendances
La compétence dépend des composants d'exécution/outillage suivants :
- Python 3.10+ (requis pour
scripts/set_obs_website_sdk.pyetscripts/verify_obs_website.py) - Paquet SDK Python Huawei OBS :
esdk-obs-python obsutil(pour générer et maintenir la configuration des identifiants.obsutilconfig)- Identifiants AK/SK Huawei Cloud (depuis
.obsutilconfig) - Accès réseau au point de terminaison OBS et au point de terminaison du site web
- CLI
hcloud(requis uniquement lorsque cette compétence gère les opérations d'enregistrement DNS Huawei Cloud) - dig / nslookup (optionnel)
Commande d'installation :
pip install esdk-obs-python
Portée des Capacités et des Permissions
Cette compétence déclare sa portée exacte de capacité et de permission afin que les appelants et les réviseurs sachent ce qu'elle peut et ne peut pas faire avant de l'invoquer :
Ce qu'elle peut écrire (modifier) :
- La configuration de site web du bucket OBS spécifié par l'utilisateur uniquement (
setBucketWebsite: document d'index, document d'erreur), viascripts/set_obs_website_sdk.py. - La liaison de domaine personnalisé sur ce même bucket (
setBucketCustomDomain), y compris une liaison de certificat HTTPS optionnelle. - Les enregistrements DNS dans une zone DNS Huawei Cloud uniquement lorsque l'utilisateur demande explicitement des modifications Huawei Cloud DNS dans cette exécution et fournit/spécifie la zone (
hcloud DNS CreateRecordSet). - Ce sont des modifications orientées production : elles peuvent affecter le trafic web en direct pour le domaine personnalisé et rendre le contenu du bucket accessible publiquement. Des avertissements sont donnés avant chaque écriture (voir Workflow).
Identifiants lus (et leurs sources) :
scripts/set_obs_website_sdk.pyetscripts/verify_obs_website.pylisent les identifiants depuis, par ordre de priorité : (1) indicateurs CLI--access-key/--secret-key/--security-token, (2) variables d'environnementHW_ACCESS_KEY/HW_SECRET_KEY/HW_SECURITY_TOKEN, (3) fichier local~/.obsutilconfig.hcloudutilise son propre profil CLI configuré pour les opérations DNS.- Seule la présence des identifiants est signalée ; les valeurs ne sont jamais imprimées, renvoyées ou écrites sur le disque.
Accès réseau :
- Uniquement au point de terminaison du service OBS (
https://obs.<region>.myhuaweicloud.com), au point de terminaison du site web OBS, et (uniquement sur demande) au service Huawei Cloud DNS de la région configurée.
Ce qu'elle ne fait jamais :
- Ne téléverse, ne supprime ni ne modifie jamais les objets/contenus dans le bucket.
- Ne touche jamais aux buckets, domaines, zones DNS ou identifiants autres que ceux spécifiés par l'utilisateur.
- Ne crée jamais de tâches cron, de scripts de démarrage ou de fichiers d'état, et ne persiste jamais rien entre les sessions (voir "Comportement de Session" ci-dessous).
- N'expose ni ne transmet jamais les identifiants qu'elle lit à un tiers.
Comportement de Session
Cette compétence effectue une opération de session unique, en un seul coup : elle exécute les appels API OBS/DNS demandés pendant l'exécution en cours, puis se termine. Elle ne crée pas de tâches cron, de scripts de lancement, de démons en arrière-plan ou de fichiers d'état, et ne persiste pas la configuration pour des exécutions ultérieures. Chaque invocation est indépendante et doit être déclenchée par l'utilisateur ; rien n'est planifié ou répété automatiquement. Toute étape de longue durée ou planifiée en externe (par exemple, l'attente de la propagation DNS) est décrite à l'utilisateur comme quelque chose à vérifier, et non installée comme une tâche par cette compétence.
Divulgation et Confirmation des Identifiants
Étant donné que scripts/set_obs_website_sdk.py lit les identifiants cloud depuis votre environnement ou le fichier local ~/.obsutilconfig et modifie ensuite la configuration du bucket/distant, son exécution a un impact réel sur la sécurité. Avant de l'exécuter, vous devez :
- Divulguer à l'utilisateur que le script lira les identifiants depuis ses indicateurs CLI / variables d'environnement /
~/.obsutilconfig, et modifiera la configuration du site web et le domaine personnalisé du bucket distant (et le DNS, si demandé). - Obtenir la confirmation de l'utilisateur que le nom du bucket, le domaine personnalisé et la zone DNS (le cas échéant) sont corrects et qu'il autorise la modification.
- Ce n'est qu'après cette confirmation que vous exécutez le script.
Référence CLI hcloud
Chargez references/cli-installation-guide.md lorsque l'installation et la configuration de la CLI hcloud ou d'obsutil sont nécessaires.
Chargez references/hcloud-dns-obs-website.md lors de la création ou de la gestion d'enregistrements DNS CNAME pour les domaines personnalisés de site web statique OBS (guide étape par étape avec les commandes hcloud DNS CreateRecordSet).
Note de sécurité :
- Ne codez jamais en dur les AK/SK dans les scripts ou les fichiers versionnés.
- Préférez les variables d'environnement pour les scripts SDK et le stockage sécurisé de profil local pour l'utilisation de la CLI.
Dépendance de Configuration obsutil
Chargez references/cli-installation-guide.md lorsque vous avez besoin d'obsutil ou de conseils de configuration .obsutilconfig.
Le script d'assistance SDK Python (scripts/set_obs_website_sdk.py) lit les identifiants par défaut depuis :
- Indicateurs CLI (
--access-key,--secret-key,--security-token) - Variables d'environnement (
HW_ACCESS_KEY,HW_SECRET_KEY,HW_SECURITY_TOKEN) .obsutilconfig
Si ak/sk sont vides sur toutes les sources, le script doit s'arrêter et demander à l'utilisateur de remplir les clés manquantes dans .obsutilconfig (ou fournir des identifiants CLI/env).
Règle de vérification des identifiants :
- Signalez uniquement la présence/absence des clés (
ak,sk,securitytoken). - N'imprimez jamais les valeurs des identifiants lors des vérifications.
- N'imprimez jamais les lignes complètes de
.obsutilconfigsur la console. - Traitez la sortie console comme un contexte de modèle ; toute valeur divulguée est un incident de sécurité.
Exemples de vérification sécurisée (statut uniquement, pas de valeurs secrètes) :
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"
}
N'utilisez pas :
cat ~/.obsutilconfiggrep -E "ak|sk|token" ~/.obsutilconfig
Intention d'Utilisation des Scripts
Utilisez les scripts fournis par défaut pour les tâches pour lesquelles ils ont été conçus. Ces scripts effectuent les opérations d'écriture que cette compétence annonce — ils ne sont pas des vérificateurs en lecture seule :
scripts/set_obs_website_sdk.pyécrit la configuration du site web du bucket (setBucketWebsite) et enregistre le domaine personnalisé (setBucketCustomDomain) sur le bucket spécifié. Utilisez-le chaque fois que la tâche consiste à activer, réparer ou modifier les paramètres d'hébergement de site web statique OBS. Il lit les identifiants comme déclaré dans Portée des Capacités et des Permissions et nécessite la confirmation de l'utilisateur avant d'écrire (voir Divulgation et Confirmation des Identifiants).scripts/verify_obs_website.pyvérifie le point de terminaison du site web publié (DNS, HTTP, HTTPS) et exécute des vérifications SDK en lecture seule du bucket/région. Utilisez-le après toute modification de la configuration du site web, et également lorsque l'utilisateur demande si le site est accessible ou lors du dépannage d'erreurs 403/404.- Ne remplacez pas ces scripts par du code ad hoc ponctuel, sauf si le script lui-même est cassé et doit être corrigé ; la correction d'un script cassé est le seul cas où vous écrivez directement des appels SDK OBS.
- Utilisez les scripts pour maintenir la cohérence de la gestion des identifiants, de la construction des objets SDK et du comportement de vérification entre les exécutions.
Workflow
- Vérifiez que l'environnement d'exécution Python et le SDK OBS sont disponibles (
pip install esdk-obs-pythonsi manquant). - Vérifiez la condition préalable du domaine personnalisé (voir la section Conformité de Sécurité) :
- Confirmez que
custom_domainest fourni par l'utilisateur. - Demandez à l'utilisateur où le site sera déployé (région/juridiction) avant d'appliquer toute exigence spécifique à la région. Si l'utilisateur n'a pas de domaine et que la région de déploiement est la Chine continentale, guidez-le pour en enregistrer un sur Huawei Cloud Domain Registration et effectuer un dépôt ICP (网站备案). Pour les déploiements hors de la Chine continentale, n'imposez pas le dépôt ICP. Arrêtez-vous ici et attendez que l'utilisateur termine cette étape.
- Vérifiez si l'utilisateur gère le DNS via Huawei Cloud DNS ou un fournisseur externe.
- Si les modifications Huawei Cloud DNS font partie de cette exécution, vérifiez que
hcloudest installé et authentifié. - Si le DNS est géré en dehors de Huawei Cloud ou en dehors de cette exécution, collectez cette contrainte explicitement avant de continuer.
- Confirmez que
- Vérifiez que le bucket existe dans la région demandée (utilisez la Méthode de vérification de l'existence du bucket et de la région ci-dessous).
- Vérifiez que l'appelant a l'autorisation de mettre à jour les paramètres du site web du bucket.
- Vérifiez que la lecture anonyme est autorisée pour les fichiers du site web (utilisez la méthode dans Méthode de vérification de la lecture anonyme ci-dessous).
- Ne téléversez ni ne modifiez les objets de contenu du site web (
index.html, ressources, etc.). Supposons que le contenu existe déjà dans le bucket. - Confirmez avant d'écrire. Dites à l'utilisateur que l'étape suivante lira ses identifiants cloud (variables d'environnement /
~/.obsutilconfig) et modifiera la configuration du site web du bucket distant et la liaison du domaine personnalisé (et le DNS si demandé), et qu'il s'agit de modifications orientées production affectant le trafic en direct. Ne continuez qu'après confirmation. Exécutez ensuitescripts/set_obs_website_sdk.pyavec--custom-domain <domain>(utilisezindex.htmlsiindex_documentn'est pas fourni).- Le script existe pour maintenir une construction cohérente des objets SDK et la gestion des identifiants dans toutes les exécutions.
- Exécutez
scripts/verify_obs_website.pypour confirmer que le point de terminaison du site web est accessible et que le domaine personnalisé résout correctement. - Si la vérification échoue, diagnostiquez les causes (erreurs 403, 404, DNS) et répétez les étapes 7-8 une fois que les problèmes ont été résolus.
Méthode de vérification de l'existence du bucket et de la région
Utilisez scripts/verify_obs_website.py ou les commandes SDK directes pour vérifier l'existence du bucket et sa région.
Méthode de vérification de la lecture anonyme
Après avoir activé l'hébergement de site web statique et avant de terminer, vérifiez que les paramètres de lecture anonyme sont corrects (par exemple, via les autorisations de bucket ou les ACL). Si la lecture anonyme n'est pas autorisée, le site renverra probablement une erreur 403 lors de l'accès.
Ce qui n'est pas couvert
Déploiement de site avec authentification
Cette compétence ne gère pas l'authentification OAuth ni la liaison de certificats HTTPS personnalisés — ces fonctionnalités peuvent être ajoutées séparément par l'utilisateur.
Site dynamique / nécessitant une connexion
Cette compétence ne gère que les sites de contenu statique ; elle ne configure pas de serveurs backend pour le contenu dynamique.