Traffic zu einem Dienst mit der gcloud CLI schützen
Auf dieser Seite erfahren Sie, wie Sie eine API in API Gateway bereitstellen, um den Traffic zu einem Backend-Dienst zu sichern.
Führen Sie die folgenden Schritte aus, um mit der Google Cloud CLI eine neue API für den Zugriff auf einen Backend-Dienst in Cloud Run-Funktionen bereitzustellen. In dieser Kurzanleitung wird auch beschrieben, wie Sie Ihr Backend mithilfe eines API-Schlüssels vor unbefugtem Zugriff schützen.
Hinweise
- Rufen Sie in der Google Cloud Console die Seite Dashboard auf und wählen Sie ein Google Cloud -Projekt aus oder erstellen Sie eines. 
- Hier kannst du überprüfen, ob das der Fall ist. 
- Prüfen Sie, ob die Google Cloud CLI heruntergeladen und auf Ihrem Computer installiert wurde. 
- Aktualisieren Sie die - gcloud-Komponenten:- gcloud components update 
- Legen Sie das Standardprojekt fest. Ersetzen Sie PROJECT_ID durch Ihre Google Cloud Projekt-ID. - gcloud config set project PROJECT_ID 
Erforderliche Dienste aktivieren
Für API Gateway müssen Sie die folgenden Google-Dienste aktivieren:
| Name | Titel | 
|---|---|
| apigateway.googleapis.com | API Gateway API | 
| servicemanagement.googleapis.com | Service Management API | 
| servicecontrol.googleapis.com | Service Control API | 
Mit dem folgenden Befehl bestätigen Sie, dass die erforderlichen Dienste aktiviert sind:
gcloud services list
Wenn die erforderlichen Dienste nicht aufgeführt sind, müssen Sie sie aktivieren:
gcloud services enable apigateway.googleapis.comgcloud services enable servicemanagement.googleapis.comgcloud services enable servicecontrol.googleapis.com
Weitere Informationen zu den gcloud-Diensten finden Sie unter gcloud-Dienste.
API-Backend bereitstellen
API Gateway steht vor einem bereitgestellten Backend-Dienst und verarbeitet alle eingehenden Anfragen. In dieser Kurzanleitung leitet API Gateway eingehende Aufrufe an ein Cloud Run-Funktions-Backend namens helloGET weiter, das die folgende Funktion enthält:
/** * HTTP Cloud Function. * This function is exported by index.js, and is executed when * you make an HTTP request to the deployed function's endpoint. * * @param {Object} req Cloud Function request context. * More info: https://expressjs.com/en/api.html#req * @param {Object} res Cloud Function response context. * More info: https://expressjs.com/en/api.html#res */ exports.helloGET = (req, res) => { res.send('Hello World!'); };
Führen Sie die Schritte unter Kurzanleitung: Google Cloud CLI verwenden aus, um den Cloud Run-Beispielcode herunterzuladen und den Backend-Dienst der Cloud Run-Funktion bereitzustellen.
API erstellen
Jetzt können Sie Ihre API auf API Gateway erstellen.
- Geben Sie den folgenden Befehl ein. Dabei gilt: - API_ID gibt den Namen der API an. Richtlinien zur API-ID
- PROJECT_ID gibt den Namen Ihres Google Cloud Projekts an.
 - gcloud api-gateway apis create API_ID --project=PROJECT_ID - Beispiel: - gcloud api-gateway apis create my-api --project=my-project 
