検索

第7章 Clair セキュリティースキャン

download PDF

Clair は、Red Hat Quay と共に使用できるマイクロサービスのセットで、一連の Linux オペレーティングシステムに関連付けられたコンテナーイメージの脆弱性スキャンを実行します。Clair のマイクロサービス設計は、エンタープライズ環境に合わせてコンポーネントを個別に拡張できるような、高いスケーラビリティーを持った設定で実行するのに適しています。

クレアは、以下の脆弱性データベースを利用して、お客様のイメージの問題点をスキャンします。

  • アルパイン SecDB データベース
  • AWS UpdateInfo
  • Debian Oval データベース
  • Oracle Oval データベース
  • RHEL Oval データベース
  • SUSE Oval データベース
  • Ubuntu Oval データベース
  • Pyup.io (python) データベース

Clair が異なるデータベースとのセキュリティーマッピングを行う方法については、ClairCore Severity Mapping を参照してください。

注記

Red Hat Quay 3.4 のリリースに伴い、以前の Clair V2 (image quay.io/redhat/clair-jwt) が新しい Clair V4 (image registry.redhat.io/quay/clair-rhel8) に完全に置き換わりました。V4 の更新中に V2 をリードオンリーモードで動作させる方法は以下を参照してください。

7.1. Red Hat Quay OpenShift デプロイメントでの Clair の設定

7.1.1. Quay Operator によるデプロイ

OpenShift 上の新しい Red Hat Quay デプロイメントに Clair V4 をセットアップするには、Quay Operator を使用することを強くお勧めします。デフォルトでは、Quay Operator は、Red Hat Quay のデプロイとともに Clair のデプロイメントをインストールまたはアップグレードし、Clair のセキュリティースキャンを自動的に設定します。

7.1.2. 手動で Clair をデプロイ

Clair V2 を実行している既存の Red Hat Quay OpenShift デプロイメントに Clair V4 を設定するには、まず Red Hat Quay が少なくともバージョン 3.4.0 にアップグレードされていることを確認します。その後、以下の手順で Clair V4 を Clair V2 と一緒に手動で設定します。

  1. 現在のプロジェクトを、Red Hat Quay が実行されているプロジェクトの名前に設定します。以下に例を示します。

    $ oc project quay-enterprise
  2. Clair v4 用の Postgres デプロイファイル (例: clairv4-postgres.yaml) を以下のように作成します。

    clairv4-postgres.yaml

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: clairv4-postgres
      namespace: quay-enterprise
      labels:
        quay-component: clairv4-postgres
    spec:
      replicas: 1
      selector:
        matchLabels:
          quay-component: clairv4-postgres
      template:
        metadata:
          labels:
            quay-component: clairv4-postgres
        spec:
          volumes:
            - name: postgres-data
              persistentVolumeClaim:
                claimName: clairv4-postgres
          containers:
            - name: postgres
              image: postgres:11.5
              imagePullPolicy: "IfNotPresent"
              ports:
                - containerPort: 5432
              env:
                - name: POSTGRES_USER
                  value: "postgres"
                - name: POSTGRES_DB
                  value: "clair"
                - name: POSTGRES_PASSWORD
                  value: "postgres"
                - name: PGDATA
                  value: "/etc/postgres/data"
              volumeMounts:
                - name: postgres-data
                  mountPath: "/etc/postgres"
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: clairv4-postgres
      labels:
        quay-component: clairv4-postgres
    spec:
      accessModes:
        - "ReadWriteOnce"
      resources:
        requests:
          storage: "5Gi"
        volumeName: "clairv4-postgres"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: clairv4-postgres
      labels:
        quay-component: clairv4-postgres
    spec:
      type: ClusterIP
      ports:
        - port: 5432
          protocol: TCP
          name: postgres
          targetPort: 5432
      selector:
        quay-component: clairv4-postgres

  3. 以下のように、postgres データベースをデプロイします。

    $ oc create -f ./clairv4-postgres.yaml
  4. Clair v4 で使用する Clair config.yaml ファイルを作成します。以下に例を示します。

    config.yaml

    introspection_addr: :8089
    http_listen_addr: :8080
    log_level: debug
    indexer:
      connstring: host=clairv4-postgres port=5432 dbname=clair user=postgres password=postgres sslmode=disable
      scanlock_retry: 10
      layer_scan_concurrency: 5
      migrations: true
    matcher:
      connstring: host=clairv4-postgres port=5432 dbname=clair user=postgres password=postgres sslmode=disable
      max_conn_pool: 100
      run: ""
      migrations: true
      indexer_addr: clair-indexer
    notifier:
      connstring: host=clairv4-postgres port=5432 dbname=clair user=postgres password=postgres sslmode=disable
      delivery: 1m
      poll_interval: 5m
      migrations: true
    auth:
      psk:
        key: MTU5YzA4Y2ZkNzJoMQ== 1
        iss: ["quay"]
    # tracing and metrics
    trace:
      name: "jaeger"
      probability: 1
      jaeger:
        agent_endpoint: "localhost:6831"
        service_name: "clair"
    metrics:
      name: "prometheus"

    1
    Clair の PSK (pre-shared key) を生成するには、ユーザーインターフェイスの Security Scanner セクションで scanning を有効にし、Generate PSK をクリックします。

