尝试使用此API进行日志记录API返回“ PERMISSION_DENIED”

时间:2019-02-20 23:39:06

标签: google-api http-status-code-403 google-apis-explorer google-cloud-logging

我正在尝试在Google Cloud Platform在其文档中使用的“尝试此API”功能上测试Google Cloud Logging API,但我得到了以下答复:

{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

我知道我的响应正文是正确的,因为它可以与OAuth 2.0一起使用,但在使用API​​密钥时会失败。

Auth 2.0: Working request using OAuth 2.0

API密钥: Non-Working request using API Key

Google文档说,他们为此“尝试此API”功能生成了自己的API密钥。 https://developers.google.com/explorer-help/

由于Google使用自己的API密钥,所以我不明白为什么我得到的响应状态为PERMISSION_DENIED。

编辑: 如果您想尝试一下,这里是指向Google Cloud Platform中的Try this API功能的链接。 https://cloud.google.com/logging/docs/reference/v2/rest/v2/entries/write?apix_params=%7B%22resource%22%3A%7B%22entries%22%3A%5B%7B%22logName%22%3A%22projects%2F%5BPROJECT_ID%5D%2Flogs%2Frequests%22%2C%22resource%22%3A%7B%22type%22%3A%22http_load_balancer%22%2C%22labels%22%3A%7B%7D%7D%7D%5D%7D%7D

这是我在代码中用于创建条目的python请求:

import requests

entry = {
        "entries": [
            {
                "logName": "projects/[PROJECT_ID]/logs/requests",
                "resource": {
                    "type": "http_load_balancer",
                    "labels": {}
                }
            }
        ]
    }

requests.post('https://logging.googleapis.com/v2/entries:write?key=[YOUR_API_KEY]', data=json.dumps(entry))

该API密钥是由具有“日志编写者”,“日志查看器”和“日志记录管理员”权限的用户创建的。理论上,这应该是发出发布请求所需的所有权限。但是,它仍返回“ PERMISSION_DENIED”状态。

任何帮助将不胜感激。预先谢谢你。

1 个答案:

答案 0 :(得分:2)

您似乎正在请求写入不可公开写入的数据。 API密钥没有用户概念,它们只是标识允许您调用API的身份。因此,看来您的API密钥请求正在尽其所能,但是响应告诉您:我不知道您是谁,所以我不允许您这样做。

OAuth 2.0是此处的解决方案,因为它代表您的帐户(您必须征得您的同意)进行操作,从而允许API验证您是否有权执行此操作。

服务帐户是代表您的项目而不是您的用户执行操作的另一种选择,但是从Web UI上不可行。