3 – HTTPS設定の構成
Cloudflareを通じて基本的なウェブサイトをプロキシした後、Terraformを使用してゾーン設定を調整できます。このチュートリアルでは、いくつかのオプションのHTTPS設定を構成し、更新された設定を将来のためにGitHubにプッシュします。
変更のために新しいGitブランチを使用し、適用する前にそれをmasterブランチにマージします。チームで作業している場合は、マージおよびデプロイする前に他の人に変更をレビューしてもらう機会としてこのステップを考慮することができます。また、TerraformをCI/CDシステムに統合して、別のCloudflareドメインを使用して自動的にテストを実行することもできます。
このステップでは、Terraform設定を変更して以下の設定を有効にします:
厳格モードでは、オリジンに有効なSSL証明書が必要です — Cloudflare Origin CAを使用して生成してください。
git checkout -b step3-https新しいブランチ 'step3-https' に切り替えましたcat >> cloudflare.tf <<'EOF'
resource "cloudflare_zone_settings_override" "example-com-settings" { zone_id = var.zone_id
settings { tls_1_3 = "on" automatic_https_rewrites = "on" ssl = "strict" }}EOF変更を適用する前に、Terraformが提案している内容を確認します。以下の例の出力は、計算された値を無視するようにフィルタリングされています — この場合、デフォルト値を保持する設定です。
terraform plan | grep -v "(known after apply)"計画の前にメモリ内のTerraform状態を更新しています...更新された状態はこの計画を計算するために使用されますが、ローカルまたはリモートの状態ストレージに永続化されることはありません。
cloudflare_record.www: 状態を更新しています... [id=c38d3103767284e7cd14d5dad3ab8668]
------------------------------------------------------------------------
実行計画が生成され、以下に示されています。リソースアクションは次の記号で示されます: + create
Terraformは以下のアクションを実行します:
# cloudflare_zone_settings_override.example-com-settings が作成されます + resource "cloudflare_zone_settings_override" "example-com-settings" { + zone_id = "<ZONE_ID>"
+ settings { + automatic_https_rewrites = "on" + ssl = "strict" + tls_1_3 = "on"
# (...) } }
計画:1を追加、0を変更、0を破棄。
------------------------------------------------------------------------
注意:この計画を保存するために -out オプションを使用しなかったため、Terraformは「terraform apply」を今実行した場合に正確にこれらのアクションを実行することを保証できません。提案された変更は良さそうなので、これをmasterブランチにマージし、その後terraform applyで適用します。チームで作業している場合は、プルリクエストを要求し、提案された設定変更をピアレビューする機会としてこの機会を利用したいかもしれません。
git add cloudflare.tfgit commit -m "ステップ3 - TLS 1.3、常にHTTPSを使用、SSL厳格モードを有効にする。"[step3-https d540600] ステップ3 - TLS 1.3、常にHTTPSを使用、SSL厳格モードを有効にする。 1ファイルが変更され、11行が追加されましたgit checkout masterブランチ 'master' に切り替えましたgit merge step3-httpsd26f40b..d540600 を更新中ファストフォワード cloudflare.tf | 11 +++++++++++ 1ファイルが変更され、11行が追加されましたgit pushオブジェクトをカウント中: 3, 完了。最大8スレッドを使用してデルタ圧縮中。オブジェクトを圧縮中: 100% (3/3), 完了。オブジェクトを書き込み中: 100% (3/3), 501バイト | 0バイト/s, 完了。合計3 (デルタ1), 再利用0 (デルタ0)remote: デルタを解決中: 100% (1/1), 1つのローカルオブジェクトで完了。To git@github.com:$GITHUB_USER/cf-config.git d26f40b..d540600 master -> master変更を適用する前に、TLS 1.3で接続を試みてください。技術的には、デフォルト設定では接続できないはずです。このテストに従うには、BoringSSLに対してcurlをコンパイルする必要があります ↗。
curl -v --tlsv1.3 https://www.example.com 2>&1 | grep "SSL connection\|error"* error:1000042e:SSL routines:OPENSSL_internal:TLSV1_ALERT_PROTOCOL_VERSIONcurl: (35) error:1000042e:SSL routines:OPENSSL_internal:TLSV1_ALERT_PROTOCOL_VERSION上記のように、TLS 1.3がまだゾーンで有効になっていないため、エラーが返されるはずです。terraform applyを実行して有効にし、再度試してください。
terraform apply --auto-approveTerraformは選択したプロバイダーを使用して以下の実行計画を生成しました。リソースアクションは次の記号で示されます: + create
Terraformは以下のアクションを実行します:
# cloudflare_zone_settings_override.example-com-settings が作成されます + resource "cloudflare_zone_settings_override" "example-com-settings" { + id = (適用後に知られる) + initial_settings = (適用後に知られる) + initial_settings_read_at = (適用後に知られる) + readonly_settings = (適用後に知られる) + zone_id = "e2e6491340be87a3726f91fc4148b126" + zone_status = (適用後に知られる) + zone_type = (適用後に知られる)
+ settings { + always_online = (適用後に知られる) + always_use_https = (適用後に知られる) + automatic_https_rewrites = "on" + binary_ast = (適用後に知られる) + brotli = (適用後に知られる) + browser_cache_ttl = (適用後に知られる) + browser_check = (適用後に知られる) + cache_level = (適用後に知られる) + challenge_ttl = (適用後に知られる) + ciphers = (適用後に知られる) + cname_flattening = (適用後に知られる) + development_mode = (適用後に知られる) + early_hints = (適用後に知られる) + email_obfuscation = (適用後に知られる) + filter_logs_to_cloudflare = (適用後に知られる) + h2_prioritization = (適用後に知られる) + hotlink_protection = (適用後に知られる) + http2 = (適用後に知られる) + http3 = (適用後に知られる) + image_resizing = (適用後に知られる) + ip_geolocation = (適用後に知られる) + ipv6 = (適用後に知られる) + log_to_cloudflare = (適用後に知られる) + max_upload = (適用後に知られる) + min_tls_version = (適用後に知られる) + mirage = (適用後に知られる) + opportunistic_encryption = (適用後に知られる) + opportunistic_onion = (適用後に知られる) + orange_to_orange = (適用後に知られる) + origin_error_page_pass_thru = (適用後に知られる) + origin_max_http_version = (適用後に知られる) + polish = (適用後に知られる) + prefetch_preload = (適用後に知られる) + privacy_pass = (適用後に知られる) + proxy_read_timeout = (適用後に知られる) + pseudo_ipv4 = (適用後に知られる) + response_buffering = (適用後に知られる) + rocket_loader = (適用後に知られる) + security_level = (適用後に知られる) + server_side_exclude = (適用後に知られる) + sort_query_string_for_cache = (適用後に知られる) + ssl = "strict" + tls_1_2_only = (適用後に知られる) + tls_1_3 = "on" + tls_client_auth = (適用後に知られる) + true_client_ip_header = (適用後に知られる) + universal_ssl = (適用後に知られる) + visitor_ip = (適用後に知られる) + waf = (適用後に知られる) + webp = (適用後に知られる) + websockets = (適用後に知られる) + zero_rtt = (適用後に知られる)
+ mobile_redirect { + mobile_subdomain = (適用後に知られる) + status = (適用後に知られる) + strip_uri = (適用後に知られる) }
+ security_header { + enabled = (適用後に知られる) + include_subdomains = (適用後に知られる) + max_age = (適用後に知られる) + nosniff = (適用後に知られる) + preload = (適用後に知られる) } } }
計画:1を追加、0を変更、0を破棄。cloudflare_zone_settings_override.example-com-settings: 作成中...cloudflare_zone_settings_override.example-com-settings: 作成中... [10秒経過]cloudflare_zone_settings_override.example-com-settings: 14秒後に作成完了 [id=e2e6491340be87a3726f91fc4148b126]
適用完了!リソース:1が追加され、0が変更され、0が破棄されました。以前と同じコマンドを試してください。コマンドは今成功するはずです。
curl -v --tlsv1.3 https://www.example.com 2>&1 | grep "SSL connection\|error"* SSL connection using TLSv1.3 / AEAD-AES128-GCM-SHA256