Direkt zum Inhalt

Sichere Verbindung mit dem AWS Authentication Connector

Sichere Verbindung mit dem AWS Authentication Connector

Mendix hat den AWS Authentication-Connector veröffentlicht, der es Entwicklern erleichtert, sich bei AWS zu authentifizieren und mit der Nutzung der AWS-Services zu beginnen.

Sicherheit ist natürlich unerlässlich – insbesondere bei der Nutzung von Pay-as-you-go-Diensten wie AWS. Daher ist es entscheidend, dass wir bei der Integration mit AWS-Diensten Best Practices befolgen. Zu diesem Zweck verfügt der AWS Authentication Connector über verschiedene Authentifizierungsmöglichkeiten – die sicherste davon ist die Verwendung von Sitzungsanmeldeinformationen. Dadurch kann Ihre App im Wesentlichen für einen definierten Zeitraum (normalerweise etwa eine Stunde) eine IAM-Benutzerrolle übernehmen. Durch die Nutzung der kürzlich veröffentlichte IAM Roles Anywhere-Funktion.

Bild mit dem Inhalt: Best Practices für die sichere Integration mit AWS-Services. Sitzungsbasierte Anmeldeinformationen. Der Amazon DynamoDB-Konnektor fordert das Anmeldeinformationsobjekt vom AWS-Authentifizierungskonnektor mithilfe der Aktion „GetSessionCredentials“ an. Der AWS-Authentifizierungskonnektor fordert mithilfe von AWS STS über Roles Anywhere ein temporäres Sitzungstoken an. Das zurückgegebene temporäre Token dient zum Signieren der Anfrage an DynamoDB mithilfe des DynamoDB-Konnektors. Wenn die Sitzung über die richtige Rolle und Konfiguration verfügt, wird der Vorgang zugelassen, andernfalls wird eine „AccessDenied“-Ausnahme ausgelöst.

zertifizierten

Bei dieser Authentifizierungsmethode werden Zertifikate verwendet, um Ihre Anwendung bei AWS zu authentifizieren. Um diese Methode nutzen zu können, müssen Sie Client-Zertifikate erwerben. Dies ist keine leichte Aufgabe, wenn Sie keinen Zugriff auf Ihre eigene Zertifizierungsstelle (CA) haben.

Um ein selbstsigniertes Zertifikat zu erstellen, verwenden wir openSSL, ein Open-Source-Befehlszeilentool für kryptografische Zwecke. Sie können Installieren Sie OpenSSL hier, oder du kannst Nutzen Sie das OpenSSL, das mit Ihrer Git-Installation geliefert wird.

Es gibt andere Möglichkeiten, Zertifikate zu generieren. Sie können das AWS-Private-Certificate-Authority-Dienst oder ein öffentlicher Zertifikatsdienst. Wir verwenden OpenSSL aus zwei Gründen:

  1. Kosten – dies ist ein kostenloses Befehlszeilentool ohne Kostenfolgen, perfekt für Entwicklung und Tests.
  2. Sicherheit – die Verwendung einer öffentlichen Zertifizierungsstelle als Vertrauensanker bedeutet, dass alle von dieser Zertifizierungsstelle generierten Zertifikate als vertrauenswürdig gelten. Sie können dies jedoch durch Richtlinieneinschränkungen einschränken. dies wird nicht empfohlen.

Meme mit einem Mann im Trenchcoat, der sagt: „Ohh, noch etwas“

Diese Befehle wurden unter Windows und Linux getestet (sorry für Mac-Benutzer, obwohl ich glaube, dass sie gleich sind). Wenn Sie Windows verwenden und auf dem Mendix Cloud, stellen Sie sicher, dass Sie OpenSSL Version 1.X installiert haben.

Haftungsausschluss: Das Erstellen eigener selbstsignierter Zertifikate erfordert sorgfältige Detailarbeit und ist möglicherweise für Ihren Anwendungsfall nicht geeignet. Stellen Sie sicher, dass Sie die damit verbundenen Risiken verstehen und dass Ihre Zertifizierungsstelle und Ihr Schlüssel jederzeit sicher und geheim gehalten werden.

Selbstsignierte Zertifikate

Root erstellen

Als Erstes müssen Sie ein Stammzertifikat erstellen, das als Zertifizierungsstelle und Vertrauensanker fungiert. Dieses wird zum Signieren aller Ihrer weiteren Zertifikate verwendet und hat die folgenden Anforderungen:

  • Muss im PEM-Format vorliegen
  • Muss Version 3 sein
  • Grundlegende Einschränkungen müssen CA enthalten: TRUE

Dazu müssen Sie Ihre Datei openssl.cnf aktualisieren. Dies ist eine Konfigurationsdatei für OpenSSL und befindet sich dort, wo Sie OpenSSL im Bin-Ordner installiert haben. Suchen Sie den Abschnitt v3_ca und aktualisieren Sie ihn wie folgt:

