人工集成

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

局部图像分析

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

docker login {URL}

提示

对于云托管的 Artifactory,您可以通过在 Artifactory UI 中选择 Artifactory 存储库,然后选择“设置”按钮来找到 Artifactory 存储库的凭据。

远程图像分析

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

代理如何运作

Docker Scout Artifactory 代理可作为 Docker Hub 上的映像使用。该代理的工作原理是不断轮询 Artifactory 以获取新图像。当它找到新图像时,它会执行以下步骤:

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

代理记录映像的软件物料清单 (SBOM) 及其所有基础映像的 SBOM。记录的 SBOM 包括操作系统 (OS) 级和应用程序级程序或映像包含的依赖项。

此外,代理还会将有关映像的以下元数据发送到 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 Registry。

创建配置文件

您可以使用 JSON 文件配置代理。代理期望配置文件在启动时出现/opt/artifactory-agent/data/config.json

配置文件包含以下属性:

财产描述
agent_id代理的唯一标识符。
docker.organization_nameDocker 组织的名称。
docker.usernameDocker 组织中管理员用户的用户名。
docker.pat具有读写权限的管理员用户的个人访问令牌。
artifactory.base_urlArtifactory 实例的基本 URL。
artifactory.username代理将使用的具有读取权限的 Artifactory 用户的用户名。
artifactory.passwordArtifactory 用户的密码或 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 Scout Artifactory 代理 docker run。此命令为包含先前在/opt/artifactory-agent/data容器内创建的 JSON 配置文件的目录创建绑定挂载。确保您使用的安装路径是包含该 config.json文件的目录。

重要的

使用v1Artifactory 代理映像的标签。不要使用该latest标签,因为这样做可能会导致重大更改。

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

分析预先存在的数据

默认情况下,代理会在创建和更新图像时对其进行检测和分析。如果您想使用代理来分析预先存在的图像,可以使用回填模式。使用--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 Dashboard 中查看镜像分析结果。

  1. 转到 Docker Scout 仪表板中的图像页面。

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

  2. 选择列表中的图像。

  3. 选择标签。

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