Red Hat Quay 上的 Clair 进行漏洞报告

Red Hat Quay 3

Red Hat Quay 上的 Clair 进行漏洞报告

Red Hat OpenShift Documentation Team

摘要

Red Hat Quay 入门

前言

本指南中的内容概述了 Red Hat Quay 的 Clair、在独立 Red Hat Quay 和 Operator 部署和高级 Clair 配置上运行 Clair。

部分 I. Red Hat Quay 概述使用 Clair 进行漏洞报告

本指南中的内容解释了 Red Hat Quay 上 Clair 的关键目的和概念。它还包含有关 Clair 发行版本和官方 Clair 容器位置的信息。

第 1 章 Clair for Red Hat Quay

Clair v4 (Clair)是一个开源应用程序,它利用静态代码分析来解析镜像内容和报告影响内容的漏洞。Clair 与 Red Hat Quay 打包,并可用于独立和 Operator 部署。它可以在高度可扩展的配置中运行,其中组件可根据企业环境单独扩展。

1.1. Clair 安全漏洞数据库

Clair 使用以下漏洞数据库来报告您的镜像中的问题:

  • Ubuntu Oval 数据库
  • Debian Oval 数据库
  • Red Hat Enterprise Linux (RHEL) Oval 数据库
  • Dan Oval 数据库
  • Oracle Oval 数据库
  • alpine SecDB 数据库
  • VMware Photon OS 数据库
  • Amazon Web Services (AWS) UpdateInfo
  • Pyup.io (Python)数据库

有关 Clair 如何使用不同数据库进行安全映射的详情,请参考 ClairCore严重性映射

第 2 章 Clair 概念

以下小节概述了 Clair 的工作原理。

2.1. 实践中的 Clair

Clair 分析分为三个不同的部分:索引、匹配和通知。

2.1.1. 索引

Clair 的索引器服务负责索引清单。在 Clair 中,清单是容器镜像的表示。indexer 服务是 Clair 用来了解层内容的组件。Clair 利用了开放容器项目(OCI)清单和层已解决,以减少重复工作。

索引涉及使用一个代表容器镜像的清单并计算其一致性部分。索引器会尝试发现镜像中存在哪些软件包、从中派生镜像的发布,以及镜像中使用哪些软件包存储库。计算此信息时,它将保持在 IndexReport 中。

IndexReport 存储在 Clair 的数据库中。它可以被限制为一个 匹配器 节点来计算漏洞报告。

2.1.1.1. 内容地址

Clair 将所有清单和层视为 可寻址的内容。在 Clair 中,内容地址意味着,当特定清单被索引时,除非需要它,否则不会再次索引它。这对单个层相同。

例如,考虑 registry 中有多少镜像可能会使用 ubuntu:artful 作为基础层。如果开发人员更喜欢从 Ubuntu 中捆绑其镜像,则可能是大多数镜像。将层和清单视为可寻址的内容意味着 Clair 仅获取并分析基础层。

在某些情况下,Clair 应该重新索引清单。例如,当更新软件包扫描程序等内部组件时,Clair 会使用新的软件包扫描程序执行分析。Clair 有足够的信息来确定组件已更改,并且 IndexReport 可能会与第二个时间不同,因此它重新索引清单。

客户端可以跟踪 Clair 的 index_state 端点,以了解内部组件何时更改,从而可以重新索引问题。请参阅 Clair API 指南以了解如何查看 Clair 的 API 规格。

2.1.2. 匹配

使用 Clair 时,匹配器节点负责与提供的 IndexReport 匹配漏洞。

匹配者负责保持漏洞数据库最新。匹配者通常会运行一组更新程序,这些更新程序定期将其数据源探测到新内容。发现新漏洞时,会将其存储在数据库中。

matcher API 设计为经常使用。它设计为在查询时始终提供最新的 VulnerabilityReportVulnerabilityReport 总结了清单的内容以及影响内容的所有漏洞。

2.1.2.1. 远程匹配

远程匹配程序的行为类似于匹配者,但远程匹配者使用 API 调用来获取提供的 IndexReport 的漏洞数据。当无法将给定源中的数据保留到数据库中时,远程匹配者很有用。

CRDA 远程匹配程序负责从 Red Hat Code Ready Dependency Analytics (CRDA)获取漏洞。默认情况下,这个匹配程序每分钟提供 100 个请求。速率限制可以通过请求专用的 API 密钥来取消,该密钥通过提交 API 密钥请求表单 来完成。

要启用 CRDA 远程匹配,请参阅 "Enabling CRDA for Clair"。

2.1.3. 通知

Clair 使用一个通知程序服务来跟踪新的安全数据库更新,并通知用户是否有新的或删除的漏洞是否影响索引的清单。

当 notifier 知道影响之前索引清单的新漏洞时,它使用 config.yaml 文件中配置的方法来提供有关新更改的通知。返回的通知表示因为变化而发现的最严重漏洞。这可避免为同一安全数据库更新创建过量通知。

当用户收到通知时,它会针对匹配者发出一个新的请求,以接收最新的漏洞报告。

通知模式是以下类型的 JSON marshalled 表单:

// Reason indicates the catalyst for a notification
type Reason string
const (
    Added   Reason = "added"
    Removed Reason = "removed"
    Changed Reason = "changed"
)
type Notification struct {
    ID            uuid.UUID        `json:"id"`
    Manifest      claircore.Digest `json:"manifest"`
    Reason        Reason           `json:"reason"`
    Vulnerability VulnSummary      `json:"vulnerability"`
}
type VulnSummary struct {
    Name           string                  `json:"name"`
    Description    string                  `json:"description"`
    Package        *claircore.Package      `json:"package,omitempty"`
    Distribution   *claircore.Distribution `json:"distribution,omitempty"`
    Repo           *claircore.Repository   `json:"repo,omitempty"`
    Severity       string                  `json:"severity"`
    FixedInVersion string                  `json:"fixed_in_version"`
    Links          string                  `json:"links"`
}

您可以通过以下机制订阅通知:

  • Webhook 交付
  • AMQP 交付
  • STOMP 交付

配置通知程序是通过 Clair YAML 配置文件完成的。

2.1.3.1. Webhook 交付

当您为 webhook 交付配置通知程序时,您可以使用以下信息提供以下信息:

当确定了更新的安全数据库已更改时,它会为配置的目标提供以下 JSON 正文:

{
  "notification_id": {uuid_string},
  "callback": {url_to_notifications}
}

在接收时,服务器可以浏览到 callback 字段中提供的 URL。

2.1.3.2. AMQP 交付

Clair 通知程序还支持向 AMQP 代理发送通知。通过 AMQP 交付,您可以控制回调是否传送到代理,或者通知是否直接传送到队列。这允许 AMQP 使用者的开发人员确定通知处理的逻辑。

注意

AMQP 交付仅支持 AMQP 0.x 协议(如 RabbitMQ)。如果您需要向 AMQP 1.x 消息队列发布通知(如 ActiveMQ),您可以使用 STOMP 发送。

