Skip to content

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

最初のアプリケーションを保護する

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

包括的なセキュリティを確保するには、プライベートアプリケーションごとに、少なくとも次の 2 つのポリシーを設定することを推奨します。

  • アプリケーションを定義するドメインリストを対象に、適切なアイデンティティとデバイスポスチャの値を指定した Gateway DNS ポリシー。ポリシーは、リクエストの名前解決時、ユーザーのデバイスがアプリケーションへ接続を試みる前に適用されます。ここで拒否されると、プライベートネットワークへトラフィックは届きません。

  • DNS ポリシーと同じアイデンティティとデバイスポスチャの値を指定し、アプリケーションを定義する IP リストを対象にした Gateway ネットワークポリシー。任意で、SNI ヘッダーに一致させることでドメインリストも含められます。アプリケーションへのアクセスに必要なポートやプロトコルの組み合わせも指定できます。ネットワークポリシーは、ユーザーが DNS ポリシーを通過したあと、デバイスが対象アプリケーションへ接続を試みたときに適用されます。

Gateway ポリシーを作成する

新しいポリシーを作成するには、Cloudflare ダッシュボード を開き、Zero Trust > Traffic policies > Firewall policies へ進みます。

DNS ポリシーの例

トラフィックセレクター 演算子
Domain in list Company Wiki domains
アイデンティティセレクター 演算子
User email matches regex .*@example.com
アクション
Allow
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/rules \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
  "name": "Company Wiki DNS policy",
  "conditions": [
    {
      "type": "traffic",
      "expression": {
        "any": {
          "in": {
            "lhs": {
              "splat": "dns.domains"
            },
            "rhs": "$<DOMAIN_LIST_ID>"
          }
        }
      }
    },
    {
      "type": "identity",
      "expression": {
        "matches": {
          "lhs": "identity.email",
          "rhs": ".*@example.com"
        }
      }
    }
  ],
  "action": "allow",
  "precedence": 13002,
  "enabled": true,
  "description": "Allow employees to access company wiki domains.",
  "filters": [
    "dns"
  ]
}'
resource "cloudflare_zero_trust_gateway_policy" "dns_allow_wiki_domains" {
	name        = "Company Wiki DNS policy"
	enabled     = true
	account_id  = var.cloudflare_account_id
	description = "Managed by Terraform - Allow employees to access company wiki domains."
	precedence  = 102
	action      = "allow"
	filters     = ["dns"]
	traffic     = "any(dns.domains[*] in ${"$"}${cloudflare_zero_trust_list.wiki_domains.id})"
	identity    = "identity.email matches \".*@example.com\""
}

ネットワークポリシーの例

トラフィックセレクター 演算子
Destination IP in list Company Wiki IPs
アイデンティティセレクター 演算子
User Email matches regex .*@example.com
アクション
Allow
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/rules \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
  "name": "Company Wiki network policy",
  "conditions": [
    {
      "type": "traffic",
      "expression": {
        "in": {
          "lhs": "net.dst.ip",
          "rhs": "$<IP_LIST_ID>"
        }
      }
    },
    {
      "type": "identity",
      "expression": {
        "matches": {
          "lhs": "identity.email",
          "rhs": ".*@example.com"
        }
      }
    }
  ],
  "action": "allow",
  "precedence": 13002,
  "enabled": true,
  "description": "Allow employees to access company wiki IPs.",
  "filters": [
    "l4"
  ]
}'
resource "cloudflare_zero_trust_gateway_policy" "network_allow_wiki_IPs" {
	name        = "Company Wiki Network policy"
	enabled     = true
	account_id  = var.cloudflare_account_id
	description = "Managed by Terraform - Allow employees to access company wiki IPs."
	precedence  = 103
	action      = "allow"
	filters     = ["l4"]
	traffic     = "net.dst.ip in ${"$"}${cloudflare_zero_trust_list.wiki_IPs.id}"
	identity    = "identity.email matches \".*@example.com\""
}

キャッチオールポリシー

ネットワークポリシー一覧の末尾に、キャッチオールポリシーを追加することを推奨します。効果的な Zero Trust モデルでは、過度に緩いポリシーを避けるため、デフォルト拒否を優先します。たとえば、次のように設定します。

トラフィックセレクター 演算子 論理
Destination IP in list All private network ranges Or
SNI Domain in list All private apex domains
アクション
Block
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/rules \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
  "name": "Catch-all block policy",
  "conditions": [
    {
      "type": "traffic",
      "expression": {
        "or": [
          {
            "in": {
              "lhs": "net.dst.ip",
              "rhs": "$<IP_LIST_ID>"
            }
          },
          {
            "any": {
              "in": {
                "lhs": {
                  "splat": "net.sni.domains"
                },
                "rhs": "$<DOMAIN_LIST_ID>"
              }
            }
          }
        ]
      }
    }
  ],
  "action": "block",
  "precedence": 14002,
  "enabled": true,
  "description": "Block access to private network.",
  "filters": [
    "l4"
  ]
}'
resource "cloudflare_zero_trust_gateway_policy" "network_catch_all" {
  name        = "Catch-all block policy"
  enabled     = true
  account_id  = var.cloudflare_account_id
  description = "Managed by Terraform - Block access to private network."
  precedence  = 14002
  action      = "block"
  filters     = ["l4"]
  traffic     = "net.dst.ip in ${"$"}${cloudflare_zero_trust_list.private_IPs.id} or any(net.sni.domains[*] in ${"$"}${cloudflare_zero_trust_list.private_domains.id})"
}

ネットワークポリシーは 上から順 に評価されます。アプリケーション向けに明示したポリシーにユーザーが一致しない場合、そのユーザーはブロックされます。 複数ポリシーの相互作用については、適用順序 を参照してください。

役に立ちましたか?