第 6 章 Clair for Red Hat Quay
Clair v4 (Clair)是一个开源应用程序,它利用静态代码分析来解析镜像内容和报告影响内容的漏洞。Clair 与 Red Hat Quay 打包,并可用于独立和 Operator 部署。它可以在高度可扩展的配置中运行,其中组件可根据企业环境单独扩展。
6.1. Clair 配置概述 复制链接链接已复制到粘贴板!
Clair 由一个结构化的 YAML 文件配置。每个 Clair 节点都需要指定其将在其中运行的模式,以及通过 CLI 标志或环境变量的配置文件的路径。例如:
clair -conf ./path/to/config.yaml -mode indexer
$ clair -conf ./path/to/config.yaml -mode indexer
或者
clair -conf ./path/to/config.yaml -mode matcher
$ clair -conf ./path/to/config.yaml -mode matcher
以上命令各自使用相同的配置文件启动两个 Clair 节点。一个运行索引功能,另一个则运行匹配的功能。
如果需要,可以指定 Go 标准库所遵守的环境变量,例如:
- 
						
HTTP_PROXY - 
						
HTTPS_PROXY - 
						
SSL_CERT_DIR 
				如果您以 组合 模式运行 Clair,则必须在配置中提供索引器、匹配器和通知程序配置块。
			
6.1.1. Clair 配置参考 复制链接链接已复制到粘贴板!
以下 YAML 显示了一个 Clair 配置示例:
为了完整,以上 YAML 文件列出了每个键。使用此配置文件原样将导致一些选项不会正常设置默认值。
6.1.2. Clair 常规字段 复制链接链接已复制到粘贴板!
下面的部分描述了 Clair 部署的一般配置字段:
| 字段 | Typhttp_listen_ae | Description | 
|---|---|---|
|   http_listen_addr  |   字符串  |   配置公开 HTTP API 的位置。 
									默认:   | 
|   introspection_addr  |   字符串  |   配置 Clair 的指标和健康端点公开的位置。  | 
|   log_level  |   字符串  |   设置日志级别。需要以下字符串之一: debug-color、debug、info、warn、error、fatal、panic  | 
|   tls  |   字符串  |   包含提供 TLS/SSL 和 HTTP/2 的 HTTP API 配置的映射。  | 
|   .cert  |   字符串  |   要使用的 TLS 证书。必须是全链证书。  | 
6.1.3. Clair 索引器配置字段 复制链接链接已复制到粘贴板!
以下索引器配置字段可用于 Clair。
| 字段 | 类型 | Description | 
|---|---|---|
|   indexer  |   对象  |   提供 Clair 索引器节点配置。  | 
|   .airgap  |   布尔值  |   为索引器和获取者禁用对互联网的 HTTP 访问。允许私有 IPv4 和 IPv6 地址。数据库连接不受影响。  | 
|   .connstring  |   字符串  |   Postgres 连接字符串。接受格式为 URL 或 libpq 连接字符串。  | 
|   .index_report_request_concurrency  |   整数  |   
									速率限制索引报告创建请求的数量。把它设置为  
									如果超过并发状态,API 会返回   | 
|   .scanlock_retry  |   整数  |   代表秒的正整数。在清单扫描时并发索引器锁定,以避免冲突。这个值调整等待索引器轮询锁定的频率。  | 
|   .layer_scan_concurrency  |   整数  |   正整数限制并发层扫描的数量。Indexers 将同时匹配清单的层。这个值调整索引程序并行扫描的层数。  | 
|   .migrations  |   布尔值  |   索引器节点是否处理迁移到其数据库的迁移。  | 
|   .scanner  |   字符串  |   索引器配置。 扫描程序允许将配置选项传递给层扫描程序。如果设计这样做,扫描程序会将此配置传递给它。  | 
|   .scanner.dist  |   字符串  |   特定扫描程序名称和任意 YAML 作为值的映射。  | 
|   .scanner.package  |   字符串  |   特定扫描程序名称和任意 YAML 作为值的映射。  | 
|   .scanner.repo  |   字符串  |   特定扫描程序名称和任意 YAML 作为值的映射。  | 
6.1.4. Clair 匹配程序配置字段 复制链接链接已复制到粘贴板!
以下匹配器配置字段可用于 Clair。
						与 matchers 配置字段不同。
					
