このガイドでは、Cloudflare Terraform provider ↗ を使って、プライベートアプリケーションをすばやく公開し、保護する方法を説明します。次の例では、既存の Cloudflare Tunnel に新しい公開アプリケーションを追加し、cloudflared がアプリケーションへトラフィックをプロキシする方法を設定し、Cloudflare Access でアプリケーションを保護します。
- ドメインを Cloudflare に追加する
- IdP 連携を設定する
- Zero Trust ダッシュボードで Cloudflare Tunnel を作成する
- Terraform クライアント ↗ をインストールする
- API トークンを作成する(必要な最小権限 を参照)
Terraform は、設定ファイルを含む作業ディレクトリで動作します。設定は複数のファイルに分けても、1 つのファイルにまとめても構いません。Terraform はディレクトリ内のすべての設定ファイルを、1 つのドキュメントとして評価します。
-
Terraform 設定用のフォルダーを作成します。
mkdir cloudflare-tf -
そのディレクトリに移動します。
cd cloudflare-tf
.tf ファイルを作成し、次の例をコピーして貼り付けます。API トークン、アカウントとゾーンの情報、Tunnel ID を記入します。
Tunnel ID を確認する
-
Cloudflare ダッシュボードで、Networking > Tunnels を開きます。
Tunnels を開く ↗ -
トンネル名を選択します。
-
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>"
}次のリソースを Terraform 設定に追加します。
cloudflare_tunnel_config ↗ リソースを使い、アプリケーションを公開 DNS レコードに対応づけるイングレスルールを作成します。この例では、localhost:8080 を app.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"
}
}
}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
}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>"]
}
}構成ファイルをデプロイするには:
-
構成ディレクトリを初期化します。
terraform init -
作成される内容をプレビューします。
terraform plan -
構成を適用します。
terraform apply
ユーザーは、公開 URL を開き、Cloudflare Access で認証すれば、プライベートアプリケーションにアクセスできます。
新しいトンネルは、Cloudflare ダッシュボードの Networking > Tunnels で確認できます。
Tunnels を開く ↗Access アプリケーションとポリシーは、Zero Trust > Access controls > Applications ↗ にあります。