wake-up-neo.com

AWS API Gateway sollte die Verwendung von TLS v1 verhindern

In AWS Cloudfront-Dokumentation unterstützt AWS API Gateway TLS v1.0, v1.1, v1.2.

Ich möchte jedoch die Verschlüsselungsprotokolle für meine Gateway-API auf TLS v1.1 und v1.2 beschränken. Wo konfiguriere ich das? Ich sehe keine Cloudfront-Distribution für meine API. Die Gateway-Ressourcenseite hat keine Option zum Angeben des Sicherheitsprotokolls.

Meine API wird in den letzten 2 Jahren unter Verwendung einer benutzerdefinierten Domäne in der Produktion ausgeführt. Wie kann ich meine API auf die Protokolle TLS V1.1 und V1.2 nur in API Gateway beschränken?

8
suman j

Damit die Gateway-API mit zusätzlicher Cloud-Front-Distribution funktioniert, müssen wir dies tun

  1. Wechseln Sie in der AWS Console unter API Gateway zu Custom Domain Name und löschen Sie den zugeordneten Eintrag. 
  2. Erstellen Sie eine neue Cloudfront-Distribution mit

Cloudfront-Einstellungen

  • Origin-Domänenname als Ihr Gate-API-Endpunkt https://abcdfefg.execute-api.us-east-1.amazonaws.com
  • Viewer-Protokollrichtlinie nur als HTTPS
  • Origin-SSL-Protokolle wie TLSv1.2, TLSv1.1 (TLSv1 nicht aufheben)
  • Fügen Sie unter Alternate Domain Name einen CNAME-Eintrag hinzu, um auf den benutzerdefinierten Domainnamen zu verweisen
  • und einige andere Standardeinstellungen Wenn die oben genannten Änderungen abgeschlossen sind, erzwingt der Zugriff auf den benutzerdefinierten Domänennamen für https die TLS-Sicherheitseinstellungen, die in der Verteilung Cloudfront definiert sind.
5
suman j

Ich habe gerade ausgiebig daran gearbeitet, und durch viel Ausprobieren kann ich dokumentieren, was meiner Meinung nach die derzeit optimale Lösung dafür ist. Die Antwort von suman j war die beste Lösung im Oktober 2017, allerdings hat sie eine Einschränkung und auch AWS hat sich seitdem weiterentwickelt.

Was ist also die Einschränkung? 

Wenn Sie Lambda mit dem API-Gateway verwenden und den benutzerdefinierten Domänennamen löschen, muss für das manuelle Erstellen einer CloudFront-Distribution und das Zuordnen einer Lambda-Funktion eine bestimmte Lambda-Versionsnummer benötigt werden. Das heißt, es werden keine Aliase unterstützt. Dies ist problematisch bei CI/CD, wo sich die Versionsnummern ständig ändern können. Die Basispfadzuordnungen für den benutzerdefinierten Domänennamen des API-Gateways unterstützen jedoch Aliase, sodass Sie diese besser verwenden können.

Wie hat sich AWS entwickelt? 

Seit November 2017 unterstützt API Gateway das Erstellen regionaler Endpunkte in benutzerdefinierten Domänennamen. Diese Endpunkte erstellen keine CloudFront-Distribution, wodurch die Strategie optimiert wird, Ihre eigene CloudFront-Distribution vor ihnen zu platzieren, wodurch die Verwendung von TLS v1.0 verhindert wird.

Wie kann ich das alles einrichten? 

Die Schritte, die ich dazu gemacht habe (über die Konsole), sind wie folgt. Beachten Sie, dass Sie möglicherweise einige Einstellungen ändern müssen, um Ihre bestimmte Anwendung zu unterstützen. Für die Zwecke dieser Dokumentation sagen wir, Ihr API heißt api.example.com.

  1. Bearbeiten Sie im API-Gateway Ihren benutzerdefinierten Domänennamen, fügen Sie eine Regionalkonfiguration hinzu, wählen Sie Ihr Zertifikat aus und klicken Sie auf Speichern. Hinweis: Für regionale APIs müssen Sie ein ACM-Zertifikat aus derselben Region wie die API verwenden. Weitere Informationen hier: https://docs.aws.Amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-migrate.html

  2. Kopieren Sie den Zieldomänennamen des neu erstellten regionalen Endpunkts. (Z. B. d-abcdefg123.execute-api.us-east-1.amazonaws.com)

  3. Ändern Sie in Route 53 oder Ihrem DNS-Anbieter die Zuordnung Ihrer API vom Edge-optimierten CloudFront-Zieldomänennamen in den neu erstellten Zieldomänennamen des regionalen Endpunkts (z. B. d-abcdefg123.execute-api.us-east-1.amazonaws.com) ).

  4. Wenn die DNS-Änderung übernommen wurde, bearbeiten Sie den Namen der benutzerdefinierten Domäne und löschen Sie den Edge-optimierten Endpunkt, indem Sie auf das Symbol x klicken. Dann sollten Sie dann eine neue CloudFront-Distribution mit demselben CNAME Ihrer API erstellen können, ohne dass AWS Sie blockiert.

  5. Erstellen Sie im API-Gateway einen neuen benutzerdefinierten Domänennamen mit Domänenname = regional-api.example.com, Endpoint Configuration = Regional, und wählen Sie das ACM-Zertifikat aus. Klicken Sie auf Speichern und anschließend auf Bearbeiten. Fügen Sie die Basispfadzuordnung gemäß Ihrer aktuellen API hinzu und klicken Sie auf Speichern. Kopieren Sie den Zieldomänennamen des neu erstellten regionalen Endpunkts. (Z. B. d-xyzabcd456.execute-api.us-east-1.amazonaws.com)

  6. Erstellen Sie in Route 53 oder Ihrem DNS-Anbieter einen neuen CNAME-Eintrag, der regional-api.example.com dem neu erstellten regionalen Endpunkt-Zieldomänennamen zuordnet. (Dh d-xyzabcd456.execute-api.us-east-1.amazonaws.com)

  7. Erstellen Sie in CloudFront eine neue Distribution mit den folgenden Einstellungen:

