跳转到内容
搜索文档

使用 Terraform 发布应用程序

最后更新 查看 MarkdownAgent 设置

本指南介绍如何使用 Cloudflare Terraform 提供程序 (Provider) 快速发布和保护私有应用程序。在以下示例中,我们将一个新发布的应用程序添加到现有的 Cloudflare Tunnel,配置 cloudflared 如何将流量代理到该应用程序,并使用 Cloudflare Access 保护该应用程序。

先决条件

1. 创建 Terraform 配置目录

Terraform 通过包含配置文件的工作目录发挥作用。您可以将配置存储在多个文件中,也可以仅存储在一个文件中——Terraform 将把目录中的所有配置文件视为处于单个文档中进行评估。

  1. 为您的 Terraform 配置创建一个文件夹:

    mkdir cloudflare-tf
  2. 进入该目录:

    cd cloudflare-tf

2. 声明提供程序和变量

创建一个 .tf 文件并复制粘贴以下示例。填入你的 API 令牌、账户和区域信息以及 Tunnel ID。

查找 Tunnel ID

  1. 在 Cloudflare 仪表板中,转到 Networking(网络) > Tunnels(隧道)

    Go to Tunnels ↗
  2. 选择隧道名称。

  3. 复制 Tunnel ID(隧道 ID)

terraform {
  required_providers {
    cloudflare = {
      source = "cloudflare/cloudflare"
      version = "~> 4.0"
    }
  }
}

provider "cloudflare" {
  api_token = "<API-TOKEN>"
}

variable "account_id" {
  default = "<ACCOUNT-ID>"
}

variable "zone_id" {
  default = "<ZONE-ID>"
}

variable "zone_name" {
  default = "mycompany.com"
}

variable "tunnel_id" {
  default = "<TUNNEL-ID>"
}

3. 配置 Cloudflare 资源

将以下资源添加到你的 Terraform 配置中。

将已发布的应用程序添加到 Cloudflare Tunnel

使用 cloudflare_tunnel_config 资源,创建一个将你的应用程序映射到公共 DNS 记录的 Ingress 规则。本示例使 localhost:8080app.mycompany.com 上可用,设置 Connect Timeout,并启用 Access JWT 验证

resource "cloudflare_tunnel_config" "example_config" {
  account_id = var.cloudflare_account_id
  tunnel_id  = var.tunnel_id

  config {
    ingress_rule {
      hostname = "app.${var.zone_name}"
      service  = "http://localhost:8080"
      origin_request {
        connect_timeout = "2m0s"
        access {
          required  = true
          team_name = "myteam"
          aud_tag   = [cloudflare_access_application.example_app.aud]
        }
      }
    }
    ingress_rule {
      # 当请求不匹配前面的任何主机名时,以 `404` 状态码响应。
      service  = "http_status:404"
    }
  }
}

创建 Access 应用程序

使用 cloudflare_access_application 资源将应用程序添加到 Cloudflare Access。

resource "cloudflare_access_application" "example_app" {
  zone_id                   = var.zone_id
  name                      = "Example application"
  domain                    = "app.${var.zone_name}"
  type                      = "self_hosted"
  session_duration          = "24h"
  auto_redirect_to_identity = false
}

创建 Access 策略

使用 cloudflare_access_policy 资源,创建一条保护应用程序的策略。以下策略将仅允许通过你的身份提供者进行身份验证的用户访问。

resource "cloudflare_access_policy" "example_policy" {
  application_id    = cloudflare_access_application.example_app.id
  zone_id           = var.zone_id
  name              = "Example policy"
  precedence        = "1"
  decision          = "allow"

  include {
    login_method = ["<IDP-UUID>"]
  }

}

4. 部署 Terraform

要部署配置文件:

  1. 初始化您的配置目录:

    terraform init
  2. 预览将要创建的所有内容:

    terraform plan
  3. 应用该配置:

    terraform apply

用户现在可以通过转到公共 URL 并通过 Cloudflare Access 完成身份验证来访问私有应用程序。

你可以在 Cloudflare 仪表板中的 Networking(网络) > Tunnels(隧道) 下查看你的新隧道。

Go to Tunnels ↗

你的 Access 应用程序和策略位于 Zero Trust > Access controls(访问控制) > Applications 下。

这篇文档对您有帮助吗?