Huawei Cloud OBS Website Host
Übersicht
Konfigurieren Sie einen vorhandenen Huawei Cloud OBS Bucket für das statische Website-Hosting mit dem Huawei Cloud OBS Python SDK und registrieren Sie eine benutzerdefinierte Domain für die Website.
Verwenden Sie diese Fertigkeit, wenn der Benutzer folgende Aktionen durchführen möchte:
- Aktivieren oder Reparieren des statischen OBS-Website-Hostings
- Festlegen eines Indexdokuments oder Fehlerdokuments
- Die Website über eine benutzerdefinierte Domain, die auf den OBS-Website-Endpunkt verweist, erreichbar machen
- Hinzufügen oder Reparieren einer benutzerdefinierten Domain, einschließlich Huawei Cloud DNS, sofern zutreffend
- Diagnostizieren von 403-, 404- oder DNS-Problemen auf einer gehosteten OBS-Website
Wie das Ergebnis idealerweise aussieht
Diese Fertigkeit führt Schreibvorgänge aus: Sie aktiviert das statische Website-Hosting auf einem Bucket (setBucketWebsite) und registriert die erforderliche benutzerdefinierte Domain auf diesem Bucket (setBucketCustomDomain). Wenn der Benutzer dies wünscht, erstellt/aktualisiert sie auch DNS-Einträge. Diese Schreibvorgänge werden von den enthaltenen Skripten in dieser Sitzung ausgeführt – sie werden nicht simuliert, an den Benutzer delegiert oder durch schreibgeschützte Prüfungen ersetzt. Die Überprüfung läuft nach den Schreibvorgängen, um das Ergebnis zu bestätigen.
- Das statische Website-Hosting auf dem Bucket wurde von dieser Fertigkeit aktiviert.
- Der Bucket kann
index.htmlüber den Website-Endpunkt ausliefern. - Anonyme Benutzer können den Website-Inhalt lesen.
- Ein fehlender Pfad gibt die konfigurierte Fehlerseite oder einen sauberen 404-Status zurück.
- Eine benutzerdefinierte Domain wird von dieser Fertigkeit registriert und wird über DNS auf den OBS-Website-Endpunkt aufgelöst. Eine benutzerdefinierte Domain ist zwingend erforderlich – die Standard-OBS-Bucket-Domain ist gemäß Sicherheits-Compliance-Anforderungen für die Online-Vorschau von Objekten nicht zulässig.
- Das Setup gilt erst als abgeschlossen, wenn die benutzerdefinierte Domain im Bucket registriert ist und korrekt aufgelöst wird.
- Es wird der OBS-Website-Endpunkt verwendet, nicht der reguläre Bucket-API-Endpunkt.
- Ein 403-Fehler hat normalerweise zwei häufige Ursachen: Der anonyme/öffentliche Lesezugriff ist nicht auf dem Bucket oder den Objekten aktiviert, oder dem für OBS-Operationen verwendeten AK/SK fehlen die erforderlichen IAM-Berechtigungen.
- Ein 404-Fehler bedeutet normalerweise, dass der Name des Indexdokuments oder der Upload-Pfad falsch ist.
Sicherheits-Compliance: Anforderung einer benutzerdefinierten Domain
Basierend auf den Sicherheits-Compliance-Anforderungen von Huawei Cloud ist der Standard-Domainname des OBS-Buckets (<bucket_name>.obs.<region>.myhuaweicloud.com) für die Online-Vorschau von Objekten im Bucket verboten. Eine benutzerdefinierte Domain ist daher für das statische Website-Hosting zwingend erforderlich.
Falls der Benutzer noch keine benutzerdefinierte Domain vorbereitet hat:
- Fragen Sie den Benutzer zuerst, wo die Website bereitgestellt werden soll (Bereitstellungsregion / Rechtsraum) und wo die Domain registriert wird. Wenden Sie regionsspezifische Anforderungen (wie ICP-Filing) nur dann an, wenn die Einsatzregion diese tatsächlich verlangt.
- Leiten Sie den Benutzer an, eine Domain über den Huawei Cloud Domain Registration Service oder andere gängige Domain-Registrierungsseiten zu registrieren.
- Wenn (und nur wenn) die Einsatzregion des Benutzers das chinesische Festland ist, muss die Domain außerdem das ICP-Filing (网站备案) durchlaufen, bevor sie für das Website-Hosting verwendet werden kann. Für Bereitstellungen außerhalb des chinesischen Festlands ist dieser Schritt nicht erforderlich – erlegen Sie ihn nicht auf.
- Erst nach der Regionsprüfung und, sofern zutreffend, der Bestätigung der Domain-Registrierung/Freigabe sollte die Konfiguration des statischen Website-Hostings fortgesetzt werden.
Wichtig: Fahren Sie nicht mit der Konfiguration des statischen Website-Hostings fort, bis die Voraussetzung der benutzerdefinierten Domain bestätigt ist. Die Standard-OBS-Domain ist selbst in der Testumgebung keine gültige Alternative für den Website-Zugriff.
Erforderliche Eingaben
Sammeln Sie diese, bevor Sie Änderungen vornehmen:
regionbucket_namecustom_domain(erforderlich – siehe Abschnitt zur Sicherheits-Compliance oben)index_document(optional, Standard:index.html)error_document(optional)dns_zoneoder DNS-Kontokontext (optional; nur erforderlich, wenn der Benutzer in diesem Durchlauf Änderungen an Huawei Cloud DNS wünscht)
Gehen Sie davon aus, dass die statischen Website-Dateien bereits vom Benutzer hochgeladen wurden.
Abhängigkeiten
Die Fertigkeit hängt von den folgenden Laufzeit-/Tooling-Komponenten ab:
- Python 3.10+ (erforderlich für
scripts/set_obs_website_sdk.pyundscripts/verify_obs_website.py) - Huawei OBS Python SDK Paket:
esdk-obs-python obsutil(zum Generieren und Verwalten der.obsutilconfig-Anmeldeinformationskonfiguration)- Huawei Cloud AK/SK Anmeldeinformationen (aus
.obsutilconfig) - Netzwerkzugriff auf den OBS-Endpunkt und den Website-Endpunkt
hcloudCLI (nur erforderlich, wenn diese Fertigkeit Huawei Cloud DNS-Eintragsoperationen verwaltet)- dig / nslookup (optional)
Installationsbefehl:
pip install esdk-obs-python
Umfang der Fähigkeiten und Berechtigungen
Diese Fertigkeit deklariert ihren genauen Fähigkeits- und Berechtigungsumfang, damit Aufrufer und Prüfer wissen, was sie tun kann und was nicht, bevor sie aufgerufen wird:
Was sie schreiben (ändern) kann:
- Nur die Website-Konfiguration des benutzerdefinierten OBS-Buckets (
setBucketWebsite: Indexdokument, Fehlerdokument), überscripts/set_obs_website_sdk.py. - Die Bindung der benutzerdefinierten Domain an denselben Bucket (
setBucketCustomDomain), einschließlich einer optionalen HTTPS-Zertifikatsbindung. - DNS-Einträge in einer Huawei Cloud DNS-Zone nur dann, wenn der Benutzer in diesem Durchlauf explizit Änderungen an Huawei Cloud DNS anfordert und die Zone bereitstellt/angibt (
hcloud DNS CreateRecordSet). - Dies sind produktionsrelevante Änderungen: Sie können den Live-Web-Traffic für die benutzerdefinierte Domain beeinflussen und Bucket-Inhalte öffentlich zugänglich machen. Vor jedem Schreibvorgang werden Warnungen ausgegeben (siehe Arbeitsablauf).
Gelesene Anmeldeinformationen (und deren Quellen):
scripts/set_obs_website_sdk.pyundscripts/verify_obs_website.pylesen Anmeldeinformationen in der folgenden Prioritätsreihenfolge: (1) CLI-Flags--access-key/--secret-key/--security-token, (2) UmgebungsvariablenHW_ACCESS_KEY/HW_SECRET_KEY/HW_SECURITY_TOKEN, (3) lokale~/.obsutilconfig.hcloudverwendet sein eigenes konfiguriertes CLI-Profil für DNS-Operationen.- Es wird nur das Vorhandensein von Anmeldeinformationen gemeldet; Werte werden niemals ausgegeben, zurückgesendet oder auf die Festplatte geschrieben.
Netzwerkzugriff:
- Nur auf den OBS-Dienst-Endpunkt (
https://obs.<region>.myhuaweicloud.com), den OBS-Website-Endpunkt und (nur auf Anfrage) den Huawei Cloud DNS-Dienst der konfigurierten Region.
Was sie niemals tut:
- Lädt niemals Objekte/Inhalte im Bucket hoch, löscht oder ändert sie.
- Berührt niemals andere Buckets, Domains, DNS-Zonen oder Anmeldeinformationen als die vom Benutzer angegebenen.
- Erstellt niemals Cron-Jobs, Startskripte oder Zustandsdateien und speichert niemals Daten zwischen Sitzungen (siehe "Sitzungsverhalten" unten).
- Gibt die gelesenen Anmeldeinformationen niemals an Dritte weiter.
Sitzungsverhalten
Diese Fertigkeit führt einen einmaligen Vorgang in einer einzigen Sitzung aus: Sie führt die angeforderten OBS/DNS-API-Aufrufe während der aktuellen Ausführung durch und beendet sich dann. Sie erstellt keine Cron-Jobs, startet keine Skripte, keine Hintergrunddienste und keine Zustandsdateien und speichert keine Konfiguration für spätere Ausführungen. Jeder Aufruf ist unabhängig und muss vom Benutzer ausgelöst werden; nichts wird automatisch geplant oder wiederholt. Langlaufende oder extern geplante Schritte (z. B. Warten auf DNS-Propagation) werden dem Benutzer als etwas beschrieben, das überprüft werden muss, aber nicht als Job von dieser Fertigkeit installiert.
Offenlegung und Bestätigung von Anmeldeinformationen
Da scripts/set_obs_website_sdk.py Cloud-Anmeldeinformationen aus Ihrer Umgebung oder der lokalen ~/.obsutilconfig liest und dann die entfernte Bucket-/DNS-Konfiguration ändert, hat die Ausführung reale Sicherheitsauswirkungen. Vor der Ausführung müssen Sie:
- Dem Benutzer mitteilen, dass das Skript Anmeldeinformationen aus seinen CLI-Flags / Umgebungsvariablen /
~/.obsutilconfiglesen und die Website-Konfiguration und die benutzerdefinierte Domain (und DNS, falls angefordert) des entfernten Buckets ändern wird. - Die Bestätigung des Benutzers einholen, dass der Bucket-Name, die benutzerdefinierte Domain und die DNS-Zone (falls vorhanden) korrekt sind und dass er die Änderung autorisiert.
- Erst nach dieser Bestätigung das Skript ausführen.
hcloud CLI Referenz
Laden Sie references/cli-installation-guide.md, wenn die Installation und Konfiguration der hcloud CLI oder von obsutil benötigt wird.
Laden Sie references/hcloud-dns-obs-website.md, wenn Sie DNS-CNAME-Einträge für benutzerdefinierte Domains des OBS-Website-Hostings erstellen oder verwalten (Schritt-für-Schritt-Anleitung mit hcloud DNS CreateRecordSet-Befehlen).
Sicherheitshinweis:
- Hartcodieren Sie niemals AK/SK in Skripten oder eingecheckten Dateien.
- Bevorzugen Sie Umgebungsvariablen für SDK-Skripte und sichere lokale Profil-Speicherung für die CLI-Nutzung.
obsutil-Konfigurationsabhängigkeit
Laden Sie references/cli-installation-guide.md, wenn Sie obsutil-Installation oder Anleitungen zur .obsutilconfig-Einrichtung benötigen.
Das Python SDK-Hilfsskript (scripts/set_obs_website_sdk.py) liest Anmeldeinformationen standardmäßig aus:
- CLI-Flags (
--access-key,--secret-key,--security-token) - Umgebungsvariablen (
HW_ACCESS_KEY,HW_SECRET_KEY,HW_SECURITY_TOKEN) .obsutilconfig
Wenn ak/sk in allen Quellen leer sind, muss das Skript anhalten und den Benutzer bitten, die fehlenden Schlüssel in .obsutilconfig zu ergänzen (oder CLI-/Umgebungs-Anmeldeinformationen bereitzustellen).
Regel für die Prüfung von Anmeldeinformationen:
- Melden Sie nur das Vorhandensein/Fehlen von Schlüsseln (
ak,sk,securitytoken). - Drucken Sie niemals Werte von Anmeldeinformationen während der Prüfungen.
- Drucken Sie niemals vollständige Zeilen aus
.obsutilconfigauf der Konsole. - Behandeln Sie die Konsolenausgabe als Modellkontext; jeder durchgesickerte Wert ist ein Sicherheitsvorfall.
Beispiele für sichere Prüfungen (nur Status, keine Geheimwerte):
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"
}
Nicht verwenden:
cat ~/.obsutilconfiggrep -E "ak|sk|token" ~/.obsutilconfig
Verwendungszweck der Skripte
Verwenden Sie standardmäßig die enthaltenen Skripte für die Aufgaben, für die sie entwickelt wurden. Diese Skripte führen die Schreibvorgänge aus, die diese Fertigkeit bewirbt – sie sind keine schreibgeschützten Prüfungen:
scripts/set_obs_website_sdk.pyschreibt die Bucket-Website-Konfiguration (setBucketWebsite) und registriert die benutzerdefinierte Domain (setBucketCustomDomain) auf dem angegebenen Bucket. Verwenden Sie es immer dann, wenn die Aufgabe darin besteht, die Einstellungen für das statische OBS-Website-Hosting zu aktivieren, zu reparieren oder zu ändern. Es liest Anmeldeinformationen wie im Umfang der Fähigkeiten und Berechtigungen deklariert und erfordert die Bestätigung des Benutzers vor dem Schreiben (siehe Offenlegung und Bestätigung von Anmeldeinformationen).scripts/verify_obs_website.pyüberprüft den veröffentlichten Website-Endpunkt (DNS, HTTP, HTTPS) und führt schreibgeschützte SDK-Bucket-/Regionsprüfungen durch. Verwenden Sie es nach jeder Änderung der Website-Konfiguration und auch, wenn der Benutzer fragt, ob die Website erreichbar ist, oder bei der Fehlerbehebung von 403/404-Verhalten.- Ersetzen Sie diese Skripte nicht durch Ad-hoc-Einmal-Code, es sei denn, das Skript selbst ist defekt und muss repariert werden; das Patchen eines defekten Skripts ist der einzige Fall, in dem Sie OBS-SDK-Aufrufe direkt schreiben.
- Verwenden Sie die Skripte, um die Handhabung von Anmeldeinformationen, die Erstellung von SDK-Objekten und das Überprüfungsverhalten über alle Ausführungen hinweg konsistent zu halten.
Arbeitsablauf
- Überprüfen Sie, ob Python-Laufzeit und OBS-SDK verfügbar sind (
pip install esdk-obs-python, falls nicht vorhanden). - Überprüfen Sie die Voraussetzung der benutzerdefinierten Domain (siehe Abschnitt Sicherheits-Compliance):
- Bestätigen Sie, dass
custom_domainvom Benutzer bereitgestellt wurde. - Fragen Sie den Benutzer, wo die Website bereitgestellt werden soll (Region/Rechtsraum), bevor Sie regionsspezifische Anforderungen anwenden. Wenn der Benutzer keine Domain hat und die Bereitstellungsregion das chinesische Festland ist, leiten Sie ihn zur Registrierung einer Domain bei der Huawei Cloud Domain Registration an und fordern Sie den Abschluss des ICP-Filing (网站备案). Für Bereitstellungen außerhalb des chinesischen Festlands erlegen Sie das ICP-Filing nicht auf. Halten Sie hier an und warten Sie, bis der Benutzer diesen Schritt abgeschlossen hat.
- Prüfen Sie, ob der Benutzer DNS in Huawei Cloud DNS oder bei einem externen Anbieter verwaltet.
- Wenn Änderungen an Huawei Cloud DNS Teil dieses Durchlaufs sind, überprüfen Sie, ob
hcloudinstalliert und authentifiziert ist. - Wenn DNS außerhalb von Huawei Cloud oder außerhalb dieses Durchlaufs verwaltet wird, erfassen Sie diese Einschränkung explizit, bevor Sie fortfahren.
- Bestätigen Sie, dass
- Überprüfen Sie, ob der Bucket in der angeforderten Region existiert (verwenden Sie die Methode zur Prüfung der Bucket-Existenz und -Region unten).
- Prüfen Sie, ob der Aufrufer die Berechtigung hat, die Bucket-Website-Einstellungen zu aktualisieren.
- Prüfen Sie, ob der anonyme Lesezugriff für die Website-Dateien erlaubt ist (verwenden Sie die Methode im Abschnitt Methode zur Prüfung des anonymen Lesezugriffs unten).
- Laden Sie keine Website-Inhaltsobjekte hoch oder ändern Sie sie nicht (
index.html, Assets usw.). Gehen Sie davon aus, dass der Inhalt bereits im Bucket vorhanden ist. - Bestätigen vor dem Schreiben. Teilen Sie dem Benutzer mit, dass der nächste Schritt seine Cloud-Anmeldeinformationen (Umgebungsvariablen /
~/.obsutilconfig) liest und die Website-Konfiguration und die Bindung der benutzerdefinierten Domain (und DNS, falls angefordert) des entfernten Buckets ändert, und dass dies produktionsrelevante Änderungen sind, die den Live-Traffic beeinflussen. Fahren Sie nur nach Bestätigung fort. Führen Sie dannscripts/set_obs_website_sdk.pymit--custom-domain <domain>aus (verwenden Sieindex.html, fallsindex_documentnicht bereitgestellt wird).- Das Skript dient dazu, den Bau von SDK-Objekten konsistent zu halten.