2.1.3.2.1. AMQP 直接交付

如果 Clair notifier 的配置为 AMQP 发送指定 direct: true,则通知将直接发送到配置的交换。

设置 直接 后,可能会设置 rollup 属性来指示通知程序在单个 AMQP 中发送最大通知数。这在消息大小和发送到队列的消息数量之间提供平衡。

2.1.3.3. 通知程序测试和开发模式

notifier 有一个测试和开发模式,可通过 NOTIFIER_TEST_MODE 参数启用。这个参数可以设置为任何值。

当设置了 NOTIFIER_TEST_MODE 参数时,通知程序开始将虚拟通知发送到每个 poll_interval 间隔配置的交付机制。这提供了实现和测试新或现有交付者的简单方法。

在环境变量被清除并重新启动前,通知程序在 NOTIFIER_TEST_MODE 中运行。

2.1.3.4. 删除通知

要删除通知,您可以使用 DELETE API 调用。删除通知 ID,手动清理通知器中的资源。如果不使用 DELETE API 调用,则通知程序会在从其数据库清除通知前等待预先确定的时间长度。

2.2. Clair 身份验证

在当前的迭代中,Clair v4 (Clair)在内部处理身份验证。

注意

以前的 Clair 版本使用 JWT 代理来授权身份验证。

身份验证是通过指定配置 auth 键下的配置对象来配置的。可能存在多个身份验证配置,但按以下顺序使用它们:

  1. PSK。借助此身份验证配置,Clair 使用预共享密钥实施基于 JWT 的身份验证。
  2. 配置。例如:

    auth:
      psk:
        key: >-
          MDQ4ODBlNDAtNDc0ZC00MWUxLThhMzAtOTk0MzEwMGQwYTMxCg==
        iss: 'issuer'

    在此配置中,auth 字段需要两个参数: iss,它是验证所有传入请求的签发者,而 密钥,这是用于验证请求的 base64 代码对称密钥。

2.3. Clair updaters

Clair 使用名为 updatersGo 软件包,其中包含获取和解析不同漏洞数据库的逻辑。

更新者通常与一个匹配者配对来解释是否有与软件包相关的漏洞。管理员可能更频繁地更新漏洞数据库,或者不想从不知道的数据库导入漏洞。

2.3.1. 配置更新程序

更新程序可以由配置顶部的 updaters 键配置。如果更新程序在匹配器进程(这是默认设置)中自动运行,则运行更新器的周期会在匹配的配置字段下进行配置。

2.3.1.1. Updater 集

以下集合可以使用 Clair 更新器进行配置:

  • alpine
  • aws
  • Debian
  • enricher/cvss
  • libvuln/driver
  • oracle
  • Photos
  • pyupio
  • rhel
  • rhel/rhcc
  • openlmi
  • ubuntu
  • Updater

2.3.1.2. 选择 updater set

特定的更新程序集合可以被 集合列表 选择。例如:

updaters:
  sets:
    - rhel

如果没有填充 set 字段,则默认为使用所有集合。

2.3.1.3. 过滤更新程序集

要在不禁用整个集合的情况下拒绝更新程序运行,可以使用 filter 选项。

在以下示例中,字符串解释为 Go regexp 软件包。这会拒绝任何名称不匹配的更新程序。

注意

这意味着空字符串与任何字符串匹配。它不表示它不匹配任何字符串。

updaters:
  filter: '^$'

2.3.1.4. 配置特定的更新程序

通过在 updaters 对象的 config 参数下放置键,可以传递特定更新器的配置。更新器的名称可能会动态构建,用户应检查日志以确保更新器名称准确。更新器所需的特定对象应当包含在更新器的文档中。

在以下示例中,rhel updater 从不同位置获取清单:

updaters:
  config:
    rhel:
      url: https://example.com/mirror/oval/PULP_MANIFEST

2.3.1.5. 禁用 Clair Updater 组件

在某些情况下,用户可能希望禁用 Clair updater 组件。在断开连接的环境中运行 Red Hat Quay 时,需要禁用更新程序。

在以下示例中,Clair updaters 被禁用:

matcher:
  disable_updaters: true

2.3.2. Clair updater URL

以下是 Clair 在默认配置中尝试通信的 HTTP 主机和路径。此列表不可成功。有些服务器问题重定向,一些请求 URL 是动态构建的。

  • https://secdb.alpinelinux.org/
  • http://repo.us-west-2.amazonaws.com/2018.03/updates/x86_64/mirror.list
  • https://cdn.amazonlinux.com/2/core/latest/x86_64/mirror.list
  • https://www.debian.org/security/oval/
  • https://linux.oracle.com/security/oval/
  • https://packages.vmware.com/photon/photon_oval_definitions/
  • https://github.com/pyupio/safety-db/archive/
  • https://catalog.redhat.com/api/containers/
  • https://www.redhat.com/security/data/
  • https://support.novell.com/security/oval/
  • https://people.canonical.com/~ubuntu-security/oval/

第 3 章 关于 Clair

本节中的内容重点介绍 Clair 发行版本、官方 Clair 容器以及 CVSS 增强数据的信息。

3.1. Clair 发行版本

Clair 的新版本会定期发布。构建 Clair 所需的源代码打包为存档并附加到每个发行版本。Clair 发行版本可在 Clair 版本 中找到。

发行工件还包括 clairctl 命令行界面工具,该工具使用开放主机从互联网获取更新器数据。

Clair 4.7

Clair 4.7 作为 Red Hat Quay 3.9 的一部分发布,包括对以下功能的支持:

  • 对容器镜像中的 Golang 模块和 RubeGems 进行原生支持。
  • 更改到 OSV.dev,作为任何编程语言软件包管理器的漏洞数据库来源。

    • 这包括 GitHub 安全公告或 PyPA 等流行源。
    • 这允许离线功能。
  • 将 pyup.io 用于 Python,而 CRDA 用于 Java 被暂停。
  • Clair 现在支持 Java、Node Golang、Python 和 Ruby 依赖项。

3.2. Clair 支持的语言

Clair 支持以下语言:

  • Python
  • Java (必须启用)

3.3. Clair 容器

Red Hat Quay 捆绑的官方下游 Clair 容器可在 Red Hat Ecosystem Catalog 中找到。

官方上游容器打包并作为容器发布,位于 Quay.io/projectquay/clair。latest 标签跟踪 Git 开发分支。版本标签从对应的发行版本中构建。

3.4. 国家漏洞数据库中的 CVE 评级

从 Clair v4.2 开始,Red Hat Quay UI 现在可以查看通用漏洞评分系统(CVSS)增强数据。另外,Clair v4.2 为检测到的漏洞从国家漏洞数据库中添加了 CVSS 分数。

在这个版本中,如果漏洞在发布分数的 2 级内有一个 CVSS 分数,Red Hat Quay UI 默认会给出发行版的分数。例如:

Clair v4.2 data display

