我正在使用谷歌云项目(Nodejs 服务器)。我需要使用“googleapis”从谷歌云收集指标“monitoring.timeSeries.list”。
当我尝试使用我的服务帐户 Authen Default Credential 请求 API 时,其返回
status: 403,
code: 403,
errors: [
{
message: 'Permission monitoring.timeSeries.list denied (or the resource may not exist).',
domain: 'global',
reason: 'forbidden'
}
],
我已经为该服务帐户提供了“所有者”角色并下载了它的 .json 文件。 但是当我使用“Owner”用户帐户在浏览器上使用“gapi”运行 API 时,它运行良好。
使用“googleapis”服务器上的服务帐户进行代码:
const authenticate = async () => {
const auth = new google.auth.GoogleAuth({
keyFile: process.env.GOOGLE_APPLICATION_CREDENTIALS,
scopes: [
"https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/monitoring https://www.googleapis.com/auth/monitoring.read",
],
});
const authClient = await auth.getClient();
google.options({ auth: authClient });
return authClient;
};
const queryMetrics = async () => {
try {
const authClient = await authenticate();
const monitoring = google.monitoring({
version: "v3",
auth: authClient,
});
const projectId = instanceData.projectID;
const request = {
name: `projects/${projectId}`,
filter: `metric.type="compute.googleapis.com/instance/cpu/utilization"`,
"interval.startTime": "2024-05-08T03:14:51Z",
"interval.endTime": "2024-05-08T03:15:51Z",
};
const response = await monitoring.projects.timeSeries.list(request);
console.log("Metrics data:", response.data);
} catch (error) {
console.error("Error querying metrics:", error);
}
};
在客户端上使用“gapi”使用用户帐户进行编码:
const authenticate = () => {
return gapi.auth2.getAuthInstance().signIn({
scope:
"https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/monitoring https://www.googleapis.com/auth/monitoring.read",
});
};
此 API 是否无法通过服务帐户执行,或者我做错了什么? 感谢您的阅读!
您需要将监控角色访问权限授予相应的 IAM 用户。
Monitoring Viewer
角色,该角色仅供阅读。