Wie erlaube ich Kunden, die TLS 1.2 oder höher nicht verwenden, Zugriff auf meine Amazon S3-Buckets?

Lesedauer: 8 Minute
0

Meine Kunden verwenden keine TLS-Versionen 1.2 oder höher, sodass sie nicht auf Inhalte zugreifen können, die in meinen Amazon Simple Storage Service (Amazon S3) -Buckets gespeichert sind. Ich möchte diesen Kunden den Zugriff auf Inhalte in meinen Amazon S3-Buckets mit TLS 1.0 oder 1.1 ermöglichen.

Kurzbeschreibung

AWS erzwingt die Verwendung von TLS 1.2 oder höher auf allen AWS-API-Endpunkten. Um weiterhin eine Verbindung zu AWS-Services herzustellen, aktualisieren Sie die gesamte Software, die TLS 1.0 oder 1.1 verwendet.

Lösung

Amazon CloudFront ermöglicht die Verwendung älterer TLS-Versionen, indem Kunden vom TLS-Protokoll abstrahiert werden, das zwischen Ihrer CloudFront-Distribution und Amazon S3 verwendet wird.

Erstellen einer CloudFront-Distribution mit OAC

Mit CloudFront können Sie anonyme und öffentliche Anforderungen an Ihre S3-Buckets unterstützen. Sie können Ihre S3-Buckets auch privat und nur über CloudFront zugänglich machen, indem Sie signierte Anforderungen für den Zugriff auf Ihre S3-Buckets erfordern.

Unterstützt anonyme und öffentliche Anforderungen an Ihre S3-Buckets

Hinweis: Im folgenden Beispiel wird davon ausgegangen, dass Sie bereits einen S3-Bucket verwenden. Wenn Sie keinen S3-Bucket haben, erstellen Sie einen.

Gehen Sie folgendermaßen vor, um die CloudFront-Distribution zu erstellen:

  1. Öffnen Sie die CloudFront-Konsole.
  2. Wählen Sie Distribution erstellen aus.
  3. Wählen Sie unter Origin für Origin-Domain den REST-API-Endpunkt Ihres S3-Buckets in der Dropdown-Liste aus.
  4. Wählen Sie für Viewer-Protokollrichtlinie die Option HTTP zu HTTPS umleiten aus.
  5. Wählen Sie unter Zulässige HTTP-Endpunkte GET, HEAD, OPTIONS aus, um Leseanforderungen zu unterstützen.
  6. Wählen Sie für Ursprungszugriff die Ursprungs-Zugriffskontrolleinstellungen (empfohlen) aus.
  7. Wählen Sie Kontrolleinstellung erstellen aus und verwenden Sie den Standardnamen. Wählen Sie für das Signaturverhalten die Option Anforderungen signieren (empfohlen) und anschließend Erstellen aus. Die empfohlenen OAC-Einstellungen authentifizieren die Anfrage des Viewers automatisch.
  8. Wählen Sie die Identität in der Dropdown-Liste aus. Nachdem die Distribution erstellt wurde, aktualisieren Sie die Bucket-Richtlinie, um den Zugriff auf OAC einzuschränken.
  9. Wählen Sie unter Standard-Cacheverhalten, Viewer die Option HTTP zu HTTPS umleiten für die Viewer-Protokollrichtlinie aus und belassen Sie die anderen Einstellungen als Standardeinstellungen.
  10. Wählen Sie unter Cache-Schlüssel und Ursprungsanforderungen die Option Cache-Richtlinie und Ursprungsanforderungsrichtlinie (empfohlen) aus. Verwenden Sie dann **CachingOptimized ** für die Cache-Richtlinie und CORS-S3Origin für die Ursprungs-Anforderungsrichtlinie.
  11. Wählen Sie Distribution erstellen aus und warten Sie dann, bis der Status auf Aktiviert aktualisiert wird.

Signierte Anforderungen für den Zugriff auf Ihre S3-Buckets erfordern

Erhöhen Sie die Sicherheit Ihrer S3-Buckets, indem Sie nur signierte Anforderungen unterstützen. Bei signierten Anforderungen folgt OAC Ihren Authentifizierungsparametern und leitet sie an den S3-Ursprung weiter, der dann anonyme Anforderungen ablehnt.

