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

Can I create GCP API keys using Terraform?

我想使用 Terraform 创建 Google 云 API keys

这可能吗?

许多人使用 API 密钥来保护对 API 的访问。但是,Google 认为这种身份验证是不安全的(API 密钥与具有 1H 生命周期的 OAuth 令牌相比永远不会轮换。如果您的身份验证密码被盗,使用 API 密钥会产生影响时间不限)。

这就是为什么,为了阻止这种不良用法,您无法轻松生成(并验证)API 密钥,我的意思是,没有 public API调用创建或检查 API 键。因此,terraform 无法执行此任务。

还没有,但是 Google 似乎正在努力为 API 密钥管理公开 API。最新的云 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
...

尽管 cloud 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 google 提供商通常可以很快添加新功能,我只能假设支持很快就会到来。您可能想创建一个 Github 问题来表达您的兴趣。或者查看 beta provider 的更改日志。

他们似乎在这里拒绝了对 Terraform 支持的请求: https://github.com/hashicorp/terraform-provider-google/issues/6413

但是现在又出现了这个问题来跟踪对此的需求: https://github.com/hashicorp/terraform-provider-google/issues/8959

Google Terraform 现在的云提供商(版本 >= 4.14.0)supports creating API Keys

用示例更新答案(按照@noamt 的建议,谢谢)。

在这种情况下,关键是将可能使用的 API 限制为某些 GMaps 的:

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"
        }
  }
}