我正在尝试在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”状态。
任何帮助将不胜感激。预先谢谢你。
答案 0 :(得分:2)
您似乎正在请求写入不可公开写入的数据。 API密钥没有用户概念,它们只是标识允许您调用API的身份。因此,看来您的API密钥请求正在尽其所能,但是响应告诉您:我不知道您是谁,所以我不允许您这样做。
OAuth 2.0是此处的解决方案,因为它代表您的帐户(您必须征得您的同意)进行操作,从而允许API验证您是否有权执行此操作。
服务帐户是代表您的项目而不是您的用户执行操作的另一种选择,但是从Web UI上不可行。