我可以使用Terraform创建GCP API密钥吗?

8

我想使用Terraform创建Google Cloud API密钥,是否可行?


2
需要使用API密钥还是服务账户?据我所知,没有用于创建API密钥的API,但您可以使用Terraform创建服务账户及其密钥对。 - ydaetskcoR
应该有一个API密钥,因为它是用于与Cloud Endpoints一起使用的。你是对的。看起来它没有API。 - noamt
1
目前,我不认为有一个Terraform模块可以创建API密钥。您可以查看以下链接,了解所有可用于GCP的Terraform模块。 [1] https://registry.terraform.io/search?provider=hashicorp%2Fgoogle&q=google - Ashik Mahbub
1
现在有了!https://dev59.com/07noa4cB1Zd3GeqPavSL#71556294 - intotecho
4个回答

10

谷歌云提供商(版本>= 4.14.0)现在支持使用Terraform创建API密钥。

根据@noamt的建议,更新答案,并附上一个示例。

在这种情况下,该密钥限制可以使用某些GMaps API:

resource "google_apikeys_key" "maps" {
  name         = "maps-api-key"
  display_name = "Nice name displayed in the UI"

  restrictions {
        # Example of whitelisting Maps Javascript API and Places API only
        api_targets {
            service = "maps-backend.googleapis.com"
        }
        api_targets {
            service = "places-backend.googleapis.com"
        }
  }
}

1
好消息。请编辑答案以包含一个示例,而不是外部文档的链接。链接可能会失效,页面可能会被删除。 - noamt
如果能提供一个数据源来检索密钥就太好了。我的目标是在创建密钥之后将其放入一个“秘密”中。 - lubumbax
1
我正在使用提供程序版本4.31.0,但无法创建密钥,并出现要求设置服务帐户和计费的错误。尝试使用“user_project_override”和“billing_project”设置,但仍然出现错误。是否需要任何额外的配置? - jaksky

9
目前还没有,但是谷歌似乎正在开发一个用于 API 密钥管理的 API。最新的 Cloud SDK(已测试为 287.0.0)具有 alpha 版本支持,使用方式如下:
$ gcloud alpha services api-keys
ERROR: (gcloud.alpha.services.api-keys) Command name argument expected.

Available commands for gcloud alpha services api-keys:

      clone                   *(ALPHA)*  Create a new API key with the same
                              metadata as input key.
      create                  *(ALPHA)*  Create an API key.
      delete                  *(ALPHA)*  Delete an API key.
      describe                *(ALPHA)*  Describe an API key's metadata.
      get-key-string          *(ALPHA)*  Get key string of an API key.
      list                    *(ALPHA)*  Lists API keys.
      lookup                  *(ALPHA)*  Look up resource name of a key string.
      undelete                *(ALPHA)*  Undelete an API key.
      update                  *(ALPHA)*  Update an API key's metadata.

使用--log-http列出项目API密钥时,您可以看到所使用的API端点:

$ gcloud alpha services api-keys list --project $PROJECT --log-http
...
==== request start ====
uri: https://apikeys.googleapis.com/v2alpha1/projects/$PROJECT/keys?alt=json
...

尽管云SDK正在使用v2alpha1,但有一个可用的v2beta1版本。可以这样验证:
$ curl -s -H"Authorization: Bearer $(gcloud auth print-access-token)" \
   https://apikeys.googleapis.com/v2beta1/projects/$PROJECT/keys
{
  "keys": [
    {
      "name": "projects/REDACTED/keys/REDACTED",
      "displayName": "REDACTED",
      "createTime": "2019-04-15T10:39:53.558Z",
      "updateTime": "2019-04-15T10:40:06.616639Z",
      "restrictions": {
        "androidKeyRestrictions": {},
        "apiTargets": [
          {
            "service": "geocoding_backend"
          }
        ]
      },
      "state": "ACTIVE"
    }
  ]
}

由于terraform谷歌提供商通常很快就会添加新功能,我只能假设支持很快就会到来。您可能想创建一个Github问题来展示您的兴趣。或者关注beta提供商的变更日志。


看起来他们已经拒绝了在这里支持Terraform:https://github.com/terraform-providers/terraform-provider-google/issues/6413 - MPV
1
Terraform支持已经到来:https://dev59.com/07noa4cB1Zd3GeqPavSL#71556294 - intotecho

2
许多人使用API密钥来保护API的访问。然而,谷歌认为这种身份验证不安全(与具有1小时生命周期的OAuth令牌相比,API密钥从不旋转。如果您的身份验证秘密被盗,使用API密钥的影响在时间上是无限的)。
因此,为了阻止这种不良用法,您不能轻松生成(并验证)API密钥,我的意思是,没有公共API可供调用以创建或检查API密钥。因此,terraform无法执行此任务。

在需要身份验证的情况下,但又不关心实际身份的情况下,最好的方法是什么? 当然,在客户端(即移动应用程序)保密也是不推荐的。 - noamt
1
大致上,我看到有两种情况:要么您的应用程序是安全的,每个用户都必须进行身份验证(例如带有密码的用户帐户,Google Play 帐户或 Google 帐户等),并且您可以选择授权或不授权哪些用户。至少,您可以要求经过身份验证的用户知道在不适当使用您的服务的情况下阻止谁。要么您的应用程序是公共的,添加安全层是无用的。 - guillaume blaquiere

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接