IBM i の暗号化を試みる
金融サービス企業を対象としたニューヨーク州のサイバーセキュリティ規制が施行されました。これにより、ニューヨーク州でライセンスを受けて営業している銀行、保険会社、または証券会社は、一定のサイバーセキュリティ対策の実施が求められることになりました。「Section 500.15 Encryption of Nonpublic Information(非公開情報の暗号化)」では、非公開情報の保存時の暗号化を求めています。おそらく、IBM i ドライブを暗号化したくなる理由はほかにもあるのかもしれませんが。
この記事は、57XX-SS1オプション45(暗号化ASPの有効化)を使用した、IBM i システムのディスク ドライブの保存時の暗号化を中心テーマとしています。結果として、暗号化されていないシステムASP 1と、暗号化されたASPが得られたことになります。ASPは、auxiliary storage pool(補助記憶域プール)の略です。
IBMパートナーである、UCG Technologies社のRob Wise氏が、この暗号化機能の導入、システムASPからのドライブの除去、新たな暗号化されたASPへのドライブの追加といった作業を担当するとともに、プロセス全体に渡っていろいろと手引きしてくれました。その他の作業は私たちが内部で処理しました。
ドライブの容量
WRKDSKSTSは、各ドライブで使用されているストレージの状況を表示します。システムの大部分を暗号化する場合は、新たなASPへのドライブの移動と新たなASPへのデータの移動を数回行うことが必要になるかもしれません。肝に銘じておいてください。使用率は85%を超えてはなりません。システムに新たなドライブを追加する必要が生じることもあります。このケースでは、ドライブは3回移動されました。1回目は、暗号化されたASP2をセットアップするため、2回目は、ASP1からASP2へと大量のデータが移動された後、3回目は、暗号化がすべて完了した後で2つのASPの間で使用率のバランスをとるためでした。
暗号化がすること、しないこと
暗号化を行うと、IBM i システムから取り外されたドライブは読み取りできなくなります。基本的に、ドライブ暗号化は、ドライブが盗み出されてデータを読み取られることの予防になります。もっとも、いまどきより心配なのは、ハッカーや内部の脅威なのかもしれません。ディスク盗難のリスクは非常に小さいとしても、このニューヨーク州の規制による影響があるのだとすれば、やることリストに追加すべき項目は、かなり多くなるでしょう。
ディスク ドライブの盗難を別にしても、データに対する有効なログインおよびアクセス許可を持っていれば誰でも、ProData Computer Services社のDBUを使用して暗号化されたデータにアクセスすることができますし、Access Client Solutionsを使用して暗号化されていないExcelファイルに暗号化されたデータをダウンロードすることもできます。また、暗号化の前に機能する他の何らかの方法を使用すれば、暗号化されたデータにアクセスすることは可能なのです。
ドライブ盗難に遭う確率は小さいかもしれませんが、暗号化の労力は小さいものではありません。
最初にテスト用LPARでこのプロセスを行うことを強くお勧めしておきます。環境はそれぞれ異なるため、ここでは発生しなかった問題が発生する可能性はあります。これは、ある企業によるIBM iドライブの暗号化の実施例であるに過ぎません。ほかでテストしているわけではないため、あらゆるケースに対しての完全なプランであることは意図されておりません。
何を暗号化するべきか
時間がかかる最初の作業は、何を暗号化するか決める作業です。IBM Qライブラリーは暗号化できません。OSが暗号化を管理するため、暗号化されていないままでなければなりません。Rob Wise氏は、すべての非IBMライブラリーを暗号化することはしないよう強く推奨しています。何を暗号化するか決めるには、どのライブラリーが顧客の非公開情報(通常、一般にはアクセスできない情報)を含んでいるか判定するために、すべてのLPAR内のすべてのライブラリーを調べてみる必要があります。このケースでは、メインの本番LPARには700以上のライブラリーがありました。最近のPower7システム上でIBM iバージョン7.3で稼働している一方で、アプリケーションは20年経っており、数年ごとに新たなシステムへ移動されてきました。これまでは、長い時間を掛けてたまったものを調べて、一掃しようとするインセンティブが働いたことは一度もなかったようです。
RTVDSKINFは、ストレージに関する情報を収集する、長い時間が掛かるプロセスです。これは、バッチにして、他のジョブを中断させないジョブ待ち行列にサブミットするべきです。システム上でほとんどアクティビティがないときに実行するのが最善です。以下がそのコマンドです。
SBMJOB CMD(RTVDSKINF) JOB(RTVDSKINF) JOBQ(QBATCH2)
PRTDSKINFは、RTVDSKINFによって収集されたデータを使用します。ここでは、RTVDSKINFの1日後に、これを実行しました。
PRTDSKINF *LIBで、ライブラリー情報レポートを取得します。
- スプール ファイルを保留または保存します。
- Access Client Solutionsで、プリンター出力(Printer Output)を使用して、スプール ファイルをPDFに変換し、ネットワーク ドライブに保存しました。
- Wordを使用して、PDFをテキストに変換しました。
- Excelで、[データ]、[区切り位置]を使用して、すべてのライブラリーのリストを作成してから、サイズで降順にソートしました。
- Excelで、「Delete?」および「Encrypt?」用の列を追加しました。
ITオペレーション マネージャーは、ここに勤務して30年以上になる大ベテランです。何度か彼に会ってライブラリーをレビューしてもらいました。「これは削除できるでしょうか」 「削除できないなら、そのライブラリーは非公開情報を含んでいたでしょうか」 もしそうなら、ライブラリーは暗号化される必要があります。ライブラリーにどのようなファイルがあるか見ることによって、また、一部については、DBUを使用してファイルの内容を見ることによって、ライブラリーの暗号化が必要かどうかを判定したわけです。メインの本番LPAR内の764のライブラリーのうち、テープに保存して削除可能なライブラリーは288ありました。これらのライブラリーを保存および削除するために、各ライブラリーに対してSAVLIBを実行するCLプログラムと、各ライブラリーに対してDLTLIBを実行するもうひとつのCLプログラムを作成しました。必要なライブラリーの数の分だけCLソース行をコピーし、次いでExcelからCLへライブラリーをコピーしました。一度に1画面で行えたことで、多くのタイピング作業を省力化することができました。これらのライブラリーを削除したところ、フルシステムバックアップの所要時間が大幅に短縮されることになり、これには、ITオペレーション マネージャーも大喜びでした。
ジャーナル、PF、LF
次の大きなハードルは、ジャーナルと、物理および論理ファイル(PFおよびLF)にまつわるものです。
- ジャーナルと、ジャーナル処理されるすべてのオブジェクトとそのレシーバーは、同じASPになければならない。
- すべての論理ファイルは、それらの物理ファイルと同じASPになければならない。
IBMは、RPMおよびYumの活用を通じて、オープンソースの配布を本格化させています。そのため、IBM iユーザーは現在、Node.jsバージョン8およびPythonバージョン3.6など、広く使われているオープンソース言語の最新バージョンを利用できるようになっています。
「WRKJRN *all *all, 8」 で、「ジャーナル属性の処理」画面を表示して、F19(Shift F7)を押しました。1 Files or 30 All Objectsが表示されたので、ちょっとお片付けが必要なようでした。何年もの間、このシステムに関わってきた何人かの開発者たちは、ジャーナル処理されているファイルをテストのために他のライブラリーへコピーしていました。このため、これらの新たなファイルを含めるように、ジャーナルが拡大されました。本番ライブラリーは、同じLPARの開発およびテスト環境へコピーされました。同様にジャーナルもコピーされました。
ENDJRN、ENDJRNAP、ENDJRNLIB、ENDJRNOBJ、およびENDJRNPFを使用して、ジャーナルと、それらがジャーナル処理している対象を、ITオペレーション マネージャーが求めたものだけに減らしました。
保管されていない、(作成されるべきでなかったジャーナルに対する)ジャーナル レシーバーがあるライブラリーを削除しようとしてエラーが発生する場合は、WRKRPYLEを使用して、システム応答リストにメッセージCPA7025を追加します。次いで、SBMJOBコマンドで、INQMSGRPY(*SYSRPYL)を使用します。
保存、削除、暗号化されたASPへの復元
ライブラリーを暗号化するには、ライブラリーを保存し、すべて保存されたことを確認し、削除し、暗号化されたASPに復元する必要があります。ライブラリー リストにある場合はライブラリーを削除することができないため、最小限のライブラリー リストを持つユーザーとしてサインオンするか、削除する必要があるすべてのライブラリーに対してRMVLIBLEを使用します。
複数のライブラリーからのオブジェクトをカバーしているジャーナルの場合、暗号化されたASPに復元する前に、それらすべてのライブラリーを削除する必要があります。ジャーナルが含まれているライブラリーは最後に削除します。復元の際は、ジャーナルが含まれているライブラリーを最初に復元します。
復元コマンドのパラメーターには、ASP #用のRSTASPがあります。
RSTLIBで、F4でプロンプト、F9ですべてのパラメーター、ASP2への復元はRSTASP(2)です。#は、暗号化されたASPを作成する際に使用したASP番号です。
物理ファイルが存在しないことで、論理ファイル復元エラーが発生する場合があります。
本番LPARのコピーであるテスト用LPARでこの作業を行っている場合は、本番LPARで、DBUを使用してLFを開き、Shift F2を押すと、そのLFが基づいている物理ファイルが表示されます。物理ファイルを使ってライブラリーを復元した後で、復元エラーの原因となった論理ファイルが他にもあれば、すべて復元する必要があります。暗号化されるすべてのライブラリーが保存、削除、および暗号化されたASPに復元されるまで、このプロセスを続けます。環境によっては、保存および復元コマンドでPVTAUT(*YES)およびSPLFDTA(*ALL;*NEW)を指定する必要があるかもしれません。
システム値ライブラリー リスト
WRKSYSVALを使用して、QSYSVAL(システム ライブラリー リスト)およびQUSRLIBL(ユーザー ライブラリー リスト)を表示します。リストされたライブラリーのいずれかに、暗号化する必要があるものがある場合は、追加の作業が必要になります。
QURSLIBLについては、このライブラリー リストからライブラリーを削除して、QSYSARBによるオブジェクト ロックを除去する必要があります。WRKOBJLCKでは、その他のロックが数多く表示されると思います。これらによってライブラリーの削除が妨げられているわけです。ライブラリーを保存ファイル(SAVF)に保存します。ENDSBS SBS(*ALL) DELAY(30)で、残りのオブジェクト ロックが除去されます。次いで、コンソールから、ライブラリーを削除し、SAVFからASP2にそのライブラリーを復元し、QUSRLIBLシステム値へそれを追加して、その後で、システムを再起動するか、PWRDWNSYS DELAY(30) RESTART(*YES)を使用します。
QSYSVALライブラリー リストで暗号化を必要とするライブラリーがある場合は、ライブラリー リストからそれを削除してから、IPLを行う必要があります。
統合ファイル システム(IFS)
IBM i 上で、IFS(統合ファイル システム)を使用しているでしょうか。ここでは、IFSは多くの目的のために使用されています。500,000以上のファイルの入った、300GBのWebdocsスキャン済みドキュメント リポジトリーとして、GoAnywhereでの銀行送金前後のACHファイル用として、GoAnywhereやVisualCronなどでの、IBM i とWindows Server Accountingシステムの間でのAccounting関連ファイルのエクスポート/インポート用として、などです。
Excelを使って、すべてのIFSフォルダーのリストを作成しました。Navigator for iを使用して、これらのフォルダーのプロパティをチェックしてサイズを取得し、それをExcelに追加しました。「Encrypt?」列を追加しました。各IFSフォルダーをひとつひとつ調べて、暗号化する必要があるかどうか(非公開顧客情報があるかどうか)を判定しました。
暗号化されたASP上でIFSを作成する
新たなASPを作成した場合は、IFSが新たなASPを認識する前に、システムがIPLされる必要があります。ユーザー定義のファイル システムを作成します(1度のみ実行)。
CRTUDFS UDFS('/DEV/QASP02/ASP02.UDFS') DTAAUT(*RWX) OBJAUT(*ALL) CASE(*MONO)
すべての暗号化されたフォルダーがその下に置かれるASP2上に、メインのIFSフォルダーを作成します(1度のみ実行)。MKDIR DIR('/IFSASP2')を使用します(どのような名前でも使用できますが、一番わかりやすかったのでIFSASP2としました)。ユーザー定義のファイル システムを使用するには、次のようにしてマウントする必要があります。
MOUNT TYPE(*UDFS) MFS('/DEV/QASP02/ASP02.UDFS') MNTOVRDIR('/IFSASP2')
暗号化する各IFSフォルダーに対して、以下の手順を繰り返します。
CRTSAVF mysavflib/myfolder
SAV DEV('/QSYS.LIB/mysavflib.LIB/myfolder.FILE') OBJ(('/myfolder'))
保存されたことを確認します。
myfolderでWRKLNK 4、F4、subtree *all(フォルダーを削除)。
読み取り専用属性のために削除できない場合は、WRKLNK, 13, ATR(*READONLY) VALUE(*NO) SUBTREE(*ALL)で、それらの属性を変更します。
その後で削除を再試行します。
MKDIR DIR('/IFSASP2/myfolder')で、メインの暗号化されたIFSフォルダーの下にフォルダーを作成します。
RST DEV('/QSYS.LIB/mysavflib.LIB/myfolder.FILE') OBJ(('/myfolder' *INCLUDE '/IFSASP2/myfolder'))
RSTコマンドは、そのフォルダーを暗号化されたASP IFSに復元します。
ADDLNK OBJ('/IFSASP2/myfolder') NEWLNK('/myfolder')
addlnkのステップは、シンボリック リンクを作成するため、そのフォルダーを使用していたどのプログラムも、ソース コードを変更することなく機能します。
WRKLNKで、作成したフォルダーの属性を確認するために、8を実行します。
暗号化されたフォルダーでは、「type DIR, ASP 2」と表示されるはずです。
ADDLNKで作成されたフォルダーでは、「type SYMLNK, ASP 1」と表示されるはずです。
スタートアップ プログラム
マウント コマンドは、IPL実行後、毎回実行する必要があるため、スタートアップ プログラムに追加しておく必要があります。
WRKSYSVAL QSTRUPPGMで、スタートアップ プログラムを表示します。
MOUNT TYPE(*UDFS) MFS('/DEV/QASP02/ASP02.UDFS') MNTOVRDIR('/IFSASP2')
スタートアップ プログラムは、JOBD QSTRUPJDに基づいて、デフォルトで、ユーザー プロファイルQPGMRの下で実行されます。QPGMRには、マウントおよびアンマウント コマンドに対する権限がありません。
以下のコマンドを使用して権限を追加します。
GRTOBJAUT OBJ(MOUNT) OBJTYPE(*CMD) USER(QPGMR) AUT(*USE)
GRTOBJAUT OBJ(UNMOUNT) OBJTYPE(*CMD) USER(QPGMR) AUT(*USE)
BRMS - 暗号化されたIFSのバックアップ
暗号化されたIFSを保存するには、まずアンマウントする必要があります。
IFSへのWindowsドライブ マッピングを終了するために、ENDTCPSVR SERVER(*NETSVR)を実行します。次いで、UNMOUNT TYPE(*UDFS) MNTOVRDIR('/IFSASP2')を実行します。
BRMS のBackup Control Groups(バックアップ制御グループ)で、*EXITコマンドを追加して2つのCLプログラムを呼び出しました。1つは、上の2つのコマンドを実行して、Windowsドライブ マッピングを終了し、アンマウントを行うCLプログラムで、もうひとつは、以下の2つのコマンドを使用して、マウントを行い、ドライブ マッピングのためにnetserverを開始するCLプログラムです。
MOUNT TYPE(*UDFS) MFS('/DEV/QASP02/ASP02.UDFS') MNTOVRDIR('/IFSASP2')
STRTCPSVR SERVER(*NETSVR).
TCPダウンでフル システム バックアップを行っている場合は、TCPがアップする前にSTRTCPSVRが実行されると、エラーになります。
WRKJOBSCDE - スケジュールされたジョブ
マウントコマンドおよびnetserver開始コマンドを、投入日を2035年とするか保留にしてWRKJOBSCDEジョブとして追加したい場合もあるかもしれません。そうすると、オペレーターは、適切なパラメーターを調べることもなく、簡単に10を実行して直ちに投入することもできます。暗号化されたIFSを誰かが使用しようとしたときにエラーを受け取る場合は、IFSをマウントする必要があるか、Windowsドライブ マッピングのためにnetserverを開始する必要があります。
出力待ち行列
WRKOUTQを使用して、出力待ち行列を確認します。顧客非公開情報を含んでいるレポートを持つスプール ファイルは、すべて暗号化されたライブラリーにある必要があります。QUSRSYSやQGPLなどのIBM Qライブラリーは暗号化できません。ASP2にユーザー出力待ち行列のライブラリーを作成します。WRKSYSVAL QSYSLIBLを使用して、QUSRSYSより前になるように、このライブラリーをシステム ライブラリー リストに追加します。CRTOUTQを使用して、暗号化が必要なすべての出力待ち行列について、この新たなライブラリーにそれらを作成します。MOVSPLFBRMを使用して、スプール ファイルを新たな出力待ち行列へ移動します。OUTQ設定が暗号化されたライブラリー内の出力待ち行列になるようにすべてのユーザー プロファイルを変更にします。PRINTER設定だけの場合は、暗号化することができないライブラリーQUSRSYSのプリンターと同じ名前の出力待ち行列に送られます。WRKJOBQを使用して、ジョブ待ち行列にスケジュールされたジョブ(実行時ではなく投入時に、ユーザー出力待ち行列を検索)がないかチェックします。ハードコーディングされた出力待ち行列がないかソース コードをスキャンして、アプリケーション セットアップ領域をチェックすることが必要となる場合もあるかもしれません。新たな暗号化された出力待ち行列から印刷装置書き出しプログラムを開始するように、スタートアップ プログラムを変更します。暗号化する必要があるスプール ファイルがないか、暗号化されていない出力待ち行列を監視します。暗号化された出力待ち行列へ出力を入れるように、ソースコード、ジョブ記述、またはユーザー プロファイルに対する変更を必要とする具体的なジョブが見つかるかもしれません。
暗号化に先立って出力待ち行列を消去したい場合は、IBMのDelete Old Spool Files(古いスプール ファイルの削除)サンプル プログラム:http://www-01.ibm.com/support/docview.wss?uid=nas8N1019285を参照してください。
そのプログラムを使用する場合は、メッセージ待ち行列転送を80より高い重大度に変更してください。そうしないと、スプール ファイルの削除のたびにブレーク メッセージを受け取ることになります。
CHGMSGQ MSGQ(*USRPRF) DLVRY(*BREAK) SEV(85)
DLTOLDSPLF USRPRFNME(*ALL) OUTQUEUE(QUSRSYS/myoutq) DELETEDATE('12/31/2017')
または、満了スプール ファイルの削除コマンド(DLTEXPSPLF)もありますが、このコマンドは、スプール ファイル作成前にデフォルトの満了期限を変更した場合にのみ機能します。
テストを重ねる
テスト用LPARでこれらのプロセスを行いながら、しっかりとメモを取ってください。
ライブラリーおよびIFSフォルダーの暗号が完了したら、すべてのアプリケーションのテストを行ってください。
本番
本番LPARの暗号化のための計画を練ります。暗号化されていないASPから暗号化されたASPへのディスクの移動を複数回繰り返すのに掛かる時間も計算に入れる必要があるかもしれません。本番システムの利用状況、人員、およびディスク領域によっては、たとえば、ジャーナルやPFとLFの依存関係を基にグループ分けして暗号化したり、IFSフォルダーは別にするなど、いくつかの段階に分けて、数日間掛けて夜間に、あるいは週末に実施するようにする必要があるかもしれません。
オブジェクト新規作成のポリシーを徹底させる
新たなライブラリー、ファイル、IFSフォルダー、IFSファイルまたは出力待ち行列を作成できるすべてのユーザーに対して、顧客非公開情報を含んでいる可能性があるものはすべて暗号化されたASPに置く、ということの重要性と、そのためのプロセスを認識させることが大事です。
関連事項:
ニューヨーク州のサイバーセキュリティ規制: https://dfs.ny.gov/legal/regulations/adoptions/dfsrf500txt.pdf
Tom Woolaway氏は、IBM i およびその前身であるiSeries、AS400、System/38の管理者およびプログラマーとして20年を超える経験を有しています。メーカー2社に勤務し、より大きな企業によって買収されるまでの計16年間、グローバルITディレクターの職を務め、買収したメーカー40社のIT統合を主導してきました。ペンシルベニア州立大学でコンピューター サイエンスのBS(理学士)の学位を取得しており、現在は、金融、保険、年金業界で仕事をしています。連絡先は、tom.woolaway@gmail.comです。