在 Red Hat Quay 中使用 Clair 报告漏洞


Red Hat Quay 3

在 Red Hat Quay 中使用 Clair 报告漏洞

Red Hat OpenShift Documentation Team

摘要

Clair 入门

前言

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

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

第 1 章 Clair 安全扫描程序

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

1.1. 关于 Clair

Clair 使用来自国家漏洞数据库(NVD)的通用漏洞评分系统(CVSS)数据来增强漏洞数据,这是美国政府与安全相关的信息的美国政府存储库,包括各种软件组件和系统中的已知漏洞和安全问题。使用 NVD 中的分数为 Clair 提供以下优点:

  • 数据同步.Clair 可以定期将其漏洞数据库与 NVD 同步。这样可确保它具有最新的漏洞数据。
  • 匹配和增强.Clair 将容器镜像中发现的漏洞的元数据和标识符与来自 NVD 的数据进行比较。这个过程涉及将唯一标识符(如通用漏洞和暴露(CVE) ID)与 NVD 中的条目匹配。找到匹配项时,Clair 可以使用来自 NVD 的更多详细信息(如严重性分数、描述和引用)增强其漏洞信息。
  • 严重性分数.NVD 为漏洞分配严重性分数,如通用漏洞评分系统(CVSS)分数,以指示与每个漏洞相关的潜在影响和风险。通过合并 NVD 的严重性分数,Clair 可以针对它所检测到的漏洞的严重程度提供更多上下文。

如果 Clair 从 NVD 找到漏洞,则向 UI 上的用户报告了对容器镜像中检测到的漏洞的严重性和标准化评估。CVSS 增强数据提供以下优点:

  • 漏洞优先级排序.通过利用 CVSS 分数,用户可以根据自己的严重性来优先选择漏洞,帮助他们首先解决最重要的问题。
  • 评估风险.CVSS 分数可帮助 Clair 用户了解对容器化应用程序造成漏洞的潜在风险。
  • 通信严重性.CVSS 分数为 Clair 用户提供了一种标准化的方式,用于交流不同团队和机构中的漏洞的严重性。
  • 通知修复策略.CVSS 丰富数据可以指导 Quay.io 用户开发适当的补救策略。
  • 合规性和报告.将 CVSS 数据整合到 Clair 生成的报告中,可帮助组织展示其解决安全漏洞并遵守行业标准和法规的承诺。

1.1.1. Clair 发行版本

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

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

1.1.1.1. Clair 4.8

Clair 4.8 在 24-10-28 中发布。进行了以下更改:

  • Red Hat Quay 中的 Clair 现在需要将 Clair PostgreSQL 数据库从版本 13 更新至版本 15。有关此过程的更多信息,请参阅升级 Clair PostgreSQL 数据库
  • 此发行版本弃用了依赖 Red Hat OVAL v2 安全数据的更新程序,而是使用红帽 VEX 数据。此更改包括数据库迁移,用于删除源自 OVAL v2 源的所有漏洞。因此,当没有漏洞时,在 VEX 更新器第一次完成前,生产环境中可能会出现间歇性停机时间。
1.1.1.2. Clair 4.8.0 已知问题
  • 当使用 HIGH 镜像推送 Suse Enterprise Linux 镜像时,Clair 4.8.0 不会报告这些漏洞。这是一个已知问题,并将在以后的 Red Hat Quay 版本中解决。
1.1.1.3. Clair 4.7.4

Clair 4.7.4 于 2024-05-01 发布。进行了以下更改:

1.1.1.4. Clair 4.7.3

Clair 4.7.3 在 2024-02-26 中发布。进行了以下更改:

  • Clair 的最低 TLS 版本现在是 1.2。在以前的版本中,服务器允许 1.1 连接。
1.1.1.5. Clair 4.7.2

Clair 4.7.2 在 2023-10-09 上发布。进行了以下更改:

  • 已删除 CRDA 支持。
1.1.1.6. Clair 4.7.1

Clair 4.7.1 作为 Red Hat Quay 3.9.1 的一部分发布。进行了以下更改:

  • 在这个版本中,您可以查看 Red Hat Enterprise Linux (RHEL)源中未修补的漏洞。如果要查看未修补的漏洞,您可以将 ignore_unpatched 参数设置为 False。例如:

    updaters:
      config:
        rhel:
          ignore_unpatched: false
    Copy to Clipboard Toggle word wrap

    要禁用此功能,您可以将 ignore_unpatched 设置为 True

1.1.1.7. Clair 4.7

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

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

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

1.1.2. Clair 漏洞数据库

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

  • Ubuntu Oval 数据库
  • Debian 安全跟踪器
  • Red Hat Enterprise Linux (RHEL) Oval database
  • SUSE Oval 数据库
  • Oracle Oval 数据库
  • alpine SecDB 数据库
  • VMware Photon OS 数据库
  • Amazon Web Services (AWS) UpdateInfo
  • 开源漏洞(OSV)数据库

1.1.3. Clair 支持的依赖项

Clair 支持识别和管理以下依赖项:

  • Java
  • Golang
  • Python
  • Ruby

这意味着它可以分析和报告这些语言中项目依赖的第三方库和软件包,以便正常工作。

当包含 Clair 不支持的语言中软件包的镜像推送到您的存储库时,无法对这些软件包执行漏洞扫描。用户不会收到不支持的依赖项或软件包的分析或安全报告。因此,应考虑以下后果:

  • 安全风险.未扫描的漏洞的依赖项或软件包可能会给您的机构带来安全风险。
  • 合规问题.如果您的机构有特定的安全或合规要求、未扫描或部分扫描,容器镜像可能会导致与某些法规不合规。

    注意

    扫描的镜像被索引,并创建了漏洞报告,但可能会省略某些不支持的语言中的数据。例如,如果您的容器镜像包含 Lua 应用,则不会提供来自 Clair 的反馈,因为 Clair 不会检测到它。它可以检测容器镜像中使用的其他语言,并显示检测到这些语言的 CVE。因此,Clair 镜像 会根据 Clair 支持的内容进行完全扫描

