Kubernetes Google云端点不限制对my 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

我已经通过google Kubernetes引擎教程了解了google云端点: 使用我自己的docker图像。Kubernetes部分工作正常,我可以通过loadbalancer IP访问我的服务

然而,当我试图将我的服务放在云端点后面以保护它时,端点仍然是公共的,可以在没有API密钥的情况下访问。这是我的
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调用,并将它们重定向到其他容器中运行的服务。