監査人から、本番環境でSAP_ALL相当の権限を持つユーザーが六名いると指摘された。うち二名は保守ベンダーの要員である。情報システム部門の答えは決まっている。夜間バッチが落ちたときに、この権限がないと復旧できない。経理の答えも決まっている。決算三日目に伝票が突き抜けたとき、待っていたら締まらない。両方とも正しい。 正しいがゆえに、指摘は毎年繰り返され、毎年「運用でカバーしています」と回答され、翌年また同じ行が指摘事項に載る。

抜け出す道は、権限の絞り方をもう一段工夫することではない。強い権限が要る場面は消えないという前提を先に認めて、渡し方と返し方を工程に変える。 恒久付与をやめられるかどうかは、設計の巧拙ではなく、この工程を回し続けられるかで決まる。

POINT
前提を三つ置く。第一に、SAP自身が恒久付与を想定していない。SAPは権限プロファイルSAP_ALLについて、公開ドキュメントで 「You should therefore not assign any of your users this authorization profile.」 としたうえで、このプロファイルを持つユーザーは一つだけ作ることを推奨し、「You should keep the password of this user secret (store it in a safe) and only use it in emergencies.」 と書いている。金庫に入れて緊急時にだけ使え、というのがベンダーの標準的な立場である。第二に、その一方でSAP Access ControlのEmergency Access Management(EAM)の公開ドキュメントには、SAP_ALLへの言及がない。Firefighter IDにSAP_ALLを付けるのは現場の慣行であって、SAPが推奨している構成ではない。 ここを混同すると、必要以上に強い権限を「標準だから」と正当化してしまう。第三に、制度の側が見ているのは権限の一覧ではなく痕跡である。企業会計審議会が2023年4月7日に改訂し2024年4月1日以後開始する事業年度から適用されている「財務報告に係る内部統制の評価及び監査に関する実施基準」は、「電子記録について変更の痕跡が残り難い場合には、内部統制の無効化が生じてもその発見が遅れることがある点についても留意することが重要である」 としている。国内の実務指針はさらに踏み込む。情報処理推進機構(IPA)の「組織における内部不正防止ガイドライン」第5版(2022年4月)は、システム管理者のログ・証跡について 「定期的にシステム管理者以外が確認しなければならない」 と書く。実行者と点検者を分けることが、望ましい運用ではなく要件として置かれている。

論点は権限の設計ではなく、貸出の工程である

EAMの用語は、そのまま運用設計の骨格になっている。SAPの構成ガイドは、Firefighterを緊急アクセスを必要とするユーザー、Firefighter IDを昇格した権限を持つユーザーID、Firefightingを緊急時にFirefighter IDを使って作業する行為と定義する。そして残る二つが要である。Ownerは 「the user responsible for a Firefighter ID and the assignment of controllers and Firefighters」、Controllerは 「the user who reviews and approves (if required) the log files generated from firefighting activities」 とされる。

貸す人と、後から点検する人が、最初から別のロールとして定義されている。 実際、SAP Access Control 12.0では所有者・点検者の区分がID方式とロール方式それぞれに用意され、Firefighter ID Owner、Firefighter ID Controller、Firefighter Role Owner、Firefighter Role Controllerの四つが並ぶ。多くの日本企業がここでつまずくのは、OwnerとControllerを同じ情報システム部門の課長に兼ねさせてしまうことである。自分が貸した権限の使われ方を自分で点検する構造は、IPAが求める分離をそのまま外している。 Controllerは業務側に置く。会計伝票に触れる権限なら経理部門の管理職、購買なら購買部門の管理職である。SAPの運用ガイドも、管理者・業務プロセスオーナー・Controllerが、Firefighterの実施した緊急アクセスの活動をレビューする定型のプロセスを持つ必要があると明記している。

なお配布されているロールは雛形であり、ドキュメントは 「The delivered roles are sample roles. You must copy them into your own namespace」 としている。標準のまま本番に載せる想定にはなっていない。