Gehen Sie folgendermaßen vor, um eine CloudFront-Distribution zu erstellen, die signierte Anforderungen für den Zugriff auf Ihre S3-Buckets erfordert:

  1. Öffnen Sie die CloudFront-Konsole.
  2. Wählen Sie Distribution erstellen aus.
  3. Wählen Sie unter Origin für Origin-Domain den REST-API-Endpunkt Ihres S3-Buckets in der Dropdown-Liste aus.
  4. Wählen Sie für Viewer-Protokollrichtlinie die Option HTTP zu HTTPS umleiten aus.
  5. Wählen Sie unter Zulässige HTTP-Endpunkte GET, HEAD, OPTIONS aus, um Leseanforderungen zu unterstützen.
  6. Wählen Sie für Ursprungszugriff die Ursprungs-Zugriffskontrolleinstellungen (empfohlen) aus.
  7. Blockieren Sie alle nicht signierten Anforderungen, indem Sie die Option Anforderungen nicht signieren aktivieren.
    **Hinweis:**Das Blockieren nicht signierter Anforderungen erfordert, dass jeder Kunde seine Anforderungen signiert, damit der S3-Ursprung die Berechtigungen auswerten kann.
  8. Erstellen Sie eine benutzerdefinierte Cache-Richtlinie, um den Autorisierungsheader des Kunden an den Ursprung weiterzuleiten.
  9. Wählen Sie unter Cache-Schlüssel und Ursprungsanforderungen die Option Cache-Richtlinie und Ursprungsanforderungsrichtlinie (empfohlen) aus.
  10. Wählen Sie Richtlinie erstellen aus.
  11. Geben Sie im Abschnitt Name einen Namen für die Cache-Richtlinie ein.
  12. Wechseln Sie unter Cache-Schlüsseleinstellungen zu Headers und wählen Sie Die folgenden Header einbeziehen aus.
  13. Wählen Sie unter Header hinzufügen die Option Autorisierung aus.
  14. Wählen Sie Erstellen aus.

Kontrollieren der Sicherheitsrichtlinien des Kunden

Um eine Sicherheitsrichtlinie in CloudFront zu steuern, benötigen Sie eine benutzerdefinierte Domain. Es hat sich bewährt, einen alternativen Domainnamen für Ihre Distribution anzugeben. Es ist auch eine bewährte Methode, ein benutzerdefiniertes SSL-Zertifikat zu verwenden, das in AWS Certificate Manager (ACM) konfiguriert ist. Dadurch haben Sie mehr Kontrolle über die Sicherheitsrichtlinie und Kunden können TLS 1.0 weiterhin verwenden. Weitere Informationen finden Sie unter Unterstützte Protokolle und Verschlüsselungen zwischen Viewern und CloudFront.

Wenn Sie den Standarddomainnamen *\ .cloudfront.net verwenden, stellt CloudFront automatisch ein Zertifikat bereit und legt die Sicherheitsrichtlinie so fest, dass TLS 1.0 und 1.1 zulässig sind. Weitere Informationen finden Sie unter Distributionseinstellungen.

Gehen Sie folgendermaßen vor, um einen alternativen Domainnamen für Ihre CloudFront-Distribution zu konfigurieren:

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie dann die CloudFront-Konsole.
  2. Wählen Sie die ID für die Distribution, die Sie aktualisieren möchten.
  3. Wählen Sie auf der Registerkarte Allgemein die Option Bearbeiten aus.
  4. Wählen Sie für Alternative Domainnamen (CNAMEs) die Option Element hinzufügen und geben Sie Ihren Domainnamen ein.
    Hinweis: Es hat sich bewährt, einen benutzerdefinierten kanonischen Namensdatensatz (CNAME) für den Zugriff auf Ihre Ressourcen zu verwenden. Die Verwendung eines CNAME gibt Ihnen eine bessere Kontrolle über das Routing und ermöglicht Ihren Kunden einen besseren Übergang.
  5. Wählen Sie für Benutzerdefiniertes SSL-Zertifikat das benutzerdefinierte SSL-Zertifikat in der Dropdown-Liste aus, die Ihren CNAME abdeckt, um es der Distribution zuzuweisen.
    Hinweis: Weitere Informationen zur Installation eines Zertifikats finden Sie unter Wie konfiguriere ich meine CloudFront-Distribution für die Verwendung eines SSL/TLS-Zertifikats?
  6. Wählen Sie Distribution erstellen und warten Sie, bis der Status auf Aktiviert aktualisiert wird.

Nachdem Sie die Distribution erstellt haben, müssen Sie OAC den Zugriff auf Ihren Bucket gestatten. Führen Sie die folgenden Schritte aus:

  1. Navigieren Sie zur CloudFront-Konsolenseite und öffnen Sie Ihre CloudFront-Distribution.
  2. Wählen Sie die Registerkarte Ursprung aus, wählen Sie Ihren Ursprung aus und klicken Sie dann auf Bearbeiten.
  3. Wählen Sie Richtlinie kopieren, öffnen Sie die Bucket-Berechtigung und aktualisieren Sie Ihre Bucket-Richtlinie.
  4. Öffnen Sie die Seite Zu S3-Bucket-Berechtigungen wechseln.
  5. Wählen Sie unter Bucket-Richtlinie die Option Bearbeiten aus. Fügen Sie die Richtlinie ein, die Sie zuvor kopiert haben, und wählen Sie dann Speichern. Wenn Ihre Bucket-Richtlinie mehr als das Lesen aus S3 erfordert, können Sie die erforderlichen APIs hinzufügen.

