Go GCP 同时模拟两个服务账户

标签 go google-cloud-platform oauth impersonation

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

  • 项目 A -> 服务帐户 A
  • 项目 B -> 服务帐户 B

问题是模拟一个或另一个服务帐户来创建永久磁盘是行不通的,因为单个 API 调用需要从项目 A 读取磁盘并在项目 B 中创建一个新磁盘。换句话说,我需要使用对两者都具有权限的单个模拟 token 进行 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 同时模拟两个服务账户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72703060/

相关文章:

go - 如何将标志变量传递给 Golang 中的 http.Get

google-cloud-platform - Google Cloud DataFlow 作业尚不可用……在 Airflow 中

javascript - 在nodejs中使用twitter oauth时无法获取/auth/twitter/callback

python - 使用 django-oauth-toolkit 进行用户身份验证

ios - Heimdall Swift 验证每个请求失败

windows - 在golang终端中的退出状态3221225477

go - 多个 goroutines 在一个 channel 上有选择地监听

docker - 如何正确配置 Dockerfile 以在 Google Cloud Run 上运行?

kubernetes - GKE traefik 无法创建 rbac 权限

go - Gmail API Pub/Sub 推送不停止