ID方式とロール方式で、残る証跡が変わる

EAMには二つの方式があり、パラメータ4000で切り替える。値1がID方式、値2がロール方式で、「You can use only one application type at a time.」、つまり同時併用はできない。この選択は運用の見た目より、残る証跡の性質を変える。

ID方式(ID-Based)ロール方式(Role-Based)
渡し方専用のFirefighter IDを利用者に割り当て、EAMの画面からそのIDでログオンする対象システム側に作った緊急用ロールを、利用者のIDに割り当てる
監査証跡での見え方変更履歴の実行者は共有のFirefighter IDになる実行者は本人のユーザーIDのまま残る
誰がやったかの特定EAMのログと突き合わせて初めて分かる通常の変更履歴だけで追える
向いている場面保守ベンダーなど、常設のIDを持たない相手に貸す場合社内の要員に、限られた時間だけ権限を足す場合

ID方式を選ぶと、CDHDRやCDPOSに残る変更者は共有IDになる。 誰が実行したかはEAMのログを突き合わせて初めて確定するので、後述するログ同期が止まっていた場合、変更の実行者を特定できない期間が生まれる。ロール方式なら実行者は本人のIDのまま残るため、この紐付けが切れない。保守ベンダーに貸す用途ではID方式が現実的だが、社内要員に対してまでID方式で統一する必要はない。貸す相手が社内か社外かで方式を分けられないという制約(同時併用不可)は、設計の初期に効く。

起動に使うトランザクションは、集中運用ならGRAC_EAM、プラグイン側の分散運用なら/GRCPI/GRIA_EAMである。GRAC_SPMも動くが、SAPのガイドはこれを後方互換のために残しているものと位置づけている。SPMは旧称のSuperuser Privilege Managementに由来し、2012年にEmergency Access Managementへ改称された。古い手順書がGRAC_SPMを正として書いていることがある。

恒久付与を外せるかは、この五工程を毎回同じ形で回せるかで決まる。
STEP 1
申請と理由コード
誰が・どの対象に・何のために・いつまで。理由は自由記述でなくコードで選ばせる
STEP 2
時限で貸し出す
方式はID方式かロール方式か。社外へ貸すならID方式、社内はロール方式が追いやすい
STEP 3
ログを同期して確保する
六種のログを日次でGRC側へ寄せる。STADは既定で二日しか残らないため、ここが止まると復元できない
STEP 4
業務側が点検する
Controllerは情報システム部門でなく業務部門の管理職。実行者と点検者を分ける
STEP 5
返却と棚卸し
期限到来で自動的に外れる設計にし、四半期ごとに保有者一覧を棚卸しする
土台土台=ログ同期ジョブの死活監視。権限保有者の一覧を監視しても事故は防げない。証跡が欠ける瞬間はジョブが止まったときに来る。
監視の対象を、権限の一覧からジョブの実行結果に移す。

ログを取っていることと、証跡が残っていることは別である

ここが実務で最も抜ける。

EAMが集めるログは六種類で、SAPのユーザーガイドは種別ごとに取得元を明記している。Transaction Logはトランザクションの実行をSTADから、Document Objects Change LogはCDPOSとCDHDRの変更文書から、Table Data Change LogはSE16、SE16N、SE17、SM30、SM31などによるテーブル変更から、System LogはSM21のDebug & Replaceの情報から、Security Audit LogはSM20から、OS Command LogはSM49からそれぞれ取得する。

Debug & Replaceは独立したログではなく、System Logの中身である。 そしてTable Data Change Logが別立てになっていることが重要で、ここが落ちるとSE16Nから直接テーブルを書き換えるという最も危険な経路の記録が消える。手順書のログ一覧が五種類以下になっている場合、たいていこの二点のどちらかを取り違えている。

