登录
首页 >  Golang >  Go问答

模拟两个服务帐户在 Go GCP 中

来源:stackoverflow

时间:2024-03-24 08:55:27 318浏览 收藏

本文探讨了如何在 Go GCP 中模拟两个服务帐户,以便从一个项目克隆永久磁盘到另一个项目。由于单个 API 调用需要同时读取磁盘和创建新磁盘,因此模拟一个服务帐户是不够的。相反,需要使用具有两个项目权限的单个模拟令牌。文章提供了示例代码,展示了如何使用 `impersonate.CredentialsTokenSource` 函数创建模拟令牌,但强调只能一次模拟一个身份。

问题内容

我有两个不同的 gcp 项目,并且正在尝试将永久磁盘从一个项目克隆到另一个项目。我在每个项目中都有一个服务帐户,我需要创建一个模拟令牌,该令牌允许我从一个项目读取永久磁盘,并在另一个项目中创建新的永久磁盘资源。

  • 项目 a -> 服务帐户 a
  • 项目 b -> 服务帐户 b

问题在于,模拟一个或其他服务帐户来创建永久磁盘不起作用,因为单个 api 调用需要从项目 a 读取磁盘并在项目 b 中创建新磁盘。换句话说,我需要使用具有两者权限的单个模拟令牌进行 api 调用。如何使用 go api 客户端执行此操作?

这是我今天的模拟代码

func Impersonate(ctx context.Context, principle string, credentials []byte) (*oauth2.Token, error) {​​​​
   source, err := impersonate.CredentialsTokenSource(ctx, impersonate.CredentialsConfig{​​​​
      TargetPrincipal: principle,
      Scopes:          []string{​​​​"https://www.googleapis.com/auth/compute", "https://www.googleapis.com/auth/cloud-platform"}​​​​,
   }​​​​, option.WithCredentialsJSON(credentials))
   if err != nil {​​​​
      return nil, fmt.Errorf("creating impersonated token source: %w", err)
   }​​​​
   return source.Token()
}​​​​

正确答案


您一次只能模拟一个身份。正确的方法是使用在两个项目中都具有权限的服务帐户。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《模拟两个服务帐户在 Go GCP 中》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>