メインコンテンツへ
Section 06第2部 Control Layer

Catalog の階層を書く

CSF 2.0 の 3 階層(Function、Category、Subcategory)を、group と入れ子の controls で書いてみましょう。

  • Function、Category、Subcategory の 3 階層を、group と入れ子の controls で書ける。
  • 管理策の本文を parts の statement として書ける。
  • props(sort-id、label)が何のためにあるかを説明できる。

前のセクションで作った社内基準カタログは、catalog のすぐ下に管理策が並ぶ平らな形でした。この章では、CSF 2.0 が持つ 3 階層の形を自分の手で書きます。

作るのは「CSF 2.0 抜粋カタログ(日本語)」という新しいファイルです。統治(GOVERN)の一部分だけを抜き出し、本文をこの講座独自の短い日本語訳にした、学習用の小さなカタログです。id や構造は公式ファイルと同じにします。id まで日本語にしたり独自に付け替えたりすると、公式の CSF 2.0 と突き合わせるときに対応が取れなくなるからです。

Function を入れる group

まず、いちばん外側の階層です。CSF 2.0 の流儀では、Function だけを group で表します。group が持つ項目は control とよく似ています。

項目役割GOVERN での値
id識別子GV(公式のまま)
class階層の種別を機械に伝える値function
title名前統治(GOVERN)

YAML では、groups リストの 1 件になります。

catalog:
  uuid: a7e2d4b9-1c3f-4a6e-9b8d-2f4e6a8c0d1b
  metadata:
    # …略…
  groups:
    - id: GV
      class: function
      title: 統治(GOVERN)

Category と Subcategory:controls の入れ子

Function の内側は、CSF 2.0 の実物で読んだとおりです。Category は group の中の controls の 1 件として、Subcategory はその control の中の controls の 1 件として書きます。class の値は Category が category、Subcategory が subcategory です。

もう 1 つ、実物で見た流儀を思い出してください。Subcategory の title は GV.OC-01 という識別子そのものでした。CSF 2.0 の Subcategory には「パスワードの管理」のような短い名前が付いておらず、内容は 1 文の本文だけです。title に入れられる名前がないので、識別子をそのまま置く。これが公式ファイルの書き方で、抜粋カタログでも同じにします。本文をどこに書くかは、この次の節で扱います。

クイズ(コードを書く)

GV の中に controls を作り、Category「組織の状況」(id: GV.OC)と、その中の Subcategory(id: GV.OC-01)を、骨組み(id、class、title)だけ書き足してください。class と title の付け方は、ここまでの説明から自分で決めてください。

本文の置き場所:parts と statement

骨組みができたので、管理策の本文を入れていきましょう。CSF 2.0 の実物で # …略… と畳んでいた部分の正体がこれで、本文は parts という入れ物に置かれています。

part 1 件が持つ項目は 3 つです。

項目役割GV.OC-01 の本文での値
idpart の識別子。「管理策の id + アンダースコア + 種類」の形が慣例GV.OC-01_statement
namepart の種類。管理策の本文は statementstatement
prose文章そのもの組織のミッションが理解され、……

YAML では、control の中にこう入ります。

            - id: GV.OC-01
              class: subcategory
              title: GV.OC-01
              parts:
                - id: GV.OC-01_statement
                  name: statement
                  prose: 組織のミッションが理解され、サイバーセキュリティリスクマネジメントの指針になっている

なぜ title に直接書かず、parts を経由するのか。title は 1 行の名前しか持てませんが、parts はリストなので、本文のほかに補足や例を何件でも並べられるからです。管理策 1 件に付く文章は本文だけとは限らず、その置き場を最初から複数持てる形にしてあります。name はその 1 件 1 件の種類を表し、「本文」を意味する statement のほかにも何種類かあります。この章では statement ともう 1 つ、Function の概要文を扱います。

クイズ(コードを書く)

GV.OC-01 に本文を書き足してください。本文は「組織のミッションが理解され、サイバーセキュリティリスクマネジメントの指針になっている」。part の id は、命名の慣例から自分で組み立ててみてください。

本文の置き場所は、Subcategory だけのものではありません。Category にも「このカテゴリーは何についてのまとまりか」を述べる statement があり、Function には name が overview の概要文があります。形は同じ parts です。

    - id: GV
      class: function
      title: 統治(GOVERN)
      parts:
        - id: GV_overview
          name: overview
          prose: 組織のサイバーセキュリティリスクマネジメントの戦略、期待、方針が確立され、伝達され、監視されている

ここまでの形が身に付いたか、Subcategory をもう 1 件、全部自分で組み立てて確かめてください。

クイズ(コードを書く)

