Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Terraform でアプリケーションを公開する

最終更新 Markdown で表示Agent セットアップ

このガイドでは、Cloudflare Terraform provider を使って、プライベートアプリケーションをすばやく公開し、保護する方法を説明します。次の例では、既存の Cloudflare Tunnel に新しい公開アプリケーションを追加し、cloudflared がアプリケーションへトラフィックをプロキシする方法を設定し、Cloudflare Access でアプリケーションを保護します。

前提条件

1. Terraform の設定ディレクトリを作成する

Terraform は、設定ファイルを含む作業ディレクトリで動作します。設定は複数のファイルに分けても、1 つのファイルにまとめても構いません。Terraform はディレクトリ内のすべての設定ファイルを、1 つのドキュメントとして評価します。

  1. Terraform 設定用のフォルダーを作成します。

    mkdir cloudflare-tf
  2. そのディレクトリに移動します。

    cd cloudflare-tf

2. プロバイダーと変数を宣言する

.tf ファイルを作成し、次の例をコピーして貼り付けます。API トークン、アカウントとゾーンの情報、Tunnel ID を記入します。

Tunnel ID を確認する

  1. Cloudflare ダッシュボードで、Networking > Tunnels を開きます。

    Tunnels を開く ↗
  2. トンネル名を選択します。

  3. Tunnel 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 レコードに対応づけるイングレスルールを作成します。この例では、localhost:8080app.mycompany.com で利用できるようにし、Connect Timeout を設定し、Access JWT validation を有効にします。

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 {
      # Respond with a `404` status code when the request does not match any of the previous hostnames.
      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 リソースを使い、アプリケーションを保護するポリシーを作成します。次のポリシーは、ID プロバイダーで認証したユーザーだけにアクセスを許可します。

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 で確認できます。

Tunnels を開く ↗

Access アプリケーションとポリシーは、Zero Trust > Access controls > Applications にあります。

役に立ちましたか?