我尝试通过在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
但是任何人都可以在没有密钥的情况下为功能开具发票。
答案 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位置),我们可以添加具有任意名称的键。