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.
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:
- Kosten – dies ist ein kostenloses Befehlszeilentool ohne Kostenfolgen, perfekt für Entwicklung und Tests.
- 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.
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.
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:
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.
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:
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
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.
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.
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.
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.
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.
Anschließend starten wir unsere Anwendung neu und testen…
Und voilà! Unser Bild erscheint in unserem S3-Bucket.
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: