Skip to content

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

AWS 連携

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

このガイドでは、ホスト名単位 の Authenticated Origin Pulls を設定し、mutual TLS verify を使って AWS Application Load Balancer に安全に接続する方法を説明します。

始める前に

  • AWS アカウントと EC2 は、すでに設定済みである必要があります。
  • このチュートリアルでは、カスタム証明書の生成にコマンドラインインターフェース(CLI)を使い、Cloudflare Authenticated Origin Pulls の設定に API 呼び出し を使います。
  • AWS の最新のセットアップ手順は、AWS のドキュメント を参照してください。

1. カスタム証明書を生成する

  1. 次のコマンドを実行して、AES-256 暗号化を使った 4096 ビットの RSA 秘密鍵を生成します。プロンプトが表示されたらパスフレーズを入力します。
openssl genrsa -aes256 -out rootca.key 4096
  1. CA ルート証明書を作成します。プロンプトが表示されたら、証明書に含める情報を入力します。Common Name フィールドにはホスト名ではなく、ドメイン名を指定します。
openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1826 -out rootca.crt
  1. 証明書署名要求(CSR)を作成します。プロンプトが表示されたら、要求に含める情報を入力します。Common Name フィールドにはホスト名を指定します。
openssl req -new -nodes -out cert.csr -newkey rsa:4096 -keyout cert.key
  1. 前の手順で作成した rootca.keyrootca.crt を使って証明書に署名します。
openssl x509 -req -in cert.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out cert.crt -days 730 -sha256 -extfile ./cert.v3.ext
  1. 証明書拡張ファイル cert.v3.ext に次の内容が指定されていることを確認します。
basicConstraints=CA:FALSE

2. AWS Application Load Balancer を設定する

  1. rootca.certS3 バケット にアップロードします。
  2. EC2 コンソールで トラストストアを作成 し、証明書をアップロードした S3 URI を指定します。
  3. EC2 インスタンスを作成し、HTTPD デーモンをインストールします。インスタンスタイプ は要件に合わせて選んでください。AWS Free Tier 対象の最小構成でも構いません。このチュートリアルは、t2.micro と Amazon Linux 2023 を使った例に基づいています。
sudo yum install -y httpd
sudo systemctl start httpd
  1. Application Load Balancer 用の ターゲットグループ を作成します。
    • ターゲットタイプは Instances を選びます。
    • ポートは HTTP/80 を指定します。
  2. ターゲットグループの設定が終わったら、ターゲットグループが 正常 であることを確認します。
  3. ロードバランサーとリスナーを設定 します。
    • スキームは Internet-facing を選びます。
    • mTLS オプションを使えるように、リスナーをポート 443 に切り替え、前の手順で作成したターゲットグループを選びます。
    • Default SSL/TLS server certificate では Import certificate > Import to ACM を選び、証明書の秘密鍵と本文を追加します。
    • Client certificate handling では Verify with trust store を選びます。
  4. 設定を保存します。
  5. (任意)次のコマンドを実行し、Application Load Balancer がクライアント証明書を要求していることを確認します。
openssl s_client -verify 5 -connect <your-application-load-balancer>:443 -quiet -state

まだ証明書を Cloudflare にアップロードしていないため、接続は失敗するはずです(例: read:errno=54)。

curl --verbose を実行し、SSL/TLS ハンドシェイク内に Request CERT (13) があることも確認できます。

curl --verbose https://<your-application-load-balancer>
...
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
...

3. Cloudflare を設定する

  1. 手順 1 で作成した証明書を Cloudflare に アップロード します。ルート CA ではなく、リーフ証明書を使います。
MYCERT="$(cat cert.crt|perl -pe 's/\r?\n/\\n/'|sed -e 's/..$//')"
MYKEY="$(cat cert.key|perl -pe 's/\r?\n/\\n/'|sed -e's/..$//')"

request_body=$(< <(cat <<EOF
{
"certificate": "$MYCERT",
"private_key": "$MYKEY",
"bundle_method":"ubiquitous"
}
EOF
))

# Push the certificate

curl --silent \
"https://api.cloudflare.com/client/v4/zones/$ZONEID/origin_tls_client_auth/hostnames/certificates" \
--header "Content-Type: application/json" \
--header "X-Auth-Email: $MYAUTHEMAIL" \
--header "X-Auth-Key: $MYAUTHKEY" \
--data "$request_body"
  1. その証明書を使うホスト名に 証明書を関連付けます

Required API token permissions

At least one of the following token permissions is required:
  • SSL and Certificates Write
Enable or Disable a Hostname for Client Authenticationbash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/origin_tls_client_auth/hostnames" \
	--request PUT \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"config": [
				{
						"enabled": true,
						"cert_id": "<CERT_ID>",
						"hostname": "<YOUR_HOSTNAME>"
				}
		]
	}'

Cloudflare の設定をロールバックする

  1. PUT リクエスト を使い、ホスト名の Authenticated Origin Pulls を無効にします。

    Required API token permissions

    At least one of the following token permissions is required:
    • SSL and Certificates Write
    Enable or Disable a Hostname for Client Authenticationbash
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/origin_tls_client_auth/hostnames" \
    	--request PUT \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"config": [
    				{
    						"enabled": false,
    						"cert_id": "<CERT_ID>",
    						"hostname": "<YOUR_HOSTNAME>"
    				}
    		]
    	}'
  2. (任意)GET リクエスト を使い、クライアント証明書 ID の一覧を取得します。次の手順で削除する証明書の ID が必要です。

    Required API token permissions

    At least one of the following token permissions is required:
    • SSL and Certificates Write
    • SSL and Certificates Read
    List Certificatesbash
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/origin_tls_client_auth/hostnames/certificates" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
  3. Delete hostname client certificate エンドポイントを使い、アップロード済みの証明書を削除します。

    Required API token permissions

    At least one of the following token permissions is required:
    • SSL and Certificates Write
    Delete Hostname Client Certificatebash
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/origin_tls_client_auth/hostnames/certificates/$CERTIFICATE_ID" \
    	--request DELETE \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

役に立ちましたか?