Catalog を読む
最初のモデル Catalog は、管理策の一覧です。NIST の CSF 2.0 OSCAL ファイルを開き、付帯情報と管理策の並びを読んでみましょう。
このセクションを終えるとできること
- Catalog とは何かを説明できる。
- Catalog モデルの付帯情報(catalog、uuid、metadata)の各項目が何を表すかを読み取れる。
- CSF 2.0 の OSCAL ファイルで、Function、Category、Subcategory がどう入れ子になっているかを読み取れる。
Catalog というモデル
OSCAL の 8 つのモデルのうち、最初に扱うのは Catalog です。
Catalog は、管理策の一覧を書き表すモデルです。管理策(Control)とは、守るべきセキュリティのルール 1 件分を指す言葉です。例えば、「パスワードは 12 文字以上にする」「入退室を記録する」のような 1 件 1 件が管理策で、それを束ねた文書が Catalog です。
この形になる文書は、身の回りにいくつもあります。NIST CSF 2.0 や ISO/IEC 27001 の附属書 A のような規格も、自社の情報セキュリティ規程集も、中身は「守るべきことの一覧」であり、Catalog モデルで表現できます。規格を作る団体も、企業の情報システム部も、管理策の一覧を書くときは同じ Catalog というモデルを使います。
NIST が公開している CSF 2.0 の OSCAL ファイル
いきなり Catalog モデルを書いてみるのは大変なので、まず実物を読んでみましょう。題材は、NIST 自身が公開している CSF 2.0 の OSCAL 版ファイルです。NIST は公式の OSCAL ファイル置き場(usnistgov/oscal-content というウェブページ)で、CSF 2.0 や SP 800-53 といった規格の OSCAL 版を無償で公開しています。
今回読むのは、その中の NIST_CSF_v2.0_catalog.yaml です。CSF 2.0 の全文が入った YAML ファイルで、全体で 5,328 行あります。本文は英語です(CSF 2.0 には IPA の日本語訳がありますが、OSCAL 版ファイルは英語のみです)。
5,328 行と聞くと長く感じますが、通読するものではありません。この章では、ファイルの付帯情報と、管理策が並ぶ構造に注目して読みます。この 2 つが分かれば、残りの 5,000 行は同じ形の繰り返しです。
ファイルの付帯情報:catalog、uuid、metadata
ファイルの冒頭は、以下のように始まっています。長い部分は # …略… で畳んであります(以降の抜粋も同じです)。
catalog:
uuid: 720a010b-253c-4a94-bb65-cb58400966f5
metadata:
title: Electronic Version of NIST Cybersecurity Framework 2.0
published: "2026-05-13T12:30:00-00:00"
last-modified: "2026-05-11T16:01:09.00000-00:00"
version: 1.2.0
oscal-version: v1.2.2
# …略…
groups:
# …略…見た目は、前のセクションまでに読み書きした YAML と同じです。キーと値の組があり、インデントで入れ子になっています。
ただし、違いが 1 つあります。朝食や買い物リストではキーを自分で決めましたが、OSCAL ではキーが英語で決められています。catalog も uuid も metadata も、書き手が自由選んだ名前ではなく、OSCAL の仕様で決まっている名前なのです。決められた名前を使うからこそ、誰が書いたファイルでも、コンピュータは同じ手順で読み取れます。
上から順に読んでみます。
いちばん外側の catalog: は、「このファイルは Catalog モデルで書かれている」という宣言です。OSCAL ファイルは必ず、モデル名を表す項目 1 つで、それ以下の全体を包みます。
uuid は、このファイルの「この版」を指す識別番号です。世界で一つだけになるよう設計された長い番号で、中身を書き換えて新しい版として保存するたびに、新しい番号を付け直します。同じ番号のまま中身だけ変える、という使い方はしません。
metadata は、文書についての基本情報の置き場です。規程文書でいえば、表紙にある「文書名・改定日・版」にあたります。抜粋に見えている 5 つに注目してみましょう。
| 項目 | 意味 | この文書での値 |
|---|---|---|
title | 文書名 | CSF 2.0 の電子版 |
published | 公開した日時 | 2026 年 5 月 13 日 |
last-modified | 最後に更新した日時 | 2026 年 5 月 11 日 |
version | この文書自体の版 | 1.2.0 |
oscal-version | このファイルが従う OSCAL 仕様の版 | v1.2.2 |
version と oscal-version は取り違えやすい組です。version は「この文書を何回改定したか」を表す、文書自身の版です。oscal-version は「どの版の OSCAL 仕様に沿って書いたか」で、文書を改定しても、従う仕様が同じなら変わりません。
日時が "2026-05-13T12:30:00-00:00" という形なのは、ISO 8601 という、日時を国際的に揃えて書くための決まりに従った表記を採用しているからです。日付と時刻を T でつなぎ、末尾に時差を付けます。コロンを含む紛らわしい値なので、ダブルクオートで囲まれています。前のセクションで覚えた囲み方が、実物でも同じように使われています。
管理策の階層:groups の中の controls
付帯情報の次は中身です。groups: の下から、管理策の一覧が始まります。
読む前に、CSF 2.0 側の言葉を 3 つ確認します。CSF 2.0 は管理策を 3 階層で整理しています。いちばん大きな区分が Function(機能)で、統治(GOVERN)、識別(IDENTIFY)、防御(PROTECT)、検知(DETECT)、対応(RESPOND)、復旧(RECOVER)の 6 つです。Function の中に Category(カテゴリー)が全部で 22 個、その中に Subcategory(サブカテゴリー)が全部で 106 個あり、守るべきこと 1 件分、つまり管理策にあたるのはこの Subcategory です。
この 3 階層が、OSCAL ファイルでは次のように書かれています。
groups:
- id: GV
class: function
title: GOVERN
# …略…
controls:
- id: GV.OC
class: category
title: Organizational Context
# …略…
controls:
- id: GV.OC-01
class: subcategory
title: GV.OC-01
# …略…
- id: GV.OC-02
class: subcategory
title: GV.OC-02
# …略…groups は管理策をまとめる章のような入れ物で、controls が管理策の一覧です。1 つの group や control は、ハイフンで始まるリストの 1 件として書かれています。それぞれが id(識別子)と title(名前)を持ちます。
入れ子の形に注目してください。Function(GV)だけが group で、Category(GV.OC)は controls の 1 件、Subcategory(GV.OC-01)はさらにその control の中の controls の 1 件です。「3 階層だから group を 3 段重ねる」のではなく、control の中に control を入れて階層を作っています。
class は、その要素の種別を機械に伝えるための項目です。GV も GV.OC も GV.OC-01 も、ファイルの構造上は同じ「group か control」ですが、class の値(function / category / subcategory)を見れば、コンピュータはどの階層の要素かを判別できます。たとえば「category だけを抜き出して一覧にする」という処理が、この値のおかげで機械的にできます。
# …略… で畳んだ部分には、管理策の本文や、機械向けの補足情報が入っています。
読み取り演習
今まで学んだ内容をもとに、下記の問題に挑戦してみましょう。
metadata に version: 1.2.0 と oscal-version: v1.2.2 の 2 つがあります。この 2 つの説明として正しいものはどれですか。
管理策 GV.OC-01 は、ファイルの中のどこに置かれていますか。
CSF 2.0 の OSCAL ファイルで、group という入れ物が使われているのはどの階層ですか。
次へ
CSF 2.0 の実物から、Catalog の付帯情報と管理策の階層構造を読み取りました。次のセクションでは、同じ形を自分の手で書きます。題材はミナト精機の情報セキュリティ社内基準です。Word の規程集に並ぶ条文を、小さな Catalog にするところから始めます。
このセクションは OSCAL 1.2.2 系の仕様に基づいて執筆しています。