Einschränkungen zu API-Schlüsseln hinzufügen

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:

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.
  1. URL für die Domain ohne Subdomain und mit einem Platzhalter für den Pfad. Beispiel:
    example.com/*
  2. Eine zweite URL, die einen Platzhalter für die Subdomain und einen Platzhalter für den Pfad enthält. Beispiel:
    *.example.com/*
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.
  1. URL für die Domain ohne abschließenden Schrägstrich. Beispiel:
    www.example.com
    sub.example.com
    example.com
  2. Eine zweite URL für die Domain, die einen Platzhalter für den Pfad enthält. Beispiel:
    www.example.com/*
    sub.example.com/*
    example.com/*

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"
  }'

Nächste Schritte