1

我正在尝试通过来自谷歌云功能的资源管理器 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;
}

出于测试目的,我已将组织管理员角色添加到默认服务帐户。我在 IAM 中看不到项目创建者角色:

在此处输入图像描述

调用 API 时出现以下错误:

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

如何成功访问此资源?

4

1 回答 1

6

当然,它使您能够修改自己的权限,正如您可以在GCP 文档中验证的那样,该Organization Admin角色不允许创建新项目。

正如您所指出的,为此,服务帐户应被授予Project Creator( roles/resourcemanager.projectCreator) 角色。

根据您的屏幕截图,您正在尝试在项目级别授予此权限,但请注意,此角色只能在组织和文件夹级别授予。这就是为什么 Google Cloud Web 控制台中的下拉菜单没有为您提供Project Creator选项的原因。

如果您对文件夹或组织拥有必要的权限,请尝试在相应级别分配该角色。

于 2021-01-30T11:50:09.890 回答