[ v3_ca ]
    basicConstraints        =critical, CA:TRUE
    subjectKeyIdentifier    =hash
    authorityKeyIdentifier  =keyid:always, issuer:always
    keyUsage                =critical, cRLSign, digitalSignature, keyCertSign

Danach müssen wir unseren privaten Schlüssel generieren und unsere CA PEM-Datei erstellen. Wir müssen den RSA- oder EC-Algorithmus zur Generierung unseres Schlüssels.

openssl genrsa -out PrivateCA.key 4096
    openssl req -new -x509 -days 3650 -key PrivateCA.key -out PrivateCA.pem -extensions v3_ca

Hier können Sie einige Identifizierungsinformationen für das Zertifikat angeben:

openssl x509 -in PrivateCA.pem -text -noout

Es ist auch eine gute Idee, zu überprüfen, ob wir tatsächlich ein v3-Zertifikat erstellt haben.

Bild, das den C-Pfad für die V3-Zertifikatvalidierung zeigt

Kundenzertifikate

Da wir nun unsere Zertifizierungsstelle haben, können wir Client-Zertifikate generieren, die wir verwenden, um unsere Anmeldeinformationen in AWS abzurufen. AWS stellt die folgenden Anforderungen an das von Ihnen verwendete Client-Zertifikat:

  • Muss Version 3 sein (X.509v3)
  • Grundlegende Einschränkungen müssen CA enthalten: FALSE
  • Die Schlüsselverwendung muss eine digitale Signatur umfassen
  • Der Signaturalgorithmus muss SHA256 oder stärker enthalten.

Um diese Anforderungen zu erfüllen, müssen wir zunächst eine Erweiterungsdatei erstellen, die wir beim Generieren unseres Zertifikats aufrufen. Legen Sie eine Datei mit dem Namen v3.ext im selben Verzeichnis wie Ihr Stammzertifikat ab. Sie sollte den folgenden Inhalt haben:

authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

Nun zu unserem Zertifikat: Zuerst erstellen wir einen Schlüssel:

openssl genrsa -out client.key 4096

Anschließend erstellen wir ein neues Zertifikat:

openssl req -new -key client.key -out client.csr

Zuletzt signieren wir es mit unserer Stammzertifizierungsstelle:

openssl x509 -req -in client.csr -CA PrivateCA.pem -CAkey PrivateCA.key -set_serial 01 -out client.pem -days 3650 -sha256 -extfile v3.ext

Wenn dies erledigt ist, sollten sich in Ihrem Ordner „Zertifikate“ die folgenden Dateien befinden:

Bild, das v3.ext im Zertifikatsordner zeigt

Es ist noch ein Schritt nötig, um unsere Zertifikate in unserem Mendix Anwendung: Wir müssen unser Client-Zertifikat in die pfx-Format, das in unsere App hochgeladen werden kann.

openssl pkcs12 -export -in client.pem -inkey client.key -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -macalg sha1 -out client.pfx

Sie müssen ein Passwort angeben, das Sie später verwenden müssen.

Mit diesen Zertifikaten können Sie nun Ihre Mendix Anwendung auf AWS-Dienste.

AWS

Der nächste Schritt besteht darin, Ihr Stammzertifikat an IAM Roles Anywhere zu übergeben und es mit der IAM-Rolle zu verbinden, die Sie verwenden möchten.

Öffnen Sie Ihre AWS-Konsole und suchen Sie nach IAM Roles Anywhere.

Bild der AWS-Konsole mit IAM Roles Anywhere

Wir beginnen mit der Erstellung eines Trust Anchor, der mit unserer Stammzertifizierungsstelle verbunden ist. Geben Sie dem Trust Anchor einen Namen und wählen Sie im externen Zertifikatspaket „Externes Zertifikatspaket“ aus, bevor Sie den Inhalt aus PrivateCA.pem einfügen:

Bild, das das Fenster „Vertrauensanker bearbeiten“ zeigt

Stellen Sie sicher, dass sich der Trust Anchor in derselben Region befindet wie die Dienste, die Sie verwenden möchten.

Sobald Sie Ihren Vertrauensanker haben, benötigen Sie eine IAM-Rolle, die Sie übernehmen können. Erstellen Sie eine neue IAM-Rolle und fügen Sie eine benutzerdefinierte Vertrauensrichtlinie hinzu:

  {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Effect":"Allow",
          "Principal":{
          "Service":"rolesanywhere.amazonaws.com"
        },
        "Action":[
            "sts:AssumeRole",
            "sts:SetSourceIdentity",
            "sts:TagSession"
          ]
        }
      ]
    }