这与前面的接口不同,它只显示以下信息:

Clair v4 data display

3.5. 联邦信息处理标准(FIPS)就绪和合规性

由国家标准与技术(NIST)开发的联邦信息处理标准(FIPS)被认为是保护和加密敏感数据的高度关注,特别是在美国、企业和公共领域。Red Hat Enterprise Linux (RHEL)和 OpenShift Container Platform 通过提供 FIPS 模式 来支持 FIPS,系统只允许使用特定 FIPS 验证的加密模块,如 openssl。这样可确保 FIPS 合规性。

3.5.1. 启用 FIPS 合规性

使用以下步骤在 Red Hat Quay 部署中启用 FIPS 合规性。

前提条件

  • 如果您正在运行独立部署 Red Hat Quay,您的 Red Hat Enterprise Linux (RHEL)部署是版本 8 或更高版本,启用了 FIPS。
  • 如果使用 Red Hat Quay Operator,OpenShift Container Platform 为 4.10 或更高版本。
  • 您的 Red Hat Quay 版本为 3.5.0 或更高版本。
  • 您有 Red Hat Quay 部署的管理特权。

流程

  • 在 Red Hat Quay config.yaml 文件中,将 FEATURE_FIPS 配置字段设置为 true。例如:

    ---
    FEATURE_FIPS = true
    ---

    FEATURE_FIPS 设置为 true 时,Red Hat Quay 会使用 FIPS 兼容的哈希功能运行。

部分 II. Red Hat Quay 上的 Clair

本指南包含在独立和 OpenShift Container Platform Operator 部署中在 Red Hat Quay 上运行 Clair 的步骤。

第 4 章 在独立的 Red Hat Quay 部署上设置 Clair

对于独立的 Red Hat Quay 部署,您可以手动设置 Clair。

流程

  1. 在 Red Hat Quay 安装目录中,为 Clair 数据库数据创建新目录:

    $ mkdir /home/<user-name>/quay-poc/postgres-clairv4
  2. 输入以下命令为 postgres-clairv4 文件设置适当的权限:

    $ setfacl -m u:26:-wx /home/<user-name>/quay-poc/postgres-clairv4
  3. 输入以下命令部署 Clair Postgres 数据库:

    $ sudo podman run -d --name postgresql-clairv4 \
      -e POSTGRESQL_USER=clairuser \
      -e POSTGRESQL_PASSWORD=clairpass \
      -e POSTGRESQL_DATABASE=clair \
      -e POSTGRESQL_ADMIN_PASSWORD=adminpass \
      -p 5433:5433 \
      -v /home/<user-name>/quay-poc/postgres-clairv4:/var/lib/pgsql/data:Z \
      registry.redhat.io/rhel8/postgresql-13:1-109
  4. 为您的 Clair 部署安装 Postgres uuid-ossp 模块:

    $ podman exec -it postgresql-clairv4 /bin/bash -c 'echo "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"" | psql -d clair -U postgres'

    输出示例

    CREATE EXTENSION

    注意

    Clair 要求将 uuid-ossp 扩展添加到其 Postgres 数据库中。对于具有适当权限的用户,Clair 将自动添加扩展。如果用户没有正确的权限,则必须在启动 Clair 前添加扩展。

    如果没有扩展,当 Clair 尝试启动时会显示以下错误: ERROR: Please load the "uuid-ossp" 扩展。(SQLSTATE 42501).

  5. 如果 Quay 容器正在运行,并在配置模式中重启它,将现有配置载入为卷:

    $ sudo podman run --rm -it --name quay_config \
      -p 80:8080 -p 443:8443 \
      -v $QUAY/config:/conf/stack:Z \
      registry.redhat.io/quay/quay-rhel8:v3.8.2 config secret
  6. 登录到配置工具,再单击 UI 的 Security Scanner 部分中的 Enable Security Scanning
  7. 使用 quay-server 系统上尚未使用的端口设置 Clair 的 HTTP 端点,例如 8081
  8. 使用 Generate PSK 按钮创建预共享密钥(PSK)。

    安全扫描器 UI

    Security Scanner

  9. 验证并下载 Red Hat Quay 的 config.yaml 文件,然后停止运行配置编辑器的 Quay 容器。
  10. 将新配置捆绑包提取到 Red Hat Quay 安装目录中,例如:

    $ tar xvf quay-config.tar.gz -d /home/<user-name>/quay-poc/
  11. 为您的 Clair 配置文件创建一个文件夹,例如:

    $ mkdir /etc/opt/clairv4/config/
  12. 进入 Clair 配置文件夹:

    $ cd /etc/opt/clairv4/config/
  13. 创建 Clair 配置文件,例如:

    http_listen_addr: :8081
    introspection_addr: :8088
    log_level: debug
    indexer:
      connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable
      scanlock_retry: 10
      layer_scan_concurrency: 5
      migrations: true
    matcher:
      connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable
      max_conn_pool: 100
      run: ""
      migrations: true
      indexer_addr: clair-indexer
    notifier:
      connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable
      delivery_interval: 1m
      poll_interval: 5m
      migrations: true
    auth:
      psk:
        key: "MTU5YzA4Y2ZkNzJoMQ=="
        iss: ["quay"]
    # tracing and metrics
    trace:
      name: "jaeger"
      probability: 1
      jaeger:
        agent_endpoint: "localhost:6831"
        service_name: "clair"
    metrics:
      name: "prometheus"

    有关 Clair 的配置格式的更多信息,请参阅 Clair 配置参考

  14. 使用容器镜像启动 Clair,从您创建的文件中挂载在配置中:

    $ sudo podman run -d --name clairv4 \
    -p 8081:8081 -p 8088:8088 \
    -e CLAIR_CONF=/clair/config.yaml \
    -e CLAIR_MODE=combo \
    -v /etc/opt/clairv4/config:/clair:Z \
    registry.redhat.io/quay/clair-rhel8:v3.9.0
    注意

    也有可能运行多个 Clair 容器,但对于单一容器以外的部署场景,我们强烈建议使用 Kubernetes 或 OpenShift Container Platform 等容器编配器。

第 5 章 OpenShift Container Platform 上的 Clair

要在 OpenShift Container Platform 上的 Red Hat Quay 部署上设置 Clair v4 (Clair),建议使用 Red Hat Quay Operator。默认情况下,Red Hat Quay Operator 将安装和升级 Clair 部署,以及您的 Red Hat Quay 部署并自动配置 Clair。

第 6 章 测试 Clair

使用以下步骤在一个独立 Red Hat Quay 部署或基于 OpenShift Container Platform Operator 的部署中测试 Clair。

先决条件

  • 您已部署了 Clair 容器镜像。