- Nach erfolgreichem Abschluss können Sie den folgenden Befehl verwenden, um Details zur neuen API aufzurufen: - gcloud api-gateway apis describe API_ID --project=PROJECT_ID - Beispiel: - gcloud api-gateway apis describe my-api --project=my-project - Dieser Befehl gibt Folgendes zurück: - createTime: '2020-02-29T21:52:20.297426875Z' displayName: my-api managedService: my-api-123abc456def1.apigateway.my-project.cloud.goog name: projects/my-project/locations/global/apis/my-api state: ACTIVE updateTime: '2020-02-29T21:52:20.647923711Z' 
Beachten Sie den Wert des Attributs managedService.  Dieser Wert wird in einem nachfolgenden Schritt verwendet, um Ihre API zu aktivieren.
API-Konfiguration erstellen
Bevor Sie das API-Gateway zur Verwaltung des Traffics zu Ihrem bereitgestellten API-Backend verwenden können, ist eine API-Konfiguration erforderlich.
Sie können eine API-Konfiguration mithilfe einer OpenAPI-Spezifikation erstellen, die spezielle Annotationen enthält, um das gewünschte API-Gateway-Verhalten zu definieren. Die für diese Kurzanleitung verwendete OpenAPI-Spezifikation enthält Routinganweisungen für das Cloud Run-Funktions-Backend:
# openapi2-functions.yaml swagger: '2.0' info: title: API_ID optional-string description: Sample API on API Gateway with a Google Cloud Functions backend version: 1.0.0 schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address: https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloGET responses: '200': description: A successful response schema: type: string
So laden Sie diese OpenAPI-Spezifikation hoch und erstellen mit der gcloud CLI eine API-Konfiguration:
- Erstellen Sie über die Befehlszeile eine neue Datei mit dem Namen - openapi2-functions.yaml.
- Kopieren Sie den Inhalt der oben angezeigten OpenAPI-Spezifikation und fügen Sie ihn in die neu erstellte Datei ein 
- Bearbeiten Sie die Datei so: - Ersetzen Sie im Feld titleAPI_ID durch den Namen Ihrer API und ersetzen Sie optional-string durch eine kurze Beschreibung Ihrer Wahl. Der Wert dieses Felds wird verwendet, wenn API-Schlüssel erstellt werden, die Zugriff auf diese API gewähren.
- Ersetzen Sie im Feld addressGCP_REGION durch die Region Google Cloud der bereitgestellten Funktion und PROJECT_ID durch den Namen Ihres Google Cloud Projekts.
 
- Ersetzen Sie im Feld 
- Geben Sie den folgenden Befehl ein. Dabei gilt: - CONFIG_ID gibt den Namen der API-Konfiguration an.
- API_ID gibt den Namen der API an.
- API_DEFINITION den Dateinamen der OpenAPI-Spezifikation angibt.
- PROJECT_ID gibt den Namen Ihres Google Cloud Projekts an.
- SERVICE_ACCOUNT_EMAIL gibt das Dienstkonto an, mit dem Tokens für Backends mit konfigurierter Authentifizierung signiert werden. Weitere Informationen finden Sie unter Dienstkonto konfigurieren.
 - gcloud api-gateway api-configs create CONFIG_ID \ --api=API_ID --openapi-spec=API_DEFINITION \ --project=PROJECT_ID --backend-auth-service-account=SERVICE_ACCOUNT_EMAIL - Beispiel: - gcloud api-gateway api-configs create my-config \ --api=my-api --openapi-spec=openapi2-functions.yaml \ --project=my-project --backend-auth-service-account=0000000000000-compute@developer.gserviceaccount.com - Dieser Vorgang kann einige Minuten dauern, da die API-Konfiguration an nachgelagerte Systeme weitergegeben wird. Das Erstellen einer komplexen API-Konfiguration kann bis zu zehn Minuten dauern. 