Clair の設定フォーマットの詳細は、アップストリームの Clair ドキュメント に記載されています。

  1. Clair の config.yaml からシークレットを作成します。

    $ oc create secret generic clairv4-config-secret --from-file=./config.yaml
  2. Clair v4 のデプロイメントファイル (例: clair-combo.yaml) を作成し、必要に応じて修正します。

    clair-combo.yaml

    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      labels:
        quay-component: clair-combo
      name: clair-combo
    spec:
      replicas: 1
      selector:
        matchLabels:
          quay-component: clair-combo
      template:
        metadata:
          labels:
            quay-component: clair-combo
        spec:
          containers:
            - image: registry.redhat.io/quay/clair-rhel8:v3.5.7  1
              imagePullPolicy: IfNotPresent
              name: clair-combo
              env:
                - name: CLAIR_CONF
                  value: /clair/config.yaml
                - name: CLAIR_MODE
                  value: combo
              ports:
                - containerPort: 8080
                  name: clair-http
                  protocol: TCP
                - containerPort: 8089
                  name: clair-intro
                  protocol: TCP
              volumeMounts:
                - mountPath: /clair/
                  name: config
          imagePullSecrets:
            - name: redhat-pull-secret
          restartPolicy: Always
          volumes:
            - name: config
              secret:
                secretName: clairv4-config-secret
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: clairv4 2
      labels:
        quay-component: clair-combo
    spec:
      ports:
        - name: clair-http
          port: 80
          protocol: TCP
          targetPort: 8080
        - name: clair-introspection
          port: 8089
          protocol: TCP
          targetPort: 8089
      selector:
        quay-component: clair-combo
      type: ClusterIP

    1
    イメージを最新のクレアのイメージ名とバージョンに変更します。
    2
    サービスを clairv4 に設定すると、Clair v4 のスキャナーエンドポイントは、Red Hat Quay の config.yaml の SECURITY_SCANNER_V4_ENDPOINT に以下のように入力します。 http://clairv4.
  3. 以下のように Clair v4 の配置を作成します。

    $ oc create -f ./clair-combo.yaml
  4. Red Hat Quay 配置の config.yaml ファイルを変更して、最後に以下のエントリーを追加します。

    FEATURE_SECURITY_SCANNER: true
    SECURITY_SCANNER_V4_ENDPOINT: http://clairv4 1
    1
    Clair v4 サービスのエンドポイントの特定
  5. 修正した config.yaml を、そのファイルを含むシークレット (たとえば quay-enterprise-config-secret) に再デプロイします。

    $ oc delete secret quay-enterprise-config-secret
    $ oc create secret generic quay-enterprise-config-secret --from-file=./config.yaml
  6. 新しい config.yaml を有効にするには、Red Hat Quay の Pod を再起動する必要があります。quay-app の Pod を削除するだけで、更新された設定の Pod がデプロイされます。

この時点で、名前空間のホワイトリストで特定された組織のイメージは、Clair v4 によってスキャンされます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.