流程

  1. 输入以下命令拉取示例镜像:

    $ podman pull ubuntu:20.04
  2. 输入以下命令将镜像标记到 registry:

    $ sudo podman tag docker.io/library/ubuntu:20.04 <quay-server.example.com>/<user-name>/ubuntu:20.04
  3. 输入以下命令将镜像推送到 Red Hat Quay registry:

    $ sudo podman push --tls-verify=false quay-server.example.com/quayadmin/ubuntu:20.04
  4. 通过 UI 登录您的 Red Hat Quay 部署。
  5. 单击存储库名称,如 quayadmin/ubuntu
  6. 在导航窗格中,点 Tags

    报告概述

    Security scan information appears for scanned repository images

  7. 点镜像报告(如 45 个介质 )以显示更详细的报告:

    报告详情

    See all vulnerabilities or only those that are fixable

    注意

    在某些情况下,Clair 会显示镜像重复报告,如 ubi8/nodejs-12ubi8/nodejs-16。这是因为名称相同的漏洞用于不同的软件包。这个行为应该带有 Clair 漏洞报告,且不会作为程序错误解决。

部分 III. 高级 Clair 配置

使用本节配置高级 Clair 功能。

第 7 章 Unmanaged Clair 配置

Red Hat Quay 用户可以使用 Red Hat Quay OpenShift Container Platform Operator 运行非受管 Clair 配置。此功能允许用户创建非受管 Clair 数据库,或者在没有非受管数据库的情况下运行其自定义 Clair 配置。

非受管 Clair 数据库允许 Red Hat Quay Operator 在地理复制环境中工作,其中多个 Operator 实例必须与同一数据库通信。当用户需要集群外的高可用性(HA) Clair 数据库时,也可以使用非受管 Clair 数据库。

7.1. 使用非受管 Clair 数据库运行自定义 Clair 配置

使用以下步骤将 Clair 数据库设置为 unmanaged。

流程

  • 在 Quay Operator 中,将 QuayRegistry 自定义资源的 clairpostgres 组件设置为 managed: false

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: quay370
    spec:
      configBundleSecret: config-bundle-secret
      components:
        - kind: objectstorage
          managed: false
        - kind: route
          managed: true
        - kind: tls
          managed: false
        - kind: clairpostgres
          managed: false

7.2. 使用非受管 Clair 数据库配置自定义 Clair 数据库

用于 OpenShift Container Platform 的 Red Hat Quay Operator 允许用户提供自己的 Clair 数据库。

使用以下步骤创建自定义 Clair 数据库。

注意

以下流程使用 SSL/TLS 认证设置 Clair。要查看没有使用 SSL/TSL 认证设置 Clair 的类似流程,请参阅"使用受管 Clair 配置自定义 Clair 数据库"。

流程

  1. 输入以下命令创建一个包含 clair-config.yaml 的 Quay 配置捆绑包 secret:

    $ oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml --from-file ssl.cert=./ssl.cert --from-file ssl.key=./ssl.key config-bundle-secret

    Clair config.yaml 文件示例

    indexer:
        connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslrootcert=/run/certs/rds-ca-2019-root.pem sslmode=verify-ca
        layer_scan_concurrency: 6
        migrations: true
        scanlock_retry: 11
    log_level: debug
    matcher:
        connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslrootcert=/run/certs/rds-ca-2019-root.pem sslmode=verify-ca
        migrations: true
    metrics:
        name: prometheus
    notifier:
        connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslrootcert=/run/certs/rds-ca-2019-root.pem sslmode=verify-ca
        migrations: true

    注意
    • 数据库证书挂载到 clair-config.yaml 中的 Clair 应用程序 pod 上的 /run/certs/rds-ca-2019-root.pem 下。它必须在配置 clair-config.yaml 时指定。
    • 有关 clair-config.yaml 的示例,请参阅 OpenShift 配置的 Clair
  2. clair-config.yaml 文件添加到捆绑包 secret 中,例如:

    apiVersion: v1
    kind: Secret
    metadata:
      name: config-bundle-secret
      namespace: quay-enterprise
    data:
      config.yaml: <base64 encoded Quay config>
      clair-config.yaml: <base64 encoded Clair config>
      extra_ca_cert_<name>: <base64 encoded ca cert>
      ssl.crt: <base64 encoded SSL certificate>
      ssl.key: <base64 encoded SSL private key>
    注意

    更新后,提供的 clair-config.yaml 文件会挂载到 Clair pod 中。不提供的任何字段都会使用 Clair 配置模块自动填充默认值。

  3. 您可以点击 Build History 页面中的提交或运行 oc get pods -n <namespace > 来检查 Clair pod 的状态。例如:

    $ oc get pods -n <namespace>

    输出示例

    NAME                                               READY   STATUS    RESTARTS   AGE
    f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2   1/1     Running   0          7s

第 8 章 使用受管 Clair 数据库运行自定义 Clair 配置

在某些情况下,用户可能希望使用受管 Clair 数据库运行自定义 Clair 配置。这在以下情况中很有用:

  • 当用户想要禁用特定的更新器资源时。
  • 当用户在断开连接的环境中运行 Red Hat Quay 时。有关在断开连接的环境中运行 Clair 的更多信息,请参阅 在 air-gapped OpenShift 集群中配置对 Clair 数据库的访问

    注意
    • 如果您在断开连接的环境中运行 Red Hat Quay,则 clair-config.yamlairgap 参数必须设置为 true
    • 如果您在断开连接的环境中运行 Red Hat Quay,您应该禁用所有更新器组件。

8.1. 将 Clair 数据库设置为 managed

使用以下步骤将 Clair 数据库设置为 managed。

流程

  • 在 Quay Operator 中,将 QuayRegistry 自定义资源的 clairpostgres 组件设置为 managed: true

    apiVersion: quay.redhat.com/v1
    kind: QuayRegistry
    metadata:
      name: quay370
    spec:
      configBundleSecret: config-bundle-secret
      components:
        - kind: objectstorage
          managed: false
        - kind: route
          managed: true
        - kind: tls
          managed: false
        - kind: clairpostgres
          managed: true

8.2. 使用受管 Clair 配置配置自定义 Clair 数据库

用于 OpenShift Container Platform 的 Red Hat Quay Operator 允许用户提供自己的 Clair 数据库。

使用以下步骤创建自定义 Clair 数据库。

流程

  1. 输入以下命令创建一个包含 clair-config.yaml 的 Quay 配置捆绑包 secret:

    $ oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml config-bundle-secret

    Clair config.yaml 文件示例

    indexer:
        connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslmode=disable
        layer_scan_concurrency: 6
        migrations: true
        scanlock_retry: 11
    log_level: debug
    matcher:
        connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslmode=disable
        migrations: true
    metrics:
        name: prometheus
    notifier:
        connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslmode=disable
        migrations: true

    注意
    • 数据库证书挂载到 clair-config.yaml 中的 Clair 应用程序 pod 上的 /run/certs/rds-ca-2019-root.pem 下。它必须在配置 clair-config.yaml 时指定。
    • 有关 clair-config.yaml 的示例,请参阅 OpenShift 配置的 Clair
  2. clair-config.yaml 文件添加到捆绑包 secret 中,例如:

    apiVersion: v1
    kind: Secret
    metadata:
      name: config-bundle-secret
      namespace: quay-enterprise
    data:
      config.yaml: <base64 encoded Quay config>
      clair-config.yaml: <base64 encoded Clair config>
    注意
    • 更新后,提供的 clair-config.yaml 文件会挂载到 Clair pod 中。不提供的任何字段都会使用 Clair 配置模块自动填充默认值。
  3. 您可以点击 Build History 页面中的提交或运行 oc get pods -n <namespace > 来检查 Clair pod 的状态。例如:

    $ oc get pods -n <namespace>

    输出示例

    NAME                                               READY   STATUS    RESTARTS   AGE
    f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2   1/1     Running   0          7s

