如何使用服务帐户模拟调用gcloud

时间:2018-06-19 06:30:17

标签: google-cloud-platform gcloud google-oauth2

我在GCE中使用默认服务帐户A运行服务。此服务使用gcloud与各种GCP服务进行通信。目前,它使用服务帐户B与某些GCP服务(使用私钥)进行通信。但是,我们希望摆脱使用私钥并使用帐户模拟。为此,我已将帐户A添加到服务帐户B的角色和给定的令牌创建者角色。

我在go中编写了一个测试程序,并且能够验证模拟的工作原理。但是,我们的服务是使用PHP,并使用gcloud SDK。我找不到配置gcloud来模拟服务帐户或提供自定义令牌的方法。

一个选择是我重写所有gcloud代码以使用谷歌SDK,但这是很多工作,我宁愿避免这种情况。我的问题是,在这种情况下如何使用服务帐户B调用gcloud?有没有办法将访问令牌传递给gcloud或指定模拟用户?

3 个答案:

答案 0 :(得分:4)

gcloud为此具有 --impersonate-service-account 标志。

答案 1 :(得分:1)

  1. 运行gcloud auth login并使用您的gcp电子邮件地址登录。
  2. 运行export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token --impersonate-service-account=<sa-name>.iam.gserviceaccount.com)命令以从服务帐户生成临时凭证并将其存储为当前的OAUTH令牌。 (此OAUTH令牌仅持续1小时,因此请确保使用此令牌的操作可以在该时间段内完成。

答案 2 :(得分:0)

Service Account User role用于作为其他服务帐户运行操作。使用它,您可以act as a service account并运行gcloud命令。该示例显示了如何将iam.serviceAccountUser角色与compute.instanceAdmin角色一起使用来创建实例。