gpt4 book ai didi

google-cloud-platform - GCP Cloud Run 通过单独项目中的 2 个服务帐户使用短期凭证调用另一个项目云功能

转载 作者:行者123 更新时间:2023-12-02 02:42:46 26 4
gpt4 key购买 nike

我已经完成了以下操作,并且所有操作都有效,直到最后一个 token 被用于调用云功能。

我在项目 2 中创建了一个服务帐户 (SP),其中包含 Service-Account-Token-Creator 和 Cloud-Functions-Invoker 角色。我还在项目 1 中使用 Service-Account-Token-Creator 创建了另一个服务帐户 (sc)。我编辑了 SP 的 IAM 绑定(bind),以允许 SC 能够通过 Service-Account-Token-Creator 角色创建短期凭证。

项目 1 中的以下代码在 CloudRun 上运行,并使用服务帐户 SC 作为实例的默认服务帐户。

不确定到底是什么问题,但我想做的就是冒充SP,然后能够调用SP帐户中的云功能。

任何有关出现问题的帮助都会有所帮助。

      import { Compute } from 'google-auth-library';

const client = new Compute({
// Specifying the service account email is optional.
serviceAccountEmail:
'<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a3d0c0e3d0d4c2dacec6c6c1d6d0cacdc6d0d0c2d3d38dcac2ce8dc4d0c6d1d5cac0c6c2c0c0ccd6cdd78dc0ccce" rel="noreferrer noopener nofollow">[email protected]</a>',
});

const res = await client.request<{
accessToken: string;
expireTime: string;
}>({
url:
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/sp@<project-di>.iam.gserviceaccount.com:generateAccessToken',
method: 'POST',
data: JSON.stringify({
delegates: [],
scope: ['https://www.googleapis.com/auth/cloud-platform'],
lifetime: '300s',
}),
});

request.http.headers.set(
'Authorization',
`Bearer ${res.data.accessToken}`
);

我在项目2中调用云函数时遇到的错误是

https://us-central1-project-2.cloudfunctions.net/project-2-alpha-TestFunction: 401: Unauthorized

最佳答案

您只需在项目2的云功能上授予项目1的服务帐户SC即可。 SP没用,拟人也!

  • 获取 SC 的电子邮件
  • 转到您的 Cloud Functions 列表页面并选择您的函数(复选框)
    • 点击右上角的“显示信息面板”
    • 将 SC 电子邮件粘贴到成员(member)部分
    • 选择 Cloud Functions Invoker 作为角色。 enter image description here
  • 保存

仅此而已。 您授予项目 1 的 SC,并在项目 2 的 Cloud Functions 级别授予 Function.invoker 角色

这个定义很重要。如果您创建另一个函数,SC 将无法访问它,因为您仅在函数级别授予该角色。

如果您想授予项目2所有云功能的访问权限(不推荐),可以这样做

不要在项目 2 中选择您的云功能,而是转到项目 2 的 IAM 页面(此处您处于项目级别),然后单击“添加成员”(页面顶部),粘贴 SC 电子邮件并添加角色 CLoud函数调用器。

关于google-cloud-platform - GCP Cloud Run 通过单独项目中的 2 个服务帐户使用短期凭证调用另一个项目云功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63292719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com