外部ダッシュボードの iFrame 埋め込みが Content-Security-Policy ヘッダーの欠如によりブロックされるIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } プラットフォーム内に iFrame を介して埋め込まれた外部ダッシュボードが、必要な HTTP 応答ヘッダー Content-Security-Policy: frame-ancestors が存在しない、または正しく構成されていないためにブロックされています。HTTP Response Header モジュールは、ヘッダーをグローバルまたはアプリケーションスコープごとに適用するため、すべてのページにヘッダーを適用することによるセキュリティへの影響、および特定のページまたはコンテンツブロックにヘッダーをスコープ設定するためのオプションを理解する必要があります。 Symptoms<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 外部ダッシュボードを埋め込む iFrame が読み込まれず、ブラウザによってブロックされます。ブラウザコンソールに、frame-ancestors に関連する Content-Security-Policy (CSP) エラーが表示されます。HTTP Response Header 構成は、グローバル ("All Pages") またはアプリケーションスコープレベルでのみ利用可能であり、特定の URL パスまたはページに制限するネイティブオプションはありません。インスタンス全体に対して許容的な frame-ancestors ヘッダーを適用することによるセキュリティへの影響について懸念があります。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } サポートされているすべてのリリース Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } ホストアプリケーションに、外部ドメインによるコンテンツの埋め込みを明示的に許可する Content-Security-Policy: frame-ancestors ヘッダーが含まれていない場合、ブラウザは iFrame コンテンツをブロックします。ServiceNow の HTTP Response Header モジュールは、ヘッダーをグローバルまたはアプリケーションスコープごとに適用しますが、個別のページまたは URL パスレベルでは適用しません。そのため、iFrame 埋め込みを必要とするページのみにヘッダーを限定することが困難です。すべてのページにヘッダーを適用すると、許可されたドメインからインスタンス内のすべてのページが埋め込み可能になるため、機密レコード、フォーム、および管理パネルを含めて攻撃対象領域が拡大します。 Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 組織のセキュリティ体制および実装要件に基づいて、以下のオプションを評価してください。 Option 1: UI Script または Service Portal Widget を介したクライアント側 Meta タグ (効果は限定的) iFrame 埋め込みを必要とする特定のウィジェットまたはポータルページに、CSP メタタグを直接挿入します。 <meta http-equiv="Content-Security-Policy" content="frame-ancestors 'self' https://your-external-domain.com"> 注: これは実際の HTTP 応答ヘッダーの代替にはならず、メタタグ経由の CSP 強制に対するブラウザサポートも限定的です。ページレベルのスコープ設定を提供しますが、主要なセキュリティ制御として依存すべきではありません。 Option 2: ミドルウェアまたは API Gateway プロキシ iFrame リクエストをミドルウェア層または API Gateway 経由でルーティングし、関連するダッシュボードエンドポイントに対してのみ Content-Security-Policy: frame-ancestors ヘッダーを条件付きで挿入することで、他のすべてのページへの影響を回避します。 Option 3: Business Rule または Scripted REST API による条件付きヘッダー (きめ細かな制御に推奨) 要求された URL パスに基づいて CSP ヘッダーをプログラムで設定するカスタム Business Rule または Scripted REST API を実装します。これにより、iFrame 埋め込みが必要な場所にのみヘッダーを適用できます。 注: これはカスタム実装であり、アウトオブボックスのプラットフォームサポート範囲外です。 Option 4: 補完的コントロールとともにグローバルな "All Pages" スコープを受け入れる スコープ設定が実現できない場合は、ヘッダーをグローバルに適用し、以下の補完的コントロールによってリスクを軽減します。 許可された外部ドメインが厳密に管理、パッチ適用、および監視されていることを確認します。機密モジュールに対しては補助的なヘッダーとして X-Frame-Options: SAMEORIGIN を適用し、同一オリジンのコンテキストのみに埋め込みを制限します。iFrame 埋め込み試行に対するログ記録およびアラートを実装します。グローバルヘッダーの適用を、組織のセキュリティ計画またはシステム計画において既知かつ受容済みのリスクとして文書化します。 コンプライアンス要件が高い環境では、Option 3、または補完的コントロールを含む Option 4 を推奨します。カスタム実装に関する支援が必要な場合は、プラットフォームの Professional Services チームへの依頼、またはベンダーのコミュニティフォーラムへの相談を検討してください。