微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google Cloud Platform 和 Terraform 使用 Identity Aware Proxy IAP 保护 App Engine

如何解决Google Cloud Platform 和 Terraform 使用 Identity Aware Proxy IAP 保护 App Engine

大约三天后,我开始疯狂地尝试通过 terraform 保护我的 App Engine。当我通过 GCP 控制台手动保护我的应用程序时,我的步骤是:

  • 创建应用引擎
  • 激活 IAP 并创建 OAuth 同意屏幕
  • 激活对 Web 应用程序 (=> App Engine) 的保护

手动即可。

使用 terraform,我成功创建了所有变量、提供程序并激活了所有所需的 API,但我保护应用程序的方法似乎有问题,但我不知道是什么。下面是我的代码片段:

  1. 创建 App Engine(有效)
resource "google_app_engine_application" "app-init" {
    project       = var.project_id
    location_id   = var.project_location
    database_type = "CLOUD_FIRESTORE"
}
  1. 激活 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_idoauth2_client_secret。即使您创建了一个新项目,也只有在您设置 OAuth 同意屏幕后才能找到这些凭据。这些设置在 Terraform 中是必需的,因此在创建和管理 App Engine 应用程序时,您无法在没有 OAuth2 凭据的情况下启用 IAP。

此外,apps.patch API 支持更新 iap 字段,但在 Terraform 中不可用,因此如果您的项目中有现有的 App Engine 应用程序,启用/禁用 IAP 的唯一方法是通过 GCP 控制台、客户端库或直接访问 API。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?