| 字段 | 类型 | Description | 
|---|---|---|
|   matcher  |   对象  |   提供 Clair 匹配器节点配置。  | 
|   .cache_age  |   字符串  |   控制用户应提示缓存响应的时间。  | 
|   .connstring  |   字符串  |   Postgres 连接字符串。接受格式为 URL 或 libpq 连接字符串。  | 
|   .max_conn_pool  |   整数  |   限制数据库连接池大小。 Clair 允许自定义连接池大小。这个数字直接设定同时允许的活跃数据库连接的数量。 这个参数将在以后的发行版本中被忽略。用户应该通过连接字符串进行配置。  | 
|   .indexer_addr  |   字符串  |   
									匹配者联系索引器来创建  
									默认值为   | 
|   .migrations  |   布尔值  |   匹配器节点是否处理迁移到其数据库的迁移。  | 
|   .period  |   字符串  |   决定新安全公告的更新频率。 
									默认值为   | 
|   .disable_updaters  |   布尔值  |   是否运行后台更新。  | 
|   .update_retention  |   整数  |   设置在垃圾回收周期之间保留的更新操作数量。这应该根据数据库大小限制设置为安全 MAX 值。 
									默认值为  
									如果提供小于   | 
6.1.5. Clair 匹配器配置字段 复制链接链接已复制到粘贴板!
以下 matchers 配置字段可用于 Clair。
						与 matcher 配置字段不同。
					
| 字段 | 类型 | Description | 
|---|---|---|
|   matchers  |   字符串数组  |   
									为树内   | 
|   .names  |   字符串  |   
									一个字符串值列表,用于告知匹配者工厂关于启用的匹配者信息。如果值设为   | 
|   .config  |   字符串  |   为特定匹配程序提供配置。 由匹配者名称的键的映射,其中包含将提供给 matchers 工厂构造器的子对象。例如: config:
  python:
    ignore_vulns:
      - CVE-XYZ
      - CVE-ABC
 | 
6.1.6. Clair updaters 配置字段 复制链接链接已复制到粘贴板!
以下 updaters 配置字段可用于 Clair。
| 字段 | 类型 | Description | 
|---|---|---|
|   updaters  |   对象  |   为匹配器的更新管理器提供配置。  | 
|   .sets  |   字符串  |   一个值列表,告知更新管理器要运行的更新程序。 
									如果值设为  如果留空,则运行零 updaters。  | 
|   .config  |   字符串  |   为特定更新器集提供配置。 由 updater 集名称的键的映射,其中包含将提供给 updater 设置构造器的子对象。例如: config:
  ubuntu:
    security_tracker_url: http://security.url
    ignore_distributions:
      - cosmic
 | 
6.1.7. Clair 通知程序配置字段 复制链接链接已复制到粘贴板!
以下通知程序配置字段可用于 Clair。
| 字段 | 类型 | Description | 
|---|---|---|
|   通知程序  |   对象  |   提供 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  |   布尔值  |   
									如果为   | 
|   .amqp.rollup  |   整数  |   
									当   | 
|   .amqp.exchange  |   对象  |   要连接的 AMQP 交换。  | 
|   .amqp.exchange.name  |   字符串  |   要连接的交换名称。  | 
|   .amqp.exchange.type  |   字符串  |   交换的类型。通常,以下之一: direct、fanout、topic、Header。  | 
|   .amqp.exchange.durability  |   布尔值  |   配置的队列是 durable。  | 
|   .amqp.exchange.auto_delete  |   布尔值  |   
									配置的队列是否使用   | 
|   .amqp.routing_key  |   字符串  |   每个通知的路由键的名称。  | 
|   .amqp.callback  |   字符串  |   
									如果   | 
|   .amqp.uris  |   字符串  |   要连接的一个或多个 AMQP 代理的列表,按优先级顺序进行。  | 
|   .amqp.tls  |   对象  |   配置到 AMQP 代理的 TLS/SSL 连接。  | 
|   .amqp.tls.root_ca  |   字符串  |   可以读取 root CA 的文件系统路径。  | 
|   .amqp.tls.cert  |   字符串  |   可以读取 TLS/SSL 证书的文件系统路径。 注意 
										Clair 还支持   | 