第 9 章 在断开连接的环境中的 Clair

Clair 使用一组名为 updaters 的组件来处理从各种漏洞数据库获取和解析数据。默认设置更新程序,以直接从互联网拉取漏洞数据,并可以立即使用。但是,一些用户可能需要 Red Hat Quay 在断开连接的环境中运行,或者在没有直接访问互联网的环境中运行。Clair 通过处理不同类型的更新工作流来支持断开连接的环境。这可以通过使用 clairctl 命令行界面工具来工作,该工具使用开放主机从互联网获取更新器数据,安全地将数据传送到隔离的主机上,然后将隔离主机上的更新器数据变为 Clair。

使用本指南在断开连接的环境中部署 Clair。

注意

目前,Clair 增强数据是 CVSS 数据。目前在断开连接的环境中不支持增强数据。

有关 Clair updaters 的更多信息,请参阅"Clair updaters"。

9.1. 在断开连接的 OpenShift Container Platform 集群中设置 Clair

使用以下步骤在断开连接的 OpenShift Container Platform 集群中设置 OpenShift Container Platform 置备的 Clair pod。

9.1.1. 为 OpenShift Container Platform 部署安装 clairctl 命令行工具

使用以下步骤为 OpenShift Container Platform 部署安装 clairctl CLI 工具。

流程

  1. 输入以下命令在 OpenShift Container Platform 集群中为 Clair 部署安装 clairctl 程序:

    $ oc -n quay-enterprise exec example-registry-clair-app-64dd48f866-6ptgw -- cat /usr/bin/clairctl > clairctl
    注意

    未正式,可以下载 clairctl 工具

  2. 设置 clairctl 文件的权限,以便用户可以由用户执行并运行,例如:

    $ chmod u+x ./clairctl

9.1.2. 为 OpenShift Container Platform 上的 Clair 部署检索和解码 Clair 配置 secret

使用以下步骤检索和解码 OpenShift Container Platform 上置备的 Clair 实例的配置 secret。

先决条件

  • 已安装 clairctl 命令行工具工具。

流程

  1. 输入以下命令来检索和解码配置 secret,然后将其保存到 Clair 配置 YAML 中:

    $ oc get secret -n quay-enterprise example-registry-clair-config-secret  -o "jsonpath={$.data['config\.yaml']}" | base64 -d > clair-config.yaml
  2. 更新 clair-config.yaml 文件,以便 disable_updatersairgap 参数设置为 true,例如:

    ---
    indexer:
      airgap: true
    ---
    matcher:
      disable_updaters: true
    ---

9.1.3. 从连接的 Clair 实例导出更新程序捆绑包

使用以下步骤从可访问互联网的 Clair 实例导出 updaters 捆绑包。

先决条件

  • 已安装 clairctl 命令行工具工具。
  • 您已检索并解码了 Clair 配置 secret,并将其保存到 Clair config.yaml 文件中。
  • 在 Clair config.yaml 文件中,disable_updatersairgap 参数被设置为 true

流程

  • 从可访问互联网的 Clair 实例中,使用 clairctl CLI 工具和配置文件导出更新器捆绑包。例如:

    $ ./clairctl --config ./config.yaml export-updaters updates.gz

9.1.4. 在断开连接的 OpenShift Container Platform 集群中配置对 Clair 数据库的访问

使用以下步骤在断开连接的 OpenShift Container Platform 集群中配置对 Clair 数据库的访问。

先决条件

  • 已安装 clairctl 命令行工具工具。
  • 您已检索并解码了 Clair 配置 secret,并将其保存到 Clair config.yaml 文件中。
  • 在 Clair config.yaml 文件中,disable_updatersairgap 参数被设置为 true
  • 您已从可访问互联网的 Clair 实例导出 updaters 捆绑包。

流程

  1. 使用 oc CLI 工具确定 Clair 数据库服务,例如:

    $ oc get svc -n quay-enterprise

    输出示例

    NAME                                  TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                             AGE
    example-registry-clair-app            ClusterIP      172.30.224.93    <none>        80/TCP,8089/TCP                     4d21h
    example-registry-clair-postgres       ClusterIP      172.30.246.88    <none>        5432/TCP                            4d21h
    ...

  2. 转发 Clair 数据库端口,使其可从本地机器访问。例如:

    $ oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432
  3. 更新 Clair config.yaml 文件,例如:

    indexer:
        connstring: host=localhost port=5432 dbname=postgres user=postgres password=postgres sslmode=disable 1
        scanlock_retry: 10
        layer_scan_concurrency: 5
        migrations: true
        scanner:
          repo:
            rhel-repository-scanner: 2
              repo2cpe_mapping_file: /data/cpe-map.json
          package:
            rhel_containerscanner: 3
              name2repos_mapping_file: /data/repo-map.json
    1
    将多个 conn 字符串 字段中的 主机 值替换为 localhost
    2
    有关 rhel-repository-scanner 参数的更多信息,请参阅 "Mapping repository to Common Product Enumeration"。
    3
    有关 rhel_containerscanner 参数的更多信息,请参阅 "Mapping repository to Common Product Enumeration information"。

9.1.5. 将 updaters 捆绑包导入到断开连接的 OpenShift Container Platform 集群中

使用以下步骤将更新器捆绑包导入到断开连接的 OpenShift Container Platform 集群中。

先决条件

  • 已安装 clairctl 命令行工具工具。
  • 您已检索并解码了 Clair 配置 secret,并将其保存到 Clair config.yaml 文件中。
  • 在 Clair config.yaml 文件中,disable_updatersairgap 参数被设置为 true
  • 您已从可访问互联网的 Clair 实例导出 updaters 捆绑包。
  • 您已将更新器捆绑包传送到断开连接的环境中。

流程

  • 使用 clairctl CLI 工具将 updaters 捆绑包导入到 OpenShift Container Platform 部署的 Clair 数据库中。例如:

    $ ./clairctl --config ./clair-config.yaml import-updaters updates.gz

9.2. 为断开连接的 OpenShift Container Platform 集群设置 Clair 的自我管理部署

使用以下步骤为断开连接的 OpenShift Container Platform 集群设置 Clair 的自我管理部署。

