【问题标题】:Permission denied creating project with GCP resource manager API权限被拒绝使用 GCP 资源管理器 API 创建项目
【发布时间】:2021-05-03 13:55:57
【问题描述】:

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

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

【问题讨论】:

    标签: google-cloud-platform google-cloud-functions google-cloud-resource-manager


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我的理解是服务账户存在于项目级别。是否可以将角色/resourcemanager.projectCreator 分配给组织/文件夹级别的服务帐户?我无法弄清楚如何在 GCP 控制台中执行此操作。我有完全访问权限。
    • 好问题@Ollie。请让我检查一下,请稍等。
    • 您是对的,服务帐户是在项目级别创建的,但您也可以在组织或文件夹级别为它们分配权限。请复制您要授予项目创建者角色的服务帐户的 ID(电子邮件地址),选择组织或文件夹,然后从 IAM 菜单中,通过粘贴来添加服务帐户(可能您可以将其搜索为好吧)。你应该有能力做到这一点。至少它应该适用于用户定义的服务帐户。请问,可以试试吗?很好的观点@Ollie。
    • 谢谢!这行得通。我发现它令人困惑的原因是在组织级别添加服务帐户时不会自动填充它。为了澄清,我去了 IAM & admin 并选择了组织 > 添加用户 > 粘贴到服务帐户电子邮件 > 添加项目创建者角色。
    • 欢迎您@Ollie。是的,这确实有点令人困惑。非常感谢您的澄清。如果您需要进一步的帮助,请随时与我联系。
    猜你喜欢
    • 2019-04-09
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2020-11-23
    • 2012-01-05
    • 2020-03-19
    • 2022-07-25
    • 2022-08-18
    相关资源
    最近更新 更多