如何解决Google Cloud Platform 和 Terraform 使用 Identity Aware Proxy IAP 保护 App Engine
大约三天后,我开始疯狂地尝试通过 terraform 保护我的 App Engine。当我通过 GCP 控制台手动保护我的应用程序时,我的步骤是:
- 创建应用引擎
- 激活 IAP 并创建 OAuth 同意屏幕
- 激活对 Web 应用程序 (=> App Engine) 的保护
手动即可。
使用 terraform,我成功创建了所有变量、提供程序并激活了所有所需的 API,但我保护应用程序的方法似乎有问题,但我不知道是什么。下面是我的代码片段:
- 创建 App Engine(有效)
resource "google_app_engine_application" "app-init" {
project = var.project_id
location_id = var.project_location
database_type = "CLOUD_FIRESTORE"
}
- 激活 IAP 并创建 OAuth 同意屏幕(不起作用)
resource "google_iap_brand" "project_brand" {
support_email = "my-owner-service-account-email@..."
application_title = "Cloud IAP protected Application"
project = "my-project-id"
}
执行这个我得到这个错误:
创建品牌时出错:googleapi:错误 409:请求的实体已存在
在此先感谢每一位!
解决方法
每个项目您只能启动 App Engine一次,同样的事情也适用于 IAP 品牌。因此,这意味着您已经在项目中配置了这些,并且无法再次重新创建它们。见Terraform doc:
品牌只能为 Google Cloud 项目创建一次,并且底层 Google API 不支持 DELETE 或 PATCH 方法。销毁 Terraform 管理的品牌会将其从状态中移除,但不会从 Google Cloud 中删除。
以下是有关如何在 Terraform 中创建 App Engine 应用程序和启用 IAP 的正确片段:
resource "google_app_engine_application" "app-init" {
project = var.project_id
location_id = var.project_location
database_type = "CLOUD_FIRESTORE"
iap {
enabled = true
oauth2_client_id = "your_client_id"
oauth2_client_secret = "your_client_secret"
}
}
Terraform Google 提供程序只是另一个调用 Google Cloud API 的客户端。 google_app_engine_application
等价于 apps.create
。
注意凭据 oauth2_client_id
和 oauth2_client_secret
。即使您创建了一个新项目,也只有在您设置 OAuth 同意屏幕后才能找到这些凭据。这些设置在 Terraform 中是必需的,因此在创建和管理 App Engine 应用程序时,您无法在没有 OAuth2 凭据的情况下启用 IAP。
此外,apps.patch API 支持更新 iap 字段,但在 Terraform 中不可用,因此如果您的项目中有现有的 App Engine 应用程序,启用/禁用 IAP 的唯一方法是通过 GCP 控制台、客户端库或直接访问 API。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。