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.

des

  1. Der Benutzer stellt eine Verbindung zur Anwendung her.
  2. Wenn Sie eine benutzerdefinierte Domain und ein TLS-Zertifikat verwenden, wird das Zertifikat von Secrets Manager verwaltet und von dort bereitgestellt.
  3. App ID sichert die Anwendung und leitet den Benutzer zu der Authentifizierungsseite um. Benutzer können sich auch anmelden.
  4. 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.
  5. Hochgeladene Dateien werden in Object Storage mit den zugehörigen Metadaten aus IBM Cloudant gespeichert.
  6. Objektspeicherbuckets, App IDund Secrets ManagerServices nutzen einen vom Benutzer bereitgestellten Schlüssel zum Verschlüsseln von Daten.
  7. 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)
  • kubectl zur Interaktion mit Kubernetes-Clustern
  • git zum 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.

  1. Erstellen Sie eine Instanz von Key Protect.
    1. Wählen Sie einen Standort aus.
    2. Setzen Sie den Namen auf secure-file-storage-kp.
    3. Wählen Sie die Ressourcengruppe aus, in der Sie die Serviceinstanz erstellen möchten, und klicken Sie auf Erstellen.
  2. 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.
    1. Setzen Sie den Schlüsseltyp auf Rootschlüssel.
    2. Setzen Sie den Namen auf secure-file-storage-root-enckey.
    3. 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

  1. Erstellen Sie eine Instanz von Object Storage.
    1. Wählen Sie einen Standardplan aus und setzen Sie den Namen auf secure-file-storage-cos.
    2. Verwenden Sie die gleiche Ressourcengruppe wie für die vorherigen Services und klicken Sie auf Erstellen.
  2. Erstellen Sie unter Serviceberechtigungsnachweise einen neuen Berechtigungsnachweis.
    1. Setzen Sie den Namen auf secure-file-storage-cos-acckey.
    2. Wählen Sie für Rolle Schreibberechtigter aus.
    3. Markieren Sie unter Erweiterte Optionen die Option HMAC-Berechtigungsnachweis einschließen. Dies ist erforderlich, um bereits signierte URLs zu generieren.
    4. Klicken Sie auf Hinzufügen.
    5. Notieren Sie sich die Berechtigungsnachweise. Sie benötigen diese in einem späteren Schritt.
  3. Klicken Sie in der Navigationsseitenleiste auf Endpunkte:
    1. Setzen Sie Ausfallsicherheit auf Regional und setzen Sie den Standort auf die Zielposition:
    2. Für die klassische Infrastruktur: Kopieren Sie den Privaten Serviceendpunkt. Dieser wird später bei der Konfiguration der Anwendung verwendet.
    3. 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.

  1. Gehen Sie in der IBM Cloud-Konsole zu "Verwalten" > "Zugriff(IAM)" > "Berechtigungen ".
  2. Klicken Sie auf die Schaltfläche Erstellen.
  3. Wählen Sie im Menü Quellenservice die Option Cloud Object Storage aus.
  4. Wechseln Sie zu Ressourcen basierend auf ausgewählten Attributen, wählen Sie Quellenserviceinstanz aus und wählen Sie die zuvor erstellte Object StorageServiceinstanz aus.
  5. Wählen Sie im Menü Zielservice die Option Key Protect aus.
  6. 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.
  7. Aktivieren Sie die Rolle Leseberechtigter.
  8. Klicken Sie auf die Schaltfläche Autorisieren.

