terraform GCE服务帐户节

时间:2018-11-13 23:30:22

标签: google-cloud-platform google-compute-engine terraform

我正在GCP上创建实例,并使用服务帐户节遇到了一些问题。当我这样做时:

service_account {
  email = "terraformdeploy-dev@projectxxx.org.com.iam.gserviceaccount.com"
  scopes = []
}

实例确实使用该服务帐户进行配置,但是所有Cloud API access scopes在用户界面中均显示disabled

如果我这样做:

service_account {
  email = "terraformdeploy-dev@projectxxx.org.com.iam.gserviceaccount.com"
  scopes = ["cloud-platform"]
}

实例提供了对所有API的完全访问权限,但奇怪的是,上述服务帐户无法访问所有这些API。我对如何使用服务帐户节感到困惑,因为文档不是很清楚。

我可以只分配服务帐户,还是需要指定服务帐户及其作用域?

1 个答案:

答案 0 :(得分:0)

GCE提供了两种方法来限制实例可以提供的API访问权限,您会陷入这两种情况。一个是GCE实例具有一个范围,该范围限制了从该计算机到这些服务的任何API请求。例如,如果您的GCE实例不允许进行GCS写入操作,则无论与该实例相关联的服务帐户如何,您都无法执行GCS写入操作。

您可以使用SSH进行登录,并使用“项目所有者”帐户进行身份验证,然后尝试写入GCS,否则它将失败。这样做是为了提供额外的安全性,如果您知道“此实例组中的实例将只需要GCS读取和StackDriver API访问权限”,则该方法非常有用。

现在,仅当客户端库或gcloud命令在“应用程序默认”位置中查找凭据时,才使用与实例关联的服务帐户。因此,如果您的应用程序包含服务帐户json密钥并从中读取,则关联的密钥无关紧要。

因此,您指定的服务帐户使所有应用程序默认使用该帐户凭据执行API请求。

也请记住,有much more refined scopes than just 'cloud-platform'.