将 Docker Scout 与 Artifactory 集成
将 Docker Scout 与 JFrog Artifactory 集成后,您可以自动对 Artifactory 注册表中的镜像运行镜像分析。
本地镜像分析
您可以使用 Docker Desktop 或 Docker CLI 在本地分析 Artifactory 镜像的漏洞。您首先需要使用 docker login
命令向 JFrog Artifactory 进行身份验证。例如
docker login {URL}
提示
对于云托管的 Artifactory,您可以在 Artifactory UI 中选择您的 Artifactory 仓库,然后点击为我设置 (Set Me Up) 按钮来找到凭据。
远程镜像分析
要自动分析在远程环境中运行的镜像,您需要部署 Docker Scout Artifactory 代理。该代理是一个独立的服务,用于分析镜像并将结果上传到 Docker Scout。您可以使用Docker Scout 仪表盘查看结果。
代理工作原理
Docker Scout Artifactory 代理以Docker Hub 上的镜像形式提供。该代理通过持续轮询 Artifactory 以查找新镜像来工作。当找到新镜像时,它会执行以下步骤:
- 从 Artifactory 拉取镜像
- 分析镜像
- 将分析结果上传到 Docker Scout
代理记录镜像的软件物料清单 (SBOM) 及其所有基础镜像的 SBOM。记录的 SBOM 包括镜像中包含的操作系统 (OS) 级别和应用程序级别的程序或依赖项。
此外,代理还会将有关镜像的以下元数据发送到 Docker Scout:
- 镜像的源仓库 URL 和提交 SHA
- 构建指令
- 构建日期
- 标签和摘要 (digest)
- 目标平台
- 层大小
代理绝不传输镜像本身,也不传输镜像内的任何数据,例如代码、二进制文件和层 blob。
代理不检测和分析预先存在的镜像。它仅分析在代理运行时出现在注册表中的镜像。
部署代理
本节介绍部署 Artifactory 代理的步骤。
先决条件
在部署代理之前,请确保您满足先决条件:
- 托管代理的服务器可以通过网络访问以下资源:
- 您的 JFrog Artifactory 实例
hub.docker.com
,端口 443,用于与 Docker 进行身份验证api.dso.docker.com
,端口 443,用于将数据传输到 Docker Scout
- 注册表是 Docker V2 注册表。不支持 V1 注册表。
代理支持所有版本的 JFrog Artifactory 和 JFrog Container Registry。
创建配置文件
您可以使用 JSON 文件配置代理。代理期望在启动时配置文件位于 /opt/artifactory-agent/data/config.json
。
配置文件包括以下属性:
属性 | 描述 |
---|---|
agent_id | 代理的唯一标识符。 |
docker.organization_name | Docker 组织的名称。 |
docker.username | Docker 组织中管理员用户的用户名。 |
docker.pat | 具有读写权限的管理员用户的个人访问令牌 (PAT)。 |
artifactory.base_url | Artifactory 实例的基础 URL。 |
artifactory.username | 代理将使用的具有读取权限的 Artifactory 用户的用户名。 |
artifactory.password | Artifactory 用户的密码或 API 令牌。 |
artifactory.image_filters | 可选:要分析的仓库和镜像列表。 |
如果您未在 artifactory.image_filters
中指定任何仓库,代理将对您的 Artifactory 实例中的所有镜像运行镜像分析。
以下代码片段显示了一个示例配置:
{
"agent_id": "acme-prod-agent",
"docker": {
"organization_name": "acme",
"username": "mobythewhale",
"pat": "dckr_pat__dsaCAs_xL3kNyupAa7dwO1alwg"
},
"artifactory": [
{
"base_url": "https://acme.jfrog.io",
"username": "acmeagent",
"password": "hayKMvFKkFp42RAwKz2K",
"image_filters": [
{
"repository": "dev-local",
"images": ["internal/repo1", "internal/repo2"]
},
{
"repository": "prod-local",
"images": ["staging/repo1", "prod/repo1"]
}
]
}
]
}
创建配置文件并将其保存在您计划运行代理的服务器上的某个位置。例如,/var/opt/artifactory-agent/config.json
。
运行代理
以下示例展示了如何使用 docker run
运行 Docker Scout Artifactory 代理。此命令会为之前创建的 JSON 配置文件所在的目录在容器内部创建绑定挂载点 /opt/artifactory-agent/data
。请确保您使用的挂载路径是包含 config.json
文件的目录。
重要提示
使用 Artifactory 代理镜像的
v1
标签。不要使用latest
标签,因为这可能会导致重大更改。
$ docker run \
--mount type=bind,src=/var/opt/artifactory-agent,target=/opt/artifactory-agent/data \
docker/artifactory-agent:v1
分析现有数据
默认情况下,代理会检测并分析创建和更新的镜像。如果您想使用代理分析预先存在的镜像,可以使用回填模式 (backfill mode)。使用命令行选项 --backfill-from=TIME
(其中 TIME
是 ISO 8601 格式的时间)以回填模式运行代理。如果您使用此选项,代理会分析从该时间到代理启动时当前时间之间推送的所有镜像,然后退出。
例如
$ docker run \
--mount type=bind,src=/var/opt/artifactory-agent,target=/opt/artifactory-agent/data \
docker/artifactory-agent:v1 --backfill-from=2022-04-10T10:00:00Z
多次运行回填时,代理不会分析已分析过的镜像。要强制重新分析,请提供命令行标志 --force
。
查看分析结果
您可以在 Docker Scout 仪表盘中查看镜像分析结果。
前往 Docker Scout 仪表盘中的镜像页面。
此页面显示您的组织中已启用 Docker Scout 的仓库。
在列表中选择镜像。
选择标签。
选择标签后,您将进入该标签的漏洞报告页面。在此页面上,您可以选择查看镜像中的所有漏洞,或特定层中引入的漏洞。您还可以按严重程度以及是否有可用修复版本来过滤漏洞。