5.2. コンプライアンス Operator のスキャン

ScanSetting および ScanSettingBinding API は、コンプライアンス Operator でコンプライアンススキャンを実行するために使用することが推奨されます。これらの API オブジェクトの詳細については、以下を実行します。

$ oc explain scansettings

または、以下を実行します。

$ oc explain scansettingbindings

5.2.1. コンプライアンススキャンの実行

Center for Internet Security (CIS) プロファイルを使用してスキャンを実行できます。便宜上、コンプライアンス Operator は起動時に適切なデフォルト値を持つ ScanSetting オブジェクトを作成します。この ScanSetting オブジェクトの名前は default です。

手順

  1. 以下を実行して ScanSetting オブジェクトを検査します。

    $ oc describe scansettings default -n openshift-compliance

    出力例

    apiVersion: compliance.openshift.io/v1alpha1
    kind: ScanSetting
    metadata:
      name: default
      namespace: openshift-compliance
    rawResultStorage:
      pvAccessModes:
      - ReadWriteOnce 1
      rotation: 3 2
      size: 1Gi 3
    roles:
    - worker 4
    - master 5
    scanTolerations: 6
    - effect: NoSchedule
      key: node-role.kubernetes.io/master
      operator: Exists
    schedule: 0 1 * * * 7

    1
    コンプライアンス Operator は、スキャンの結果が含まれる永続ボリューム (PV) を作成します。デフォルトで、コンプライアンス Operator はクラスターに設定されるストレージクラスについて何らかの仮定をすることができないため、PV はアクセスモード ReadWriteOnce を使用します。さらに、ReadWriteOnce アクセスモードはほとんどのクラスターで利用できます。スキャン結果を取得する必要がある場合は、ボリュームもバインドするヘルパー Pod を使用して実行できます。ReadWriteOnce アクセスモードを使用するボリュームは、一度に 1 つの Pod のみがマウントできるため、必ずヘルパー Pod を削除してください。そうでない場合は、コンプライアンス Operator は後続のスキャンのためにボリュームを再利用できません。
    2
    コンプライアンス Operator は、後続の 3 つのスキャンの結果をボリュームに保持し、古いスキャンはローテーションされます。
    3
    コンプライアンス Operator はスキャンの結果用に 1 GB のストレージを割り当てます。
    4 5
    スキャン設定がクラスターノードをスキャンするプロファイルを使用する場合は、これらのノードロールをスキャンします。
    6
    デフォルトのスキャン設定オブジェクトはコントロールプレーンノード (別名マスターノード) もスキャンします。
    7
    デフォルトのスキャン設定オブジェクトは、毎日 01:00 にスキャンを実行します。

    デフォルトのスキャン設定の代わりに、以下の設定を含む default-auto-apply を使用できます。

    apiVersion: compliance.openshift.io/v1alpha1
    kind: ScanSetting
    metadata:
      name: default-auto-apply
      namespace: openshift-compliance
    autoUpdateRemediations: true 1
    autoApplyRemediations: true 2
    rawResultStorage:
      pvAccessModes:
        - ReadWriteOnce
      rotation: 3
      size: 1Gi
    schedule: 0 1 * * *
    roles:
      - worker
      - master
    scanTolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
        operator: Exists
    1 2
    autoUpdateRemediations および autoApplyRemediations フラグを true に設定すると、追加の手順なしに自動修復する ScanSetting オブジェクトを簡単に作成できます。
  2. デフォルトの ScanSetting オブジェクトにバインドし、cis および cis-node プロファイルを使用してクラスターをスキャンする ScanSettingBinding オブジェクトを作成します。以下は例になります。

    apiVersion: compliance.openshift.io/v1alpha1
    kind: ScanSettingBinding
    metadata:
      name: cis-compliance
    profiles:
      - name: ocp4-cis-node
        kind: Profile
        apiGroup: compliance.openshift.io/v1alpha1
      - name: ocp4-cis
        kind: Profile
        apiGroup: compliance.openshift.io/v1alpha1
    settingsRef:
      name: default
      kind: ScanSetting
      apiGroup: compliance.openshift.io/v1alpha1
  3. 以下を実行して ScanSettingBinding オブジェクトを作成します。

    $ oc create -f <file-name>.yaml -n openshift-compliance

    プロセスのこの時点で、ScanSettingBinding オブジェクトは調整され、Binding および Bound 設定に基づいて調整されます。コンプライアンス Operator は ComplianceSuite オブジェクトおよび関連付けられる ComplianceScan オブジェクトを作成します。

  4. 以下を実行してコンプライアンススキャンの進捗を確認します。

    $ oc get compliancescan -w -n openshift-compliance

    スキャンはスキャンフェーズに進み、完了すると最終的に DONE フェーズに移行します。ほとんどの場合、スキャンの結果は NON-COMPLIANT になります。スキャン結果を確認し、クラスターがコンプライアンスに基づくように修復の適用を開始することができます。詳細は、コンプライアンス Operator 修復の管理について参照してください。