- Nachdem die API-Konfiguration erstellt wurde, können Sie die Details mit dem folgenden Befehl ansehen: - gcloud api-gateway api-configs describe CONFIG_ID \ --api=API_ID --project=PROJECT_ID - Beispiel: - gcloud api-gateway api-configs describe my-config \ --api=my-api --project=my-project - Die Ausgabe enthält die API-Konfigurationsdetails, einschließlich Name und Status, wie im folgenden Beispiel gezeigt: - createTime: '2020-02-07T18:17:01.839180746Z' displayName: my-config gatewayConfig: backendConfig: googleServiceAccount: 0000000000000-compute@developer.gserviceaccount.com name: projects/my-project/locations/global/apis/my-api/configs/my-config serviceRollout: rolloutId: 2020-02-07r0 state: ACTIVE updateTime: '2020-02-07T18:17:02.173778118Z' 
Gateway erstellen
Stellen Sie nun die API-Konfiguration auf einem Gateway bereit. Durch das Bereitstellen einer API-Konfiguration auf einem Gateway wird eine externe URL definiert, über die API-Clients auf Ihre API zugreifen können.
Führen Sie den folgenden Befehl aus, um die soeben erstellte API-Konfiguration in API Gateway bereitzustellen:
gcloud api-gateway gateways create GATEWAY_ID \ --api=API_ID --api-config=CONFIG_ID \ --location=GCP_REGION --project=PROJECT_ID
wobei
- GATEWAY_ID den Namen des Gateways angibt.
- API_ID den Namen der API Gateway API angibt, die mit diesem Gateway verknüpft ist.
- CONFIG_ID den Namen der im Gateway bereitgestellten API-Konfiguration angibt.
- GCP_REGION ist die Google Cloud -Region für das bereitgestellte Gateway. 
- PROJECT_ID gibt den Namen Ihres Google Cloud Projekts an. 
Beispiel:
gcloud api-gateway gateways create my-gateway \ --api=my-api --api-config=my-config \ --location=us-central1 --project=my-project
Verwenden Sie nach erfolgreichem Abschluss den folgenden Befehl, um Details zum Gateway aufzurufen:
gcloud api-gateway gateways describe GATEWAY_ID \ --location=GCP_REGION --project=PROJECT_ID
Beispiel:
gcloud api-gateway gateways describe my-gateway \ --location=us-central1 --project=my-project
Dieser Befehl gibt Folgendes zurück:
apiConfig: projects/my-project/locations/global/apis/my-api/configs/my-config createTime: '2020-02-05T13:44:12.997862831Z' defaultHostname: my-gateway-a12bcd345e67f89g0h.uc.gateway.dev displayName: my-gateway name: projects/my-project/locations/us-central1/gateways/my-gateway serviceAccount: email: 0000000000000-compute@developer.gserviceaccount.com state: ACTIVE updateTime: '2020-02-05T13:45:00.844705087Z'
Beachten Sie den Wert des Attributs defaultHostname. Dies ist der Hostname in der Gateway-URL, mit dem Sie Ihre Bereitstellung im nächsten Schritt testen.
API-Bereitstellung testen
Jetzt können Sie Anfragen über die bei der Bereitstellung des Gateways generierte URL an Ihre API senden.
Geben Sie den folgenden curl-Befehl ein. Dabei gilt:
- DEFAULT_HOSTNAME gibt den Hostnamen-Teil der bereitgestellten Gateway-URL an.
- helloist der in Ihrer API-Konfiguration angegebene Pfad.
curl https://DEFAULT_HOSTNAME/hello
Beispiel:
curl https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello
Die Ausgabe sieht so aus:
Hello World!
Sie haben erfolgreich ein API Gateway erstellt und bereitgestellt.
Zugriff mithilfe eines API-Schlüssels sichern
Um den Zugriff auf Ihr API-Backend zu sichern, können Sie einen mit Ihrem Projekt verknüpften API-Schlüssel generieren und diesem Schlüssel Zugriff zum Aufrufen der API gewähren. Weitere Informationen finden Sie unter API-Zugriff mit API-Schlüsseln einschränken.
Wenn dem Projekt, das Sie in dieser Kurzanleitung verwenden, noch kein API-Schlüssel zugeordnet ist, können Sie einen hinzufügen. Führen Sie dazu die Schritte unter API-Schlüssel erstellen aus. Google Cloud
So sichern Sie den Zugriff auf Ihr Gateway mit einem API-Schlüssel:
- Aktivieren Sie die API-Schlüsselunterstützung für Ihren Dienst.  Geben Sie den folgenden Befehl ein. Dabei gilt:- MANAGED_SERVICE_NAME ist der Name des verwalteten Dienstes, der beim Bereitstellen der API erstellt wurde. Dies kann im Attribut "Verwalteter Dienst" angezeigt werden, das mit dem Befehl gcloud apigee-gateway apis describeaufgelistet wird.
- PROJECT_ID gibt den Namen Ihres Google Cloud Projekts an.
 gcloud services enable MANAGED_SERVICE_NAME.apigateway.PROJECT_ID.cloud.goog gcloud services enable my-api-123abc456def1.apigateway.my-project.cloud.goog 
