Oll*_*lie 1 google-cloud-platform google-cloud-functions google-cloud-resource-manager
我正在尝试通过谷歌云功能的资源管理器 API 以编程方式创建项目,如下所示:
exports.createProjectAsync = async (projectId, projectName) => {
const scopes = "https://www.googleapis.com/auth/cloud-platform"
const url = `http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=${scopes}`
const tokenResult = await fetch(url, {
headers: {
"Metadata-Flavor": "Google"
},
});
const tokenStatus = tokenResult.status;
functions.logger.log(`Call to get token has status ${tokenStatus}`);
const tokenData = await tokenResult.json()
functions.logger.log(`Call to get token has data ${JSON.stringify(tokenData)}`);
const accessToken = tokenData.access_token;
if (accessToken === null) {
throw new Error(`Failed to retrieve access token`);
}
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`
};
const payload = {
"projectId": projectId,
"name": projectName,
"parent": {
"type": "folder",
"id": FOLDER_NUMBER
}
};
const projectsCreateUrl = `https://cloudresourcemanager.googleapis.com/v1/projects/`
const result = await fetch(projectsCreateUrl, {
method: 'POST',
headers: headers,
body: JSON.stringify(payload)
});
const status = result.status;
functions.logger.log(`Call to create project returned status ${status}`);
const data = await result.json()
functions.logger.log(`data: ${JSON.stringify(data)}`);
return data;
}
Run Code Online (Sandbox Code Playgroud)
出于测试目的,我已将组织管理员角色添加到默认服务帐户。我在 IAM 中看不到项目创建者角色:
调用 API 时出现以下错误:
{"error":{"code":403,"message":"The caller does not have permission","status":"PERMISSION_DENIED"}}
如何才能成功访问该资源?
当然,它使您能够修改自己的权限,正如您可以在GCP 文档中验证的那样,该Organization Admin角色不允许创建新项目。
正如您所指出的,为此目的,服务帐户应被授予Project Creator( roles/resourcemanager.projectCreator) 角色。
根据您的屏幕截图,您正在尝试在项目级别授予此权限,但请注意,只能在组织和文件夹级别授予此角色。这就是 Google Cloud Web 控制台中的下拉菜单不向您提供该选项的原因Project Creator。
如果您对文件夹或组织拥有必要的权限,请尝试在相应级别分配该角色。
| 归档时间: |
|
| 查看次数: |
2262 次 |
| 最近记录: |