メインコンテンツまでスキップ

Content Security Policy

Kaleidr の SDK は顧客ページ内で動作します。そのため顧客ページの Content Security Policy では、各 product が読み込む resource を許可する必要があります。 このページがその設定例です。

Product ごと

Tile と Viewer(iframe product)

Tile と Viewer は実際の map を map-embed.kaleidr.com 内、 Kaleidr の CSP 下で読み込みます。parent page で許可する必要があるのは iframe 自体と SDK loader のみです:

default-src 'self';
script-src 'self' https://cdn.kaleidr.com;
frame-src https://map-embed.kaleidr.com;
connect-src 'self' https://api.kaleidr.com;

Tile または Viewer だけを embed する場合、parent page で Mapbox / MapTiler / OSM / vendor image host を許可する必要は ありません — それらは Kaleidr iframe 内にあります。

Chat と Editor(in-page attach)

Chat と Editor は parent document 内に MapLibre を mount します。 parent page の CSP では MapLibre と SDK が実際に読み込むすべての host を許可する必要があります:

default-src 'self';
script-src 'self' 'wasm-unsafe-eval' https://cdn.kaleidr.com;
style-src 'self' 'unsafe-inline' https://cdn.kaleidr.com;
connect-src 'self'
https://api.kaleidr.com
https://api.mapbox.com https://events.mapbox.com
https://api.maptiler.com
https://*.tiles.mapbox.com;
img-src 'self' data: blob:
https://api.mapbox.com https://*.tiles.mapbox.com
https://api.maptiler.com
https://*.tile.openstreetmap.org;
worker-src 'self' blob:;
font-src 'self' data:;

'wasm-unsafe-eval' は必須です — MapLibre は runtime で WebAssembly を compile するため、 これがないと失敗します。CSP が 'wasm-unsafe-eval' を禁止している場合、現時点では Chat または Editor を in-page mount できません。

最初に壊れるもの

症状不足している可能性が高い directive
SDK loader が 404 または block されるscript-src https://cdn.kaleidr.com
MapLibre init が失敗(Chat/Editor)script-src 内の 'wasm-unsafe-eval'
Tile が空白 / グレーになるvendor host 用の connect-src および/または img-src
Iframe が描画されない(Tile / Viewer)frame-src https://map-embed.kaleidr.com
Console で session exchange が 4xxCSP ではありません — Auth & scopes の origin allowlist を確認してください

Nonce と hash

MapLibre が inline <style> block を生成するため、上記の style-src には 'unsafe-inline' が含まれています。CSP が現在 'unsafe-inline' を禁止している場合は、 nonce を使用し、その nonce の下で style を再出力してください — SDK は現時点で load ごとの nonce を発行しません。必要な場合は kaleidr-sdk に issue を作成してください。

Report-only rollout

この policy を安全に導入する方法は次のとおりです:

  1. 上記 block を1週間、所有する report-uri を指定した Content-Security-Policy-Report-Only として設定します。
  2. violation report に現れる host を正しい directive に追加します。
  3. report が静かになったら header を Content-Security-Policy に昇格します。