Huawei Cloud OBS Website Host

Configurez l'hébergement statique d'un bucket OBS Huawei Cloud avec le SDK Python et un domaine personnalisé. Activer ou réparer l'hébergement, définir les pages d'index et d'erreur, exposer un bucket existant via un domaine personnalisé, et lier ce domaine avec Huawei Cloud DNS.

Qu'est-ce que Huawei Cloud OBS Website Host ?

Cette compétence configure l'hébergement de site web statique sur un bucket OBS Huawei Cloud existant en utilisant le SDK Python OBS et enregistre un domaine personnalisé pour le site. Elle permet d'activer ou de réparer l'hébergement de site statique, de définir le document d'index et le document d'erreur, de rendre le site accessible via un domaine personnalisé pointant vers le point de terminaison du site statique OBS, et d'ajouter ou de réparer un domaine personnalisé, y compris les enregistrements DNS Huawei Cloud si nécessaire. La compétence effectue des **opérations d'écriture** réelles (setBucketWebsite, setBucketCustomDomain) et une vérification après écriture. Conformément aux exigences de conformité de sécurité Huawei Cloud, un domaine personnalisé est **obligatoire** ; le nom de domaine par défaut du bucket est interdit pour l'hébergement. Le flux de travail inclut la vérification des prérequis (région, domaine personnalisé, DNS), la validation des identifiants (via variables d'environnement, .obsutilconfig ou indicateurs CLI), et l'obtention de la confirmation explicite de l'utilisateur avant toute modification. Les modifications sont limitées au bucket spécifié par l'utilisateur et à la zone DNS demandée ; la compétence ne charge, ne supprime ni ne modifie jamais le contenu des objets du bucket.

Compatible avec~Claude Code~Codex CLI~Cursor
Part ofMobile
npx skills add https://github.com/huaweicloud/huaweicloud-skills/tree/HEAD/skills/storage/obs/huawei-cloud-obs-website-host

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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.html depuis 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é :

  1. 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.
  2. 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.
  3. 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.
  4. 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 :

  • region
  • bucket_name
  • custom_domain (obligatoire — voir la section Conformité de Sécurité ci-dessus)
  • index_document (optionnel, par défaut : index.html)
  • error_document (optionnel)
  • dns_zone ou 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.py et scripts/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), via scripts/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.py et scripts/verify_obs_website.py lisent les identifiants depuis, par ordre de priorité : (1) indicateurs CLI --access-key/--secret-key/--security-token, (2) variables d'environnement HW_ACCESS_KEY / HW_SECRET_KEY / HW_SECURITY_TOKEN, (3) fichier local ~/.obsutilconfig. hcloud utilise 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 :

  1. 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é).
  2. 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.
  3. 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 :

  1. Indicateurs CLI (--access-key, --secret-key, --security-token)
  2. Variables d'environnement (HW_ACCESS_KEY, HW_SECRET_KEY, HW_SECURITY_TOKEN)
  3. .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 .obsutilconfig sur 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 ~/.obsutilconfig
  • grep -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.py vé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

  1. Vérifiez que l'environnement d'exécution Python et le SDK OBS sont disponibles (pip install esdk-obs-python si manquant).
  2. Vérifiez la condition préalable du domaine personnalisé (voir la section Conformité de Sécurité) :
    • Confirmez que custom_domain est 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 hcloud est 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.
  3. 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).
  4. Vérifiez que l'appelant a l'autorisation de mettre à jour les paramètres du site web du bucket.
  5. 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).
  6. 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.
  7. 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 ensuite scripts/set_obs_website_sdk.py avec --custom-domain <domain> (utilisez index.html si index_document n'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.
  8. Exécutez scripts/verify_obs_website.py pour confirmer que le point de terminaison du site web est accessible et que le domaine personnalisé résout correctement.
  9. 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.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

huaweicloud/huawei-cloud-dws-io-diag

DWS cluster I/O overload root cause diagnosis skill, based on KooCLI v3.2.0+ and DWS Autopilot MCP Server. Automatically collects I/O metrics, analyzes root causes (customer-side / system-side) via three-stage decision tree, and outputs a standardized diagnosis report. Applicable to DWS cluster I/O usage too high, I/O alarms, disk I/O load anomaly scenarios. Trigger words: "I/O高", "I/O告警", "I/O诊断", "I/O过载", "IO高", "IO告警", "IO诊断", "IO过载", "磁盘IO负载异常", "util打满", "await高", "high I/O", "I/O alarm", "I/O diagnosis"

huaweicloud/huawei-cloud-ecs-manage

Use when managing Huawei Cloud ECS (Elastic Cloud Server / 弹性云服务器) instances — lifecycle management (create / start / stop / restart / delete), day-to-day change operations (resize / reinstall OS / reset password / replace keypair / bind & unbind EIP / change security group / add & remove NIC / attach & detach volume), instance querying, quota/flavor/image inspection, mandatory async-job polling after every write, and multi-step root-cause diagnosis of ECS instance creation failures (quota → flavor → image → network → keypair → disk). Provides 23 huawei_* actions: huawei_list_ecs_instances, huawei_get_ecs_instance, huawei_list_ecs_flavors, huawei_list_ecs_images, huawei_list_ecs_quotas, huawei_diagnose_ecs_create_failure, huawei_analyze_ecs_health, huawei_create_ecs_instance, huawei_start_ecs_instance, huawei_stop_ecs_instance, huawei_restart_ecs_instance, huawei_delete_ecs_instance, huawei_resize_ecs_instance, huawei_reinstall_ecs_os, huawei_reset_ecs_password, huawei_replace_ecs_keypair, huawei_bind_ecs_eip

huaweicloud/huawei-cloud-ges-graph

Provides access guide for Huawei Cloud Graph Database GES service. Covers Cypher queries, GQL queries, schema/label management, summary info queries, graph data editing and more. Use this skill when users want to operate Huawei Cloud graph database GES service via terminal.

huaweicloud/huawei-cloud-obs-upload

Upload a local file or directory to a specified Huawei Cloud OBS (Object Storage Service) bucket with obsutil, and set up a scheduled/periodic upload task (crontab) that syncs a local directory to an OBS bucket. Also lists OBS buckets with storage capacity and object count. Use this skill when the user wants to: (1) upload a specific local file or directory to a named OBS bucket, (2) set up a scheduled/periodic upload task that automatically syncs a local directory to a named OBS bucket, (3) list their OBS buckets and check capacity and object count. Triggers include: user mentions "upload to OBS bucket", "上传文件到OBS", "上传目录到OBS", "定时上传到OBS", "目录同步到OBS桶", "OBS scheduled upload", "OBS周期上传", "OBS bucket capacity check", "OBS桶容量查询". Generic phrases such as "object storage", "upload file" or "upload directory" alone are NOT sufficient to trigger this skill.

Skills associés