1.1.4. Clair 容器

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

官方上游容器在 Quay.io 上的 Clair 项目下打包并发布。latest 标签跟踪 Git 开发分支。版本标签从对应的版本构建。

1.2. Clair 严重性映射

Clair 提供了漏洞评估和管理的综合方法。它的一个重要功能是安全数据库严重性字符串的规范化。这个过程通过将漏洞的严重性映射到预定义的值集来简化对漏洞的评估。通过这个映射,客户端可以有效地响应漏洞的严重性,而无需对每个安全数据库的唯一严重性字符串进行解码。这些映射的严重性字符串与对应安全数据库中发现的严重性一致,确保漏洞评估的一致性和准确性。

1.2.1. Clair 严重性字符串

Clair 警报具有以下严重性字符串的用户:

  • Unknown
  • negligible
  • Medium
  • High
  • Critical

这些严重性字符串与相关安全数据库中找到的字符串类似。

alpine 映射

alpine SecDB 数据库不提供严重性信息。所有漏洞的严重性都将是 Unknown。

Expand
Alpine 严重性Clair 严重性

*

Unknown

AWS 映射

AWS UpdateInfo 数据库提供严重性信息。

Expand
AWS 严重性Clair 严重性

Medium

重要

High

critical

Critical

Debian 映射

Debian Oval 数据库提供严重性信息。

Expand
Debian 严重性Clair 严重性

*

Unknown

Unimportant

Medium

Medium

High

High

Critical

Oracle 映射

Oracle Oval 数据库提供严重性信息。

Expand
Oracle 严重性Clair 严重性

N/A

Unknown

Medium

重要

High

CRITICAL

Critical

RHEL 映射

RHEL Oval 数据库提供严重性信息。

Expand
RHEL 严重性Clair 严重性

None

Unknown

Moderate(中度)

Medium

重要的

High

Critical

Critical

SUSE 映射

SUSE Oval 数据库提供严重性信息。

Expand
重要性Clair 严重性

None

Unknown

Moderate(中度)

Medium

重要的

High

Critical

Critical

Ubuntu 映射

Ubuntu Oval 数据库提供严重性信息。

Expand
重要性Clair 严重性

Untriaged

Unknown

negligible

negligible

Medium

Medium

High

High

Critical

Critical

OSV 映射
Expand
表 1.1. CVSSv3
基本分数Clair 严重性

0.0

negligible

0.1-3.9

4.0-6.9

Medium

7.0-8.9

High

9.0-10.0

Critical

Expand
表 1.2. CVSSv2
基本分数Clair 严重性

0.0-3.9

4.0-6.9

Medium

7.0-10

High

第 2 章 Clair 概念

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

2.1. 实践中的 Clair

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

2.1.1. 索引

Clair 的 indexer 服务在了解容器镜像的组成方面扮演着重要角色。在 Clair 中,容器镜像表示被称为 "manifests"。清单用于理解镜像层的内容。为简化此过程,Clair 利用了开放容器项目(OCI)清单和层,专为内容寻址而设计,从而减少重复性任务。

在索引过程中,使用代表容器镜像的清单,并划分到其基本组件中。索引器的作业是取消镜像包含的软件包、原始分发及其依赖的软件包存储库。然后,在 Clair 的数据库中记录并存储了这一宝贵的信息。在索引过程中收集的 insights 作为生成全面漏洞报告的基础。此报告可以无缝传输到匹配节点以进一步分析和操作,帮助用户对其容器镜像的安全性做出明智决策。

IndexReport 存储在 Clair 的数据库中。它可以进入匹配 节点,以计算漏洞报告。

2.1.2. 匹配

使用 Clair 时,匹配节点负责与提供的索引报告匹配的漏洞。

匹配者负责保持漏洞数据库最新。匹配者运行一组更新器,它会定期为新内容探测其数据源。当发现新漏洞时,会将其存储在数据库中。

匹配器 API 旨在在查询时始终提供最新的漏洞报告。漏洞报告总结了清单的内容以及影响内容的任何漏洞。

当发现新漏洞时,会将其存储在数据库中。

匹配器 API 设计为经常使用。它旨在在查询时始终提供最新的 VulnerabilityReportVulnerabilityReport 总结了清单的内容以及影响内容的任何漏洞。

2.1.3. 通知程序服务

Clair 使用通知程序服务来跟踪新的安全数据库更新,并在新的或移除的漏洞影响了索引清单时通知用户。

当通知程序了解影响之前索引清单的新漏洞时,它使用 config.yaml 文件中配置的方法来发出有关新更改的通知。返回的通知会表达因为更改而发现的最重要的漏洞。这可避免为相同的安全数据库更新创建过量通知。

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

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

  • Webhook 交付
  • AMQP 交付
  • Stomp 传输

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

2.2. Clair 身份验证

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

注意

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

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

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

    auth:
      psk:
        key: >-
          MDQ4ODBlNDAtNDc0ZC00MWUxLThhMzAtOTk0MzEwMGQwYTMxCg==
        iss: 'issuer'
    Copy to Clipboard Toggle word wrap

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

2.3. Clair 更新器

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

更新器通常与一个匹配器结合使用,以解释是否有与软件包相关的漏洞。管理员可能希望更频繁地更新漏洞数据库,或者不会从它们知道的数据库导入漏洞。

2.4. 有关 Clair 更新器的信息

下表提供了有关每个 Clair 更新器的详细信息,包括配置参数、简短描述、相关 URL 以及它们与之交互的相关组件。此列表不详细,一些服务器可能会发出重定向,而某些请求 URL 会动态构建,以确保漏洞数据检索。

对于 Clair,每个更新器负责获取和解析与特定软件包类型或分发相关的漏洞数据。例如,Debian 更新器侧重于基于 Debian 的 Linux 发行版,而 AWS 更新程序则侧重于特定于 Amazon Web Services Linux 发行版的漏洞。了解软件包类型对于漏洞管理非常重要,因为不同的软件包类型可能具有唯一的安全问题,需要特定的更新和补丁。

注意