Erstellen Sie schließlich das Bucket.

  1. Greifen Sie über die Ressourcenliste unter "Speicher" auf die Object Storage-Serviceinstanz zu.
  2. Klicken Sie auf "Eimer erstellen " und dann auf "Eimer anpassen ".
    1. Verwenden Sie einen eindeutigen Wert für name, z. B. <your-initials>-secure-file-upload.
    2. Setzen Sie Ausfallsicherheit auf Regional.
    3. Setzen Sie Standort auf denselben Standort, an dem Sie die Key Protect-Serviceinstanz erstellt haben.
    4. Setzen Sie Speicherklasse auf Standard .
  3. Aktivieren Sie unter Serviceintegrationen (optional) / Verschlüsselung die Schlüsselverwaltung.
    1. Wählen Sie die zuvor Key Protecterstellte Serviceinstanz aus, indem Sie auf Vorhandene Instanz verwenden klicken
    2. Wählen Sie secure-file-storage-root-enckey als Schlüssel aus und klicken Sie auf Schlüssel zuordnen.
  4. Aktivieren Sie unter Service-Integrationen (optional) / Überwachung & Aktivitätsverfolgung die Aktivitätsverfolgung, um Audit-Ereignisse für die Analyse aufzubewahren.
    1. Nachdem Sie auf das Häkchen geklickt haben, sollten die Serviceinformationen für die Activity Tracker-Instanz in der Region angezeigt werden.
    2. Aktivieren Sie nun Datenereignisse verfolgen und wählen Sie lesen & schreiben als Datenereignisse aus.
  5. 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.

  1. Erstellen Sie eine Instanz des IBM Cloudant-Service.
    1. Wählen Sie Cloudant als Angebot aus.
    2. Wählen Sie eine Multi-Tenant-Umgebung und eine Region aus, die mit den vorherigen Services identisch ist.
    3. Setzen Sie den Namen auf secure-file-storage-cloudant.
    4. Verwenden Sie die gleiche Ressourcengruppe wie für die vorherigen Services.
    5. Legen Sie für Authentifizierungsmethode den Wert IAM fest.
    6. Klicken Sie auf Erstellen.
  2. 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.
    1. Erstellen Sie unter Serviceberechtigungsnachweise einen neuen Berechtigungsnachweis.
    2. Setzen Sie den Namen auf secure-file-storage-cloudant-acckey.
    3. Wählen Sie für Rolle die Option Manager aus.
    4. Behalten Sie die Standardwerte für die übrigen Felder bei.
    5. Klicken Sie auf Hinzufügen.
  3. Erweitern Sie die neu erstellten Berechtigungsnachweise und notieren Sie sich die Werte. Sie benötigen diese in einem späteren Schritt.
  4. Klicken Sie unter Verwalten auf Dashboard starten.
  5. 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.

  1. Gehen Sie zu "Verwalten" > "IAM-Zugriff" > "Berechtigungen " und klicken Sie auf "Erstellen ".
  2. Wählen Sie den App ID dienst als Quelldienst aus.
  3. Wählen Sie Key Protect als Zielservice aus.
  4. 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.
  5. Ordnen Sie die Rolle Reader unter "Servicezugriff" zu.
  6. Klicken Sie auf Autorisieren, um die delegierte Autorisierung zu bestätigen.

Jetzt erstellen Sie eine Instanz des App ID-Service.

  1. Navigieren Sie zur App ID seite zur Erstellung von Diensten.

    1. Verwenden Sie denselben Standort, der für die vorherigen Services verwendet wurde.
    2. Wählen Sie für den Plan die Option Gestaffelte Preisstufe aus.
    3. Setzen Sie den Servicenamen auf secure-file-storage-appid.
    4. Wählen Sie eine Ressourcengruppe aus, die mit den vorherigen Services identisch ist.
    5. Wählen Sie den berechtigten Key ProtectService**-Name** und Rootschlüssel aus den jeweiligen Dropdown-Menüs aus.
    6. Klicken Sie auf Erstellen.
  2. 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.

  3. Aktivieren Sie auf derselben Registerkarte unter Authentifizierungseinstellungen unter Laufzeitaktivität die Erfassung von Ereignissen in IBM Cloud Activity Tracker Event Routing.

  4. Serviceberechtigungsnachweise erstellen:

    1. Erstellen Sie unter Serviceberechtigungsnachweise einen neuen Berechtigungsnachweis.
    2. Setzen Sie den Namen auf secure-file-storage-appid-acckey.
    3. Wählen Sie für Rolle die Option Manager aus.
    4. Behalten Sie die Standardwerte für die übrigen Felder bei.
    5. 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

  1. Rufen Sie den Anwendungscode ab:
    git clone https://github.com/IBM-Cloud/secure-file-storage
    
  2. Wechseln Sie in das Verzeichnis secure-file-storage/app:
    cd secure-file-storage/app
    

