当尝试通过 terraform 部署项目时,我遇到以下问题:
Error: Error when reading or editing GCE default service account: googleapi: Error 401: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
│ Details:
│ [
│ {
│ "@type": "type.googleapis.com/google.rpc.ErrorInfo",
│ "metadatas": {
│ "method": "compute.v1.ProjectsService.Get",
│ "service": "compute.googleapis.com"
│ },
│ "reason": "ACCESS_TOKEN_TYPE_UNSUPPORTED"
│ }
│ ]
│
│ More details:
│ Reason: authError, Message: Invalid Credentials
│
│
│ with data.google_compute_default_service_account.default,
│ on iam.tf line 7, in data "google_compute_default_service_account" "default":
│ 7: data "google_compute_default_service_account" "default" {
我检查了默认的 GCE 帐户,最初它缺少密钥,所以我创建了它,但没有成功。当我尝试向帐户添加权限时会出现此问题。
在 iam.tf 文件中,我将帐户定义为:
data "google_compute_default_service_account" "default" {
project = var.project_id
}
有没有办法可以使用预设帐户更改 terraform iam 文件中的默认服务帐户?或者我可以尝试其他解决方案吗?
您遇到的错误消息是由于 terraform 尝试使用无效或不受支持的身份验证访问 Google 云服务。
要解决您的问题,请为云外壳设置 OAuth 令牌,或者您需要使用明确的服务帐户密钥:
根据此 Hashicorp 文档
如果您使用的是 Cloud shell,请首先使用 GCP 进行身份验证。最简单的方法是运行 gcloud auth application-default login(如果您已经安装了 gcloud)。如果您还没有,可以从这里安装。
您可以将 Google Cloud 服务帐户与 terraform 结合使用。从 Cloud Console 的服务帐号密钥页面中选择一个现有帐号,或创建一个新帐号。接下来,下载 JSON 密钥文件。将其命名为您能记住的名称,并将其存储在计算机上安全的位置。
注意:目前唯一支持的服务帐号凭据是从 Cloud Console 下载的凭据或由 gcloud 生成的凭据。
您可以使用环境变量 GOOGLE_APPLICATION_CREDENTIALS 向 Terraform 提供密钥,并将值设置为文件的位置。导出 GOOGLE_APPLICATION_CREDENTIALS={{路径}}
这有助于使用服务帐户进行身份验证。而不是默认的 GCE 服务帐户。