如果您在带有 Clair 的更新器 URL 环境中使用代理服务器,您必须识别哪些 URL 需要添加到代理 allowlist 中,以确保 Clair 可以访问它们。使用下表在代理允许列表中添加更新器 URL。

Expand
表 2.1. Clair updater 信息
Updater描述urls组件

alpine

Alpine updater 负责获取和解析与 Alpine Linux 发行版中软件包相关的漏洞数据。

  • https://secdb.alpinelinux.org/

Alpine Linux SecDB database

aws

AWS 更新器侧重于基于 AWS Linux 的软件包,确保特定于 Amazon Web Services 的自定义 Linux 发行版的漏洞信息保持最新状态。

  • 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://cdn.amazonlinux.com/al2023/core/mirrors/latest/x86_64/mirror.list

Amazon Web Services (AWS) UpdateInfo

debian

Debian 更新器对于跟踪与 Debian 基于 Debian 的 Linux 发行版相关的软件包中的漏洞至关重要。

  • https://deb.debian.org/
  • https://security-tracker.debian.org/tracker/data/json

Debian 安全跟踪器

clair.cvss

Clair 通用漏洞评分系统(CVSS)更新器侧重于维护有关漏洞及其关联的 CVSS 分数的数据。这不与特定的软件包类型绑定,而是一般的严重性和风险评估。

  • https://nvd.nist.gov/feeds/json/cve/1.1/

国家漏洞数据库(NVD)以 JSON 格式用于常见漏洞和暴露(CVE)数据

oracle

Oracle 更新器专用于 Oracle Linux 软件包,维护影响 Oracle Linux 系统的漏洞的数据。

  • https://linux.oracle.com/security/oval/com.oracle.elsa-*.xml.bz2

Oracle Oval 数据库

Photon

Photon 更新器处理 VMware Photon OS 中的软件包。

  • https://packages.vmware.com/photon/photon_oval_definitions/

VMware Photon OS oval 定义

rhel

Red Hat Enterprise Linux (RHEL)更新器负责维护 Red Hat Enterprise Linux 发行版中软件包的漏洞数据。

  • https://access.redhat.com/security/cve/
  • https://access.redhat.com/security/data/oval/v2/PULP_MANIFEST

Red Hat Enterprise Linux (RHEL) Oval database

rhcc

Red Hat Container Catalog (RHCC)更新器已连接到红帽的容器镜像。此更新程序确保与红帽容器化软件相关的漏洞信息保持最新状态。

  • https://access.redhat.com/security/data/metrics/cvemap.xml

资源处理程序配置控制器(RHCC)数据库

SUSE

SUSE 更新器管理 SUSE Linux 发行版系列中的软件包的漏洞信息,包括 openSUSE、SUSE、SUSE Enterprise Linux 等。

  • https://support.novell.com/security/oval/

SUSE Oval 数据库

ubuntu

Ubuntu updater 专门用于跟踪与基于 Ubuntu 的 Linux 发行版关联的软件包中的漏洞。Ubuntu 是 Linux 生态系统中的一个常见发行版。

  • https://security-metadata.canonical.com/oval/com.ubuntu.*.cve.oval.xml
  • https://api.launchpad.net/1.0/

Ubuntu Oval 数据库

osv

开源漏洞(OSV)更新程序专门跟踪开源软件组件中的漏洞。OSV 是一个关键资源,提供有关各种开源项目中安全问题的详细信息。

  • https://osv-vulnerabilities.storage.googleapis.com/

开源漏洞数据库

2.5. 配置更新器

updaters 可通过 clair-config.yaml 文件中的 updaters.sets 键配置。

重要
  • 如果没有填充 set 字段,则默认为使用所有集合。在使用 all sets 中,Clair 会尝试访问每个更新器的 URL 或 URL。如果使用代理环境,则必须在代理允许列表中添加这些 URL。
  • 如果在 matcher 进程(默认的设置)中自动运行更新程序,则运行更新器的周期会在 matcher 的配置字段下配置。

2.5.1. 选择特定的更新器集

使用以下引用为您的 Red Hat Quay 部署选择一个或多个更新器。

为多个更新器配置 Clair

多个特定的更新器

#...
updaters:
  sets:
    - alpine
    - aws
    - osv
#...
Copy to Clipboard Toggle word wrap

为 Alpine 配置 Clair

alpine config.yaml 示例

#...
updaters:
  sets:
    - alpine
#...
Copy to Clipboard Toggle word wrap

为 AWS 配置 Clair

AWS config.yaml 示例

#...
updaters:
  sets:
    - aws
#...
Copy to Clipboard Toggle word wrap

为 Debian 配置 Clair

Debian config.yaml 示例

#...
updaters:
  sets:
    - debian
#...
Copy to Clipboard Toggle word wrap

为 Clair CVSS 配置 Clair

Clair CVSS config.yaml 示例

#...
updaters:
  sets:
    - clair.cvss
#...
Copy to Clipboard Toggle word wrap

为 Oracle 配置 Clair

Oracle config.yaml 示例

#...
updaters:
  sets:
    - oracle
#...
Copy to Clipboard Toggle word wrap

为 Photon 配置 Clair

Photon config.yaml 示例

#...
updaters:
  sets:
    - photon
#...
Copy to Clipboard Toggle word wrap

为 SUSE 配置 Clair

SUSE config.yaml 示例

#...
updaters:
  sets:
    - suse
#...
Copy to Clipboard Toggle word wrap

为 Ubuntu 配置 Clair

Ubuntu config.yaml 示例

#...
updaters:
  sets:
    - ubuntu
#...
Copy to Clipboard Toggle word wrap

为 OSV 配置 Clair

OSV config.yaml 示例

#...
updaters:
  sets:
    - osv
#...
Copy to Clipboard Toggle word wrap

