Erstellen einer signierten URL mit einer benutzerdefinierten Richtlinie - Amazon CloudFront

Erstellen einer signierten URL mit einer benutzerdefinierten Richtlinie

Um eine signierte URL mit einer benutzerdefinierten Richtlinie zu erstellen, führen Sie die folgenden Schritte aus.

So erstellen Sie eine signierte URL mit einer benutzerdefinierten Richtlinie

  1. Wenn Sie .NET oder Java verwenden, um signierte URLs zu erstellen, und den privaten Schlüssel für Ihr Schlüsselpaar noch nicht vom PEM-Standardformat in ein mit .NET oder Java kompatibles Format neu formatiert haben, holen Sie diesen Schritt jetzt nach. Weitere Informationen finden Sie unter Neuformatierung des privaten Schlüssels (nur .NET und Java).

  2. Verketten Sie die folgenden Werte in der angegebenen Reihenfolge und entfernen Sie die Leerzeichen (einschließlich Tabulatoren und Zeilenumbruchzeichen) zwischen den Teilen. Möglicherweise müssen Sie in der Zeichenfolge im Anwendungscode Escape-Zeichen einfügen. Alle Werte verfügen über eine Zeichenfolge als Typ. Jedes Teil ist nach der Nummer ( 
							1
						) den beiden folgenden Beispielen zugeordnet.

    
										1
									Basis-URL für die Datei

    Bei der Basis-URL handelt es sich um die CloudFront-URL, die Sie für den Zugriff auf die Datei verwenden würden, wenn Sie keine signierten URLs verwenden würden. Dies umfasst Ihre eigenen Abfragezeichenfolgeparameter, sofern vorhanden. Weitere Informationen zum Format der URLs für Verteilungen finden Sie unter Anpassen des URL-Formats für Dateien in CloudFront.

    Die folgenden Beispiele zeigen Werte, die Sie für Verteilungen angeben.

    • Die folgende CloudFront-URL ist für ein Image in einer Verteilung bestimmt (unter Verwendung des CloudFront-Domänennamens). Beachten Sie, dass image.jpg ein images-Verzeichnis ist. Der Pfad zur Datei in der URL muss mit dem Pfad zur Datei auf Ihrem HTTP-Server oder in Ihrem Amazon S3 Bucket übereinstimmen.

      http://d111111abcdef8.cloudfront.net/images/image.jpg

    • Die folgende CloudFront-URL enthält eine Abfragezeichenfolge:

      http://d111111abcdef8.cloudfront.net/images/image.jpg?size=large

    • Die folgenden CloudFront-URLs sind für Image-Dateien in einer Verteilung bestimmt. Beide verwenden einen alternativen Domänennamen; die zweite enthält eine Abfragezeichenfolge:

      http://www.example.com/images/image.jpg

      http://www.example.com/images/image.jpg?color=red

    • Die folgende CloudFront-URL ist für eine Image-Datei in einer Verteilung bestimmt, die einen alternativen Domänennamen und das HTTPS-Protokoll verwendet:

      https://www.example.com/images/image.jpg

    
										2
									?

    ? zeigt an, dass Abfragezeichenfolgeparameter hinter der Basis-URL angegeben sind. Fügen Sie ? auch dann ein, wenn Sie keine eigenen Abfragezeichenfolgeparameter haben.

    
										3
									Ihre Abfragezeichenfolgeparameter, sofern vorhanden&

    Dieser Wert ist optional. Wenn Sie Ihre eigenen Abfragezeichenfolgeparameter hinzufügen möchten, z. B.

    color=red&size=medium

    fügen Sie diese hinter dem ? (siehe 
											2
										) und vor dem Policy -Parameter ein. In seltenen Fällen müssen Sie Ihren Abfragezeichenfolgeparameter hinter Key-Pair-Id einfügen.

    Wichtig

    Ihre Parameter können nicht mit Policy, Signature oder Key-Pair-Id benannt werden.

    Wenn Sie eigene Parameter hinzufügen, fügen Sie nach jedem Parameter ein & an, auch nach dem letzten.

    
										4
									Policy=Base64-codierte Version der Richtlinienanweisung

    Ihre Richtlinienanweisung im JSON-Format, wobei Leerzeichen entfernt und eine Base64-Codierung vorgenommen wurde. Weitere Informationen finden Sie unter Erstellen einer Richtlinienanweisung für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet.

    Die Richtlinienanweisung steuert den Zugriff, den eine signierte URL einem Benutzer gewährt. Sie enthält die URL der Datei, ein Ablaufdatum und eine Uhrzeit, ein optionales Datum und die Uhrzeit, zu der die URL gültig wird, und eine optionale IP-Adresse oder einen Bereich von IP-Adressen, die auf die Datei zugreifen dürfen.

    
										5
									&Signature=gehashte und signierte Version der Richtlinienanweisung

    Eine gehashte, signierte und Base64-codierte Version der JSON-Richtlinienanweisung. Weitere Informationen finden Sie unter Erstellen einer Signatur für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet.

    
									6
								&Key-Pair-Id=ID des öffentlichen Schlüssels für den öffentlichen CloudFront-Schlüssel, dessen entsprechenden privaten Schlüssel Sie zum Generieren der Signatur verwenden

    Die ID für einen öffentlichen CloudFront-Schlüssel, z. B. K2JCJMDEHXQW5F. Die ID des öffentlichen Schlüssels teilt CloudFront mit, welcher öffentliche Schlüssel zur Validierung der signierten URL verwendet werden soll. CloudFront vergleicht die Informationen in der Signatur mit den Informationen in der Richtlinienanweisung, um sicherzustellen, dass die URL nicht manipuliert wurde.

    Dieser öffentliche Schlüssel muss zu einer Schlüsselgruppe gehören, die ein vertrauenswürdiger Aussteller in der Verteilung ist. Weitere Informationen finden Sie unter Festlegen der Aussteller, die signierte URLs und signierte Cookies erstellen können.

