ハウトゥー例:カスタマイズされたサービスポータルページを使用する場合のエッジ暗号化ルールの作成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: ; } } <!-- div.margin{ padding: 10px 40px 40px 30px; } table.tocTable{ border: 1px solid; border-color:#E0E0E0; background-color: rgb(245, 245, 245); padding-top: .6em; padding-bottom: .6em; padding-left: .9em; padding-right: .6em; } table.noteTable{ border:1px solid; border-color:#E0E0E0; background-color: rgb(245, 245, 245); width: 100%; border-spacing:2; } table.internaltable { white-space:nowrap; text-align:left; border-width: 1px; border-collapse: collapse; font-size:14px; width: 85%; } table.internaltable th { border-width: 1px; padding: 5px; border-style: solid; border-color: rgb(245, 245, 245); background-color: rgb(245, 245, 245); } table.internaltable td { border-width: 1px; padding: 5px; border-style: solid; border-color: #E0E0E0; color: #000000; } .title { color: #D1232B; font-weight:normal; font-size:28px; } h1{ color: #D1232B; font-weight:normal; font-size:21px; margin-bottom:-5px } h2{ color: #646464; font-weight:bold; font-size:18px; } h3{ color: #000000; font-weight:BOLD; font-size:16px; text-decoration:underline; } h4{ color: #646464; font-weight:BOLD; font-size:15px; text-decoration:; } h5{ color: #000000; font-weight:BOLD; font-size:13px; text-decoration:; } h6{ color: #000000; font-weight:BOLD; font-size:14px; text-decoration:; } ul{ list-style: disc outside none; margin-left: 0; } li { padding-left: 1em; } --> この記事では、例として、特定のユースケースのサービスポータルページからレコードを作成するときにカスタマイズされたエッジ暗号化ルールを作成する例を示します。これはほんの一例です。エッジ暗号化のルールの作成は、ユーザーが何を達成しようとしているかによって大きく異なります。この記事は、すべてのエッジ暗号化ルールを記述するためのガイドと見なすべきではありません。 このエッジ暗号化ルールを作成する目的は、エッジプロキシでログインしているユーザーからサービスポータルフォームを送信するときに、単一の暗号化フィールドを正常に暗号化できるようにするためです。この場合、暗号化されるテーブルは、単一の文字列列が暗号化されるインシデントテーブルです。 単一の暗号化設定フィールドを使用してサービスポータル関連フォームからインシデントを作成しようとすると、次の理由で失敗します。 「テーブル:インシデントのフィールド:u_confidential_dataへの非暗号化データの挿入は無効です。」 明らかに、これにはカスタムエッジ暗号化ルールが必要です。 再現手順: 次のプラグインがアクティブ化されていることを確認します。 com.glide.service-portal.config com.glide.service-portal.designer com.glide.service-portal.esm com.glide.service-portal.knowledge-base com.glide.service-portal.service-catalog com.glide.service-portal.service-status com.glide.service-portal.sqanda com.glide.service-portal.survey com.snc.contextual_search.service-portal インシデントテーブルに新しい列を作成します。 [オープンラベル = インシデント] > [テーブル>システム定義] に移動します新規>テーブル列を選択フォームに次のように入力します。 タイプ = 文字列列ラベル = 機密データ列名 = u_confidential_data最大長 = 1,000 保存 プロキシにログインし、(2) の新しい列のエッジ暗号化設定を作成しますインシデントテーブルの任意のレコードを開き、機密データをフォームに追加しますプロキシから、[機密データ] フィールドに値を持つ通常のインシデントフォームを使用して新しいインシデントを作成します。これにより正常に作成されます。インスタンスにログインして新しい INT を表示して暗号化を確認します。[機密データ] が暗号化されていると表示されますhttps://<proxy_url>/sp?id=form&table=incident&sys_id=-1&view=Default%20view に移動します。これにより、サービスポータルに新しいインシデントフォームが表示されます。[機密データ] フィールドに値を入力して保存しようとします。次の理由で失敗します。「テーブル:インシデントのフィールド:u_confidential_dataへの非暗号化データの挿入は無効です。」 このケースをカバーする暗号化ルールがないため、これは想定されたことです。 UI での表示: 暗号化するデータを「機密データ」フォームに入力します。 右下の [保存] ボタンを選択します。 フォームを保存してインシデントを作成しようとしたときに発生したエラー: 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: ; } } すべてのバージョン 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: ; } } インシデントフォームを送信してインシデントを作成するときに、ブラウザー開発者ツール (Chrome、Firefox、IE など) を使用して要求 URL を確認すると、次のように表示されます。 201 投稿: 要求 URL:https://<proxy_url>/api/now/sp/uiaction/4df52ee8dba51300123479e49f9619f3 応答:テーブル:インシデントのフィールド:u_confidential_dataへの暗号化されていないデータの挿入は無効です Firefox ブラウザーでこれがどのように表示されるか > 開発者> ツール > [ネットワーク] タブ ヘッダー> > トレースの 要求 URL をメモします。 [応答] タブ:UI に表示されるエラーメッセージ「Invalid attempt to insert non-encrypted data into field: u_confidential_data in table: incident.」が表示されます。ルールの作成元となる正しいメッセージを確認します。 トレース内のリクエストURLから、/uiaction/ の後の部分は、送信されたUIフォームのsysIDです。 他のルールに影響を与えないように広すぎないルールを作成し、同時に要求をインターセプトできるようにします。したがって、インシデントテーブルに合わせた新しい UI アクションを作成して、後でルールを作成するときに特定のパスを探します。 プロキシで、sysID が sysID > UI アクション>フィルターシステム定義に移動します。 上記の例では、sysID は「4df52ee8dba51300123479e49f9619f3」です。現在、結果は 1 つしかないはずです。これは 保存 のグローバル UI アクションです。 そのレコードをクリックし、テーブルをインシデントに変更します。 ツールバーを右クリックし 挿入と維持を選択します。 保存 は使用しないでください。挿入と維持元の保存レコードを変更しない新しいレコードを作成します。これで、インシデントテーブル用に調整された UI アクション保存レコードが作成されました。 同じ場所 UI アクション>システム定義 は、送信に相当するグローバル UI アクションを検索し、ステップ 2 を繰り返します インシデントテーブルには、保存用と送信用の 2 つの新しい UI アクションがありますこれら 2 つの新しいレコードの 2 つの新しいsys_idsを保持します。これらはエッジ暗号化ルールの条件で使用されます IncidentSP という HTTP POST 用の新しいエッジ暗号化ルールを作成します。推奨オーダーは 5000です。 条件:if文のsys_idは、インシデントテーブルにそれぞれ作成された2つの新しいUIアクション(保存と送信)です。これにより、フォームが保存または送信された場合にルールが機能します。 function IncidentSPCondition(request) { var contentType = request.contentType; // Use the sys_ids of the new "Submit" and "Save" UI Actions in the "if" below if((request.path.indexOf('api/now/sp/uiaction/5ef52ee8dba51300123479e49f96AC12') || request.path.indexOf('api/now/sp/uiaction/c8d81ae0dba51300123479e49f961915')) > -1 && contentType.indexOf('json') > -1 ){ return true; } return false; } Action: function IncidentSPAction(request) { var tableName = 'incident'; var jsonContent = request.getAsJsonContent(); var jsonNodeIterator = jsonContent.getIterator('data'); while (jsonNodeIterator.hasNext()) { var jsonNode = jsonNodeIterator.next(); var fieldName = jsonNode.getName(); jsonNode.valueFor(tableName, fieldName); } } 注意:getIterator の値が何であるかを確認してください。この例では「data」ですが (var jsonNodeIterator = jsonContent.getIterator('data');)、「variables」などの他の値になる場合もあります (var jsonNodeIterator = jsonContent.getIterator('variables');)。ブラウザの開発者ツールを使用して正しい getIterator の値を見つけるには、ネットワーク -> ヘッダー -> リクエスト ペイロードで JSON コンテンツを確認してください。「data」が使用されている例では、リクエスト ペイロードは次のようになります。 {"table":"incident","recordID":"-1","data":{"number":{"sys_mandatory":false,"visible":true,"dbType":12,"label":"Number","sys_readonly":false,"type":"string","mandatory":false,"displayValue":"INC0010056","readonly":false,"u_confidential_data":{"sys_mandatory":false,"visible":true,"dbType":-1,"label":"Confidential data","sys_readonly":false,"type":"string","mandatory":false,"displayValue":"dfdfdfdfdfd","readonly":false,"hint":"","name":"u_confidential_data","attributes":{"edge_encryption_enabled":"true"},"choice":0,"value":"dfdfdfdfdfd","max_length":1000,"ed":{"name":"u_confidential_data"}...}} Example where the Iterator is 'variables', from the Request Payload: {sysparm_quantity: "1", variables: {new_email: "mymail@mail.com"},…}delivery_address: "dfdfdfdf"engagement_channel: "sp"get_portal_messages: "true"referrer: nullspecial_instructions: "fdfdfdfdf"sysparm_item_guid: "8d95da901bba78501c7c6465604bcb03"sysparm_no_validation: "true"sysparm_quantity: "1"sysparm_requested_for: "me@snc"variables: {new_email: "myemail@mail.com"}new_email: "myemail@mail.com" ルールが機能することを確認します。 ここに移動: https://<proxy_url>/sp?id=form&table=incident&sys_id=-1&view=Default%20viewフォームに 機密データ と入力し、フォームの下部にある 保存 (Ctrl + s) を選択します。インシデントは作成され、通常のインスタンス URL から表示する場合は暗号化されますが、プロキシで表示する場合は復号化されます。コンテキストメニューから作成を実行して、[保存] と [送信] の両方が機能することを確認することもできます。 カスタムエッジ暗号化ルールの作成の詳細については、次のドキュメントサイトを参照してください。 https://docs.servicenow.com/csh?topicname=c_EncryptionRules.html&version=latest