API-Schlüssel verwenden
Auf dieser Seite wird beschrieben, wie Sie API-Schlüssel in API Gateway verwenden.
Ein API-Schlüssel ist ein String, der einGoogle Cloud -Projekt zu Kontingent-, Abrechnungs- und Monitoringzwecken identifiziert. Entwickler generieren einen API-Schlüssel in einem Projekt in der Google Cloud -Console. Anschließend betten sie diesen Schlüssel in jeden Aufruf an Ihre API als Abfrageparameter oder in einen Anfrageheader ein.
Wenn Sie in Ihrer API-Konfiguration das Anfordern von API-Schlüsseln festlegen, verwendet API Gateway den API-Schlüssel, um das zugehörige Google Cloud -Projekt zu suchen. API Gateway lehnt Anfragen generell ab, es sei denn, der API-Schlüssel wurde in Ihrem Google Cloud -Projekt oder in anderenGoogle Cloud -Projekten generiert, in denen die API aktiviert wurde.
Wenn Sie einen API-Schlüssel erstellen oder bereits verfügbare API-Schlüssel in Ihrem Google Cloud -Projekt ansehen möchten, rufen Sie die Seite APIs & Dienste > Anmeldedaten auf.
API-Schlüssel verwenden
Wenn Sie API Gateway-Funktionen wie Kontingente verwenden möchten, können Sie einen API-Schlüssel übergeben, damit API Gateway das Google Cloud -Projekt identifizieren kann, dem die Clientanwendung zugeordnet ist.
API-Schlüsselauthentifizierung für API Gateway konfigurieren
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 api-gateway apis describeaufgelistet wird. - PROJECT_ID gibt den Namen Ihres Google Cloud Projekts an.
Beispiel: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
securityundsecurityDefinitionsodersecuritySchemeswie unten gezeigt hinzu:OpenAPI 2.0
# 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"
Die
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.OpenAPI 3.x
# openapi-functions.yaml openapi: 3.0.4 info: title: API_ID optional-string description: Sample API on API Gateway with a Google Cloud Functions backend version: 1.0.0 # Define reusable components in x-google-api-management x-google-api-management: backend: functions_backend: address: https://GATEWAY_LOCATION-PROJECT_ID.cloudfunctions.net/helloGET pathTranslation: APPEND_PATH_TO_ADDRESS protocol: "http/1.1" # Apply the backend configuration by referencing it by name. Set at the root so this applies to all operations unless overridden. x-google-backend: functions_backend components: # This section configures basic authentication with an API key. securitySchemes: google_api_key: type: apiKey name: x-api-key in: header security: - google_api_key: [] paths: /hello: get: summary: Greet a user operationId: hello responses: '200': description: A successful response content: application/json: schema: type: string
Die
securitySchemeskonfiguriert 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-Beschreibung:
Beispiel: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=openapi-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:
Beispiel:gcloud api-gateway gateways update GATEWAY_ID \ --api=API_ID --api-config=NEW_CONFIG_ID \ --location=GATEWAY_LOCATION --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 einschränken
Standardmäßig sind API-Schlüssel uneingeschränkt, was sie anfällig für nicht autorisierte Verwendung macht. Fügen Sie nach Möglichkeit API-Einschränkungen hinzu. API-Einschränkungen geben an, welche APIs mit dem API-Schlüssel aufgerufen werden können. Für alle API-Schlüssel, die in Produktionsanwendungen verwendet werden, sollten API-Einschränkungen eingerichtet sein.
So fügen Sie API-Einschränkungen hinzu:
Suchen Sie nach dem Titel der API, wie in der API-Konfiguration angegeben. Im folgenden Beispiel lautet der API-Titel
My Example Config:OpenAPI 2.0
# openapi.yaml swagger: '2.0' info: title: My Example Config description: Sample API on API Gateway version: 1.0.0 ...
OpenAPI 3.x
# openapi.yaml openapi: 3.0.4 info: title: My Example Config description: Sample API on API Gateway version: 1.0.0 ...
Rufen Sie in der Google Cloud Console die Seite APIs & Dienste > Anmeldedaten auf.
Wählen Sie den Namen des API-Schlüssels aus, den Sie für Ihre API verwenden möchten.
Klicken Sie auf der Detailseite des API-Schlüssels im Abschnitt API-Einschränkungen auf Schlüssel einschränken.
Wählen Sie aus der Drop-down-Liste der verfügbaren APIs die API aus, für die Ihr API-Schlüssel verwendet wird. Wählen Sie beispielsweise
My Example Configaus.Klicken Sie auf Speichern.
Die Einschränkung sollte in Kürze wirksam werden.