Beispiel für signierte URL:


					1
				http://d111111abcdef8.cloudfront.net/image.jpg 
					2
				? 
					3
				color=red&size=medium& 
					4
				Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA 6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ 29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiI yMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQ VdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp 7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo 
					5
				&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~ -ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmat EXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6 
					6
				&Key-Pair-Id=K2JCJMDEHXQW5F

Erstellen einer Richtlinienanweisung für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet

Zum Erstellen einer Richtlinienanweisung für eine benutzerdefinierte Richtlinie führen Sie die folgenden Schritte aus. Einige Beispiel-Richtlinienanweisungen, die den Zugriff auf Dateien auf verschiedene Weisen kontrollieren, finden Sie unter Beispiel-Richtlinienanweisungen für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet.

So erstellen Sie die Richtlinienanweisung für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet

  1. Erstellen Sie die Richtlinienanweisung unter Verwendung des folgenden JSON-Formats. Weitere Informationen finden Sie unter Werte, die Sie in der Richtlinienanweisung für eine signierte URL angeben, die eine benutzerdefinierte Richtlinie verwendet.

    { "Statement": [ { "Resource": "URL or stream name of the file", "Condition": { "DateLessThan": { "AWS:EpochTime": required ending date and time in Unix time format and UTC }, "DateGreaterThan": { "AWS:EpochTime": optional beginning date and time in Unix time format and UTC }, "IpAddress": { "AWS:SourceIp": "optional IP address" } } } ] }

    Beachten Sie Folgendes:

  2. Entfernen Sie alle Leerzeichen (einschließlich Tabulatoren und Zeilenumbruchzeichen) aus der Richtlinienanweisung. Möglicherweise müssen Sie in der Zeichenfolge im Anwendungscode Escape-Zeichen einfügen.

  3. Nehmen Sie eine Base64-Codierung der Richtlinienanweisung mithilfe von MIME-Base64-Codierung vor. Weitere Informationen finden Sie in Abschnitt 6.8, Base64 Content-Transfer-Encoding in RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies.

  4. Ersetzen Sie Zeichen, die in einer URL-Abfragezeichenfolge nicht gültig sind, durch gültige Zeichen. In der folgenden Tabelle sind ungültige und gültige Zeichen aufgelistet.

    Ersetzen Sie diese ungültigen Zeichen Durch diese gültigen Zeichen

    +

    - (Bindestrich)

    =

    _ (Unterstrich)

    /

    ~ (Tilde)

  5. Fügen Sie den resultierenden Wert hinter zu Ihrer signierten URL hinz Policy=.

  6. Erstellen Sie eine Signatur für die signierte URL, indem Sie die Richtlinienanweisung hashen, signieren und eine Base64-Codierung vornehmen. Weitere Informationen finden Sie unter Erstellen einer Signatur für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet.

