INTEGRITY Dokumentace

Vlastní metadata

Možná budete chtít nakonfigurovat nastavení pro jednotlivé hostitelské názvy (zákazníky) nad rámec možností Rules nebo Rate Limiting.

Nejprve budete muset kontaktovat svůj account team a požádat o povolení přístupu k Custom Metadata. Po nakonfigurování vlastních metadat je můžete využít následujícími způsoby:


Příklady

Další logiku a požadavky proberte se svým Solutions Engineerem.

Odesílání vlastních metadat

Do Cloudflare můžete přidat vlastní metadata přes Custom Hostnames API. Tato data lze přidat pomocí PATCH požadavek ke konkrétnímu ID hostname a nastavte tak metadata pro daný hostname, například:

Požadovaná oprávnění API tokenu

Alespoň jeden z následujících oprávnění tokenu je povinné:
Edit Custom Hostname
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames/$CUSTOM_HOSTNAME_ID" \
	--request PATCH \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"ssl": {
				"method": "http",
				"type": "dv"
		},
		"custom_metadata": {
				"customer_id": "12345",
				"redirect_to_https": true,
				"security_tag": "low"
		}
	}'

Změny metadat se do 30 sekund rozšíří po celé edge síti Cloudflare.


Přístup k vlastním metadatům z Cloudflare Workeru

Objekt metadat bude u každého požadavku přístupný pomocí request.cf.hostMetadata vlastnost. Data pak můžete číst a pomocí Workeru přizpůsobit jejich chování.

V níže uvedeném příkladu použijeme ve Workeru hodnotu user_id, která byla odeslána prostřednictvím výše uvedeného volání API "custom_metadata":{"customer_id":"12345","redirect_to_https": true,"security_tag":"low"}, a nastavte hlavičku požadavku tak, aby odesílala customer_id k originu:

export default {
	/**
	 * Fetch and add a X-Customer-Id header to the origin based on hostname
	 * @param {Request} request
	 */
	async fetch(request, env, ctx) {
		const customer_id = request.cf.hostMetadata.customer_id;
		const newHeaders = new Headers(request.headers);
		newHeaders.append("X-Customer-Id", customer_id);

		const init = {
			headers: newHeaders,
			method: request.method,
		};
		return fetch(request.url, init);
	},
};
export default {
	/**
	 * Fetch and add a X-Customer-Id header to the origin based on hostname
	 * @param {Request} request
	 */
	async fetch(request, env, ctx): Promise<Response> {
		const customer_id = request.cf.hostMetadata.customer_id;
		const newHeaders = new Headers(request.headers);
		newHeaders.append("X-Customer-Id", customer_id);

		const init = {
			headers: newHeaders,
			method: request.method,
		};
		return fetch(request.url, init);
	},
} satisfies ExportedHandler<Env>;

Přístup k vlastním metadatům ve výrazu pravidla

Použijte cf.hostname.metadata pole pro přístup k objektu metadata ve výrazech pravidel. Různé hodnoty z objektu JSON získáte pomocí lookup_json_string .

Následující výraz pravidla určuje, že ke shodě pravidla dojde, pokud security_tag hodnota ve vlastních metadatech obsahuje hodnotu low:

lookup_json_string(cf.hostname.metadata, "security_tag") eq "low"

Osvědčené postupy

Obecně platí, že byste se měli řídit Google's JSON Style guide ↗ kde je to vhodné.


Omezení

Metadata, která lze Cloudflare poskytnout, mají určitá omezení:

Podpora Terraformu

Terraform umožňuje pouze mapy jednoho typu, takže podpora Terraformu od Cloudflare pro vlastní metadata u vlastních hostitelských názvů je omezena na řetězcové klíče a hodnoty.