問題は保持期間である。SAPのドキュメントは、STADの統計ファイルについて 「The total number of files is usually restricted to 48 (profile parameters stat/max_files or stat/as_max_files).」 とし、「This data is therefore stored for two days before it is overwritten.」 と書く。既定でおよそ二日で上書きされる。一方、Firefighterのログ同期ジョブについてSAPの管理ガイドが推奨する頻度は日次である。二日で消えるデータを、日次で拾いに行く設計になっている。 余裕は一日しかない。

したがって、連休を挟んでジョブが止まった、GRCとプラグインの接続が切れていた、といった事象が起きると、その期間の実行トランザクションは後から復元できない。権限保有者の一覧をいくら綺麗に保っても、証跡が欠けた期間は取り戻せない。 監視すべき対象は、権限の棚卸し結果ではなくジョブの実行結果である。ここを月次の統制として文書化しておくと、監査での説明が一段楽になる(J-SOX財務報告内部統制:3点セットを形骸化させない更新運用の実務)。

テーブル変更ログにも前提がある。ログの取得はテーブル単位の設定で、SAPは 「If logging is activated, access to the database table slows down accordingly.」 とし、多数のテーブルで有効にすればログテーブルでロックが発生し得ることも記している。性能と証跡のトレードオフが公式に書かれている以上、全テーブルで有効にする運用は現実的でない。会計に効くテーブルを列挙して、そこだけ有効にする判断が要る。 取得済みの内容はSCU3、いわゆるテーブル履歴で確認できる。

セキュリティ監査ログにも落とし穴がある。SAPのS/4HANAセキュリティガイドは、セキュリティ監査ログが新規システムでは既定で有効になっているとしたうえで、既存システムについては、少なくとも新規システムで既定として記録される事象に関してログを有効にすることを推奨している。裏返せば、稼働から年数の経ったシステムでは既定で無効のままである可能性がある。 設定はSAP NetWeaver 7.50以降でRSAU_CONFIGが導入されており、古い手順書のSM19から更新されているかを確認する(SAPの権限設計とSoD(職務分掌)|内部統制を仕組みで担保する)。

事後レビューが形骸化する理由は、件数ではなく理由コードにある

貸出の工程を作った会社が、半年後にぶつかるのがレビューの形骸化である。毎月Controllerに何十件ものログが回り、全部に承認が押される。読んでいないから押せる。

原因は件数ではなく、すべての貸出が「緊急対応」という同じ名前で括られていることにある。 理由を自由記述にしている会社では、備考欄が「障害対応のため」「決算作業のため」で埋まる。この粒度では、どれを重点的に見るべきかをControllerが判断できない。

理由コードを設計する。EAMには理由コードと活動を突き合わせるレポート(Reason Code and Activity Report)が用意されており、コードを分けておくと集計の意味が変わる。分け方の軸は、その事象が再発するかどうかである。深夜バッチの異常終了、インターフェースの連携エラー、マスタの不整合による転記エラー、期間クローズ後の修正、外部監査対応の照会。この五つに分けるだけで、四半期の集計から「毎回出てくるもの」が浮かび上がる。

浮かび上がったものは、緊急ではない。決算のたびに必ず使われる権限は、恒常的な業務要件であって緊急時アクセスではない。 それは通常のロールに正しく組み込んだうえで職務分掌の抵触を検証すべきものであり、緊急枠に置き続けると、統制の抜け道として定着する。逆に、年に一度も使われない理由コードがあれば、その貸出枠自体を廃止する。理由コードは、レビューを楽にするための道具であると同時に、緊急枠を痩せさせるための道具である。

四半期ごとの棚卸しにはFirefighter ID Reviewを使う。貸出枠は放っておくと増える一方で、退職者や異動者に紐づいたまま残る。

