コンテンツにスキップ

Terraform

要件
あなたのマシンにインストールされたTerraform
適切に設定されたCloudflareプロバイダー

Terraformは、インフラストラクチャを構築、変更、バージョン管理するためのツールであり、Cloudflareリソースを構築するためのコンポーネントとドキュメントを提供します。以下に、Terraformを使用してアクセスを構築するための例を示します。CloudflareとTerraformの設定に関するより一般的なガイドについては、TerraformとCloudflareの始め方のブログ記事をご覧ください。

Terraformを使用してアプリケーションを作成する

  1. アプリケーションを作成します。

    こちらが設定の例です:

    variable "domain" {
    default = "example.com"
    }
    variable "zone_id" {
    default = <CLOUDFLARE_ZONE_ID>
    }
    resource "cloudflare_access_application" "cf_app" {
    zone_id = var.zone_id
    name = "My Example App"
    domain = var.domain
    session_duration = "24h"
    }
  2. 次に、環境変数と秘密情報をエクスポートする必要があります:

    Terminal window
    export CLOUDFLARE_EMAIL=<CLOUDFLARE_EMAIL>
    export CLOUDFLARE_API_KEY=<CLOUDFLARE_API_KEY>
  3. これで、提案された変更を出力するterraform planを実行できます。計画を注意深く確認してください:

    Terminal window
    terraform plan
    プランの前にメモリ内のTerraform状態を更新しています...
    更新された状態はこのプランの計算に使用されますが、
    ローカルまたはリモートの状態ストレージに保存されることはありません。
    ------------------------------------------------------------------------
    実行プランが生成され、以下に示されています。
    リソースアクションは次の記号で示されます:
    + create
    Terraformは次のアクションを実行します:
    # cloudflare_access_application.cf_appが作成されます
    + resource "cloudflare_access_application" "cf_app" {
    + aud = (適用後に知られる)
    + domain = "example.com"
    + id = (適用後に知られる)
    + name = "My Example App"
    + session_duration = "24h"
    + zone_id = "1ce82492016e71df631bf4af9c02587f"
    }
    プラン:1を追加、0を変更、0を破棄。
    ------------------------------------------------------------------------
    注意:このプランを保存するための"-out"パラメータを指定しなかったため、
    Terraformは"terraform apply"がその後実行された場合に
    正確にこれらのアクションが実行されることを保証できません。
  4. これらの変更が正確であり、進めることに自信がある場合は、applyコマンドを使用してこれらの変更を適用します:

    Terminal window
    terraform apply --auto-approve
    cloudflare_access_application.cf_app: 作成中...
    cloudflare_access_application.cf_app: 2秒後に作成完了 [id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
    適用完了!リソース:1が追加され、0が変更され、0が破棄されました。

ポリシーを作成する

アプリケーションを作成した後、ポリシーを作成し、それをアプリケーションに添付することができます:

resource "cloudflare_access_policy" "cf_policy" {
application_id = cloudflare_access_application.cf_app.id
zone_id = var.zone_id
name = "Example Policy"
precedence = "1"
decision = "allow"
include {
email = ["test@example.com"]
}
}

そのためには:

  1. terraform planを実行します:

    Terminal window
    terraform plan
    プランの前にメモリ内のTerraform状態を更新しています...
    更新された状態はこのプランの計算に使用されますが、
    ローカルまたはリモートの状態ストレージに保存されることはありません。
    cloudflare_access_application.cf_app: 状態を更新中... [id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
    ------------------------------------------------------------------------
    実行プランが生成され、以下に示されています。
    リソースアクションは次の記号で示されます:
    + create
    Terraformは次のアクションを実行します:
    # cloudflare_access_policy.cf_policyが作成されます
    + resource "cloudflare_access_policy" "cf_policy" {
    + application_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    + decision = "allow"
    + id = (適用後に知られる)
    + name = "My Example Policy"
    + precedence = 1
    + zone_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    + include {
    + email = [
    + "test@example.com",
    ]
    }
    }
    プラン:1を追加、0を変更、0を破棄。
    ------------------------------------------------------------------------
    注意:このプランを保存するための"-out"パラメータを指定しなかったため、
    Terraformは"terraform apply"がその後実行された場合に
    正確にこれらのアクションが実行されることを保証できません。
  2. 次に、これらの変更が正確であり、進めることに自信がある場合は、applyコマンドを使用してこれらの変更を適用します:

    Terminal window
    terraform apply --auto-approve

アイデンティティプロバイダーの設定

以下の例は、アイデンティティプロバイダーを設定し、それをポリシーに添付する方法を示しています:

resource "cloudflare_access_identity_provider" "github_oauth" {
account_id = <CLOUDFLARE_ACCOUNT_ID>
name = "GitHub OAuth"
type = "github"
config {
client_id = <GITHUB_CLIENT_ID>
client_secret = <GITHUB_CLIENT_SECRET>
}
}
resource "cloudflare_access_policy" "cf_policy" {
application_id = cloudflare_access_application.cf_app.id
zone_id = var.zone_id
name = "My Example Policy"
precedence = "1"
decision = "allow"
include {
email = ["test@example.com"]
github {
name = "My GitHub Org"
identity_provider_id = cloudflare_access_identity_provider.github_oauth.id
}
}
}

これが、AccessとTerraformを使用して始めるための基本です。他のエンドポイントをTerraform経由で管理するための詳細については、APIドキュメントを参照してください。