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 が 4xx | CSP ではありません — 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 を安全に導入する方法は次のとおりです:
- 上記 block を1週間、所有する
report-uriを指定したContent-Security-Policy-Report-Onlyとして設定します。 - violation report に現れる host を正しい directive に追加します。
- report が静かになったら header を
Content-Security-Policyに昇格します。