|   .amqp.tls.key  |   字符串  |   读取 TLS/SSL 私钥的文件系统路径。  | 
|   .stomp  |   对象  |   为 STOMP 发送配置通知程序。  | 
|   .stomp.direct  |   布尔值  |   
									如果为   | 
|   .stomp.rollup  |   整数  |   
									如果   | 
|   .stomp.callback  |   字符串  |   
									如果   | 
|   .stomp.destination  |   字符串  |   要发送通知的 STOMP 目的地。  | 
|   .stomp.uris  |   字符串  |   按顺序连接的一个或多个 STOMP 代理的列表。  | 
|   .stomp.tls  |   对象  |   配置到 STOMP 代理的 TLS/SSL 连接。  | 
|   .stomp.tls.root_ca  |   字符串  |   可以读取 root CA 的文件系统路径。 注意 
										Clair 还遵循   | 
|   .stomp.tls.cert  |   字符串  |   可以读取 TLS/SSL 证书的文件系统路径。  | 
|   .stomp.tls.key  |   字符串  |   读取 TLS/SSL 私钥的文件系统路径。  | 
|   .stomp.user  |   字符串  |   为 STOMP 代理配置登录详情。  | 
|   .stomp.user.login  |   字符串  |   要连接的 STOMP 登录。  | 
|   .stomp.user.passcode  |   字符串  |   要连接的 STOMP passcode。  | 
6.1.8. Clair 授权配置字段 复制链接链接已复制到粘贴板!
以下授权配置字段可用于 Clair。
| 字段 | 类型 | Description | 
|---|---|---|
|   auth  |   对象  |   
									定义 Clair 的外部和服务内 JWT 身份验证。如果定义了多个   | 
|   .psk  |   字符串  |   定义预共享密钥身份验证。  | 
|   .psk.key  |   字符串  |   所有方签名和验证 JWT 之间分发的共享 base64 编码密钥。  | 
|   .psk.iss  |   字符串  |   用于验证的 JWT 签发者列表。空列表接受 JWT 声明中的任何签发者。  | 
6.1.9. Clair trace 配置字段 复制链接链接已复制到粘贴板!
以下 trace 配置字段可用于 Clair。
| 字段 | 类型 | Description | 
|---|---|---|
|   trace  |   对象  |   定义基于 OpenTelemetry 的分布式追踪配置。  | 
|   .name  |   字符串  |   应用程序跟踪的名称将属于。  | 
|   .probability  |   整数  |   会发生 trace 的概率。  | 
|   .jaeger  |   对象  |   定义 Jaeger 追踪的值。  | 
|   .jaeger.agent  |   对象  |   定义配置发送到 Jaeger 代理的值。  | 
|   .jaeger.agent.endpoint  |   字符串  |   
									<   | 
|   .jaeger.collector  |   对象  |   为配置发送到 Jaeger 收集器定义值。  | 
|   .jaeger.collector.endpoint  |   字符串  |   
									<   | 
|   .jaeger.collector.username  |   字符串  |   Jaeger 用户名。  | 
|   .jaeger.collector.password  |   字符串  |   Jaeger 密码。  | 
|   .jaeger.service_name  |   字符串  |   在 Jaeger 中注册的服务名称。  | 
|   .jaeger.tags  |   字符串  |   用于提供额外的元数据的键值对。  | 
|   .jaeger.buffer_max  |   整数  |   在将内存缓冲到 Jaeger 后端前可缓冲的最大 span 数量,以存储和分析。  | 
6.1.10. Clair 指标配置字段 复制链接链接已复制到粘贴板!
以下指标配置字段可用于 Clair。
| 字段 | 类型 | Description | 
|---|---|---|
|   metrics  |   对象  |   定义基于 OpenTelemetry 的分布式追踪配置。  | 
|   .name  |   字符串  |   使用的指标的名称。  | 
|   .prometheus  |   字符串  |   配置 Prometheus 指标导出器。  | 
|   .prometheus.endpoint  |   字符串  |   定义提供指标的路径。  |