Konfigurationseinstellungen und Berechtigungsnachweise eingeben

  1. Wenn Sie nicht angemeldet sind, verwenden Sie ibmcloud login oder ibmcloud 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.

  2. Legen Sie im nächsten Schritt die Umgebungsvariablen fest, die für die Generierung von Konfigurationsdateien erforderlich sind.

    1. Legen Sie zunächst den Clusternamen fest, indem Sie <YOUR_CLUSTER_NAME> ersetzen:
      export MYCLUSTER=<YOUR_CLUSTER_NAME>
      
    2. 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')
      
    3. 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')
      
    4. 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
      
    5. Legen Sie zusätzliche Umgebungsvariablen fest, indem Sie die Standardwerte ersetzen:
      export BASENAME=secure-file-storage
      
    6. Legen Sie den zu verwendenden Namensbereich fest:
      export TARGET_NAMESPACE=default
      
    7. Die Umgebungsvariable $IMAGE_PULL_SECRET kann optional festgelegt werden, wenn Sie einen anderen Kubernetes-Namensraum als den default-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).
  3. Führen Sie den folgenden Befehl aus, um secure-file-storage.yaml und secure-file-storage-ingress.yaml zu generieren. Es werden die Umgebungsvariablen verwendet, die Sie gerade zusammen mit den Vorlagendateien secure-file-storage.template.yaml und secure-file-storage-ingress.template.yaml konfiguriert haben.

    ./generate_yaml.sh
    

    Angenommen, die Anwendung wird im Kubernetes-Namensbereich Standard bereitgestellt:

    Vom Script verwendete Umgebungsvariablen
    Variabel Wert Beschreibung
    $IMAGE_PULL_SECRET Bei Verwendung des bereitgestellten Bilds nicht definieren Ein geheimer Schlüssel für den Zugriff auf die Registry.
    $IMAGE_REPOSITORY icr.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_NAMESPACE Standard Der Kubernetes-Namensbereich, in den die App übertragen werden soll.
    $INGRESS_SUBDOMAIN secure-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_SECRET secure-file-stora-123456 Mit ibmcloud ks cluster get --cluster <your-cluster-name> abrufen.
    $BASENAME secure-file-storage Das Präfix zur Identifizierung von Ressourcen.
  4. Kopieren Sie credentials.template.env in credentials.env:

    cp credentials.template.env credentials.env
    
  5. Bearbeiten Sie credentials.env und 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_uris ist eine durch Kommas getrennte Liste von Umleitungs-URIs, wie oben beschrieben.

    Wenn Sie Cloud Shellverwenden, können Sie nano credentials.env verwenden, um die Datei zu bearbeiten.

Bereitstellung im Cluster

  1. 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
    
  2. Ü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.
    ibmcloud ks ingress secret ls -c $MYCLUSTER
    
    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 create -c $MYCLUSTER -n $TARGET_NAMESPACE --cert-crn <crn-shown-in-the-output-above> --name <secret-name-shown-above>
    
    Wenn der geheime Ingress-Schlüssel keinen CRN hat, verwenden Sie den folgenden Befehl, um ihn im Zielnamensbereich erneut zu erstellen:
    kubectl get secret $INGRESS_SECRET --namespace=ibm-cert-store -oyaml | grep -v '^\s*namespace:\s'| kubectl apply  --namespace=$TARGET_NAMESPACE -f -
    
  3. 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
    
  4. Stellen Sie die App bereit.
    kubectl apply -f secure-file-storage.yaml
    
  5. 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.

  1. Rufen Sie die Startseite der Anwendung auf. Sie werden zur Standardanmeldeseite von App ID weitergeleitet.
  2. Registrieren Sie sich mit einer gültigen E-Mail-Adresse für ein neues Konto.
  3. Warten Sie auf die E-Mail in Ihrem Posteingang, um das Konto zu bestätigen.
  4. Melden Sie sich an.
  5. Wählen Sie eine Datei zum Hochladen aus. Klicken Sie auf Hochladen.
  6. 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.

  1. 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.
  2. Ü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.

  1. Öffnen Sie die Serviceinstanz von CIS. Sie finden sie in der Ressourcenliste.
  2. Klicken Sie links auf die Registerkarte "Zuverlässigkeit ".
  3. Klicken Sie oben auf die Registerkarte DNS.
  4. Blättern Sie zum Abschnitt "DNS-Datensätze" vor und klicken Sie auf Hinzufügen, um einen neuen Datensatz zu erstellen:
    1. Typ: CNAME
    2. Name: secure-file-storage
    3. 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
      
    4. Klicken Sie auf Hinzufügen, um den neuen Datensatz hinzuzufügen.