要完全覆盖 Red Hat Enterprise Linux (RHEL)中的漏洞,您必须使用以下更新程序集:

  • RHEL.在这个版本中,确保您具有影响 RHEL 的漏洞的最新信息。
  • RHCC.此更新程序会跟踪与红帽容器镜像相关的漏洞。
  • Clair.cvss.通过提供通用漏洞和暴露(CVE)评分,对漏洞的严重性和风险评估提供了全面的视图。
  • OSV.此更新程序侧重于跟踪开源软件组件中的漏洞。建议使用这个更新,因为 Java 和 Go 在 RHEL 产品中是通用的。

RHEL 更新程序示例

#...
updaters:
  sets:
    - rhel
    - rhcc
    - clair.cvss
    - osv
#...
Copy to Clipboard Toggle word wrap

2.5.3. 高级更新器配置

在某些情况下,用户可能希望为特定的行为配置更新程序,例如,如果要列出开源漏洞(OSV)更新器的特定生态系统。

高级更新器配置可能对代理部署或 air gapped 部署很有用。这些场景中的特定更新器的配置可以通过在 updaters 对象的 config 环境变量下放置一个键来传递。用户应检查其 Clair 日志到双检查名称。

以下 YAML 片段详细介绍了一些 Clair 更新器可用的各种设置

重要

对于更多用户,不需要高级更新器配置。

配置 alpine 更新器
#...
updaters:
  sets:
    - apline
  config:
    alpine:
      url: https://secdb.alpinelinux.org/
#...
Copy to Clipboard Toggle word wrap
配置 debian 更新器
#...
updaters:
  sets:
    - debian
  config:
    debian:
      mirror_url: https://deb.debian.org/
      json_url: https://security-tracker.debian.org/tracker/data/json
#...
Copy to Clipboard Toggle word wrap
配置 clair.cvs 更新器
#...
updaters:
  config:
    clair.cvss:
      url: https://nvd.nist.gov/feeds/json/cve/1.1/
#...
Copy to Clipboard Toggle word wrap
配置 oracle updater
#...
updaters:
  sets:
    - oracle
  config:
    oracle-2023-updater:
      url:
        - https://linux.oracle.com/security/oval/com.oracle.elsa-2023.xml.bz2
    oracle-2022-updater:
      url:
        - https://linux.oracle.com/security/oval/com.oracle.elsa-2022.xml.bz2
#...
Copy to Clipboard Toggle word wrap
配置照片更新器
#...
updaters:
  sets:
    - photon
  config:
    photon:
      url: https://packages.vmware.com/photon/photon_oval_definitions/
#...
Copy to Clipboard Toggle word wrap
配置 rhel updater
#...
updaters:
  sets:
    - rhel
  config:
    rhel:
      url: https://access.redhat.com/security/data/oval/v2/PULP_MANIFEST
      ignore_unpatched: true 
1

#...
Copy to Clipboard Toggle word wrap
1
布尔值.是否包含有关没有相应补丁或更新的漏洞的信息。
配置 rhcc 更新器
#...
updaters:
  sets:
    - rhcc
  config:
    rhcc:
      url: https://access.redhat.com/security/data/metrics/cvemap.xml
#...
Copy to Clipboard Toggle word wrap
配置使用更新器
#...
updaters:
  sets:
    - suse
  config:
    suse:
      url: https://support.novell.com/security/oval/
#...
Copy to Clipboard Toggle word wrap
配置 ubuntu 更新器
#...
updaters:
  config:
    ubuntu:
      url: https://api.launchpad.net/1.0/
      name: ubuntu
      force: 
1

        - name: focal 
2

          version: 20.04 
3

#...
Copy to Clipboard Toggle word wrap
1
用于强制在生成的 UpdaterSet 中包含特定发行版和版本详情,而不考虑它们的状态。如果要确保更新器配置中一致包含特定的发行版和版本,则很有用。
2
指定您要强制包含在 UpdaterSet 中的发布名称。
3
指定您要强制进入 UpdaterSet 的发行版本。
配置 osv updater
#...
updaters:
  sets:
    - osv
  config:
    osv:
      url: https://osv-vulnerabilities.storage.googleapis.com/
      allowlist: 
1

        - npm
        - pypi
#...
Copy to Clipboard Toggle word wrap
1
允许的生态系统列表。如果未设置,则允许所有生态系统。必须为小写。有关支持的生态系统列表,请查看有关 定义的生态系统 的文档。

2.5.4. 禁用 Clair Updater 组件

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

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

#...
matcher:
  disable_updaters: true
#...
Copy to Clipboard Toggle word wrap

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

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

在这个版本中,如果漏洞的 CVSS 分数在分布分数的 2 级内,则 Red Hat Quay UI 默认存在分发的分数。例如:

Clair v4.2 data display

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

Clair v4 data display

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

2.7.1. 启用 FIPS 合规性

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

前提条件

  • 如果您运行 Red Hat Quay 的独立部署,则您的 Red Hat Enterprise Linux (RHEL)部署是版本 8 或更高版本,并启用 FIPS。
  • 如果要在 OpenShift Container Platform 上部署 Red Hat Quay,OpenShift Container Platform 是版本 4.10 或更高版本。
  • 您的 Red Hat Quay 版本为 3.5.0 或更高版本。
  • 如果您在 IBM Power 或 IBM Z 集群中使用 OpenShift Container Platform 上的 Red Hat Quay:

    • OpenShift Container Platform 版本 4.14 或更高版本是必需的
    • 需要 Red Hat Quay 版本 3.10 或更高版本
  • 您有 Red Hat Quay 部署的管理特权。

流程

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

    ---
    FEATURE_FIPS = true
    ---
    Copy to Clipboard Toggle word wrap

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

部分 II. Red Hat Quay 中的 Clair

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

第 3 章 在独立 Red Hat Quay 部署中设置 Clair

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