GV.OC-02 を丸ごと書き足してください。本文は「組織の内外の利害関係者が把握され、サイバーセキュリティリスクマネジメントに関する利害関係者のニーズと期待が理解され、考慮されている」。class、title、part の id は自分で考えてみましょう。

機械が読むためのしるし:props

実物の畳んだ部分には、もう 1 種類、props という項目が入っていました。props は「名前と値の組」を並べる場所で、コンピュータが値を直接引き出すための短いしるしを管理策に付けておけます。CSF 2.0 が各要素に付けている props は、主に次の 2 つです。

name役割GV.OC-01 での value
sort-id並べ替え専用の値00001.00001.00001
label画面表示用のラベルGV.OC-01
            - id: GV.OC-01
              class: subcategory
              title: GV.OC-01
              props:
                - name: sort-id
                  value: 00001.00001.00001
                - name: label
                  value: GV.OC-01
              parts:
                # …略…

sort-id は、管理策を正しい順に並べ替えるための値です。id は識別のための文字列であって、並べ替えのために設計されていません。桁を揃えた数字だけの値を別に持っておけば、表示する際に、文字順に並べるだけで規格どおりの順序を再現できます。

label は、一覧や画面に表示するときのラベルです。値は id と同じ GV.OC-01 で、二度手間に見えますが、id は「参照をつなぐための値」、label は「人に見せるための値」と役割が分かれています。表示用の文字列は props から取り出す、という前提で作られたツールが多いので、公式ファイルは両方を持たせています。

なお、Function の sort-id は "00001" のようにダブルクオートで囲まれています。数字だけの値は数と取り違えられるからで、GV.OC-01 の 00001.00001.00001 はピリオドを含むため、そのままでも文字列として解釈されます。

ここまでの完成形

統治(GOVERN)の抜粋に、props まで含めた完成形です。これが「CSF 2.0 抜粋カタログ(日本語)」の現在地になります。

catalog:
  uuid: a7e2d4b9-1c3f-4a6e-9b8d-2f4e6a8c0d1b
  metadata:
    title: NIST CSF 2.0 抜粋カタログ(日本語)
    last-modified: "2026-07-05T09:00:00+09:00"
    version: "1.0.0"
    oscal-version: "1.2.2"
  groups:
    - id: GV
      class: function
      title: 統治(GOVERN)
      props:
        - name: sort-id
          value: "00001"
        - name: label
          value: GOVERN (GV)
      parts:
        - id: GV_overview
          name: overview
          prose: 組織のサイバーセキュリティリスクマネジメントの戦略、期待、方針が確立され、伝達され、監視されている
      controls:
        - id: GV.OC
          class: category
          title: 組織の状況
          props:
            - name: sort-id
              value: "00001.00001"
            - name: label
              value: Organizational Context (GV.OC)
          parts:
            - id: GV.OC_statement
              name: statement
              prose: 組織のサイバーセキュリティリスクマネジメントの判断を取り巻く状況(ミッション、利害関係者の期待、依存関係、法規制や契約上の要求事項)が理解されている
          controls:
            - id: GV.OC-01
              class: subcategory
              title: GV.OC-01
              props:
                - name: sort-id
                  value: 00001.00001.00001
                - name: label
                  value: GV.OC-01
              parts:
                - id: GV.OC-01_statement
                  name: statement
                  prose: 組織のミッションが理解され、サイバーセキュリティリスクマネジメントの指針になっている
            - id: GV.OC-02
              class: subcategory
              title: GV.OC-02
              props:
                - name: sort-id
                  value: 00001.00001.00002
                - name: label
                  value: GV.OC-02
              parts:
                - id: GV.OC-02_statement
                  name: statement
                  prose: 組織の内外の利害関係者が把握され、サイバーセキュリティリスクマネジメントに関する利害関係者のニーズと期待が理解され、考慮されている

label の値(GOVERN (GV) など)は公式ファイルの表記をそのまま使っています。並べ替えや表示のために機械が引く値なので、訳さずに揃えておくのが安全です。

理解の確認

クイズ

GV.OC-01 の title が、識別子と同じ GV.OC-01 になっているのはなぜですか。

クイズ

id があるのに、並べ替え専用の sort-id を別に持っているのはなぜですか。

次へ

3 階層と本文、機械向けのしるしまで書けるようになりました。次のセクションは Catalog の仕上げです。本文を補う実装例のパートを足し、2 つ目の Function を組み立て、公式の CSF 2.0 ファイルと突き合わせます。最後に、宿題にしてきた社内基準カタログの本文も片づけます。

このセクションは OSCAL 1.2.2 系の仕様に基づいて執筆しています。