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.

Zu den Anmeldedaten

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:

  1. 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 describe aufgelistet wird.
    • PROJECT_ID gibt den Namen Ihres Google Cloud Projekts an.
    gcloud services enable MANAGED_SERVICE_NAME.apigateway.PROJECT_ID.cloud.goog
    Beispiel:
    gcloud services enable my-api-123abc456def1.apigateway.my-project.cloud.goog
  2. Ä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 security und securityDefinitions oder securitySchemes wie 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 securityDefinition konfiguriert die API so, dass ein API-Schlüssel als Abfrageparameter mit dem Namen key ü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 securitySchemes konfiguriert die API so, dass ein API-Schlüssel als Abfrageparameter mit dem Namen key übergeben werden muss, wenn Zugriff auf alle in der Spezifikation definierten Pfade angefordert wird.

  3. Erstellen Sie mit dem folgenden Befehl eine neue API-Konfiguration mit der geänderten OpenAPI-Beschreibung:
    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
    Beispiel:
    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
  4. 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=GATEWAY_LOCATION --project=PROJECT_ID
    Beispiel:
    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:

  1. 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
    ...

  2. Rufen Sie in der Google Cloud Console die Seite APIs & Dienste > Anmeldedaten auf.

    Zu den Anmeldedaten

  3. Wählen Sie den Namen des API-Schlüssels aus, den Sie für Ihre API verwenden möchten.

  4. Klicken Sie auf der Detailseite des API-Schlüssels im Abschnitt API-Einschränkungen auf Schlüssel einschränken.

  5. 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 Config aus.

  6. Klicken Sie auf Speichern.

Die Einschränkung sollte in Kürze wirksam werden.