流程

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

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

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

    $ 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:5432 \
      -v /home/<user-name>/quay-poc/postgres-clairv4:/var/lib/pgsql/data:Z \
      registry.redhat.io/rhel8/postgresql-15
    Copy to Clipboard Toggle word wrap
  4. 为您的 Clair 部署安装 PostgreSQL uuid-ossp 模块:

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

    输出示例

    CREATE EXTENSION
    Copy to Clipboard Toggle word wrap

    注意

    Clair 需要 uuid-ossp 扩展添加到其 PostgreSQL 数据库中。对于具有适当特权的用户,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.15.1 config secret
    Copy to Clipboard Toggle word wrap
  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/
    Copy to Clipboard Toggle word wrap
  11. 为您的 Clair 配置文件创建一个文件夹,例如:

    $ mkdir /etc/opt/clairv4/config/
    Copy to Clipboard Toggle word wrap
  12. 进入 Clair 配置文件夹:

    $ cd /etc/opt/clairv4/config/
    Copy to Clipboard Toggle word wrap
  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
      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"
    Copy to Clipboard Toggle word wrap

    有关 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.15.1
    Copy to Clipboard Toggle word wrap
    注意

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

3.1. 升级 Clair PostgreSQL 数据库

如果要将 Red Hat Quay 升级到 13,则必须将 Clair PostgreSQL 数据库版本从 PostgreSQL 版本 13 → 版本 15 迁移。这需要关闭 Clair PostgreSQL 13 数据库并运行迁移脚本来启动该进程。

使用以下步骤将 Clair PostgreSQL 数据库从版本 13 升级到 15。

重要

在迁移过程成功后,Clair 安全扫描可能会临时中断。

流程

  1. 输入以下命令停止 Red Hat Quay 容器:

    $ sudo podman stop <quay_container_name>
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来停止 Clair 容器:

    $ sudo podman stop <clair_container_id>
    Copy to Clipboard Toggle word wrap
  3. 从 SCLOrg 的数据迁移流程运行以下 Podman 进程,它允许从远程 PostgreSQL 服务器迁移数据: https://github.com/sclorg/postgresql-container/tree/master/13#data-migration

    $ sudo podman run -d --name <clair_migration_postgresql_database> 
    1
    
      -e POSTGRESQL_MIGRATION_REMOTE_HOST=<container_ip_address> \ 
    2
    
      -e POSTGRESQL_MIGRATION_ADMIN_PASSWORD=remoteAdminP@ssword \
      -v </host/data/directory:/var/lib/pgsql/data:Z> \ 
    3
    
      [ OPTIONAL_CONFIGURATION_VARIABLES ]
      registry.redhat.io/rhel8/postgresql-15
    Copy to Clipboard Toggle word wrap
    1
    为您的 Clair PostgreSQL 15 迁移数据库插入名称。
    2
    您的新 Clair PostgreSQL 15 数据库容器 IP 地址。可以通过运行以下命令来获取: sudo podman inspect -f "{{.NetworkSettings.IPAddress}}" postgresql-quay
    3
    您必须指定与初始 Clair PostgreSQL 13 部署中不同的卷挂载点,并修改上述目录的访问控制列表。例如:
    $ mkdir -p /host/data/clair-postgresql15-directory
    Copy to Clipboard Toggle word wrap
    $ setfacl -m u:26:-wx /host/data/clair-postgresql15-directory
    Copy to Clipboard Toggle word wrap

    这可防止数据被新容器覆盖。

  4. 停止 Clair PostgreSQL 13 容器:

    $ sudo podman stop <clair_postgresql13_container_name>
    Copy to Clipboard Toggle word wrap
  5. 完成 PostgreSQL 迁移后,使用步骤 3 中的新数据卷挂载运行 Clair PostgreSQL 15 容器,例如 </ host/data/clair-postgresql15-directory:/var/lib/postgresql/data>

    $ sudo podman run -d --rm --name <postgresql15-clairv4> \
      -e POSTGRESQL_USER=<clair_username> \
      -e POSTGRESQL_PASSWORD=<clair_password> \
      -e POSTGRESQL_DATABASE=<clair_database_name> \
      -e POSTGRESQL_ADMIN_PASSWORD=<admin_password> \
      -p 5433:5432 \
      -v </host/data/clair-postgresql15-directory:/var/lib/postgresql/data:Z> \
        registry.redhat.io/rhel8/postgresql-15
    Copy to Clipboard Toggle word wrap
  6. 输入以下命令启动 Red Hat Quay 容器:

    $ sudo podman run -d --rm -p 80:8080 -p 443:8443 --name=quay \
    -v /home/<quay_user>/quay-poc/config:/conf/stack:Z \
    -v /home/<quay_user>/quay-poc/storage:/datastorage:Z \
    {productrepo}/{quayimage}:{productminv}
    Copy to Clipboard Toggle word wrap
  7. 输入以下命令启动 Clair 容器:

    $ sudo podman run -d --name clairv4 \
    -p 8081:8081 -p 8088:8088 \
    -e CLAIR_CONF=/clair/config.yaml \
    -e CLAIR_MODE=combo \
    registry.redhat.io/quay/clair-rhel8:{productminv}
    Copy to Clipboard Toggle word wrap

如需更多信息,请参阅 数据迁移

3.2. 使用带有上游 Red Hat Quay 的 Clair

对于大多数用户,不需要从当前版本(4.8)中独立升级 Clair。然而,在某些情况下,出于各种原因,客户可能希望从 上游存储库 中拉取 Clair 镜像,如特定程序错误修复或尝试尚未发布下游的新功能。您可以使用 Red Hat Quay 运行 Clair 的上游版本。

重要

Clair 的上游版本还没有经过全面测试,以便与 Red Hat Quay 的兼容性。因此,这个组合可能会导致部署出现问题。

流程

  1. 如果 Clair 正在运行,输入以下命令来停止 Clair:

    $ podman stop <clairv4_container_name>
    Copy to Clipboard Toggle word wrap
  2. 导航到 上游存储库,找到要使用的 Clair 版本,并将它拉取到本地机器。例如:

    $ podman pull quay.io/projectquay/clair:nightly-2024-02-03
    Copy to Clipboard Toggle word wrap
  3. 使用容器镜像启动 Clair,从您创建的文件中挂载在配置中:

    $ 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 \
    quay.io/projectquay/clair:nightly-2024-02-03
    Copy to Clipboard Toggle word wrap

第 4 章 OpenShift Container Platform 上的 Clair