Werte, die Sie in der Richtlinienanweisung für eine signierte URL angeben, die eine benutzerdefinierte Richtlinie verwendet

Beim Erstellen einer Richtlinienanweisung für eine benutzerdefinierte Richtlinie geben Sie die folgenden Werte an.

Ressource
Anmerkung

Sie können nur einen Wert für Resource angeben.

Die Basis-URL einschließlich Ihrer Abfragezeichenfolge, sofern vorhanden, jedoch ohne die CloudFront-Parameter Policy, Signature und Key-Pair-Id, z. B.:

http://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes

Wichtig

Wenn Sie den Ressourcenparameter für eine Verteilung weglassen, können Benutzer auf alle Dateien zugreifen, die mit einer Verteilung verknüpft sind, die mit dem zum Erstellen der signierten URL verwendeten Schlüsselpaar verknüpft ist.

Beachten Sie Folgendes:

  • Protokoll – Der Wert muss mit http://, https:// oder * beginnen.

  • Abfragezeichenfolgeparameter – Wenn Sie über keine Abfragezeichenfolgeparameter verfügen, lassen Sie das Fragezeichen weg.

  • Platzhalterzeichen – Sie können das Platzhalterzeichen, das null oder mehr Zeichen (*), oder das Platzhalterzeichen, das genau einem Zeichen (?) irgendwo in der Zeichenfolge entspricht, verwenden. Beispielsweise würde der Wert:

    http://d111111abcdef8.cloudfront.net/*game_download.zip*

    u. a. die folgenden Dateien umfassen:

    • http://d111111abcdef8.cloudfront.net/game_download.zip

    • http://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes

    • http://d111111abcdef8.cloudfront.net/test_game_download.zip?license=temp

  • Alternative Domänennamen – Wenn Sie einen alternativen Domänennamen (CNAME) in der URL angeben, müssen Sie diesen alternativen Domänennamen angeben, wenn Sie auf Ihrer Webseite oder in Ihrer Anwendung auf die Datei verweisen. Geben Sie nicht die Amazon S3-URL für Datei an.

DateLessThan

Das Ablaufdatum und die Ablaufzeit für die URL im Unix-Zeitformat (in Sekunden) und in koordinierter Weltzeit (UTC). Setzen Sie den Wert nicht in Anführungszeichen. Weitere Informationen zu UTC finden Sie unter RFC 3339, Datum und Uhrzeit im Internet: Zeitstempel, https://tools.ietf.org/html/rfc3339.

Beispielsweise wird der 1. Januar 2013, 10:00 Uhr UTC in 1357034400 im Unix-Zeitformat umgewandelt.

Dies ist der einzige erforderliche Parameter im Bereich Condition. CloudFront benötigt diesen Wert, um zu verhindern, dass Benutzer dauerhaften Zugriff auf Ihre privaten Inhalte haben.

Weitere Informationen finden Sie unter Wann überprüft CloudFront Ablaufdatum und -zeit in einer signierten URL?.

DateGreaterThan (Optional)

Ein optionales Datum und eine optionale Zeit für die URL im Unix-Zeitformat (in Sekunden) und in koordinierter Weltzeit (UTC). Benutzer sind vor dem angegebenen Datum und der angegebenen Zeit nicht berechtigt, auf die Datei zuzugreifen. Setzen Sie den Wert nicht in Anführungszeichen.

IpAddress (Optional)