Verbinden Sie die Secrets Manager-Instanz mit Let' s Encrypt.

  1. Ein Let' s Encrypt ACME-Konto und die zugehörige Datei .pem sind erforderlich. Verwenden Sie eine vorhandene oder erstellen Sie eine:

    1. Installieren Sie acme-account-creation-tool. Erstellen eines Let' s Encrypt ACME-Kontos enthält Anweisungen und einen Link zum Erstellungstool.
    2. 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
      
  2. 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.

    1. Öffnen Sie die Secrets Manager-Serviceinstanz. Sie finden sie in der Ressourcenliste.
    2. Öffnen Sie auf der linken Seite Secrets engines und klicken Sie auf Public certificates.
    3. Klicken Sie unter Zertifizierungsstellen auf Hinzufügen.
    4. Name: LetsEncrypt und Zertifizierungsstelle: Let' s Encrypt.
    5. 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.
    6. Klicken Sie auf Hinzufügen.
  3. Verbinden Sie die CIS als DNS-Anbieter:

    1. Klicken Sie unter 'DNS-Provider' auf Hinzufügen.
    2. Benennen Sie cis und wählen Sie in der Dropdown-Liste Cloud Internet Services aus.
    3. Klicken Sie auf Weiter.
    4. Wählen Sie auf der Registerkarte Berechtigung die Instanz CIS aus.
    5. Klicken Sie auf Hinzufügen.
  4. Zertifikat in Secrets Manager bestellen

    1. Öffnen Sie den Secrets Manager-Service und wählen Sie links Geheime Schlüssel aus.
    2. Klicken Sie auf Hinzufügen.
    3. Klicken Sie auf Public certificate und anschließend auf Next.
    4. 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.
    5. Klicken Sie auf Weiter.
    6. Überprüfen Sie Ihre Auswahl und klicken Sie auf Hinzufügen.
    7. 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
      
  5. 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.

    1. Wechseln Sie zur Seite IAM-Berechtigungen und klicken Sie auf Erstellen, um eine neue Berechtigung hinzuzufügen.
    2. 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.
    3. Wählen Sie unter Ziel Secrets Manager aus und wählen Sie dann unter Bestimmte Ressourcen und Instanz-ID Ihre Secrets Manager-Serviceinstanz aus.
    4. Wählen Sie schließlich unter Rollen Manager aus und erteilen Sie die Berechtigung, indem Sie auf Berechtigen klicken.
  6. Ü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)
    
  7. 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
    
  8. 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.yaml und secure-file-storage.template-ingress.yaml konfiguriert 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
    
  9. Wenden Sie die Konfigurationsänderungen auf Ihren Cluster an:

    kubectl apply -f secure-file-storage-ingress.yaml
    
  10. 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_uri als weitere URL hinzu.
  1. 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:

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.

  1. Löschen Sie die implementierte Netzkonfiguration und den Container:

    kubectl delete -f secure-file-storage-ingress.yaml
    

    Führen Sie anschließend den folgenden Befehl aus:

    kubectl delete -f secure-file-storage.yaml
    
  2. Löschen Sie die geheimen Schlüssel für die Bereitstellung:

    kubectl delete secret secure-file-storage-credentials
    
  3. Wenn Sie Secrets Managerverwendet haben, entfernen Sie den zugehörigen Service für die Serviceautorisierung.

  4. 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.

Zugehörige Inhalte