要在 OpenShift Container Platform 上的 Red Hat Quay 部署上设置 Clair v4 (Clair),建议使用 Red Hat Quay Operator。默认情况下,Red Hat Quay Operator 会随 Red Hat Quay 部署一起安装或升级 Clair 部署,并自动配置 Clair。

第 5 章 测试 Clair

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

先决条件

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

流程

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

    $ podman pull ubuntu:20.04
    Copy to Clipboard Toggle word wrap
  2. 输入以下命令将镜像标记到 registry:

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

    $ sudo podman push --tls-verify=false quay-server.example.com/quayadmin/ubuntu:20.04
    Copy to Clipboard Toggle word wrap
  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 功能。

第 6 章 Unmanaged Clair 配置

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

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

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

重要

您不能为 Red Hat Quay 和 Clair 部署使用相同的外部管理的 PostgreSQL 数据库。您的 PostgreSQL 数据库还必须与其他工作负载共享,因为在连接密集型工作负载(如 Red Hat Quay 或 Clair)时,它可能会耗尽 PostgreSQL 端的自然连接限制。另外,Red Hat Quay 或 Clair 不支持 pgBouncer,因此这不是解决这个问题的选项。

流程

  • 在 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
    Copy to Clipboard Toggle word wrap

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

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

注意

以下流程使用 SSL/TLS 认证设置 Clair。要查看不使用 SSL/TLS 认证设置 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
    Copy to Clipboard Toggle word wrap

    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
    Copy to Clipboard Toggle word wrap

    注意
    • 数据库证书挂载到 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>
    Copy to Clipboard Toggle word wrap
    注意

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

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

    $ oc get pods -n <namespace>
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                               READY   STATUS    RESTARTS   AGE
    f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2   1/1     Running   0          7s
    Copy to Clipboard Toggle word wrap

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

  • 当用户想要禁用特定的更新器资源时。
  • 当用户在断开连接的环境中运行 Red Hat Quay 时。有关在断开连接的环境中运行 Clair 的更多信息,请参阅 断开连接的环境中的 Clair

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

7.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
    Copy to Clipboard Toggle word wrap

OpenShift Container Platform 上的 Red Hat Quay 允许用户提供自己的 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
    Copy to Clipboard Toggle word wrap

    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
    Copy to Clipboard Toggle word wrap

    注意
    • 数据库证书挂载到 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>
    Copy to Clipboard Toggle word wrap
    注意
    • 更新后,提供的 clair-config.yaml 文件会挂载到 Clair pod 中。不提供的任何字段都会使用 Clair 配置模块自动填充默认值。
  3. 您可以点击 Build History 页面中的提交或运行 oc get pods -n <namespace > 来检查 Clair pod 的状态。例如:

    $ oc get pods -n <namespace>
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                               READY   STATUS    RESTARTS   AGE
    f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2   1/1     Running   0          7s
    Copy to Clipboard Toggle word wrap

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

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

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

注意

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

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

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

使用以下步骤为 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
    Copy to Clipboard Toggle word wrap
    注意

    未正式,可以下载 clairctl 工具

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

    $ chmod u+x ./clairctl
    Copy to Clipboard Toggle word wrap

使用以下步骤检索和解码 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
    Copy to Clipboard Toggle word wrap
  2. 更新 clair-config.yaml 文件,使 disable_updatersairgap 参数设置为 True,例如:

    ---
    indexer:
      airgap: true
    ---
    matcher:
      disable_updaters: true
    ---
    Copy to Clipboard Toggle word wrap

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

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

先决条件

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

流程

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

    $ ./clairctl --config ./config.yaml export-updaters updates.gz
    Copy to Clipboard Toggle word wrap

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

先决条件

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

流程

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

    $ oc get svc -n quay-enterprise
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    ...
    Copy to Clipboard Toggle word wrap

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

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

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

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

先决条件

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

流程

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

    $ ./clairctl --config ./clair-config.yaml import-updaters updates.gz
    Copy to Clipboard Toggle word wrap

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

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

流程

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

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

    $ chmod u+x ./clairctl
    Copy to Clipboard Toggle word wrap

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

先决条件

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

流程

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

    $ mkdir /etc/clairv4/config/
    Copy to Clipboard Toggle word wrap
  2. 创建一个 Clair 配置文件,并将 disable_updaters 参数设置为 True,例如:

    ---
    indexer:
      airgap: true
    ---
    matcher:
      disable_updaters: true
    ---
    Copy to Clipboard Toggle word wrap
  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.15.1
    Copy to Clipboard Toggle word wrap

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

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

先决条件

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

流程

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

    $ ./clairctl --config ./config.yaml export-updaters updates.gz
    Copy to Clipboard Toggle word wrap

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

先决条件

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

流程

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

    $ oc get svc -n quay-enterprise
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    ...
    Copy to Clipboard Toggle word wrap

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

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

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

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

先决条件

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

流程

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

    $ ./clairctl --config ./clair-config.yaml import-updaters updates.gz
    Copy to Clipboard Toggle word wrap

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

Clair 的 Red Hat Enterprise Linux (RHEL)扫描程序依赖于通用产品枚举(CPE)文件,将 RPM 软件包映射到对应的安全数据,以生成匹配的结果。红帽产品安全团队会定期维护并定期更新这些文件。

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

Expand
表 8.1. Clair cp 映射文件
CPE到 JSON 映射文件的链接

repos2cpe

Red Hat Repository-to-CPE JSON

names2repos

Red Hat Name-to-Repos JSON.

默认情况下,Clair 的 indexer 包含 Clair 容器中的 repos2 cpe 和 name2repos 数据文件。这意味着您可以在 clair-config.yaml 文件中引用 /data/repository-to-cpe.json/data/container-name-repos-map.json,而无需额外的配置。

重要

虽然红帽产品安全团队会定期更新 repos2cpe 和 name 2repos 文件,但 Clair 容器中包含的版本仅通过 Red Hat Quay 版本(如 3.14.1 → 3.14.2)进行更新。这可能会导致最新的 CPE 文件和与 Clair 捆绑的文件之间的差异"。

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

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

