Utiliser des clés API
Cette page explique comment utiliser les clés API dans API Gateway.
Une clé API est une chaîne qui identifie un projetGoogle Cloud à des fins de gestion des quotas, de facturation et de surveillance. Les développeurs génèrent une clé API dans un projet de la console Google Cloud . Ils intègrent ensuite cette clé à chaque appel de votre API en tant que paramètre de requête ou dans un en-tête de requête.
Si vous spécifiez une exigence de clé API dans la configuration de votre API, API Gateway utilise la clé API pour rechercher le projet Google Cloud associé. API Gateway n'accepte que les requêtes comportant une clé API générée dans votre projet Google Cloud ou dans l'un des autres projetsGoogle Cloud au sein desquels votre API a été activée.
Pour créer une clé API ou afficher celles déjà disponibles dans votre projet Google Cloud , accédez à la page API et services > Identifiants.
Utiliser une clé API
Pour utiliser des fonctionnalités API Gateway, telles que les quotas, vous pouvez transmettre une clé API permettant à API Gateway d'identifier le Google Cloud projet auquel l'application cliente est associée.
Configurer l'authentification par clé API pour API Gateway
Pour sécuriser l'accès à votre passerelle à l'aide d'une clé API :
- Activez la prise en charge des clés API pour votre service. Saisissez la commande suivante, où :
- MANAGED_SERVICE_NAME spécifie le nom du service géré créé lorsque vous avez déployé l'API. Vous pouvez l'afficher dans la propriété "Managed Service" (Service géré) listée avec la commande
gcloud api-gateway apis describe. - PROJECT_ID est le nom de votre projet Google Cloud .
Par exemple: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 spécifie le nom du service géré créé lorsque vous avez déployé l'API. Vous pouvez l'afficher dans la propriété "Managed Service" (Service géré) listée avec la commande
- Modifiez la spécification OpenAPI utilisée pour créer la configuration de votre API afin d'inclure des instructions permettant d'appliquer une stratégie de sécurité pour la validation des clés API à tout le trafic. Ajoutez le type
securityetsecurityDefinitionsousecuritySchemescomme indiqué ci-dessous :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"
securityDefinitionconfigure votre API pour qu'elle exige une clé API transmise en tant que paramètre de requête nommékeylors de la demande d'accès à tous les chemins définis dans la spécification.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
securitySchemesconfigure votre API pour qu'elle exige une clé API transmise en tant que paramètre de requête nommékeylors de la demande d'accès à tous les chemins définis dans la spécification. - Créez une configuration d'API avec la description OpenAPI modifiée à l'aide de la commande suivante :
Par exemple :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
- Exécutez la commande suivante pour mettre à jour votre passerelle existante avec la nouvelle configuration d'API :
Par exemple: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
Restreindre les clés API
Par défaut, les clés API ne sont pas restreintes, ce qui les rend vulnérables à une utilisation non autorisée. Ajoutez des restrictions d'API chaque fois que possible. Les restrictions relatives aux API définissent les API qui peuvent être appelées à l'aide de la clé API. Toutes les clés API utilisées dans des applications de production doivent employer des restrictions d'API.
Pour ajouter des restrictions d'API :
Recherchez le titre de l'API indiqué dans la configuration de votre API. Dans l'exemple suivant, le titre de l'API est
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 ...
Dans la console Google Cloud , accédez à la page API et services > Identifiants.
Sélectionnez le nom de la clé API que vous souhaitez utiliser pour votre API.
Dans la section Restrictions relatives aux API de la page d'informations sur la clé API, cliquez sur Restreindre la clé.
Dans la liste déroulante des API disponibles, sélectionnez celle à laquelle votre clé API permettra d'accéder. Par exemple, sélectionnez
My Example Config.Cliquez sur Enregistrer.
Votre restriction devrait prendre effet dans un instant.