Die IP-Adresse des Clients, der die GET-Anfrage stellt. Beachten Sie Folgendes:

  • Um allen IP-Adressen den Zugriff auf die Datei zu gewähren, lassen Sie den Parameter IpAddress weg.

  • Sie können entweder eine IP-Adresse oder einen IP-Adressbereich angeben. Sie können die Richtlinie beispielsweise nicht so einrichten, dass Zugriff gewährt wird, wenn die IP-Adresse des Clients sich in einem von zwei getrennten Bereichen befindet.

  • Um den Zugriff von einer einzigen IP-Adresse zu gewähren, geben Sie Folgendes an:

    "IPv4-IP-Adresse/32"

  • Sie müssen IP-Adressbereiche im IPv4-CIDR-Standardformat angeben (z. B, 192.0.2.0/24). Weitere Informationen finden Sie unter RFC 4632, Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan, https://tools.ietf.org/html/rfc4632.

    Wichtig

    IP-Adressen im IPv6-Format, wie beispielsweise 2001:0db8:85a3:0000:0000:8a2e:0370:7334, werden nicht unterstützt.

    Wenn Sie eine benutzerdefinierte Richtlinie verwenden, die IpAddress enthält, aktivieren Sie IPv6 nicht für die Verteilung. Wenn Sie den Zugriff auf bestimmte Inhalte nach IP-Adresse einschränken und IPv6-Anfragen für andere Inhalte unterstützen möchten, können Sie zwei Verteilungen erstellen. Weitere Informationen finden Sie IPv6 aktivieren im Thema Werte, die Sie beim Erstellen oder Aktualisieren einer Verteilung angeben.

Beispiel-Richtlinienanweisungen für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet

Die folgenden Beispiel-Richtlinienanweisungen zeigen, wie der Zugriff auf eine bestimmte Datei, auf alle Dateien in einem Verzeichnis oder auf alle mit einer Schlüsselpaar-ID verknüpften Dateien kontrolliert wird. Die Beispiele zeigen auch, wie der Zugriff von einer einzelnen IP-Adresse oder einem Bereich von IP-Adressen kontrolliert wird und wie Sie verhindern, dass Benutzer die signierte URL nach einem festgelegten Datum und einer festgelegten Zeit verwenden.

Wenn Sie eines dieser Beispiele kopieren und einfügen, entfernen Sie alle Leerzeichen (einschließlich Tabuloren und Zeilenumbruchzeichen), ersetzen Sie die entsprechenden Werte durch Ihre eigenen Werte und fügen Sie ein Zeilenumbruchzeichen hinter der schließenden Klammer (}) ein.

Weitere Informationen finden Sie unter Werte, die Sie in der Richtlinienanweisung für eine signierte URL angeben, die eine benutzerdefinierte Richtlinie verwendet.

Beispiel-Richtlinienanweisung: Zugriff auf eine Datei von einem Bereich von IP-Adressen aus

Die folgende Beispiel-Richtlinienanweisung in einer signierten URL legt fest, dass ein Benutzer bis zum 1. Januar 2013, 10:00 Uhr UTC, von IP-Adressen im Bereich http://d111111abcdef8.cloudfront.net/game_download.zip auf die Datei 192.0.2.0/24 zugreifen kann:

{ "Statement": [ { "Resource": "http://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1357034400 } } } ] }

Beispiel-Richtlinienanweisung: Zugriff auf alle Dateien in einem Verzeichnis über einen Bereich von IP-Adressen

Mit der folgenden Beispiel-Richtlinienanweisung können Sie signierte URLs für jede Datei im training-Verzeichnis erstellen wie durch das Platzhalterzeichen * im Resource-Parameter verdeutlicht. Benutzer können bis zum 1. Januar 2013, 10:00 Uhr UTC, von IP-Adressen im Bereich 192.0.2.0/24 auf die Datei zugreifen:

{ "Statement": [ { "Resource": "http://d111111abcdef8.cloudfront.net/training/*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1357034400 } } } ] }

Jede signierte URL, in der Sie diese Richtlinie verwenden, enthält eine Basis-URL, die eine bestimmte Datei kennzeichnet, zum Beispiel:

http://d111111abcdef8.cloudfront.net/training/orientation.pdf

Beispiel-Richtlinienanweisung: Zugriff auf alle mit einer Schlüsselpaar-ID verknüpften Dateien über eine IP-Adresse

Mit der folgenden Beispiel-Richtlinienanweisung können Sie signierte URLs für jede mit einer beliebigen Verteilung verknüpfte Datei erstellen wie durch das Platzhalterzeichen * im Resource-Parameter verdeutlicht. Der Benutzer muss die IP-Adresse verwende 192.0.2.10/32. (Der Wert 192.0.2.10/32 in CIDR-Notation bezieht sich auf eine einzelne IP-Adresse, 192.0.2.10.) Die Dateien sind nur vom 1. Januar 2013, 10:00 Uhr UTC, bis zum 2. Januar 2013, 10:00 Uhr UTC, verfügbar:

{ "Statement": [ { "Resource": "http://*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.10/32" }, "DateGreaterThan": { "AWS:EpochTime": 1357034400 }, "DateLessThan": { "AWS:EpochTime": 1357120800 } } } ] }

Jede signierte URL, in der Sie diese Richtlinie verwenden, enthält eine Basis-URL, die eine bestimmte Datei in einer bestimmten CloudFront-Verteilung kennzeichnet, zum Beispiel:

http://d111111abcdef8.cloudfront.net/training/orientation.pdf

Die signierte URL enthält auch eine Schlüsselpaar-ID, die mit einer vertrauenswürdigen Schlüsselgruppe in der Verteilung (d111111abcdef8.cloudfront.net) verknüpft werden muss, die Sie in der Basis-URL angeben.

Erstellen einer Signatur für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet

Bei der Signatur für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet, handelt es sich um eine gehashte, signierte und Base64-codierte Version der Richtlinienanweisung. Führen Sie die folgenden Schritte aus, um eine Signatur für eine benutzerdefinierte Richtlinie zu erstellen.

Weitere Informationen und Beispiele für das Hashing, Signieren und Codieren der Richtlinienanweisung finden Sie unter:

Option 1: So erstellen Sie eine Signatur mithilfe einer benutzerdefinierten Richtlinie

  1. Verwenden Sie die SHA-1-Hash-Funktion und RSA, um die im Verfahren So erstellen Sie die Richtlinienanweisung für eine signierte URL, die eine benutzerdefinierte Richtlinie verwendet erstellte JSON-Richtlinienanweisung zu hashen und zu signieren. Verwenden Sie die Version der Richtlinienanweisung, die keine Leerzeichen mehr enthält, jedoch noch nicht Base64-codiert wurde.

    Verwenden Sie für den privaten Schlüssel, der für die Hash-Funktion erforderlich ist, einen privaten Schlüssel, dessen öffentlicher Schlüssel sich in einer aktiven vertrauenswürdigen Schlüsselgruppe für die Verteilung befindet.

    Anmerkung

    Die Methode, die Sie zum Hashen und Signieren der Richtlinienanweisung verwenden, ist abhängig von Ihrer Programmiersprache und Plattform. Einen Beispiel-Code finden Sie unter Code-Beispiele für das Erstellen einer Signatur für eine signierte URL.

  2. Entfernen Sie alle Leerzeichen (einschließlich Tabulatoren und Zeilenumbruchzeichen) aus der gehashten und signierten Zeichenfolge.

  3. Nehmen Sie eine Base64-Codierung der Zeichenfolge mithilfe von MIME-Base64-Codierung vor. Weitere Informationen finden Sie in Abschnitt 6.8, Base64 Content-Transfer-Encoding in RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies.

  4. Ersetzen Sie Zeichen, die in einer URL-Abfragezeichenfolge nicht gültig sind, durch gültige Zeichen. In der folgenden Tabelle sind ungültige und gültige Zeichen aufgelistet.

    Ersetzen Sie diese ungültigen Zeichen Durch diese gültigen Zeichen

    +

    - (Bindestrich)

    =

    _ (Unterstrich)

    /

    ~ (Tilde)

  5. Fügen Sie den resultierenden Wert hinter &Signature= zu Ihrer signierten URL hinzu und kehren Sie zu So erstellen Sie eine signierte URL mit einer benutzerdefinierten Richtlinie zurück, um das Verketten der Teile Ihrer signierten URL abzuschließen.