indexer:
  scanner:
    repo:
      rhel-repository-scanner:
        repo2cpe_mapping_file: /data/repository-to-cpe.json
    package:
      rhel_containerscanner:
        name2repos_mapping_file: /data/container-name-repos-map.json
Copy to Clipboard Toggle word wrap

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

第 9 章 Clair 配置概述

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

$ clair -conf ./path/to/config.yaml -mode indexer
Copy to Clipboard Toggle word wrap

或者

$ clair -conf ./path/to/config.yaml -mode matcher
Copy to Clipboard Toggle word wrap

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

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

9.1. 在代理环境中使用 Clair 的信息

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

  • HTTP_PROXY

    $ export HTTP_PROXY=http://<user_name>:<password>@<proxy_host>:<proxy_port>
    Copy to Clipboard Toggle word wrap
  • HTTPS_PROXY.

    $ export HTTPS_PROXY=https://<user_name>:<password>@<proxy_host>:<proxy_port>
    Copy to Clipboard Toggle word wrap
  • SSL_CERT_DIR

    $ export SSL_CERT_DIR=/<path>/<to>/<ssl>/<certificates>
    Copy to Clipboard Toggle word wrap
  • NO_PROXY

    $ export NO_PROXY=<comma_separated_list_of_hosts_and_domains>
    Copy to Clipboard Toggle word wrap

如果您使用带有 Clair 更新器 URL 的环境中的代理服务器,您必须识别哪些 URL 需要添加到代理允许列表中,以确保 Clair 可以访问它们。例如: osv updater 需要访问 https://osv-vulnerabilities.storage.googleapis.com 来获取生态系统数据转储。在这种情况下,URL 必须添加到代理允许列表中。有关 updater URL 的完整列表,请参阅"Clair updater URL"。

您还必须确保将标准 Clair URL 添加到代理允许列表中:

  • https://search.maven.org/solrsearch/select
  • https://catalog.redhat.com/api/containers/
  • https://access.redhat.com/security/data/metrics/repository-to-cpe.json
  • https://access.redhat.com/security/data/metrics/container-name-repos-map.json

在配置代理服务器时,请考虑启用 Clair 和这些 URL 之间的无缝通信所需的任何身份验证要求或特定的代理设置。通过全面记录并解决这些注意事项,您可以确保在通过代理路由更新器流量的同时,有效处理 Clair 功能。

9.2. Clair 配置参考

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

http_listen_addr: ""
introspection_addr: ""
log_level: ""
tls: {}
indexer:
    connstring: ""
    scanlock_retry: 0
    layer_scan_concurrency: 5
    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: ""
Copy to Clipboard Toggle word wrap
注意

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

9.3. Clair 常规字段

下表描述了 Clair 部署可用的常规配置字段。

Expand
字段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 证书。必须是全链证书。

常规 Clair 字段的配置示例

以下示例显示了 Clair 配置。

常规 Clair 字段的配置示例

# ...
http_listen_addr: 0.0.0.0:6060
introspection_addr: 0.0.0.0:8089
log_level: info
# ...
Copy to Clipboard Toggle word wrap

9.4. Clair 索引器配置字段

下表描述了 Clair 的 indexer 组件的配置字段。

Expand
字段类型描述

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 作为值的映射。

indexer 配置示例

以下示例显示了 Clair 的 hypothetical indexer 配置。

indexer 配置示例

# ...
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
# ...
Copy to Clipboard Toggle word wrap

9.5. Clair 匹配程序配置字段

下表描述了 Clair 的 matcher 组件的配置字段。

注意

matchers 配置字段不同。

Expand
字段类型描述

matcher

对象

提供 Clair 匹配器节点配置。

.cache_age

字符串

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

.connstring

字符串

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

.max_conn_pool

整数

限制数据库连接池大小。

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

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

.indexer_addr

字符串

匹配者联系索引程序来创建漏洞报告。需要此索引器的位置。

默认值为 30m

.migrations

布尔值

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

.period

字符串

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

默认值为 6h

.disable_updaters

布尔值

是否运行后台更新。

Default: False

.update_retention

整数

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

默认值为 10m

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

matcher 配置示例

matcher 配置示例

# ...
matcher:
  connstring: >-
    host=<DB_HOST> port=5432 dbname=<matcher> user=<DB_USER> password=D<B_PASS>
    sslmode=verify-ca sslcert=/etc/clair/ssl/cert.pem sslkey=/etc/clair/ssl/key.pem
    sslrootcert=/etc/clair/ssl/ca.pem
  indexer_addr: http://clair-v4/
  disable_updaters: false
  migrations: true
  period: 6h
  update_retention: 2
# ...
Copy to Clipboard Toggle word wrap

9.6. Clair 匹配器配置字段

下表描述了 Clair 的 matchers 组件的配置字段。

注意

matcher 配置字段不同。

Expand
表 9.1. matchers 配置字段
字段类型描述

matchers

字符串数组

为树内 匹配器提供配置

.names

字符串

字符串值列表告知启用的匹配者的匹配者。如果值设为 null,则默认匹配者列表将运行。以下字符串被接受: alpine-matcher,aws-matcher,debian-matcher,gobin,java-maven,oracle,photon,python, rhel ,rhel -container-matcher,ruby, suse ,suse,ubuntu-matcher

.config

字符串

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

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

matchers 配置示例

以下示例显示了一个假设的 Clair 部署,它只需要 alpine,aws,debian,oracle matchers。

matchers 配置示例

# ...
matchers:
  names:
  - "alpine-matcher"
  - "aws"
  - "debian"
  - "oracle"
# ...
Copy to Clipboard Toggle word wrap

9.7. Clair updaters 配置字段

下表描述了 Clair 的 updaters 组件 的配置字段

Expand
表 9.2. 更新器配置字段
字段类型描述

updaters

对象

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

.sets

字符串

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

如果值设为 null,则默认更新程序将运行以下内容: alpine,aws,clair.cvss,debian,oracle,photon,osv,rhel,rhcc suse,0.11.0-

如果留空,则运行零 updaters。

.config

字符串

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