9.2.1. 为 OpenShift Container Platform 上的自我管理的 Clair 部署安装 clairctl 命令行工具

使用以下步骤在 OpenShift Container Platform 上安装 clairctl CLI 工具进行自我管理的 Clair 部署。

流程

  1. 使用 podman cp 命令为自我管理的 Clair 部署安装 clairctl 程序,例如:

    $ sudo podman cp clairv4:/usr/bin/clairctl ./clairctl
  2. 设置 clairctl 文件的权限,以便用户可以由用户执行并运行,例如:

    $ chmod u+x ./clairctl

9.2.2. 为断开连接的 OpenShift Container Platform 集群部署自我管理的 Clair 容器

使用以下步骤为断开连接的 OpenShift Container Platform 集群部署自我管理的 Clair 容器。

先决条件

  • 已安装 clairctl 命令行工具工具。

流程

  1. 为您的 Clair 配置文件创建一个文件夹,例如:

    $ mkdir /etc/clairv4/config/
  2. 创建一个 Clair 配置文件,将 disable_updaters 参数设置为 true,例如:

    ---
    indexer:
      airgap: true
    ---
    matcher:
      disable_updaters: true
    ---
  3. 使用容器镜像启动 Clair,从您创建的文件中挂载在配置中:

    $ sudo podman run -it --rm --name clairv4 \
    -p 8081:8081 -p 8088:8088 \
    -e CLAIR_CONF=/clair/config.yaml \
    -e CLAIR_MODE=combo \
    -v /etc/clairv4/config:/clair:Z \
    registry.redhat.io/quay/clair-rhel8:v3.9.0

9.2.3. 从连接的 Clair 实例导出更新程序捆绑包

使用以下步骤从可访问互联网的 Clair 实例导出 updaters 捆绑包。

先决条件

  • 已安装 clairctl 命令行工具工具。
  • 您已部署了 Clair。
  • 在 Clair config.yaml 文件中,disable_updatersairgap 参数被设置为 true

流程

  • 从可访问互联网的 Clair 实例中,使用 clairctl CLI 工具和配置文件导出更新器捆绑包。例如:

    $ ./clairctl --config ./config.yaml export-updaters updates.gz

9.2.4. 在断开连接的 OpenShift Container Platform 集群中配置对 Clair 数据库的访问

使用以下步骤在断开连接的 OpenShift Container Platform 集群中配置对 Clair 数据库的访问。

先决条件

  • 已安装 clairctl 命令行工具工具。
  • 您已部署了 Clair。
  • 在 Clair config.yaml 文件中,disable_updatersairgap 参数被设置为 true
  • 您已从可访问互联网的 Clair 实例导出 updaters 捆绑包。

流程

  1. 使用 oc CLI 工具确定 Clair 数据库服务,例如:

    $ oc get svc -n quay-enterprise

    输出示例

    NAME                                  TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                             AGE
    example-registry-clair-app            ClusterIP      172.30.224.93    <none>        80/TCP,8089/TCP                     4d21h
    example-registry-clair-postgres       ClusterIP      172.30.246.88    <none>        5432/TCP                            4d21h
    ...

  2. 转发 Clair 数据库端口,使其可从本地机器访问。例如:

    $ oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432
  3. 更新 Clair config.yaml 文件,例如:

    indexer:
        connstring: host=localhost port=5432 dbname=postgres user=postgres password=postgres sslmode=disable 1
        scanlock_retry: 10
        layer_scan_concurrency: 5
        migrations: true
        scanner:
          repo:
            rhel-repository-scanner: 2
              repo2cpe_mapping_file: /data/cpe-map.json
          package:
            rhel_containerscanner: 3
              name2repos_mapping_file: /data/repo-map.json
    1
    将多个 conn 字符串 字段中的 主机 值替换为 localhost
    2
    有关 rhel-repository-scanner 参数的更多信息,请参阅 "Mapping repository to Common Product Enumeration"。
    3
    有关 rhel_containerscanner 参数的更多信息,请参阅 "Mapping repository to Common Product Enumeration information"。

9.2.5. 将 updaters 捆绑包导入到断开连接的 OpenShift Container Platform 集群中

使用以下步骤将更新器捆绑包导入到断开连接的 OpenShift Container Platform 集群中。

先决条件

  • 已安装 clairctl 命令行工具工具。
  • 您已部署了 Clair。
  • 在 Clair config.yaml 文件中,disable_updatersairgap 参数被设置为 true
  • 您已从可访问互联网的 Clair 实例导出 updaters 捆绑包。
  • 您已将更新器捆绑包传送到断开连接的环境中。

流程

  • 使用 clairctl CLI 工具将 updaters 捆绑包导入到 OpenShift Container Platform 部署的 Clair 数据库中:

    $ ./clairctl --config ./clair-config.yaml import-updaters updates.gz

9.3. 启用 Clair CRDA

Java 扫描取决于一个公共的、红帽提供的 API 服务,称为 Code Ready Dependency Analytics (CRDA)。CRDA 仅适用于互联网访问,默认情况下不启用。

使用以下步骤将 CRDA 服务与自定义 API 密钥集成,并为 Java 和 Python 扫描启用 CRDA。

先决条件

  • Red Hat Quay 3.7 或更高版本

流程

  1. 提交 API 密钥请求表单,以获取特定于 Quay 的 CRDA 远程匹配器。
  2. clair-config.yaml 文件中设置 CRDA 配置:

    matchers:
      config:
        crda:
          url: https://gw.api.openshift.io/api/v2/
          key: <CRDA_API_KEY> 1
          source: <QUAY_SERVER_HOSTNAME> 2
    1
    在此处从 API 密钥请求表单插入特定于 Quay 的 CRDA 远程匹配程序。
    2
    Quay 服务器的主机名。

9.4. 将存储库映射到通用产品枚举信息

Clair 的 Red Hat Enterprise Linux (RHEL)扫描程序依赖于通用产品枚举(CPE)文件,将 RPM 软件包映射到对应的安全数据,以生成匹配的结果。这些文件归产品安全所有,每天更新。

必须允许 cpe 文件或访问该文件,以便扫描程序能够正确处理 RPM 软件包。如果文件不存在,则不会扫描容器镜像中安装的 RPM 软件包。

表 9.1. Clair cp 映射文件

CPE到 JSON 映射文件的链接

repos2cpe

Red Hat Repository-to-CPE JSON

names2repos

Red Hat Name-to-Repos JSON.

除了将 CVE 信息上传到用于断开连接的 Clair 安装的数据库外,还必须在本地提供映射文件:

  • 对于独立的 Red Hat Quay 和 Clair 部署,映射文件必须加载到 Clair pod 中。
  • 对于在 OpenShift Container Platform 和 Clair 部署上部署 Red Hat Quay Operator,您必须将 Clair 组件设置为 非受管。然后,必须手动部署 Clair,设置配置来加载映射文件的本地副本。

9.4.1. 将存储库映射到通用产品枚举示例配置

