通过Cloud Endpoints限制基于API密钥访问云功能的问题

时间:2020-10-08 08:35:08

标签: google-cloud-endpoints-v2

我尝试通过在openapi.yaml中定义API KEY来限制对Google云功能的访问

schemes:
  - https
produces:
  - application/json
security:
  - api_key: []
securityDefinitions:
  api_key:
    type: "apiKey"
    name: "mot"
    in: "query"  
paths:
  /:
    get:
      summary: Greet a user
      operationId: hello

部署步骤:

1. gcloud run deploy apikeytst1 --image="gcr.io/endpoints-release/endpoints-runtime-serverless:2" --allow-unauthenticated --platform managed --project=xxxx
2. gcloud endpoints services deploy apikeytst.yaml --project xxxx
3. ./gcloud_build_image -s apikeytst1-yyyyyyyyy-ew.a.run.app -c 2020-10-08r0 -p xxxx
4. gcloud run deploy apikeytst1 --image="gcr.io/xxxxx/endpoints-runtime-serverless:apikeytst1-yyyyyyyyyy-ew.a.run.app-2020-10-08r0" --allow-unauthenticated --platform managed  --project=xxxx

但是任何人都可以在没有密钥的情况下为功能开具发票。

2 个答案:

答案 0 :(得分:0)

似乎您在设置Swagger规范时遵循了Google提供的information。它可能与您的云端点部署或权限有关。我建议您再次仔细检查所有云端点steps。如果您正确地将云终结点部署为围绕云功能的包装,则您将无法直接调用云功能。而是使用带有API密钥作为查询参数的云终结点终结点。关键的一步是从您的云函数中删除allUsers调用者权限,并添加以下内容:

gcloud functions add-iam-policy-binding FUNCTION_NAME \
   --region FUNCTION_REGION \
   --member "serviceAccount:ESP_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
   --role "roles/cloudfunctions.invoker" \
   --project FUNCTIONS_PROJECT_ID

答案 1 :(得分:0)

Google要求第一个密钥必须是名称为“ key”或“ api_key”的密钥。 之后(在第二个etc位置),我们可以添加具有任意名称的键。