使用 GCP 资源管理器创建项目的权限被拒绝 API

Permission denied creating project with GCP resource manager API

我正在尝试通过资源管理器 API 从 google 云函数以编程方式创建项目,如下所示:

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"}}

如何才能成功访问此资源?

当然,它给了你修改自己权限的能力,你可以在GCP documentation中验证,Organization Admin角色不允许创建新项目。

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

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

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