我正在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。我对如何使用服务帐户节感到困惑,因为文档不是很清楚。
我可以只分配服务帐户,还是需要指定服务帐户及其作用域?
答案 0 :(得分:0)
GCE提供了两种方法来限制实例可以提供的API访问权限,您会陷入这两种情况。一个是GCE实例具有一个范围,该范围限制了从该计算机到这些服务的任何API请求。例如,如果您的GCE实例不允许进行GCS写入操作,则无论与该实例相关联的服务帐户如何,您都无法执行GCS写入操作。
您可以使用SSH进行登录,并使用“项目所有者”帐户进行身份验证,然后尝试写入GCS,否则它将失败。这样做是为了提供额外的安全性,如果您知道“此实例组中的实例将只需要GCS读取和StackDriver API访问权限”,则该方法非常有用。
现在,仅当客户端库或gcloud命令在“应用程序默认”位置中查找凭据时,才使用与实例关联的服务帐户。因此,如果您的应用程序包含服务帐户json密钥并从中读取,则关联的密钥无关紧要。
因此,您指定的服务帐户使所有应用程序默认使用该帐户凭据执行API请求。