Origin EINSTELLUNGEN:

  Origin Domain Name = regional-api.example.com
   

  After entering the above the following hidden fields should then be displayed:   

  Origin SSL Protocols = TLSv1.2 & TLSv1.1

  Origin Protocol Policy = HTTPS Only

DEFAULT CACHE-VERHALTEN-EINSTELLUNGEN: (Diese Werte sind das, was ich brauchte, damit die App, die die API aufruft, ordnungsgemäß funktioniert.) 

  Viewer Protocol Policy = Redirect HTTP to HTTPS
    

  Allowed HTTP Methods = GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE

  Cached HTTP Methods = OPTIONS

  Cache Based on Selected Request Headers = Whitelist
    

  Whitelist Headers = Authorization   


  Object Caching = Customize  

  Minimum TTL = 0

  Maximum TTL = 0

  Default TTL = 0 

  Forward Cookies = All
      

  Query String Forwarding and Caching = Forward all, cache based on all
    

  Smooth Streaming = No

  Restrict Viewer Access (Use Signed URLs or Signed Cookies) = No
    

  Compress Objects Automatically = No 
   

  Lambda Function Associations = None

 

DISTRIBUTION-EINSTELLUNGEN:

  Price Class = Use All Edge Locations
   

  AWS WAF Web ACL = None
     

  Alternate Domain Names (CNAMEs) = test-api.example.com
     

  SSL Certificate = Custom SSL Certificate (example.com)
   

  Custom SSL Client Support = Only Clients that Support Server Name Indication (SNI)
    

  Security Policy = TLSv1.1_2016 (recommended)
   

Unterstützte HTTP-Versionen = HTTP/2, HTTP/1.1, HTTP/1.0

  1. Während Sie auf die Erstellung der CloudFront-Distribution warten (durchschnittlich 40 Minuten), erstellen Sie in Route 53 oder Ihrem DNS-Provider eine neue Zuordnung von CNAME-Datensätzen test-api.example.com zum neu erstellten CloudFront-Domänennamen (z. B. d123abcdefg.cloudfront.net).

  2. Wenn die Erstellung der Distribution abgeschlossen ist, testen Sie Ihre Anwendung vollständig mit test-api.example.com

  3. Wenn alle Tests erfolgreich sind, aktualisieren Sie die alternativen Domänennamen (CNAMEs) Ihrer neuen CloudFront auf = api.example.com. (Hinweis - dies macht es nicht "live", dazu ist die folgende DNS-Änderung erforderlich)

  4. Sobald das Distributions-Update abgeschlossen ist (durchschnittlich 40 Minuten), aktualisieren Sie in Route 53 oder Ihrem DNS-Provider die CNAME-Datensatzzuordnung von api.example.com auf den neu erstellten CloudFront-Domänennamen (z. B. d123abcdefg.cloudfront.net).

  5. Wenn alles gut funktioniert, können Sie jetzt den Eintrag "Route 53/DNS CNA test-api.example.com" löschen und den benutzerdefinierten Domänennamen des api.example.com API-Gateways löschen.

  6. Für Bonuspunkte wird bei Verwendung von Route 53 empfohlen, A- und AAAA-Datensatzaliasnamen anstelle von CNAMEs für die obigen Route 53-Schritte zu verwenden (was ich getan habe). Dies senkt die Kosten geringfügig, verbirgt die zugrunde liegende CloudFront-Distribution etwas und ermöglicht auch die Unterstützung von IPv6.

Ich hoffe das hilft! :-)

2
Alistair
1
user9371259

Für alle, die dies sehen, können Sie jetzt in API Gateway eine TLS-Mindestversion von 1.2 für Ihre benutzerdefinierte Domain festlegen: https://docs.aws.Amazon.com/apigateway/latest/developerguide/apigateway-custom-domain) -tls-version.html

0
Daniel

Sie können eine API-Gateway-Verteilung in Ihrer CloudFront-Verteilerliste erstellen. Wenn Ihr API-Gateway Origin über HTTPS verfügt, können Sie angeben, welcher Typ von TLS-Protokollen zwischen Cloudfront und API-Gateway verwendet werden soll. Zwischen Viewer/Client und Cloudfront können Sie die TLS-Protokolle und -Suiten im Abschnitt Allgemein> Sicherheitsrichtlinie der CloudFront-Konfiguration angeben. Diese Konfiguration ist nur sichtbar, wenn Sie benutzerdefiniertes SSL mit SNI verwenden. Sie können wählen zwischen:

  1. TLSv1
  2. TLSv1_2016
  3. TLSv1.1_2016
  4. TLSv1.2_2018
0
Faizal Sidek