Kubernetes Google云端点不限制对my API的访问
我已经通过google Kubernetes引擎教程了解了google云端点: 使用我自己的docker图像。Kubernetes部分工作正常,我可以通过loadbalancer IP访问我的服务 然而,当我试图将我的服务放在云端点后面以保护它时,端点仍然是公共的,可以在没有API密钥的情况下访问。这是我的Kubernetes Google云端点不限制对my API的访问,kubernetes,google-cloud-endpoints,Kubernetes,Google Cloud Endpoints,我已经通过google Kubernetes引擎教程了解了google云端点: 使用我自己的docker图像。Kubernetes部分工作正常,我可以通过loadbalancer IP访问我的服务 然而,当我试图将我的服务放在云端点后面以保护它时,端点仍然是公共的,可以在没有API密钥的情况下访问。这是我的openapi.yaml,与gcloud端点服务部署openapi一起部署。yaml: swagger: "2.0" info: description: "A test." titl
openapi.yaml
,与gcloud端点服务部署openapi一起部署。yaml
:
swagger: "2.0"
info:
description: "A test."
title: "API test"
version: "1.0.0"
host: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
x-google-endpoints:
- name: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
target: "<MY LOADBALANCER IP>"
#require an API key to access project
security:
- api_key: []
paths:
/:
get:
summary: Return django REST default page
description: test
operationId: test
responses:
"200":
description: OK
securityDefinitions:
# This section configures basic authentication with an API key.
api_key:
type: "apiKey"
name: "key"
in: "query"
昂首阔步:“2.0”
信息:
描述:“一个测试。”
标题:“API测试”
版本:“1.0.0”
主持人:“
x-google-endpoints:
-姓名:“
目标:“
#需要API密钥才能访问项目
安全:
-api_键:[]
路径:
/:
获取:
摘要:返回django REST默认页面
描述:测试
操作ID:测试
响应:
"200":
描述:好的
证券定义:
#本节使用API密钥配置基本身份验证。
api_密钥:
类型:“apiKey”
名称:“钥匙”
在“查询”中
当我试图通过主机
的值访问我的服务时(由于它仍然打开而被隐藏),它仍然打开并且不需要API密钥。云端点日志中也没有显示任何内容。据我所知,仅配置openapi.yaml
就足以限制访问 在此页()之后,您的安全设置被错误放置。应该是这样的:
swagger: "2.0"
info:
description: "A test."
title: "API test"
version: "1.0.0"
host: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
x-google-endpoints:
- name: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
target: "<MY LOADBALANCER IP>"
#require an API key to access project
paths:
/:
get:
security:
- api_key: []
summary: Return django REST default page
description: test
operationId: test
responses:
"200":
description: OK
securityDefinitions:
# This section configures basic authentication with an API key.
api_key:
type: "apiKey"
name: "key"
in: "query"
昂首阔步:“2.0”
信息:
描述:“一个测试。”
标题:“API测试”
版本:“1.0.0”
主持人:“
x-google-endpoints:
-姓名:“
目标:“
#需要API密钥才能访问项目
路径:
/:
获取:
安全:
-api_键:[]
摘要:返回django REST默认页面
描述:测试
操作ID:测试
响应:
"200":
描述:好的
证券定义:
#本节使用API密钥配置基本身份验证。
api_密钥:
类型:“apiKey”
名称:“钥匙”
在“查询”中
编辑:
如果希望在标头中使用api密钥,则必须更改定义,但可以将安全性保留在声明的位置:
swagger: "2.0"
info:
description: "A test."
title: "API test"
version: "1.0.0"
host: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
x-google-endpoints:
- name: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
target: "<MY LOADBALANCER IP>"
#require an API key to access project
security:
- api_key: []
paths:
/:
get:
summary: Return django REST default page
description: test
operationId: test
responses:
"200":
description: OK
securityDefinitions:
# This section configures basic authentication with an API key.
api_key:
type: "apiKey"
name: "key"
in: "header"
昂首阔步:“2.0”
信息:
描述:“一个测试。”
标题:“API测试”
版本:“1.0.0”
主持人:“
x-google-endpoints:
-姓名:“
目标:“
#需要API密钥才能访问项目
安全:
-api_键:[]
路径:
/:
获取:
摘要:返回django REST默认页面
描述:测试
操作ID:测试
响应:
"200":
描述:好的
证券定义:
#本节使用API密钥配置基本身份验证。
api_密钥:
类型:“apiKey”
名称:“钥匙”
在:“标题”
我不知道您喜欢哪个版本,所以我对两个版本都进行了调整。在本页()之后,您的安全设置被错误放置。应该是这样的:
swagger: "2.0"
info:
description: "A test."
title: "API test"
version: "1.0.0"
host: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
x-google-endpoints:
- name: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
target: "<MY LOADBALANCER IP>"
#require an API key to access project
paths:
/:
get:
security:
- api_key: []
summary: Return django REST default page
description: test
operationId: test
responses:
"200":
description: OK
securityDefinitions:
# This section configures basic authentication with an API key.
api_key:
type: "apiKey"
name: "key"
in: "query"
昂首阔步:“2.0”
信息:
描述:“一个测试。”
标题:“API测试”
版本:“1.0.0”
主持人:“
x-google-endpoints:
-姓名:“
目标:“
#需要API密钥才能访问项目
路径:
/:
获取:
安全:
-api_键:[]
摘要:返回django REST默认页面
描述:测试
操作ID:测试
响应:
"200":
描述:好的
证券定义:
#本节使用API密钥配置基本身份验证。
api_密钥:
类型:“apiKey”
名称:“钥匙”
在“查询”中
编辑:
如果希望在标头中使用api密钥,则必须更改定义,但可以将安全性保留在声明的位置:
swagger: "2.0"
info:
description: "A test."
title: "API test"
version: "1.0.0"
host: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
x-google-endpoints:
- name: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
target: "<MY LOADBALANCER IP>"
#require an API key to access project
security:
- api_key: []
paths:
/:
get:
summary: Return django REST default page
description: test
operationId: test
responses:
"200":
description: OK
securityDefinitions:
# This section configures basic authentication with an API key.
api_key:
type: "apiKey"
name: "key"
in: "header"
昂首阔步:“2.0”
信息:
描述:“一个测试。”
标题:“API测试”
版本:“1.0.0”
主持人:“
x-google-endpoints:
-姓名:“
目标:“
#需要API密钥才能访问项目
安全:
-api_键:[]
路径:
/:
获取:
摘要:返回django REST默认页面
描述:测试
操作ID:测试
响应:
"200":
描述:好的
证券定义:
#本节使用API密钥配置基本身份验证。
api_密钥:
类型:“apiKey”
名称:“钥匙”
在:“标题”
我不知道您喜欢哪个版本,所以我对两个版本都进行了调整。原始问题中的招摇过市定义是有效的,我的问题是为什么google cloud endpoints仍然公开my API而不需要API密钥原始问题中的招摇过市定义是有效的,我的问题是为什么google cloud endpoints仍然在不需要API密钥的情况下公开my API?您确定要在kubernetes服务中公开代理(ESP),而不是直接在后端公开吗?请分享你的kubernetes服务规范。@nareddyt我现在已经修复了,事实就是这样。google guide()中有点掩盖了这一点,但Kubernetes部署脚本会提取一个ESP映像,它使用该映像接收传入的API调用并将它们重定向到其他容器中运行的服务。您确定要在Kubernetes服务中公开代理(ESP),而不是直接在后端公开代理吗?请分享你的kubernetes服务规范。@nareddyt我现在已经修复了,事实就是这样。它在googleguide()中有点掩盖了这一点,但是Kubernetes部署脚本提取了一个ESP映像,它使用该映像接收传入的API调用,并将它们重定向到其他容器中运行的服务。