Wenn Sie einen benutzerdefinierten Domainnamen verwenden, ändern Sie Ihre DNS-Einträge, sodass sie die neue CloudFront-Verteilungs-URL verwenden. Wenn Sie keinen benutzerdefinierten Domainnamen verwenden, müssen Sie Ihren Benutzern die neue URL für die CloudFront-Distribution zur Verfügung stellen. Außerdem müssen Sie alle Client- oder Gerätesoftware aktualisieren, die die alte URL verwendet.

Wenn Sie ein AWS-SDK für den Zugriff auf Amazon S3-Objekte verwenden, müssen Sie Ihren Code ändern, um reguläre HTTPS-Endpunkte zu verwenden. Stellen Sie außerdem sicher, dass Sie die neue CloudFront-URL verwenden. Wenn die Objekte nicht öffentlich sind und eine bessere Kontrolle erfordern, können Sie private Inhalte mit signierten URLs und signierten Cookies bereitstellen.

Verwenden von vorsignierten S3-URLs, um auf Objekte zuzugreifen

Wenn Ihr Workflow auf vorsignierten S3-URLs basiert, verwenden Sie eine CloudFront-Distribution, um Ihre Anforderung an den S3-Ursprung weiterzuleiten. Generieren Sie zunächst eine vorsignierte URL für das gewünschte Objekt. Ersetzen Sie dann den Host in der URL durch den CloudFront-Endpunkt, um den Aufruf über CloudFront weiterzuleiten und das Verschlüsselungsprotokoll automatisch zu aktualisieren. Führen Sie den folgenden CLI-Befehl aus, um eine vorsignierte URL zu testen und zu generieren:

aws s3 presign s3://BUCKET_NAME/test.jpg

Beispiel für eine Ausgabe:

https://bucket_name.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=%5b...%5d%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=%5b...%5d&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature">https://BUCKET_NAME.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature    =[...]

Ändern Sie nun die S3-URL auf den neuen CloudFront-Endpunkt. Ersetzen Sie beispielsweise diese S3-URL:

BUCKET_NAME.s3.eu-west-1.amazonaws.com

mit diesem Endpunkt:

https://DISTRIBUTION_ID.cloudfront.net.

Beispiel für eine Ausgabe:

https://<DISTRIBUTION_ID>.cloudfront.net /test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=[...]

Wenden Sie die folgenden CloudFront-Einstellungen an, um vorsignierte URLs zu verwenden:

  1. Legen Sie das OAC-Signaturverhalten auf Keine Anforderungen signieren fest.
  2. Legen Sie die CloudFront-Richtlinie für Ursprungsanforderungen für die Distribution auf Einstellungen für Ursprungsanforderungen fest: Header – Keine; Cookies – Keine; Abfragezeichenfolgen – Alle.
  3. Legen Sie die Cache-Richtlinie auf Header – Keine; Cookies – Keine; Abfragezeichenfolgen – Keine fest.

In AWS CloudTrail wird die GET-Anforderung zum Herunterladen von einer vorsignierten S3-URL als Identität angezeigt, die die vorsignierte URL generiert hat.

Wenn Sie ein AWS-SDK für den Zugriff auf S3-Objekte verwenden, müssen Sie Ihren Code so ändern, dass er die vorsignierte URL verwendet. Verwenden Sie stattdessen eine reguläre HTTPS-Anforderung und verwenden Sie die neue CloudFront-URL.

Bestätigen, dass Sie moderne Verschlüsselungsprotokolle für Amazon S3 verwenden

Um Ihre neue Richtlinie zu testen, verwenden Sie den folgenden Beispielbefehl curl, um HTTPS-Anforderungen mit einem bestimmten Legacy-Protokoll zu stellen:

curl https://${CloudFront_Domain}/image.png -v --tlsv1.0 --tls-max 1.0

Der Beispielbefehl curl sendet mithilfe von TLS 1.0 eine Anforderung an CloudFront. Dadurch wird mithilfe von TLS 1.2 eine Verbindung zum S3-Ursprung hergestellt und die Datei wird erfolgreich heruntergeladen.

Es ist eine bewährte Methode, AWS CloudTrail Lake zu verwenden, um ältere TLS-Verbindungen zu AWS-Serviceendpunkten zu identifizieren. Sie können den CloudTrail Lake-Eventdatenspeicher so konfigurieren, dass Verwaltungsereignisse oder Datenereignisse erfasst werden. Das entsprechende CloudTrail-Ereignis in CloudTrail Lake zeigt TLS Version 1.2 und bestätigt, dass Ihre Kunden moderne Sicherheitsrichtlinien verwenden, um sich mit Amazon S3 zu verbinden.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr