API-Schlüssel identifizieren Google Cloud Ihre Anwendung oder Website. Durch API-Schlüsseleinschränkungen wird sichergestellt, dass Ihre Schlüssel nur von Anwendungen und Websites verwendet werden können. Aus Sicherheitsgründen empfehlen wir, Einschränkungen hinzuzufügen, die Folgendes angeben:
- Welche Clients oder Websites Ihre API-Schlüssel verwenden können
- Die Google Cloud APIs, die Ihre Anwendung mit Ihren API-Schlüsseln aufrufen kann.
Wenn ein Client einen eingeschränkten API-Schlüssel verwendet, um eine Anfrage zu senden, die die Einschränkungen des API-Schlüssels nicht erfüllt, schlägt die Anfrage fehl. Wenn ein API-Schlüssel beispielsweise HTTP-Anfragen von einer bestimmten Domain senden muss, die HTTP-Anfrage jedoch von einer anderen Domain empfängt, wird die Anfrage mit einem Fehler abgelehnt.
Sie können Einschränkungen hinzufügen, wenn Sie einen API-Schlüssel mit der Methode CreateKey
erstellen, oder Sie können die Einschränkungen nach Erstellung des Schlüssels mit der Methode UpdateKey
hinzufügen. Auf dieser Seite werden die Einschränkungen beschrieben, die Sie einem API-Schlüssel hinzufügen können, und es wird beschrieben, wie Sie diese Einschränkungen hinzufügen können.
Hinweis
Die Seite verwendet curl
mit dem Befehlszeilentool oauth2l, um Anfragen an die API-Schlüssel-API zu senden. Unter Erste Schritte mit den API-Schlüsseln finden Sie weitere Informationen zur Einrichtung der API.
Clienteinschränkungen hinzufügen
Clienteinschränkungen geben an, welche Websites, IP-Adressen oder Anwendungen einen API-Schlüssel verwenden können. Clienteinschränkungen werden entsprechend dem Typ des Clients hinzugefügt, der Ihre API aufruft. Sie können einen der folgenden Clienttypen angeben:
browserKeyRestrictions
: Die HTTP-Verweis-URLs (Websites), die den Schlüssel verwenden dürfen.serverKeyRestrictions
: Die IP-Adressen von Aufrufern, die den Schlüssel verwenden dürfen.androidKeyRestrictions
: Die Android-Apps, die den Schlüssel verwenden dürfen.iosKeyRestrictions
: Die iOS-Apps, die den Schlüssel verwenden dürfen.
Browsereinschränkungen hinzufügen
Das folgende Beispiel zeigt, wie die Methode UpdateKey
aufgerufen wird, um den HTTP-Verweis auf www.example.com
zu beschränken:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions \ --request PATCH \ --data '{ "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": "www.example.com" } } "etag": "ETAG" }'
Wenn die Antwort von operations.get
"done": true
enthält, enthält der response
die aktualisierte Key
mit den Einschränkungen.
Im folgenden Beispiel wird gezeigt, wie Sie einen neuen API-Schlüssel erstellen, der nur HTTP-Anfragen von einer Liste bestimmter URLs zulässt.
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with browser restrictions", "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": ["www.example.com", "www.example-2.com"] } } }'
Die folgende Tabelle enthält einige Beispielszenarien und Browsereinschränkungen:
Szenario | Einschränkungen |
---|---|
Alle URLs auf der Website zulassen | Geben Sie in der Liste "allowedRecommender" zwei URLs an.
|
Bestimmte URL zulassen | Fügen Sie eine URL mit einem genauen Pfad hinzu. Beispiel:www.example.com/path www.example.com/path/path
|
Jede URL in einer einzelnen Subdomain oder einer Grunddomain zulassen | Sie müssen zwei URLs in der Liste "allowedRecommender" festlegen, um eine gesamte Domain zuzulassen.
|
Serverbeschränkungen hinzufügen
Sie können eine oder mehrere IP-Adressen der Aufrufer angeben, z. B. Webserver oder Cronjobs, die Ihren API-Schlüssel verwenden dürfen. Sie können die IP-Adressen in einem der folgenden Formate angeben:
- IPv4 (
198.51.100.1
) - IPv6 (
2001:db8::1
) - Ein Subnetz mit CIDR-Notation (
198.51.100.0/24
,2001:db8::/64
)
Das folgende Beispiel zeigt, wie Sie einen API-Schlüssel mit einer Liste von allowedIps
erstellen:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with server restrictions with IPv4, IPv6 and CIDR", "restrictions" : { "serverKeyRestrictions": { "allowedIps": ["198.51.100.1","198.51.100.0/24","2001:db8::1","2001:db8::/64"] } } }'
Android-Einschränkungen hinzufügen
Sie können die Nutzung eines API-Schlüssels auf Ihre Android-Apps beschränken. Geben Sie beim Erstellen oder Aktualisieren eines API-Schlüssels für jede Anwendung den Paketnamen und den 20-Byte-SHA-1-Fingerabdruck an.
Angenommen, Sie haben das Dienstprogramm keytool
ausgeführt und haben den folgenden Fingerabdruck erstellt:
Certificate fingerprint: SHA1: DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09
Das folgende Beispiel zeigt, wie Sie einen API-Schlüssel mit dem Fingerabdruck und Paketnamen in androidKeyRestrictions
erstellen:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with Android restrictions", "restrictions" : { "androidKeyRestrictions": { "allowedApplications": [ { "sha1Fingerprint": "DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09", "packageName": "com.example.my.app" } ] } } }'
iOS-Einschränkungen hinzufügen
Sie können die Nutzung eines API-Schlüssels auf Ihre iOS-Apps beschränken. Geben Sie dazu beim Erstellen oder Aktualisieren eines Schlüssels die Bundle-ID jeder App an. Das folgende Beispiel zeigt, wie iosKeyRestrictions
beim Erstellen eines API-Schlüssels festgelegt wird:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with iOs restrictions", "restrictions" : { "iosKeyRestrictions": { "allowedBundleIds": ["com.example.my.app1", "com.example.my.app2"] } } }'
API-Einschränkungen hinzufügen
API-Einschränkungen ermöglichen es Ihnen, anzugeben, welche Google Cloud APIs mit dem API-Schlüssel aufgerufen werden können. Wir empfehlen, in alle API-Schlüssel sowohl Client- als auch API-Einschränkungen aufzunehmen.
Sie können in den API-Einschränkungen einen oder mehrere Dienste angeben. Im folgenden Beispiel wird gezeigt, wie die Nutzung eines neuen API-Schlüssels auf die Dienste translate.googleapis.com
und datastore.googleapis.com
beschränkt werden kann:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "restrictions": { "api_targets": [ { "service": "translate.googleapis.com" }, { "service" : "datastore.googleapis.com" } ] }, }'
Mit dem Befehl gcloud services list
können Sie eine Liste der in Ihrem Cloud-Projekt aktivierten Dienste abrufen.
Zusätzlich zur Beschränkung des API-Schlüssels für die Verwendung auf bestimmte Dienste können Sie optional die Methoden in jedem Dienst angeben, um den API-Schlüssel weiter einzuschränken. Das folgende Beispiel zeigt, wie der vorherige Schlüssel auf zulässige Methoden von translate.googleapis.com
beschränkt wird:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions \ --request PATCH \ --data '{ "restrictions": { "api_targets": [ { "service": "translate.googleapis.com" "methods": [ "Get*", "DetectLanguage" ] }, { "service" : "datastore.googleapis.com" } ] }, "etag": "ETAG" }'