我在GCE中使用默认服务帐户A运行服务。此服务使用gcloud与各种GCP服务进行通信。目前,它使用服务帐户B与某些GCP服务(使用私钥)进行通信。但是,我们希望摆脱使用私钥并使用帐户模拟。为此,我已将帐户A添加到服务帐户B的角色和给定的令牌创建者角色。
我在go中编写了一个测试程序,并且能够验证模拟的工作原理。但是,我们的服务是使用PHP,并使用gcloud SDK。我找不到配置gcloud来模拟服务帐户或提供自定义令牌的方法。
一个选择是我重写所有gcloud代码以使用谷歌SDK,但这是很多工作,我宁愿避免这种情况。我的问题是,在这种情况下如何使用服务帐户B调用gcloud?有没有办法将访问令牌传递给gcloud或指定模拟用户?
答案 0 :(得分:4)
gcloud
为此具有 --impersonate-service-account
标志。
答案 1 :(得分:1)
gcloud auth login
并使用您的gcp电子邮件地址登录。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角色一起使用来创建实例。