在 Clair 配置中使用 repo2cpe_mapping_filename2repos_mapping_file 字段,使其包含 cp JSON 映射文件。例如:

indexer:
 scanner:
    repo:
      rhel-repository-scanner:
        repo2cpe_mapping_file: /data/cpe-map.json
    package:
      rhel_containerscanner:
        name2repos_mapping_file: /data/repo-map.json

如需更多信息,请参阅如何准确将 OVAL 安全数据与已安装的 RPM 匹配

第 10 章 Clair 配置概述

Clair 由结构化 YAML 文件配置。每个 Clair 节点都需要指定其将在其中运行的模式,以及通过 CLI 标志或环境变量的配置文件的路径。例如:

$ clair -conf ./path/to/config.yaml -mode indexer

或者

$ clair -conf ./path/to/config.yaml -mode matcher

以上命令各自使用相同的配置文件启动两个 Clair 节点。一个运行索引功能,另一个则运行匹配的功能。

如果需要,可以指定 Go 标准库所遵守的环境变量,例如:

  • HTTP_PROXY
  • HTTPS_PROXY
  • SSL_CERT_DIR

如果您以 组合 模式运行 Clair,则必须在配置中提供索引器、匹配器和通知程序配置块。

10.1. Clair 配置参考

以下 YAML 显示了一个 Clair 配置示例:

http_listen_addr: ""
introspection_addr: ""
log_level: ""
tls: {}
indexer:
    connstring: ""
    scanlock_retry: 0
    layer_scan_concurrency: 0
    migrations: false
    scanner: {}
    airgap: false
matcher:
    connstring: ""
    indexer_addr: ""
    migrations: false
    period: ""
    disable_updaters: false
    update_retention: 2
matchers:
    names: nil
    config: nil
updaters:
    sets: nil
    config: nil
notifier:
    connstring: ""
    migrations: false
    indexer_addr: ""
    matcher_addr: ""
    poll_interval: ""
    delivery_interval: ""
    disable_summary: false
    webhook: null
    amqp: null
    stomp: null
auth:
  psk: nil
trace:
    name: ""
    probability: null
    jaeger:
        agent:
            endpoint: ""
        collector:
            endpoint: ""
            username: null
            password: null
        service_name: ""
        tags: nil
        buffer_max: 0
metrics:
    name: ""
    prometheus:
        endpoint: null
    dogstatsd:
        url: ""
注意

以上 YAML 文件列出了每个键以保证完整性。使用此配置文件原样将导致一些选项不会正常设置默认值。

10.2. Clair 常规字段

下面的部分描述了 Clair 部署的一般配置字段:

字段Typhttp_listen_ae描述

http_listen_addr

字符串

配置公开 HTTP API 的位置。

默认: :6060

introspection_addr

字符串

配置 Clair 的指标和健康端点公开的位置。

log_level

字符串

设置日志级别。需要以下字符串之一: debug-colordebuginfowarnerrorfatalpanic

tls

字符串

包含提供 TLS/SSL 和 HTTP/2 的 HTTP API 配置的映射。

.cert

字符串

要使用的 TLS 证书。必须是全链证书。

10.3. Clair 索引器配置字段

以下索引器配置字段可用于 Clair。

字段类型描述

indexer

对象

提供 Clair 索引器节点配置。

.airgap

布尔值

为索引器和获取者禁用对互联网的 HTTP 访问。允许专用 IPv4 和 IPv6 地址。数据库连接不受影响。

.connstring

字符串

Postgres 连接字符串。接受格式为 URL 或 libpq 连接字符串。

.index_report_request_concurrency

整数

速率限制索引报告创建请求的数量。把它设置为 0, 以自动调整此值的大小。设置负值意味着无限。自动大小是可用内核数的倍数。

如果超过并发状态,API 会返回 429 状态代码。

.scanlock_retry

整数

代表秒的正整数。在清单扫描时并发索引器锁定,以避免冲突。这个值调整等待索引器轮询锁定的频率。

.layer_scan_concurrency

整数

正整数限制并发层扫描的数量。Indexers 将同时匹配清单的层。这个值调整索引程序并行扫描的层数。

.migrations

布尔值

索引器节点是否处理迁移到其数据库的迁移。

.scanner

字符串

索引器配置。

扫描程序允许将配置选项传递给层扫描程序。如果设计这样做,扫描程序会将此配置传递给它。

.scanner.dist

字符串

特定扫描程序名称和任意 YAML 作为值的映射。

.scanner.package

字符串

特定扫描程序名称和任意 YAML 作为值的映射。

.scanner.repo

字符串

特定扫描程序名称和任意 YAML 作为值的映射。

10.4. Clair 匹配程序配置字段

以下匹配器配置字段可用于 Clair。

注意

matchers 配置字段不同。

字段类型描述

matcher

对象

提供 Clair 匹配器节点配置。

.cache_age

字符串

控制用户应提示缓存响应的时间。

.connstring

字符串

Postgres 连接字符串。接受格式为 URL 或 libpq 连接字符串。

.max_conn_pool

整数

限制数据库连接池大小。

Clair 允许自定义连接池大小。这个数字直接设定允许同时允许多少个活跃数据库连接。

这个参数将在以后的发行版本中被忽略。用户应该通过连接字符串进行配置。

.indexer_addr

字符串

匹配者联系索引器来创建 VulnerabilityReport。需要此索引器的位置。

默认值为 30m

.migrations

布尔值

匹配器节点是否处理迁移到其数据库的迁移。

.period

字符串

决定新安全公告的更新频率。

默认值为 30m

.disable_updaters

布尔值

是否运行后台更新。

.update_retention

整数

设置在垃圾回收周期之间保留的更新操作数量。这应该根据数据库大小限制设置为安全 MAX 值。

默认值为 10m

如果提供小于 0 的值,则禁用垃圾回收。2 是确保可将更新与通知进行比较的最小值。

10.5. Clair 匹配器配置字段

以下 matchers 配置字段可用于 Clair。

注意

matcher 配置字段不同。

字段类型描述

matchers

字符串数组

为树内 匹配器和 远程匹配器 提供配置

.names

字符串

字符串值列表告知启用的匹配者的匹配者。如果值设为 null,则运行匹配的默认列表: alpineawsdebianoracle oracle、hotern、pythonpythonrhelsuse、Suse ,crda

.config

字符串

为特定匹配程序提供配置。

由匹配者名称的键的映射,其中包含将提供给 matchers 工厂构造器的子对象。例如:

config:
  python:
    ignore_vulns:
      - CVE-XYZ
      - CVE-ABC

10.6. Clair updaters 配置字段

以下 updaters 配置字段可用于 Clair。

字段类型描述

updaters

对象

为匹配器的更新管理器提供配置。

.sets

字符串

值列表,告知更新管理器要运行的更新程序。

如果值设为 null,则默认更新程序集合运行以下命令: alpineawsdebianoracle oracle、hoter、pyupiorhelsuse,ubuntu

如果留空,则运行零 updaters。

