Durchgängige Sicherheit auf eine Cloudanwendung anwenden
Für dieses Lernprogramm können Kosten anfallen. Mit dem Kostenschätzer können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung generieren.
Dieses Lernprogramm führt Sie durch die wichtigsten Sicherheitsservices, die im IBM Cloud®-Katalog verfügbar sind, und zeigt, wie Sie diese zusammen verwenden können. Eine Anwendung, die eine gemeinsame Dateinutzung ermöglicht, setzt Sicherheitskonzepte in die Praxis um.
Ohne ein klares Verständnis potenzieller Sicherheitsrisiken und dem Schutz vor solchen Bedrohungen ist keine Anwendungsarchitektur vollständig. Anwendungsdaten sind eine kritische Ressource, die nicht verloren, beeinträchtigt oder gestohlen werden darf. Darüber hinaus sollten ruhende Daten und Daten bei der Übertragung durch Verschlüsselungsverfahren geschützt werden. Das Verschlüsseln von ruhenden Daten schützt Informationen auch dann vor einer Offenlegung, wenn die Daten verloren gehen oder gestohlen werden. Das Verschlüsseln von Daten bei der Übertragung (z. B. über das Internet) durch Methoden wie HTTPS, SSL und TLS verhindert das Ausspionieren und so genannte Man-in-the-Middle-Attacken.
Das Authentifizieren und Autorisieren des Zugriffs von Benutzern auf bestimmte Ressourcen ist eine weitere allgemeine Voraussetzung für viele Anwendungen. Dabei müssen möglicherweise unterschiedliche Authentifizierungsschemata unterstützt werden: Kunden und Lieferanten, die soziale Identitäten verwenden, Partner aus Cloud-gehosteten Verzeichnissen und Mitarbeiter des Identitätsproviders einer Organisation.
Ziele
- Verschlüsseln Sie Inhalte in Speicher-Buckets mit Ihren eigenen Verschlüsselungsschlüsseln.
- Benutzer müssen sich vor dem Zugriff auf eine Anwendung authentifizieren.
- Überwachung und Prüfung sicherheitsrelevanter API-Aufrufe und anderer Aktionen in Cloud-Diensten.
Das Lernprogramm bietet eine Beispielanwendung, mit der Gruppen von Benutzern Dateien in einen gemeinsamen Speicherpool hochladen und über gemeinsam nutzbare Links Zugriff auf diese Dateien erhalten können. Die Anwendung wird in Node.js geschrieben und als Container entweder an IBM Cloud Kubernetes Service oder Red Hat OpenShift on IBM Cloud gesendet. Dabei werden mehrere sicherheitsrelevante Services und Funktionen genutzt, um das Sicherheitsniveau der Anwendung zu verbessern.
Dieses Tutorial funktioniert mit einem Cluster, der in der klassischen Infrastruktur oder in der VPC-Infrastruktur ausgeführt wird.
- Der Benutzer stellt eine Verbindung zur Anwendung her.
- Wenn Sie eine benutzerdefinierte Domain und ein TLS-Zertifikat verwenden, wird das Zertifikat von Secrets Manager verwaltet und von dort bereitgestellt.
- App ID sichert die Anwendung und leitet den Benutzer zu der Authentifizierungsseite um. Benutzer können sich auch anmelden.
- Die Anwendung wird in einem Kubernetes-Cluster aus einem Image ausgeführt, das in der Container Registry gespeichert ist. Dieses Image wird automatisch auf Sicherheitslücken überprüft.
- Hochgeladene Dateien werden in Object Storage mit den zugehörigen Metadaten aus IBM Cloudant gespeichert.
- Objektspeicherbuckets, App IDund Secrets ManagerServices nutzen einen vom Benutzer bereitgestellten Schlüssel zum Verschlüsseln von Daten.
- Aktivitäten des Anwendungsmanagements werden von IBM Cloud Activity Tracker Event Routing protokolliert und zur Analyse an IBM Cloud Logs weitergeleitet.
Vorbereitende Schritte
Für dieses Lernprogramm ist Folgendes erforderlich:
- IBM Cloud CLI,
- IBM Cloud Kubernetes Service-Plug-in (
kubernetes-service) - Container Registry-Plug-in (
container-registry)
- IBM Cloud Kubernetes Service-Plug-in (
kubectlzur Interaktion mit Kubernetes-Clusterngitzum Klonen des Quellcode-Repositorys
Anweisungen zum Herunterladen und Installieren dieser Tools für Ihre Betriebsumgebung finden Sie im Leitfaden "Erste Schritte mit Lösungs-Tutorials ".
Um die Installation dieser Tools zu vermeiden, können Sie die Cloud Shell über die Konsole IBM Cloud
Services erstellen
Im nächsten Abschnitt werden Sie die Services erstellen, die von der Anwendung verwendet werden.
Entscheiden, wo die Anwendung bereitgestellt werden soll
Die Position und die Ressourcengruppe aller Ressourcen, die Sie erstellen, müssen mit der Position und der Ressourcengruppe des Kubernetes-Clusters übereinstimmen.
Benutzer- und Anwendungsaktivitäten erfassen
Der IBM Cloud Activity Tracker Event Routing muss so konfiguriert sein, dass er Auditing-Ereignisse an eine IBM Cloud Logs Zielinstanz weiterleitet. Leiten Sie Audit-Ereignisse weiter, wie in der Konfiguration eines IBM Logs-Ziels beschrieben, falls dies noch nicht in Ihrem Konto konfiguriert ist.
Am Ende dieses Lernprogramms werden Sie die Ereignisse überprüfen, die durch die Ausführung der Schritte des Lernprogramms generiert wurden.
Cluster für die Anwendung erstellen
IBM Cloud Kubernetes Service und Red Hat OpenShift on IBM Cloud stellen Umgebungen zur Bereitstellung hoch verfügbarer Apps in Containern bereit, die in Kubernetes-Clustern ausgeführt werden.
Überspringen Sie diesen Abschnitt, wenn Sie bereits einen Kubernetes-Cluster haben, den Sie in diesem Tutorial wiederverwenden möchten. Im weiteren Verlauf dieses Tutorials wird der Clustername als "Secure-File-Storage-Cluster" bezeichnet. Ersetzen Sie ihn einfach durch den Namen Ihres Clusters.
Ein Mindestcluster mit einer (1) Zone, einem (1) Workerknoten und der kleinsten verfügbaren Größe (Version) ist für dieses Lernprogramm ausreichend. Um Ihren IBM Cloud Kubernetes Service-Cluster zu erstellen, folgen Sie entweder den Schritten für Erstellung von VPC-Clustern oder Erstellung von klassischen Clustern. Um Ihren Red Hat OpenShift on IBM Cloud-Cluster zu erstellen, folgen Sie entweder den Schritten für Erstellung von VPC-Clustern oder Erstellung von klassischen Clustern.
Eigene Verschlüsselungsschlüssel verwenden
Key Protect unterstützt Sie bei der Bereitstellung verschlüsselter Schlüssel für Apps in allen IBM Cloud-Services. Key Protect und IBM Cloud Object Storage arbeiten Sie zusammen, um Ihre ruhenden Daten zu schützen. In diesem Abschnitt erstellen Sie einen Rootschlüssel für das Speicherbucket.
- Erstellen Sie eine Instanz von Key Protect.
- Wählen Sie einen Standort aus.
- Setzen Sie den Namen auf
secure-file-storage-kp. - Wählen Sie die Ressourcengruppe aus, in der Sie die Serviceinstanz erstellen möchten, und klicken Sie auf Erstellen.
- Klicken Sie unter Schlüssel auf die Schaltfläche Hinzufügen, um einen neuen Rootschlüssel zu erstellen. Er wird zum Verschlüsseln des Speicherbuckets und App ID-Daten verwendet.
- Setzen Sie den Schlüsseltyp auf Rootschlüssel.
- Setzen Sie den Namen auf
secure-file-storage-root-enckey. - Dann Schlüssel hinzufügen.
Generieren und verwalten Sie Ihren eigenen Schlüssel (BYOK, Bring your own key), indem Sie einen vorhandenen Rootschlüssel importieren.
Speicher für Benutzerdateien einrichten
Die Anwendung für die gemeinsame Nutzung von Dateien speichert Dateien im E-Mail-Postfach Object Storage. Die Beziehung zwischen Dateien und Benutzern wird als Metadaten in der IBM Cloudant-Datenbank gespeichert. In diesem Abschnitt erstellen und konfigurieren Sie diese Services.
Ein Bucket für den Inhalt
- Erstellen Sie eine Instanz von Object Storage.
- Wählen Sie einen Standardplan aus und setzen Sie den Namen auf
secure-file-storage-cos. - Verwenden Sie die gleiche Ressourcengruppe wie für die vorherigen Services und klicken Sie auf Erstellen.
- Wählen Sie einen Standardplan aus und setzen Sie den Namen auf
- Erstellen Sie unter Serviceberechtigungsnachweise einen neuen Berechtigungsnachweis.
- Setzen Sie den Namen auf
secure-file-storage-cos-acckey. - Wählen Sie für Rolle Schreibberechtigter aus.
- Markieren Sie unter Erweiterte Optionen die Option HMAC-Berechtigungsnachweis einschließen. Dies ist erforderlich, um bereits signierte URLs zu generieren.
- Klicken Sie auf Hinzufügen.
- Notieren Sie sich die Berechtigungsnachweise. Sie benötigen diese in einem späteren Schritt.
- Setzen Sie den Namen auf
- Klicken Sie in der Navigationsseitenleiste auf Endpunkte:
- Setzen Sie Ausfallsicherheit auf Regional und setzen Sie den Standort auf die Zielposition:
- Für die klassische Infrastruktur: Kopieren Sie den Privaten Serviceendpunkt. Dieser wird später bei der Konfiguration der Anwendung verwendet.
- Für VPC-Infrastruktur: Kopieren Sie den Serviceendpunkt Direkt. Dieser wird später bei der Konfiguration der Anwendung verwendet.
Vor der Erstellung des Buckets erteilen Sie der Object Storage-Serviceinstanz Zugriff auf den Rootschlüssel, der in der Key Protect-Serviceinstanz gespeichert ist.
- Gehen Sie in der IBM Cloud-Konsole zu "Verwalten" > "Zugriff(IAM)" > "Berechtigungen ".
- Klicken Sie auf die Schaltfläche Erstellen.
- Wählen Sie im Menü Quellenservice die Option Cloud Object Storage aus.
- Wechseln Sie zu Ressourcen basierend auf ausgewählten Attributen, wählen Sie Quellenserviceinstanz aus und wählen Sie die zuvor erstellte Object StorageServiceinstanz aus.
- Wählen Sie im Menü Zielservice die Option Key Protect aus.
- Wechseln Sie zu Ressourcen basierend auf ausgewählten Attributen, wählen Sie Instanz-ID aus und wählen Sie die Key ProtectServiceinstanz aus, die zuvor erstellt wurde.
- Aktivieren Sie die Rolle Leseberechtigter.
- Klicken Sie auf die Schaltfläche Autorisieren.
Erstellen Sie schließlich das Bucket.
- Greifen Sie über die Ressourcenliste unter "Speicher" auf die Object Storage-Serviceinstanz zu.
- Klicken Sie auf "Eimer erstellen " und dann auf "Eimer anpassen ".
- Verwenden Sie einen eindeutigen Wert für name, z. B.
<your-initials>-secure-file-upload. - Setzen Sie Ausfallsicherheit auf Regional.
- Setzen Sie Standort auf denselben Standort, an dem Sie die Key Protect-Serviceinstanz erstellt haben.
- Setzen Sie Speicherklasse auf Standard .
- Verwenden Sie einen eindeutigen Wert für name, z. B.
- Aktivieren Sie unter Serviceintegrationen (optional) / Verschlüsselung die Schlüsselverwaltung.
- Wählen Sie die zuvor Key Protecterstellte Serviceinstanz aus, indem Sie auf Vorhandene Instanz verwenden klicken
- Wählen Sie secure-file-storage-root-enckey als Schlüssel aus und klicken Sie auf Schlüssel zuordnen.
- Aktivieren Sie unter Service-Integrationen (optional) / Überwachung & Aktivitätsverfolgung die Aktivitätsverfolgung, um Audit-Ereignisse für die Analyse aufzubewahren.
- Nachdem Sie auf das Häkchen geklickt haben, sollten die Serviceinformationen für die Activity Tracker-Instanz in der Region angezeigt werden.
- Aktivieren Sie nun Datenereignisse verfolgen und wählen Sie lesen & schreiben als Datenereignisse aus.
- Klicken Sie auf Bucket erstellen.
Eine Datenbank ordnet Beziehungen zwischen Benutzern und ihren Dateien zu
Die IBM Cloudant-Datenbank enthält Metadaten für alle Dateien, die von der Anwendung hochgeladen werden.
- Erstellen Sie eine Instanz des IBM Cloudant-Service.
- Wählen Sie Cloudant als Angebot aus.
- Wählen Sie eine Multi-Tenant-Umgebung und eine Region aus, die mit den vorherigen Services identisch ist.
- Setzen Sie den Namen auf
secure-file-storage-cloudant. - Verwenden Sie die gleiche Ressourcengruppe wie für die vorherigen Services.
- Legen Sie für Authentifizierungsmethode den Wert IAM fest.
- Klicken Sie auf Erstellen.
- Suchen Sie, nachdem Sie wieder die Ressourcenliste aufgerufen haben, den neu erstellten Service und klicken Sie auf ihn. Hinweis: Sie müssen warten, bis der Status auf "Aktiv" geändert wird.
- Erstellen Sie unter Serviceberechtigungsnachweise einen neuen Berechtigungsnachweis.
- Setzen Sie den Namen auf
secure-file-storage-cloudant-acckey. - Wählen Sie für Rolle die Option Manager aus.
- Behalten Sie die Standardwerte für die übrigen Felder bei.
- Klicken Sie auf Hinzufügen.
- Erweitern Sie die neu erstellten Berechtigungsnachweise und notieren Sie sich die Werte. Sie benötigen diese in einem späteren Schritt.
- Klicken Sie unter Verwalten auf Dashboard starten.
- Klicken Sie auf "Datenbank erstellen ", um eine nicht partitionierte Datenbank mit dem Namen "
secure-file-storage-metadata" zu erstellen.
Benutzer authentifizieren
Mit App ID können Sie Ressourcen sichern und die Authentifizierung zu Ihren Anwendungen hinzufügen. Als Alternative, die in diesem Lernprogramm nicht verwendet wird, kann App ID Integrieren mit Kubernetes Service Benutzer authentifizieren, die auf im Cluster implementierte Anwendungen zugreifen.
Erteilen Sie vor dem Erstellen des App IDService den Servicezugriff auf Key Protect-Service. Sie müssen der Kontoeigner oder ein Administrator für die Instanz von Key Protectsein, mit der Sie arbeiten. Darüber hinaus benötigen Sie mindestens die Zugriffsberechtigung eines Anzeigeberechtigten für den App ID-Service.
- Gehen Sie zu "Verwalten" > "IAM-Zugriff" > "Berechtigungen " und klicken Sie auf "Erstellen ".
- Wählen Sie den App ID dienst als Quelldienst aus.
- Wählen Sie Key Protect als Zielservice aus.
- Wechseln Sie zu Ressourcen basierend auf ausgewählten Attributen, wählen Sie Instanz-ID aus und wählen Sie die Key ProtectServiceinstanz aus, die zuvor erstellt wurde.
- Ordnen Sie die Rolle Reader unter "Servicezugriff" zu.
- Klicken Sie auf Autorisieren, um die delegierte Autorisierung zu bestätigen.
Jetzt erstellen Sie eine Instanz des App ID-Service.
-
Navigieren Sie zur App ID seite zur Erstellung von Diensten.
- Verwenden Sie denselben Standort, der für die vorherigen Services verwendet wurde.
- Wählen Sie für den Plan die Option Gestaffelte Preisstufe aus.
- Setzen Sie den Servicenamen auf
secure-file-storage-appid. - Wählen Sie eine Ressourcengruppe aus, die mit den vorherigen Services identisch ist.
- Wählen Sie den berechtigten Key ProtectService**-Name** und Rootschlüssel aus den jeweiligen Dropdown-Menüs aus.
- Klicken Sie auf Erstellen.
-
Fügen Sie auf der Registerkarte Authentifizierungseinstellungen unter Authentifizierung verwalten eine Web-Weiterleitungs-URL hinzu, die auf die Domäne verweist, die Sie für die Anwendung verwenden möchten. Das URL-Format lautet
https://secure-file-storage.<Ingress subdomain>/redirect_uri. Beispiel:- mit der Ingress-Unterdomäne:
mycluster-1234-d123456789.us-south.containers.appdomain.cloud - die Weiterleitung von URL ist
https://secure-file-storage.mycluster-1234-d123456789.us-south.containers.appdomain.cloud/redirect_uri.
App ID erfordert die Webumleitung URL zu https:// oder http://. Sie können Ihre Ingress-Subdomain im Cluster-Dashboard oder unter
ibmcloud ks cluster get --cluster <cluster-name>einsehen. - mit der Ingress-Unterdomäne:
-
Aktivieren Sie auf derselben Registerkarte unter Authentifizierungseinstellungen unter Laufzeitaktivität die Erfassung von Ereignissen in IBM Cloud Activity Tracker Event Routing.
-
Serviceberechtigungsnachweise erstellen:
- Erstellen Sie unter Serviceberechtigungsnachweise einen neuen Berechtigungsnachweis.
- Setzen Sie den Namen auf
secure-file-storage-appid-acckey. - Wählen Sie für Rolle die Option Manager aus.
- Behalten Sie die Standardwerte für die übrigen Felder bei.
- Klicken Sie auf Hinzufügen.
Sie sollten die verwendeten Identitätsprovider sowie die Optionen für die Anmeldung und Benutzerverwaltung im App ID-Dashboard anpassen. In diesem Lernprogramm werden zur Vereinfachung die Standardwerte verwendet. In einer Produktionsumgebung sollten Sie die Verwendung der Mehrfaktorauthentifizierung (MFA) und von erweiterten Kennwortregeln in Betracht ziehen.
App bereitstellen
Alle Services sind konfiguriert. In diesem Abschnitt stellen Sie nun die Anwendung 'tutorial' im Cluster bereit. All dies kann von einer Shell-Umgebung (Terminal) aus durchgeführt werden.
Code abrufen
- Rufen Sie den Anwendungscode ab:
git clone https://github.com/IBM-Cloud/secure-file-storage - Wechseln Sie in das Verzeichnis secure-file-storage/app:
cd secure-file-storage/app
Konfigurationseinstellungen und Berechtigungsnachweise eingeben
-
Wenn Sie nicht angemeldet sind, verwenden Sie
ibmcloud loginoderibmcloud login --sso, um sich interaktiv anzumelden. Wählen Sie Ihre IBM Cloud-Region und -Ressourcengruppe als Ziel aus.ibmcloud target -r <region> -g <resource_group>Weitere CLI-Befehle finden Sie im Abschnitt IBM Cloud Allgemeine CLI-Befehle (ibmcloud) in der Dokumentation.
-
Legen Sie im nächsten Schritt die Umgebungsvariablen fest, die für die Generierung von Konfigurationsdateien erforderlich sind.
- Legen Sie zunächst den Clusternamen fest, indem Sie
<YOUR_CLUSTER_NAME>ersetzen:export MYCLUSTER=<YOUR_CLUSTER_NAME> - Definieren Sie die Ingress-Unterdomäne mit
ibmcloud ks-Befehlen:export INGRESS_SUBDOMAIN=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressHostname) // .ingress.hostname') - Legen Sie den geheimen Ingress-Schlüssel mit
ibmcloud ks-Befehlen fest:export INGRESS_SECRET=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressSecretName) // .ingress.secretName') - Setzen Sie den Namen des Image-Repositorys auf das vordefinierte Image
icr.io/solution-tutorials/tutorial-cloud-e2e-security:export IMAGE_REPOSITORY=icr.io/solution-tutorials/tutorial-cloud-e2e-security - Legen Sie zusätzliche Umgebungsvariablen fest, indem Sie die Standardwerte ersetzen:
export BASENAME=secure-file-storage - Legen Sie den zu verwendenden Namensbereich fest:
export TARGET_NAMESPACE=default - Die Umgebungsvariable
$IMAGE_PULL_SECRETkann optional festgelegt werden, wenn Sie einen anderen Kubernetes-Namensraum als dendefault-Namensraum und den IBM Cloud Container Registry für das Bild verwenden. Dies erfordert eine zusätzliche Kubernetes-Konfiguration (z. B. das Erstellen eines geheimen Schlüssels für die Container-Registry in dem neuen Namensbereich).
- Legen Sie zunächst den Clusternamen fest, indem Sie
-
Führen Sie den folgenden Befehl aus, um
secure-file-storage.yamlundsecure-file-storage-ingress.yamlzu generieren. Es werden die Umgebungsvariablen verwendet, die Sie gerade zusammen mit den Vorlagendateiensecure-file-storage.template.yamlundsecure-file-storage-ingress.template.yamlkonfiguriert haben../generate_yaml.shAngenommen, die Anwendung wird im Kubernetes-Namensbereich Standard bereitgestellt:
Vom Script verwendete Umgebungsvariablen Variabel Wert Beschreibung $IMAGE_PULL_SECRETBei Verwendung des bereitgestellten Bilds nicht definieren Ein geheimer Schlüssel für den Zugriff auf die Registry. $IMAGE_REPOSITORYicr.io/solution-tutorials/tutorial-cloud-e2e-security oder icr.io/namespace/imagename Die einer URL ähnliche ID für das erstellte Image auf der Basis der Registry-URL, des Namensbereichs und des Imagenamens im vorherigen Abschnitt. $TARGET_NAMESPACEStandard Der Kubernetes-Namensbereich, in den die App übertragen werden soll. $INGRESS_SUBDOMAINsecure-file-stora-123456.us-south.containers.appdomain.cloud Rufen Sie es von der Cluster-Übersichtsseite oder mit ibmcloud ks cluster get --cluster <your-cluster-name>ab.$INGRESS_SECRETsecure-file-stora-123456 Mit ibmcloud ks cluster get --cluster <your-cluster-name>abrufen.$BASENAMEsecure-file-storage Das Präfix zur Identifizierung von Ressourcen. -
Kopieren Sie
credentials.template.envincredentials.env:cp credentials.template.env credentials.env -
Bearbeiten Sie
credentials.envund füllen Sie die Leerstellen mit den folgenden Werten aus:- mit dem regionalen Object Storage-Serviceendpunkt, dem Bucketname, den Berechtigungsnachweisen, die für den Object Storage-Service erstellt wurden
- die Anmeldeinformationen für die sichere Dateiablage Cloudant,
- und die Berechtigungsnachweise für App ID. Die Variable
appid_redirect_urisist eine durch Kommas getrennte Liste von Umleitungs-URIs, wie oben beschrieben.
Wenn Sie Cloud Shellverwenden, können Sie
nano credentials.envverwenden, um die Datei zu bearbeiten.
Bereitstellung im Cluster
- Verbinden Sie sich über die Befehlszeilenschnittstelle, die über das Menü "Aktionen ..." auf der Übersichtsseite Ihrer Konsole aufgerufen werden kann.
ibmcloud ks cluster config --cluster $MYCLUSTER --admin - Überprüfen Sie, dass ein geheimer Ingress-Schlüssel in Ihrem Zielnamensbereich verfügbar ist. Ist dies nicht der Fall, müssen sie erstellt werden.
Wenn der geheime Ingress-Schlüssel einen CRN hat, verwenden Sie seinen Namen und CRN, um einen geheimen Schlüssel in Ihrem Zielnamensbereich zu erstellen:ibmcloud ks ingress secret ls -c $MYCLUSTERWenn der geheime Ingress-Schlüssel keinen CRN hat, verwenden Sie den folgenden Befehl, um ihn im Zielnamensbereich erneut zu erstellen:ibmcloud ks ingress secret create -c $MYCLUSTER -n $TARGET_NAMESPACE --cert-crn <crn-shown-in-the-output-above> --name <secret-name-shown-above>kubectl get secret $INGRESS_SECRET --namespace=ibm-cert-store -oyaml | grep -v '^\s*namespace:\s'| kubectl apply --namespace=$TARGET_NAMESPACE -f - - Erstellen Sie den geheimen Schlüssel, der von der Anwendung verwendet wird, um Serviceberechtigungsnachweise abzurufen:
kubectl create secret generic secure-file-storage-credentials --from-env-file=credentials.env - Stellen Sie die App bereit.
kubectl apply -f secure-file-storage.yaml - Implementieren Sie das Netzrouting (einen ClusterIP-Service und Ingress) für Ihre App, um sie über das öffentliche Internet zugänglich zu machen.
kubectl apply -f secure-file-storage-ingress.yaml
Anwendung testen
Die Anwendung kann unter https://secure-file-storage.<your-cluster-ingress-subdomain>/ aufgerufen werden.
- Rufen Sie die Startseite der Anwendung auf. Sie werden zur Standardanmeldeseite von App ID weitergeleitet.
- Registrieren Sie sich mit einer gültigen E-Mail-Adresse für ein neues Konto.
- Warten Sie auf die E-Mail in Ihrem Posteingang, um das Konto zu bestätigen.
- Melden Sie sich an.
- Wählen Sie eine Datei zum Hochladen aus. Klicken Sie auf Hochladen.
- Verwenden Sie die Aktion Teilen für eine Datei, um eine bereits signierte URL zu generieren, die gemeinsam mit anderen Personen für den Zugriff auf die Datei genutzt werden kann. Der Link ist so festgelegt, dass er nach fünf Minuten abläuft.
Authentifizierte Benutzer verfügen über eigene Bereiche zum Speichern von Dateien. Obwohl sie keine anderen Dateien sehen können, können sie bereits signierte URLs generieren, um temporären Zugriff auf eine bestimmte Datei zu gewähren.
Weitere Details zur Anwendung finden Sie im Quellcode-Repository.
Sicherheitsereignisse überprüfen
Nachdem die Anwendung und ihre Services erfolgreich bereitgestellt wurden, können Sie die Sicherheitsereignisse, die von diesem Prozess generiert wurden, überprüfen. Alle Ereignisse sind zentral in der IBM Cloud Logs-Instanz verfügbar.
- Wählen Sie im Observability-Dashboard die Registerkarte Cloud Logs und suchen Sie die Instanz IBM Cloud Logs, die die Audit-Ereignisse empfängt, und klicken Sie auf Dashboard öffnen.
- Überprüfen Sie alle Protokolle, die während der Bereitstellung und Interaktion mit Ressourcen an den Service gesendet wurden.
Optional: Angepasste Domäne verwenden und Netzverkehr verschlüsseln
Standardmäßig ist die Anwendung über eine generische Subdomain von containers.appdomain.cloud zugänglich. Es ist jedoch auch möglich, eine angepasste Domäne mit der bereitgestellten App zu verwenden. Für die weitere Unterstützung
von https, dem Zugriff mit verschlüsseltem Netzverkehr, muss entweder ein Zertifikat für den gewünschten Hostnamen oder ein Platzhalterzertifikat bereitgestellt werden. Es gibt verschiedene Kombinationen von Services, mit
denen DNS-Namen und TLS-Zertifikate für die Integration in eine Kubernetes-Anwendung verwaltet werden können. In diesem Lernprogramm werden die folgenden Services verwendet:
- DNS-Unterdomäne secure-file-storage Ihrer eigenen angepassten DNS-Domäne, die vom Service IBM Cloud Internet Services (CIS) verwaltet wird. Zur Vereinfachung der Schritte in diesem Lernprogramm verwenden wir example.com für den Namen der angepassten DNS-Domäne. Stellen Sie sicher, dass Sie Ihre angepasste DNS-Domäne in allen Schritten ersetzen.
- Let' s Encrypt zum Generieren der TLS-Zertifikate.
- IBM Cloud Secrets Manager für die Integration mit Let' s Encrypt, um das TLS-Zertifikat für secure-file-storage.example.com zu generieren und sicher zu speichern
- Kubernetes Operator für externe geheime Schlüssel, um das geheime TLS-Zertifikat direkt aus Secrets Manager zu extrahieren.
Anstelle der folgenden Schritte können Sie auch einen CNAME erstellen, der auf den App-URI Ihres DNS-Providers verweist, ein TLS-Zertifikat generieren und seine Komponenten in Secrets Managerimportieren.
Bereitstellung von CIS und Secrets Manager Instanzen
- Eine IBM Cloud Internet Services-Instanz ist erforderlich. Verwenden Sie eine vorhandene Instanz oder erstellen Sie eine aus diesem Katalogeintrag. Eine Reihe von Preistarifen sind verfügbar, einschließlich einer kostenlosen Testversion. Im Bereitstellungsprozess eines neuen CIS wird erläutert, wie der vorhandene DNS-Registrator
(möglicherweise nicht in IBM Cloud) für die Verwendung der von CISbereitgestellten Domänennamensserver konfiguriert wird. Exportieren Sie die angepasste Domäne im Shellfenster:
export MYDOMAIN=example.com - Eine Instanz von Secrets Manager ist erforderlich. Verwenden Sie eine vorhandene Instanz oder erstellen Sie eine neue Instanz, die unter Serviceinstanz von Secrets Manager erstellen beschrieben wird. Wenn Sie eine neue Instanz erstellen, geben Sie ihr den Namen secure-file-storage-sm. Sie können die Sicherheit Ihrer gespeicherten Daten erhöhen, indem Sie die zuvor erstellte Key Protect-Instanz integrieren.
Erstellen Sie einen DNS-Eintrag in der CIS-Instanz unter Verwendung Ihres Kubernetes-Clusters Ingress-Unterdomäne als Alias.
- Öffnen Sie die Serviceinstanz von CIS. Sie finden sie in der Ressourcenliste.
- Klicken Sie links auf die Registerkarte "Zuverlässigkeit ".
- Klicken Sie oben auf die Registerkarte DNS.
- Blättern Sie zum Abschnitt "DNS-Datensätze" vor und klicken Sie auf Hinzufügen, um einen neuen Datensatz zu erstellen:
- Typ: CNAME
- Name: secure-file-storage
- Alias: Die Ingress-Unterdomäne Ihres Clusters. Sie können den korrekten Wert in der Shell abrufen, indem Sie den folgenden Befehl ausführen:
echo $INGRESS_SUBDOMAIN - Klicken Sie auf Hinzufügen, um den neuen Datensatz hinzuzufügen.
Verbinden Sie die Secrets Manager-Instanz mit Let' s Encrypt.
-
Ein Let' s Encrypt ACME-Konto und die zugehörige Datei .pem sind erforderlich. Verwenden Sie eine vorhandene oder erstellen Sie eine:
- Installieren Sie acme-account-creation-tool. Erstellen eines Let' s Encrypt ACME-Kontos enthält Anweisungen und einen Link zum Erstellungstool.
- Führen Sie acme-account-creation-tool aus, um ein Konto speziell für dieses Beispiel für sicheren Dateispeicher zu erstellen. Es folgt ein Beispiel:
$ ./acme-account-creation-tool-darwin-amd64 -e YOUREMAIL -o secure-file-storage.example.com -d letsencrypt-prod INFO[2022-12-28T13:30:00-08:00] Registering a new account with the CA INFO[2022-12-28T13:30:00-08:00] Account information written to file : secure-file-storage.example.com-account-info.json INFO[2022-12-28T13:30:00-08:00] Private key written to file : secure-file-storage.example.com-private-key.pem Account Info { "email": "YOUREMAIL", "registration_uri": "https://acme-v02.api.letsencrypt.org/acme/acct/891897087", "registration_body": { "status": "valid", "contact": [ "mailto:YOUREMAIL" ] } }% $ ls secure-file-storage.example.com-account-info.json secure-file-storage.example.com-private-key.pem
-
Verbinden Sie das Konto 'Let' s Encrypt ACME' mit der Instanz Secrets Manager. Weitere Informationen finden Sie unter Konfiguration einer Zertifizierungsstelle in der Benutzerschnittstelle hinzufügen.
- Öffnen Sie die Secrets Manager-Serviceinstanz. Sie finden sie in der Ressourcenliste.
- Öffnen Sie auf der linken Seite Secrets engines und klicken Sie auf Public certificates.
- Klicken Sie unter Zertifizierungsstellen auf Hinzufügen.
- Name: LetsEncrypt und Zertifizierungsstelle: Let' s Encrypt.
- Klicken Sie unter Datei auswählen auf Datei hinzufügen und wählen Sie secure-file-storage.example.com-private-key.pem oder Ihre vorhandene .pem-Datei aus der Auswahlfunktion aus.
- Klicken Sie auf Hinzufügen.
-
Verbinden Sie die CIS als DNS-Anbieter:
- Klicken Sie unter 'DNS-Provider' auf Hinzufügen.
- Benennen Sie cis und wählen Sie in der Dropdown-Liste Cloud Internet Services aus.
- Klicken Sie auf Weiter.
- Wählen Sie auf der Registerkarte Berechtigung die Instanz CIS aus.
- Klicken Sie auf Hinzufügen.
-
Zertifikat in Secrets Manager bestellen
- Öffnen Sie den Secrets Manager-Service und wählen Sie links Geheime Schlüssel aus.
- Klicken Sie auf Hinzufügen.
- Klicken Sie auf Public certificate und anschließend auf Next.
- Füllen Sie das Formular aus:
- Name - Geben Sie einen Namen ein, den Sie sich merken können.
- Beschreibung - Geben Sie eine Beschreibung Ihrer Wahl ein.
- Klicken Sie auf Weiter.
- Wählen Sie unter Zertifizierungsstelle Ihre konfigurierte Let's Encrypt- Zertifizierungsstellenengine aus.
- Wählen Sie unter Schlüsselalgorithmus Ihren bevorzugten Algorithmus aus.
- Bundlezertifikate - leer lassen
- Automatische Zertifikatrotation - leer lassen
- Wählen Sie unter DNS-Provider Ihre konfigurierte DNS-Providerinstanz aus.
- Klicken Sie auf Domänen auswählen und kreuzen Sie Mit Platzhalterzeichen auswählen an, lassen Sie die Domäne selbst inaktiviert und klicken Sie dann auf Fertig.
- Klicken Sie auf Weiter.
- Überprüfen Sie Ihre Auswahl und klicken Sie auf Hinzufügen.
- Klicken Sie auf das Menü mit drei vertikalen Punkten für den aktiven geheimen Schlüssel und wählen Sie Details aus und kopieren Sie den CRN aus dem Dialog. Exportieren Sie den Wert in der Shell. Dies
sieht ungefähr wie folgt aus:
export PUBLIC_CERT_CRN=crn:v1:bluemix:public:secrets-manager:eu-de:a/abc123abc123abc123abc123:99999999-9999-9999-9999-999999999999:secret:aaaaaaaa-9999-9999-aaaa-123456781234
-
In diesem Lernprogramm wird die Service-zu-Service-Berechtigung genutzt, um dem Cluster Zugriff auf die Serviceinstanz von Secrets Manager und ihre verwalteten geheimen Schlüssel zu erteilen.
- Wechseln Sie zur Seite IAM-Berechtigungen und klicken Sie auf Erstellen, um eine neue Berechtigung hinzuzufügen.
- Wählen Sie unter Quelle Kubernetes Service aus und wählen Sie dann Bestimmte Ressourcen aus. Wählen Sie anschließend für Quellenserviceinstanz Ihren Cluster aus.
- Wählen Sie unter Ziel Secrets Manager aus und wählen Sie dann unter Bestimmte Ressourcen und Instanz-ID Ihre Secrets Manager-Serviceinstanz aus.
- Wählen Sie schließlich unter Rollen Manager aus und erteilen Sie die Berechtigung, indem Sie auf Berechtigen klicken.
-
Überprüfen Sie, ob die Werte für MYDOMAIN und PUBLIC_CERT_CRN in die Umgebung exportiert wurden:
echo MYDOMAIN $(printenv MYDOMAIN) echo PUBLIC_CERT_CRN $(printenv PUBLIC_CERT_CRN) -
Erstellen Sie einen geheimen Ingress-Schlüssel aus dem neuen TLS-Zertifikat.
ibmcloud ks ingress secret create --name secure-file-storage-certificate --cluster $MYCLUSTER --cert-crn $PUBLIC_CERT_CRN --namespace $TARGET_NAMESPACE -
Führen Sie den folgenden Befehl aus, um neue Kopien der Konfigurationsdateien zu erstellen. Er verwendet alle Umgebungsvariablen, die Sie zusammen mit den Vorlagendateien
secure-file-storage.template.yamlundsecure-file-storage.template-ingress.yamlkonfiguriert haben. Sie können zuerst die aktuelle Version speichern:cp secure-file-storage.yaml /tmp cp secure-file-storage-ingress.yaml /tmp./generate_yaml.sh -
Wenden Sie die Konfigurationsänderungen auf Ihren Cluster an:
kubectl apply -f secure-file-storage-ingress.yaml -
Wechseln Sie zurück zum Browser. Suchen Sie in der IBM Cloud-Ressourcenliste den zuvor erstellten und konfigurierten App ID-Service und starten Sie dessen Management-Dashboard.
- Klicken Sie links auf Authentifizierung verwalten und oben auf die Registerkarte Authentifizierungseinstellungen.
- Fügen Sie im Formular Webumleitungs-URLs hinzufügen
https://secure-file-storage.example.com/redirect_urials weitere URL hinzu.
- Alles sollte jetzt ordnungsgemäß eingerichtet sein. Testen Sie die App, indem Sie in Ihrer konfigurierten angepassten Domäne
https://secure-file-storage.<your custom domain>darauf zugreifen.
Sicherheit: Serviceberechtigungsnachweise turnusmäßig wechseln
Um die Sicherheit aufrechtzuerhalten sollten Serviceberechtigungsnachweise, Kennwörter und sonstige Schlüssel in regelmäßigen Abständen turnusmäßig gewechselt werden. Viele Sicherheitsrichtlinien erfordern, dass Kennwörter und Berechtigungsnachweise alle 3 Monate oder in ähnlichen Zeitabständen geändert werden. Darüber hinaus sollten im Falle des Austritts eines Mitarbeiters aus dem Team oder bei (vermuteten) Sicherheitsvorfällen die Zugriffsberechtigungen unverzüglich geändert werden.
In diesem Lernprogramm werden Services für unterschiedliche Zwecke eingesetzt, die vom Speichern von Dateien und Metadaten über das Sichern des Anwendungszugriffs bis zum Verwalten von Container-Images reichen. Der turnusmäßige Wechsel der Serviceberechtigungsnachweise bezieht im Normalfall die folgenden Schritte ein:
- Umbenennen der vorhandenen Serviceschlüssel
- Erstellen einer neuen Gruppe von Berechtigungsnachweisen mit dem zuvor benutzten Namen
- Ersetzen der Zugriffsdaten in vorhandenen geheimen Kubernetes-Schlüsseln und Anwenden der Änderungen
- Verifizieren und anschließendes Inaktivieren der alten Berechtigungsnachweise durch Löschen der alten Serviceschlüssel
Lernprogramm erweitern
Die Sicherheit kann immer optimiert werden. Folgen Sie den folgenden Empfehlungen, um die Sicherheit Ihrer Anwendung zu erhöhen.
- Ersetzen Sie IBM Key Protect durch Hyper Protect Crypto Services, um noch höhere Sicherheit und Kontrolle über Verschlüsselungsschlüssel zu erhalten.
Ressourcen gemeinsam nutzen
Wenn Sie mit anderen an Ressourcen dieses Lösungslernprogramms arbeiten möchten, können Sie alle oder nur einige der Komponenten gemeinsam nutzen. IBM Cloud Identity and Access Management (IAM) ermöglicht die Authentifizierung von Benutzern und Service-IDs sowie die Zugriffskontrolle für Cloudressourcen. Für die Gewährung des Zugriffs auf eine Ressource können Sie vordefinierte Zugriffsrollen entweder einem Benutzer, einer Service-ID oder einer Zugriffsgruppe zuweisen. Eine Zugriffsgruppe kann erstellt werden, um eine Gruppe von Benutzern und Service-IDs in einer einzigen Entität zu organisieren. Sie erleichtert das Zuweisen von Zugriffsberechtigungen. Sie können der Gruppe eine einzige Richtlinie zuweisen, anstatt denselben Zugriff mehrmals für den einzelnen Benutzer oder die einzelne Service-ID zuzuweisen. So können Sie Gruppen für Rollen in Ihrem Entwicklungsprojekt organisieren und Sicherheit und Projektverwaltung abstimmen.
Informationen zu den einzelnen Services und den jeweils verfügbaren IAM-Zugriffsrollen finden Sie hier:
- Kubernetes Service oder dasselbe für Red Hat OpenShift on IBM Cloud.
- Container Registry
- App ID
- IBM Cloudant
- Object Storage
- IBM Cloud Activity Tracker Event Routing
- Key Protect
- Secrets Manager
Informationen zum Einstieg finden Sie unter Best Practices für das Zugriffsmanagement und Vorgehensweise zum Definieren von Zugriffsgruppen.
Ressourcen entfernen
Um die Ressource zu entfernen, löschen Sie den bereitgestellten Container und anschließend die bereitgestellten Services.
Wenn Sie ein Konto mit anderen Benutzern gemeinsam nutzen, stellen Sie immer sicher, dass nur Ihre eigenen Ressourcen gelöscht werden.
-
Löschen Sie die implementierte Netzkonfiguration und den Container:
kubectl delete -f secure-file-storage-ingress.yamlFühren Sie anschließend den folgenden Befehl aus:
kubectl delete -f secure-file-storage.yaml -
Löschen Sie die geheimen Schlüssel für die Bereitstellung:
kubectl delete secret secure-file-storage-credentials -
Wenn Sie Secrets Managerverwendet haben, entfernen Sie den zugehörigen Service für die Serviceautorisierung.
-
Suchen Sie in der IBM Cloud-Ressourcenliste nach den Ressourcen, die für dieses Lernprogramm erstellt wurden. Verwenden Sie das Suchfeld und secure-file-storage als Muster. Löschen Sie jeden der Services, indem Sie auf das Kontextmenü neben den einzelnen Services klicken und Service löschen auswählen. Beachten Sie, dass der Key Protect-Service erst entfernt werden kann, nachdem der Schlüssel gelöscht wurde. Klicken Sie auf die Serviceinstanz, um zum zugehörigen Dashboard zu gelangen und den Schlüssel zu löschen.
Je nach Ressource wird diese möglicherweise nicht sofort gelöscht, sondern (standardmäßig für 7 Tage) aufbewahrt. Sie können die Ressource zurückfordern, indem Sie sie permanent löschen oder innerhalb des Aufbewahrungszeitraums wiederherstellen. In diesem Dokument erfahren Sie mehr zur Verwendung der Ressourcenrückforderung.