現場では
売上高920億円の化学メーカーで、S/4HANAの稼働から四年が経っていた。監査法人からの指摘は三年連続で同じ、本番環境の強権限保有者に関するものである。着任したIT統制の責任者が最初に調べたのは、権限の一覧ではなく過去一年の貸出記録だった。EAMは導入済みで、Firefighter IDは十二本。一年間の貸出は312件あった。理由欄は自由記述で、集計してみると「障害対応」が181件、「決算対応」が94件、残りが雑多である。次に、94件の決算対応を月別に並べた。十二か月すべてに出現し、うち八か月は同じ二名が同じFirefighter IDを使っていた。 さらに実行トランザクションを見ると、大半が特定の転記エラーの修正で、同じ勘定科目に集中している。これは緊急ではなく、月次の定常業務だった。原因は稼働時の権限設計にあり、当該業務の修正権限が職務分掌の抵触を理由に落とされたまま、代替手段が用意されずに緊急枠へ流れ込んでいた。二つ目の発見はログ側である。Consolidated Log Reportで一年分を出したところ、トランザクションログが完全に欠落している期間が三回、合計で十一日分あった。 調べると、GRCとプラグインの接続エラーでログ同期ジョブが失敗しており、失敗の通知はメールで飛んでいたが、宛先が異動した担当者のままだった。欠落した十一日のうち二日は、四半期決算の締め日にかかっている。STADは既定でおよそ二日で上書きされるため、この期間の実行記録は復元できなかった。責任者は三つ手を打っている。一つ目は理由コードの設計で、自由記述をやめ、深夜バッチ異常終了、インターフェース連携エラー、マスタ不整合、期間クローズ後修正、監査照会の五コードにした。二つ目は、94件の決算対応を通常のロールへ戻す作業で、職務分掌の抵触が生じる部分は、実行と承認を別部門に分ける形で再設計した。この作業に四か月かかっている。三つ目が、ログ同期ジョブの死活監視を月次統制として文書化し、失敗時の通知先を個人名でなく運用グループのアドレスに変えたことである。翌年、貸出件数は312件から119件に減った。減った分の大半は、緊急でなかったものである。 監査法人からの指摘は、強権限保有者の数ではなく、緊急枠の使用実績が業務要件と切り分けられているかという論点に移っている。責任者はこう言っている。三年間ずっと、指摘への回答を権限一覧の話として書いていた。見るべきだったのは、誰が持っているかではなく、何に使われたかだった、と。

決めるのは三つ

第一に、OwnerとControllerを別の部門に置く。 貸す人と点検する人を同じ情報システム部門に置くと、実行者が自分の作業を点検する構造になる。Controllerは会計伝票なら経理、購買なら購買と、業務側の管理職に持たせる。IPAの「組織における内部不正防止ガイドライン」第5版がシステム管理者のログをシステム管理者以外が確認しなければならないとしているのは、この分離のことである。兼務のまま件数を増やしても、承認は形式化する。

第二に、監視の対象を、権限の一覧からログ同期ジョブに移す。 EAMが集める六種のログのうちTransaction Logの取得元であるSTADは、統計ファイルが既定でおよそ48本、二日で上書きされる。SAPが推奨する同期頻度は日次で、余裕は一日しかない。ジョブが止まった期間の証跡は後から取り戻せないため、死活監視と失敗時の通知先を月次統制として文書化する。通知先を個人名にしない。 テーブル変更ログは性能とのトレードオフがあるため対象テーブルを絞り、セキュリティ監査ログは稼働年数の長いシステムで既定無効のままになっていないかを確認する。

第三に、理由コードを設計して、四半期ごとに「毎回出てくるもの」を緊急枠から出す。 深夜バッチ異常終了、連携エラー、マスタ不整合、期間クローズ後修正、監査照会のように再発性で分ける。毎月使われる権限は緊急時アクセスではなく恒常的な業務要件であり、通常のロールに組み込んだうえで職務分掌の抵触を検証し直す。緊急枠に残し続けると、そこが統制の抜け道として定着する。

