将 Docker Scout 与 Artifactory 集成

通过将 Docker Scout 与 JFrog Artifactory 集成,您可以运行镜像分析 自动对 Artifactory 注册表中的镜像进行操作。

本地镜像分析

您可以使用 Docker Desktop 或 Docker CLI 在本地分析 Artifactory 镜像中的漏洞。您首先需要使用 docker login 命令对 JFrog Artifactory 进行身份验证。例如:

docker login {URL}

提示

对于云托管的 Artifactory,您可以通过以下方式找到 Artifactory 存储库的凭证 在 Artifactory UI 中选择它,然后选择 Set Me Up 按钮。

远程镜像分析

要自动分析在远程环境中运行的镜像,您需要部署 Docker Scout Artifactory 代理。代理是一个 独立服务,用于分析镜像并将结果上传到 Docker Scout。 您可以使用 Docker Scout Dashboard 查看结果。

代理的工作原理

Docker Scout Artifactory 代理在 Docker Hub 上作为镜像提供。代理通过持续轮询来工作 Artifactory 用于新镜像。当它找到新镜像时,它会执行以下操作 步骤:

  1. 从 Artifactory 中提取镜像
  2. 分析镜像
  3. 将分析结果上传到 Docker Scout

代理记录镜像的软件物料清单 (SBOM),并且 SBOM 的所有基础镜像。记录的 SBOM 包括操作 镜像 包含。

此外,代理还将有关镜像的以下元数据发送到 Docker Scout:

  • 镜像的源存储库 URL 和提交 SHA
  • 构建说明
  • 构建日期
  • 标签和摘要
  • 目标平台
  • 图层大小

代理从不处理镜像 本身,以及镜像中的任何数据,例如代码、二进制文件和层 blob。

代理不会检测和分析预先存在的镜像。它只分析 代理运行时显示在注册表中的镜像。

部署代理

本节介绍部署 Artifactory 代理的步骤。

先决条件

在部署代理之前,请确保满足以下先决条件:

  • 托管代理的服务器可以通过 网络:
    • 您的 JFrog Artifactory 实例
    • hub.docker.com,端口 443,用于使用 Docker 进行身份验证
    • api.dso.docker.com,端口 443,用于将数据交易到 Docker Scout
  • 注册表是 Docker V2 注册表。不支持 V1 注册表。

代理支持所有版本的 JFrog Artifactory 和 JFrog Container 注册表。

创建配置文件

您可以使用 JSON 文件配置代理。代理需要配置 文件。/opt/artifactory-agent/data/config.json

配置文件包括以下属性:

财产描述
agent_id代理的唯一标识符。
docker.organization_nameDocker 组织的名称。
docker.usernameDocker 组织中 admin 用户的用户名。
docker.pat具有读取和写入权限的管理员用户的个人访问令牌。
artifactory.base_urlArtifactory 实例的基 URL。
artifactory.username代理将使用的具有读取权限的 Artifactory 用户的用户名。
artifactory.passwordArtifactory 用户的密码或 API 令牌。
artifactory.image_filters可选:要分析的存储库和镜像的列表。

如果未在 、 中指定任何存储库,则代理 对 Artifactory 实例中的所有镜像运行镜像分析。artifactory.image_filters

以下代码片段显示了一个示例配置:

{
  "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 Scout Artifactory 代理。此命令为包含 之前在 内部创建的 JSON 配置文件 容器。确保您使用的挂载路径是包含该文件的目录。docker run/opt/artifactory-agent/dataconfig.json

重要

使用 Artifactory 代理镜像的标记。不要将标签用作 这样做可能会导致重大更改。v1latest

$ docker run \
  --mount type=bind,src=/var/opt/artifactory-agent,target=/opt/artifactory-agent/data \
  docker/artifactory-agent:v1

分析预先存在的数据

默认情况下,代理会在创建镜像时检测并分析镜像,并且 更新。如果要使用代理分析预先存在的镜像,请使用 可以使用回填模式。使用命令行选项 其中 是 ISO 8601 格式的时间,用于在回填模式下运行代理。 如果使用此选项,代理将分析在该 time 和代理启动然后退出的当前时间。--backfill-from=TIMETIME

例如:

$ 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

多次运行回填时,代理不会分析满足以下条件的镜像 它已经被分析过了。要强制重新分析,请提供命令 line 标志。--force

查看分析结果

您可以在 Docker Scout Dashboard 中查看镜像分析结果。

  1. 转到 Docker Scout 控制面板中的 Images 页面

    此页面显示组织中启用了 Docker Scout 的存储库。

  2. 在列表中选择镜像。

  3. 选择标记。

选择标签后,您将转到该标签的漏洞报告 标记。在这里,您可以选择是否要查看镜像中的所有漏洞, 或特定层中引入的漏洞。您还可以筛选 按严重性划分的漏洞,以及是否有可用的修复版本。