quality.images.openshift.io/<qualityType>.<providerId>: {}
为确保容器内内容的安全,您需要从受信任的基础镜像(例如 Red Hat 通用基础镜像)开始,并添加受信任的软件。要检查容器镜像的持续安全性,Red Hat 和第三方都提供用于扫描镜像的工具。
应用程序和基础设施由现成的组件组成,其中许多是开源软件包,例如 Linux 操作系统、JBoss Web Server、PostgreSQL 和 Node.js。
这些软件包的容器化版本也可供使用。但是,您需要知道这些软件包最初来自哪里,使用了哪些版本,谁构建了它们,以及它们内部是否存在任何恶意代码。
需要回答的一些问题包括
容器内部的内容会危及您的基础设施吗?
应用程序层是否存在已知漏洞?
运行时和操作系统层是否是最新的?
通过从 Red Hat 通用基础镜像 (UBI) 构建容器,您可以确保容器镜像的基础由 Red Hat Enterprise Linux 中包含的相同 RPM 打包软件组成。使用或重新分发 UBI 镜像无需订阅。
为了确保容器本身的持续安全性,可以直接从 RHEL 使用或添加到 OpenShift Container Platform 的安全扫描功能可以在您使用的镜像存在漏洞时发出警报。OpenSCAP 镜像扫描功能在 RHEL 中可用,并且可以添加 Red Hat Quay 容器安全操作符 来检查 OpenShift Container Platform 中使用的容器镜像。
要创建容器化应用程序,通常从受信任的基础镜像开始,该镜像提供通常由操作系统提供的组件。这些包括库、实用程序和应用程序期望在操作系统的文件系统中看到的其他功能。
Red Hat 通用基础镜像 (UBI) 的创建是为了鼓励任何构建自己容器的人都从完全由 Red Hat Enterprise Linux rpm 软件包和其他内容组成的镜像开始。这些 UBI 镜像会定期更新以保持与安全补丁同步,并且可以免费使用和重新分发,其中包含您自己的软件的构建容器镜像。
搜索 Red Hat 生态系统目录 以查找和检查不同 UBI 镜像的运行状况。作为创建安全容器镜像的人员,您可能会对这两种类型的 UBI 镜像感兴趣
UBI:提供适用于 RHEL 7、8 和 9 的标准 UBI 镜像(ubi7/ubi
、ubi8/ubi
和 ubi9/ubi
),以及基于这些系统的精简镜像(ubi7/ubi-minimal
、ubi8/ubi-mimimal
和 ubi9/ubi-minimal
)。所有这些镜像都预先配置为指向 RHEL 软件的免费资源库,您可以使用标准的 yum
和 dnf
命令将其添加到您构建的容器镜像中。Red Hat 鼓励用户在其他发行版(例如 Fedora 和 Ubuntu)上使用这些镜像。
Red Hat 软件集合:在 Red Hat 生态系统目录中搜索 rhscl/
以查找创建的镜像,这些镜像可用作特定类型应用程序的基础镜像。例如,有 Apache httpd(rhscl/httpd-*
)、Python(rhscl/python-*
)、Ruby(rhscl/ruby-*
)、Node.js(rhscl/nodejs-*
)和 Perl(rhscl/perl-*
)rhscl 镜像。
请记住,虽然 UBI 镜像可免费获取和再分发,但 Red Hat 对这些镜像的支持仅通过 Red Hat 产品订阅提供。
有关如何在标准、精简和 init UBI 镜像上使用和构建的信息,请参阅 Red Hat Enterprise Linux 文档中的使用 Red Hat 通用基础镜像。
对于 Red Hat Enterprise Linux (RHEL) 系统,OpenSCAP 扫描可从 openscap-utils
软件包获得。在 RHEL 中,您可以使用 openscap-podman
命令扫描镜像中的漏洞。请参阅 Red Hat Enterprise Linux 文档中的扫描容器和容器镜像中的漏洞。
OpenShift Container Platform 使您能够利用 RHEL 扫描程序和您的 CI/CD 流程。例如,您可以集成静态代码分析工具(测试源代码中的安全缺陷)和软件成分分析工具(识别开源库并提供有关这些库的元数据,例如已知的漏洞)。
对于在 OpenShift Container Platform 中运行并从 Red Hat Quay 注册表中提取的容器镜像,您可以使用 Operator 列出这些镜像的漏洞。Red Hat Quay 容器安全 Operator 可添加到 OpenShift Container Platform 中,为添加到所选命名空间的镜像提供漏洞报告。
Red Hat Quay 的容器镜像扫描由Clair 执行。在 Red Hat Quay 中,Clair 可以搜索并报告基于 RHEL、CentOS、Oracle、Alpine、Debian 和 Ubuntu 操作系统软件构建的镜像中的漏洞。
OpenShift Container Platform 使用对象注解来扩展功能。外部工具(例如漏洞扫描程序)可以使用元数据注释镜像对象,以汇总结果并控制 pod 执行。本节描述此注解的识别格式,以便可以在控制台中可靠地将其用于向用户显示有用的数据。
存在不同类型的镜像质量数据,包括软件包漏洞和开源软件 (OSS) 许可证合规性。此外,此元数据可能有多个提供者。为此,已保留以下注解格式。
quality.images.openshift.io/<qualityType>.<providerId>: {}
组件 | 描述 | 可接受的值 |
---|---|---|
|
元数据类型 |
|
|
提供商 ID 字符串 |
|
quality.images.openshift.io/vulnerability.blackduck: {} quality.images.openshift.io/vulnerability.jfrog: {} quality.images.openshift.io/license.blackduck: {} quality.images.openshift.io/vulnerability.openscap: {}
镜像质量注解的值是结构化数据,必须符合以下格式。
字段 | 必需? | 描述 | 类型 |
---|---|---|---|
|
是 |
提供商显示名称 |
字符串 |
|
是 |
扫描时间戳 |
字符串 |
|
否 |
简短描述 |
字符串 |
|
是 |
信息来源或更多详细信息的 URL。必需,以便用户可以验证数据。 |
字符串 |
|
否 |
扫描程序版本 |
字符串 |
|
否 |
合规性通过或失败 |
布尔值 |
|
否 |
发现问题的摘要 |
列表(见下表) |
summary
字段必须符合以下格式。
字段 | 描述 | 类型 |
---|---|---|
|
组件的显示标签(例如,“严重”、“重要”、“中等”、“低”或“健康”) |
字符串 |
|
此组件的数据(例如,发现的漏洞数量或分数) |
字符串 |
|
组件索引,允许排序和分配图形表示。值为范围 |
整数 |
|
信息来源或更多详细信息的 URL。可选。 |
字符串 |
此示例显示具有漏洞摘要数据和合规性布尔值的镜像的 OpenSCAP 注解。
{
"name": "OpenSCAP",
"description": "OpenSCAP vulnerability score",
"timestamp": "2016-09-08T05:04:46Z",
"reference": "https://www.open-scap.org/930492",
"compliant": true,
"scannerVersion": "1.2",
"summary": [
{ "label": "critical", "data": "4", "severityIndex": 3, "reference": null },
{ "label": "important", "data": "12", "severityIndex": 2, "reference": null },
{ "label": "moderate", "data": "8", "severityIndex": 1, "reference": null },
{ "label": "low", "data": "26", "severityIndex": 0, "reference": null }
]
}
此示例显示具有健康索引数据和用于更多详细信息的外部 URL 的镜像的Red Hat 生态系统目录的容器镜像部分 注解。
{
"name": "Red Hat Ecosystem Catalog",
"description": "Container health index",
"timestamp": "2016-09-08T05:04:46Z",
"reference": "https://access.redhat.com/errata/RHBA-2016:1566",
"compliant": null,
"scannerVersion": "1.2",
"summary": [
{ "label": "Health index", "data": "B", "severityIndex": 1, "reference": null }
]
}
虽然镜像流对象是 OpenShift Container Platform 的最终用户操作的对象,但镜像对象是用安全元数据进行注释的。镜像对象是集群范围的,指向单个镜像,该镜像可能被许多镜像流和标签引用。
将 <image>
替换为镜像摘要,例如 sha256:401e359e0f45bfdcf004e258b72e253fd07fba8cc5c6f2ed4f4608fb119ecc2
$ oc annotate image <image> \
quality.images.openshift.io/vulnerability.redhatcatalog='{ \
"name": "Red Hat Ecosystem Catalog", \
"description": "Container health index", \
"timestamp": "2020-06-01T05:04:46Z", \
"compliant": null, \
"scannerVersion": "1.2", \
"reference": "https://access.redhat.com/errata/RHBA-2020:2347", \
"summary": "[ \
{ "label": "Health index", "data": "B", "severityIndex": 1, "reference": null } ]" }'
在大多数情况下,外部工具(例如漏洞扫描程序)会开发一个脚本或插件来监视镜像更新、执行扫描以及使用结果注释关联的镜像对象。此自动化通常调用 OpenShift Container Platform 4.17 REST API 来写入注解。有关 REST API 的一般信息,请参阅 OpenShift Container Platform REST API。
以下使用 curl
的示例调用会覆盖注解的值。请务必替换 <token>
、<openshift_server>
、<image_id>
和 <image_annotation>
的值。
$ curl -X PATCH \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/merge-patch+json" \
https://<openshift_server>:6443/apis/image.openshift.io/v1/images/<image_id> \
--data '{ <image_annotation> }'
以下是 PATCH
有效负载数据的示例。
{
"metadata": {
"annotations": {
"quality.images.openshift.io/vulnerability.redhatcatalog":
"{ 'name': 'Red Hat Ecosystem Catalog', 'description': 'Container health index', 'timestamp': '2020-06-01T05:04:46Z', 'compliant': null, 'reference': 'https://access.redhat.com/errata/RHBA-2020:2347', 'summary': [{'label': 'Health index', 'data': '4', 'severityIndex': 1, 'reference': null}] }"
}
}
}