そのうえで方式を選ぶ。ID方式とロール方式は同時併用できないため、社外要員への貸出を主とするならID方式、社内要員が中心ならロール方式が追いやすい。ID方式では変更履歴の実行者が共有IDになり、誰がやったかの確定がEAMのログに依存する。 依存する以上、その一本が切れたときの影響は大きい。二つ目の決めごとに戻ってくる。

まとめ
職務分掌を設計しても障害対応と決算のトラブルで強い権限は必ず必要になるため、恒久付与を外せるかどうかは権限設計の巧拙ではなく、申請・貸出・ログ確保・事後レビュー・返却を工程として固定できるかで決まる。前提として、SAPは権限プロファイルSAP_ALLについて、いずれのユーザーにも割り当てるべきではないとし、このプロファイルを持つユーザーは一つだけ作り、パスワードを金庫に保管して緊急時にのみ使うことを推奨している。一方でSAP Access ControlのEmergency Access Management(EAM)の公開ドキュメントにはSAP_ALLへの言及がなく、Firefighter IDにSAP_ALLを付ける構成は現場の慣行であってSAPの推奨ではない。制度の側が見ているのは権限の一覧ではなく痕跡で、2023年4月7日改訂・2024年4月1日以後開始事業年度から適用の「財務報告に係る内部統制の評価及び監査に関する実施基準」は、電子記録について変更の痕跡が残り難い場合には内部統制の無効化が生じてもその発見が遅れる点への留意を求め、情報処理推進機構の「組織における内部不正防止ガイドライン」第5版(2022年4月)はシステム管理者のログ・証跡を定期的にシステム管理者以外が確認しなければならないとする。EAMの用語自体が運用の骨格になっており、Firefighter IDに責任を持ちControllerとFirefighterの割当を行うOwnerと、緊急作業から生成されたログファイルをレビューし必要なら承認するControllerが別ロールとして定義されている。両者を同じ情報システム部門に兼ねさせると分離が崩れるため、Controllerは業務側の管理職に置く。配布ロールは雛形であり自社の名前空間へ複写して使う前提である。方式はパラメータ4000で切り替え、同時併用はできない。ID方式では変更履歴の実行者が共有のFirefighter IDになり誰が実行したかはEAMのログとの突合で初めて確定するのに対し、ロール方式では本人のユーザーIDのまま残る。最も抜けるのがログの保持である。EAMが集めるのは、STADから取るTransaction Log、CDPOSとCDHDRから取るDocument Objects Change Log、SE16やSE16N、SM30等によるTable Data Change Log、SM21のDebug & Replace情報を含むSystem Log、SM20のSecurity Audit Log、SM49のOS Command Logの六種である。Debug & ReplaceはSystem Logの中身であって独立ログではなく、テーブル変更ログを落とすとSE16Nからの直接改変という最も危険な経路の記録が消える。STADの統計ファイルは既定でおよそ48本に制限され二日で上書きされる一方、SAPが推奨するログ同期の頻度は日次であり、余裕は一日しかない。連休や接続エラーでジョブが止まればその期間の実行記録は復元できないため、監視対象を権限保有者の一覧からジョブの実行結果へ移し、死活監視と通知先を月次統制として文書化する。テーブル変更ログは有効化により当該テーブルへのアクセスが遅くなり多数で有効にするとログテーブルでロックが生じ得ると明記されているため対象を絞る。セキュリティ監査ログは新規システムでは既定で有効だが、既存システムでは有効化が推奨にとどまるため稼働年数の長い環境では無効のままの可能性がある。設定はSAP NetWeaver 7.50以降にRSAU_CONFIGが導入されている。事後レビューが形骸化する原因は件数ではなく、すべての貸出が同じ名前で括られていることにある。理由コードを再発性の軸で分け、四半期の集計から毎回出てくるものを抽出すると、それは緊急ではなく恒常的な業務要件であることが分かる。通常のロールへ戻して職務分掌の抵触を検証し直し、緊急枠を痩せさせる。四半期の棚卸しにはFirefighter ID Reviewを使い、退職者や異動者に紐づいた枠を落とす。

関連記事