.config

字符串

为特定更新器集提供配置。

由 updater 集名称的键的映射,其中包含将提供给 updater 设置构造器的子对象。例如:

config:
  ubuntu:
    security_tracker_url: http://security.url
    ignore_distributions:
      - cosmic

10.7. Clair 通知程序配置字段

以下通知程序配置字段可用于 Clair。

字段类型描述

通知程序

对象

提供 Clair notifier 节点配置。

.connstring

字符串

postgres 连接字符串。接受格式为 URL 或 libpq 连接字符串。

.migrations

布尔值

通知节点是否处理迁移到其数据库的迁移。

.indexer_addr

字符串

通知程序联系索引器来创建或获取受漏洞影响的清单。需要此索引器的位置。

.matcher_addr

字符串

通知程序联系一个匹配者来列出更新操作并获取 diffs。这个匹配器的位置是必需的。

.poll_interval

字符串

通知程序查询匹配程序更新操作的频率。

.delivery_interval

字符串

通知程序尝试发送创建的频率,或者以前失败的通知。

.disable_summary

布尔值

控制是否应为每个清单将通知总结到一个。

.webhook

对象

配置 webhook 交付通知程序。

.webhook.target

字符串

发送 webhook 的 URL。

.webhook.callback

字符串

检索通知的回调 URL。通知 ID 将附加到此 URL。

这通常是托管 Clair notifier 的位置。

.webhook.headers

字符串

将标头名称与值列表关联的映射。

.amqp

对象

配置用于 AMQP 交付的通知。

注意

Clair 本身不声明任何 AMQP 组件。所有尝试使用交换或队列的尝试都是被动的,将失败。代理管理员应提前设置交换和队列。

.amqp.direct

布尔值

如果为 true,则通知程序会将各个通知(而非回调)提供给配置的 AMQP 代理。

.amqp.rollup

整数

amqp.direct 设为 true 时,这个值会告知通知通知在直接发送中发送多少通知。例如,如果 直接 设置为 true,并且 amqp.rollup 设置为 5,则通知程序在单个 JSON 有效负载中为代理提供超过 5 个通知。将值设为 0 可有效地将它设置为 1

.amqp.exchange

对象

要连接的 AMQP 交换。

.amqp.exchange.name

字符串

要连接的交换名称。

.amqp.exchange.type

字符串

交换的类型。通常,以下之一: directfanouttopicHeader

.amqp.exchange.durability

布尔值

配置的队列是 durable。

.amqp.exchange.auto_delete

布尔值

配置的队列是否使用 auto_delete_policy

.amqp.routing_key

字符串

每个通知的路由键的名称。

.amqp.callback

字符串

如果 amqp.direct 设为 false,则此 URL 在发送到代理的通知回调中提供。此 URL 应该指向 Clair 的通知 API 端点。

.amqp.uris

字符串

要连接的一个或多个 AMQP 代理的列表,按优先级顺序进行。

.amqp.tls

对象

配置到 AMQP 代理的 TLS/SSL 连接。

.amqp.tls.root_ca

字符串

可以读取 root CA 的文件系统路径。

.amqp.tls.cert

字符串

可以读取 TLS/SSL 证书的文件系统路径。

注意

Clair 还支持 SSL_CERT_DIR,如 Go crypto/x509 软件包的文档。

.amqp.tls.key

字符串

读取 TLS/SSL 私钥的文件系统路径。

.stomp

对象

为 STOMP 发送配置通知程序。

.stomp.direct

布尔值

如果为 true,则通知程序会向配置的 STOMP 代理提供单独的通知(而非回调)。

.stomp.rollup

整数

如果 stomp.direct 设为 true,则该值限制在单个直接交付中发送的通知数量。例如,如果 直接 设置为 true,并且 rollup 设置为 5,则通知程序在单个 JSON 有效负载中为代理提供超过 5 个通知。将值设为 0 可有效地将它设置为 1

.stomp.callback

字符串

如果 stomp.callback 设为 false,则通知回调中提供的 URL 将发送到代理。此 URL 应该指向 Clair 的通知 API 端点。

.stomp.destination

字符串

要发送通知的 STOMP 目的地。

.stomp.uris

字符串

按顺序连接的一个或多个 STOMP 代理的列表。

.stomp.tls

对象

配置到 STOMP 代理的 TLS/SSL 连接。

.stomp.tls.root_ca

字符串

可以读取 root CA 的文件系统路径。

注意

Clair 还遵循 SSL_CERT_DIR,如 Go crypto/x509 软件包的文档。

.stomp.tls.cert

字符串

可以读取 TLS/SSL 证书的文件系统路径。

.stomp.tls.key

字符串

读取 TLS/SSL 私钥的文件系统路径。

.stomp.user

字符串

为 STOMP 代理配置登录详情。

.stomp.user.login

字符串

要连接的 STOMP 登录。

.stomp.user.passcode

字符串

要连接的 STOMP passcode。

10.8. Clair 授权配置字段

以下授权配置字段可用于 Clair。

字段类型描述

auth

对象

定义 Clair 的外部和服务内 JWT 身份验证。如果定义了多个 身份验证机制,Clair 会选择一个。目前,不支持多种机制。

.psk

字符串

定义预共享密钥身份验证。

.psk.key

字符串

所有方签名和验证 JWT 之间分发的共享 base64 编码密钥。

.psk.iss

字符串

用于验证的 JWT 签发者列表。空列表接受 JWT 声明中的任何签发者。

10.9. Clair trace 配置字段

以下 trace 配置字段可用于 Clair。

字段类型描述

trace

对象

定义基于 OpenTelemetry 的分布式追踪配置。

.name

字符串

应用程序跟踪的名称将属于。

.probability

整数

会发生 trace 的概率。

.jaeger

对象

定义 Jaeger 追踪的值。

.jaeger.agent

对象

定义配置发送到 Jaeger 代理的值。

.jaeger.agent.endpoint

字符串

< host>:<post&gt; 语法中的地址,可以提交 trace。

.jaeger.collector

对象

定义配置发送到 Jaeger 收集器的值。

.jaeger.collector.endpoint

字符串

< host>:<post&gt; 语法中的地址,可以提交 trace。

.jaeger.collector.username

字符串

Jaeger 用户名。

.jaeger.collector.password

字符串

Jaeger 密码。

.jaeger.service_name

字符串

在 Jaeger 中注册的服务名称。

.jaeger.tags

字符串

用于提供额外的元数据的键值对。

.jaeger.buffer_max

整数

在将内存缓冲到 Jaeger 后端前可缓冲的最大 span 数量,以存储和分析。

10.10. Clair 指标配置字段

以下指标配置字段可用于 Clair。

字段类型描述

metrics

对象

定义基于 OpenTelemetry 的分布式追踪配置。

.name

字符串

使用的指标的名称。

.prometheus

字符串

配置 Prometheus 指标导出器。

.prometheus.endpoint

字符串

定义提供指标的路径。

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.