Anschließend müssen Sie eine IAM-Richtlinie hinzufügen. Beachten Sie, dass empfohlen wird, die für die Rolle erforderlichen Mindestberechtigungen zu erteilen. Hier erteilen wir Rechte zur Interaktion mit dem S3-Bucket mendixdemo.com.


     {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::mendixdemo.com/*"
            }
        ]
    }

Als nächstes benötigen Sie ein Profil, um diese Rolle zu übernehmen. Suchen Sie also erneut nach IAM Roles Anywhere und erstellen Sie ein Profil, indem Sie die Rolle zuweisen, die wir gerade erstellt haben

Bild zeigt das Erstellen eines Profils zur Übernahme der Rolle „IAM Roles Anywhere“

Mendix Local

An diesem Punkt können wir unsere Zertifikate und AWS-Rollen nutzen, um in unsere Mendix app. Wir beginnen mit der lokalen Entwicklung. Zur Demonstration habe ich ein einfaches Demoprojekt eingerichtet und den AWS Authentication Connector und den S3 Connector vom Marketplace heruntergeladen.

Beginnen wir mit der Konfiguration unseres AWS-Connectors. Er benötigt nur die ARNs der von uns erstellten Elemente.

Bild zeigt die Konfiguration des AWS-Connectors

Als Nächstes fügen wir den S3-Konnektor hinzu, der uns das Hochladen in den S3-Bucket ermöglicht, den wir in unserer Richtlinie definiert haben.

Bild zeigt das Hinzufügen des S3-Anschlusses

Moment mal … vergessen wir da nicht etwas? Was war der Sinn all dieser Zertifikatsgenerierung, wenn wir sie nicht verwenden werden? Wir müssen unserer App sagen, wo sie unsere Zertifikate finden kann! Wir haben damit begonnen, indem wir die Client-Zertifikat-ID auf „1“ gesetzt haben. Jetzt müssen wir unsere Laufzeiteinstellungen aktualisieren: App->Einstellungen->Konfigurationen und hinzufügen zwei benutzerdefinierte Laufzeitkonfigurationen:

  • ClientCertificatePasswords – das Passwort, das Sie beim Generieren Ihres PFX hinzugefügt haben.
  • ClientCertificates – der Speicherort Ihres Zertifikats auf Ihrem lokalen Computer.

Abbildung: Hinzufügen von Kunden-Laufzeitkonfigurationen

Wenn wir dies jetzt testen, können wir sehen, dass wir in unseren S3-Bucket hochladen können!

Mendix Cloud

Wir können dies lokal tun, was großartig ist, aber jetzt müssen wir in der Lage sein, in der Cloud bereitzustellen, was eine lizenzierte Umgebung erfordert. Für diese Anweisungen verwenden wir „Mendix Cloud“, aber die Prinzipien sind die gleichen für „Mendix Für Private Cloud“.

Unsere erste Änderung ist eigentlich eine Codeaktualisierung, um den Zertifikatsspeicherort je nach Umgebung festzulegen. Also füge ich eine neue Konstante @CertName hinzu und übergebe sie in meine Authentifizierung.

Wir müssen dann unser Client-Zertifikat in unserem Mendix Umgebung. Öffnen Sie Ihre Umgebung, navigieren Sie zu „Netzwerk“ und fügen Sie ein Client-Zertifikat hinzu. Laden Sie Ihre Datei „client.pfx“ hoch und geben Sie das Kennwort ein, mit dem Sie sie erstellt haben.

Bild zeigt das Einrichten des Client-Zertifikats im Mendix -Umgebung

Wählen Sie dann das Zertifikat aus und klicken Sie auf Details. Geben Sie Ihrem Zertifikat einen Webservices-Aufrufnamen und ordnen Sie ihn Ihrer Zertifikatsnamenkonstante in Modelloptionen -> Konstanten zu.

Bild mit den Details des Zertifikats im Mendix -Umgebung

Anschließend starten wir unsere Anwendung neu und testen…

Bild zeigt Neustart und Test der Anwendung

Und voilà! Unser Bild erscheint in unserem S3-Bucket.

Bild, das den Erfolg mit dem Bild im S3-Bucket zeigt

Meme: Komm und feier mit Leo

Fazit

Wir haben gesehen, wie die AWS-Authentifizierung genutzt werden kann, um die Vorteile modernster IAM-Lösungen von AWS zu nutzen, die es uns ermöglichen, uns zu verbinden Mendix Anwendungen auf AWS-Ressourcen auf die sicherste Art und Weise.

Weitere Informationen zum Authentifizierungsconnector finden Sie in den Dokumenten: https://docs.mendix.com/appstore/connectors/aws/aws-authentication/

Weitere Informationen Mendix und AWS:

https://www.mendix.com/aws/

Wählen Sie Ihre Sprache