- MANAGED_SERVICE_NAME ist der Name des verwalteten Dienstes, der beim Bereitstellen der API erstellt wurde. Dies kann im Attribut "Verwalteter Dienst" angezeigt werden, das mit dem Befehl 
- Ändern Sie die OpenAPI-Spezifikation, mit der Sie Ihre API-Konfiguration erstellt haben, um Anweisungen zur Durchsetzung einer Sicherheitsrichtlinie für die API-Schlüsselvalidierung für den gesamten Traffic aufzunehmen.  Fügen Sie den Typ securityundsecurityDefinitionswie unten gezeigt hinzu:# openapi2-functions.yaml swagger: '2.0' info: title: API_ID optional-string description: Sample API on API Gateway with a Google Cloud Functions backend version: 1.0.0 schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address: https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloGET security: - api_key: [] responses: '200': description: A successful response schema: type: string securityDefinitions: # This section configures basic authentication with an API key. api_key: type: "apiKey" name: "key" in: "query" securityDefinitionkonfiguriert die API so, dass ein API-Schlüssel als Abfrageparameter mit dem Namenkeyübergeben werden muss, wenn Zugriff auf alle in der Spezifikation definierten Pfade angefordert wird.
- Erstellen Sie mit dem folgenden Befehl eine neue API-Konfiguration mit der geänderten OpenAPI-Spezifikation:
    
gcloud api-gateway api-configs create NEW_CONFIG_ID \ --api=API_ID --openapi-spec=NEW_API_DEFINITION \ --project=PROJECT_ID --backend-auth-service-account=SERVICE_ACCOUNT_EMAIL gcloud api-gateway api-configs create my-config-key \ --api=my-api --openapi-spec=openapi2-functions.yaml \ --project=my-project --backend-auth-service-account=0000000000000compute@developer.gserviceaccount.com 
- Führen Sie den folgenden Befehl aus, um Ihr bestehendes Gateway mit der neuen API-Konfiguration zu aktualisieren:
gcloud api-gateway gateways update GATEWAY_ID \ --api=API_ID --api-config=NEW_CONFIG_ID \ --location=GCP_REGION --project=PROJECT_ID gcloud api-gateway gateways update my-gateway \ --api=my-api --api-config=my-config-key \ --location=us-central1 --project=my-project 
API-Schlüssel testen
Nachdem Sie die geänderte API erstellt und bereitgestellt haben, versuchen Sie, eine Anfrage an sie zu senden.
Geben Sie den folgenden curl-Befehl ein. Dabei gilt:
- DEFAULT_HOSTNAME gibt den Hostnamen-Teil der bereitgestellten Gateway-URL an.
- helloist der in Ihrer API-Konfiguration angegebene Pfad.
curl https://DEFAULT_HOSTNAME/hello
Beispiel:
curl https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello
Dies sollte zu folgendem Fehler führen:
UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.
Geben Sie jetzt den folgenden curl-Befehl ein, wobei:
- DEFAULT_HOSTNAME gibt den Hostnamen-Teil der bereitgestellten Gateway-URL an.
- helloist der in Ihrer API-Konfiguration angegebene Pfad.
- API_KEY den API-Schlüssel angibt, den Sie im vorherigen Schritt erstellt haben.
curl https://DEFAULT_HOSTNAME/hello?key=API_KEY
Nun sollte Hello World! in der Antwort Ihrer API angezeigt werden.
Das war's auch schon! Sie haben Ihr API-Backend mit einem API Gateway erfolgreich geschützt. Sie können jetzt mit der Einrichtung neuer API-Clients beginnen. Generieren Sie dazu zusätzliche API-Schlüssel.
Bereinigen
So vermeiden Sie, dass Ihrem Google Cloud -Konto die in dieser Kurzanleitung verwendeten Ressourcen in Rechnung gestellt werden:
Alternativ können Sie auch das Google Cloud für diese Anleitung verwendete Projekt löschen.
Nächste Schritte
- Weitere Informationen zu API Gateway
- Entwicklungsumgebung konfigurieren
- Weitere Informationen zur Authentifizierung zwischen Diensten