由 updater 集名称的键的映射,其中包含将提供给 updater 设置构造器的子对象。有关每个 updater 的子对象列表,请参阅"高级更新器配置"。

updaters 配置示例

在以下配置中,仅配置 rhel 集。也定义了特定于 rhel 更新器的 ignore_unpatched 变量。

updaters 配置示例

# ...
updaters:
  sets:
    - rhel
  config:
    rhel:
      ignore_unpatched: false
# ...
Copy to Clipboard Toggle word wrap

9.8. Clair 通知程序配置字段

Clair 的一般通知程序配置字段如下。

Expand
字段类型描述

通知程序

对象

提供 Clair notifier 节点配置。

.connstring

字符串

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

.migrations

布尔值

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

.indexer_addr

字符串

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

.matcher_addr

字符串

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

.poll_interval

字符串

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

.delivery_interval

字符串

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

.disable_summary

布尔值

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

通知程序配置示例

以下 通知程序 片断用于最小配置。

通知程序配置示例

# ...
notifier:
  connstring: >-
    host=DB_HOST port=5432 dbname=notifier user=DB_USER password=DB_PASS
    sslmode=verify-ca sslcert=/etc/clair/ssl/cert.pem sslkey=/etc/clair/ssl/key.pem
    sslrootcert=/etc/clair/ssl/ca.pem
  indexer_addr: http://clair-v4/
  matcher_addr: http://clair-v4/
  delivery_interval: 5s
  migrations: true
  poll_interval: 15s
  webhook:
    target: "http://webhook/"
    callback: "http://clair-notifier/notifier/api/v1/notifications"
    headers: ""
  amqp: null
  stomp: null
# ...
Copy to Clipboard Toggle word wrap

9.8.1. Clair Webhook 配置字段

以下 Webhook 字段可用于 Clair 通知程序环境。

Expand
表 9.3. Clair Webhook 字段

.webhook

对象

配置 webhook 交付通知程序。

.webhook.target

字符串

发送 webhook 的 URL。

.webhook.callback

字符串

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

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

.webhook.headers

字符串

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

Webhook 配置示例

Webhook 配置示例

# ...
notifier:
# ...
  webhook:
    target: "http://webhook/"
    callback: "http://clair-notifier/notifier/api/v1/notifications"
# ...
Copy to Clipboard Toggle word wrap

9.8.2. Clair amqp 配置字段

以下高级消息队列协议(AMQP)字段可用于 Clair 通知程序环境。

Expand

.amqp

对象

配置用于 AMQP 交付的通知。

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

.amqp.direct

布尔值

如果为 True,则通知程序会向配置的 AMQP 代理提供单独的通知(而不是回调)。

.amqp.rollup

整数

amqp.direct 设为 True 时,这个值会通知通知程序在直接发送中发送了多少通知。例如,如果 direct 设置为 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 证书的文件系统路径。

[NOTE] ==== Clair 还允许 SSL_CERT_DIR,如 Go crypto/x509 软件包所记录。====

.amqp.tls.key

字符串

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

AMQP 配置示例

以下示例显示了 Clair 的 hypothetical AMQP 配置。

AMQP 配置示例

# ...
notifier:
# ...
  amqp:
    exchange:
        name: ""
        type: "direct"
        durable: true
        auto_delete: false
    uris: ["amqp://user:pass@host:10000/vhost"]
    direct: false
    routing_key: "notifications"
    callback: "http://clair-notifier/notifier/api/v1/notifications"
    tls:
     root_ca: "optional/path/to/rootca"
     cert: "madatory/path/to/cert"
     key: "madatory/path/to/key"
# ...
Copy to Clipboard Toggle word wrap

9.8.3. Clair STOMP 配置字段

Clair 通知程序环境提供了以下简单文本导向型消息协议(STOMP)字段。

Expand
.stomp对象为 STOMP 发送配置通知程序。

.stomp.direct

布尔值

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

.stomp.rollup

整数

如果 stomp.direct 设为 True,则这个值会限制在单个直接发送中发送的通知数量。例如,如果 direct 设置为 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 的文件系统路径。

[NOTE] ==== 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。

STOMP 配置示例

以下示例显示了 Clair 的 hypothetical STOMP 配置。

STOMP 配置示例

# ...
notifier:
# ...
  stomp:
    desitnation: "notifications"
    direct: false
    callback: "http://clair-notifier/notifier/api/v1/notifications"
    login:
      login: "username"
      passcode: "passcode"
    tls:
     root_ca: "optional/path/to/rootca"
     cert: "madatory/path/to/cert"
     key: "madatory/path/to/key"
# ...
Copy to Clipboard Toggle word wrap

9.9. Clair 授权配置字段

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

Expand
字段类型描述

auth

对象

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

.psk

字符串

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

.psk.key

字符串

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

.psk.iss

字符串

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

授权配置示例

以下 授权 片断用于最小配置。

授权配置示例

# ...
auth:
  psk:
    key: MTU5YzA4Y2ZkNzJoMQ== 
1

    iss: ["quay"]
# ...
Copy to Clipboard Toggle word wrap

9.10. Clair trace 配置字段

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

Expand
字段类型描述

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 数量,以存储和分析。

trace 配置示例

以下示例显示了 Clair 的 hypothetical trace 配置。

trace 配置示例

# ...
trace:
  name: "jaeger"
  probability: 1
  jaeger:
    agent:
      endpoint: "localhost:6831"
    service_name: "clair"
# ...
Copy to Clipboard Toggle word wrap

9.11. Clair 指标配置字段

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

Expand
字段类型描述

metrics

对象

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

.name

字符串

使用的指标的名称。

.prometheus

字符串

配置 Prometheus 指标导出器。

.prometheus.endpoint

字符串

定义提供指标的路径。

指标配置示例

以下示例显示了 Clair 的 hypothetical 指标配置。

指标配置示例

# ...
metrics:
  name: "prometheus"
  prometheus:
    endpoint: "/metricsz"
# ...
Copy to Clipboard Toggle word wrap

法律通告

Copyright © 2025 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.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat