将 Docker Scout 与 Artifactory 集成

将 Docker Scout 与 JFrog Artifactory 集成,可让您自动对 Artifactory 仓库中的镜像执行分析。

本地镜像分析

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

docker login {URL}

提示

对于云托管的 Artifactory,您可以通过在 Artifactory 用户界面中选择您的 Artifactory 仓库,然后点击 Set Me Up 按钮来获取该仓库的凭据。

远程镜像分析

要自动分析远程环境中运行的镜像,您需要部署 Docker Scout Artifactory 代理。该代理是一个独立服务,用于分析镜像并将结果上传至 Docker Scout。 您可通过以下方式查看分析结果:Docker Scout 仪表板

代理的工作原理

Docker Scout Artifactory 代理可作为 Docker Hub 上的镜像获取。该代理通过持续轮询 Artifactory 来获取新镜像。当检测到新镜像时,它会执行以下步骤:

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

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

此外,该代理还会将以下关于镜像的元数据发送至 Docker Scout:

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

代理从不传输镜像本身,也不传输镜像内的任何数据,例如代码、Binaries和层快照。

代理无法检测和分析已存在的镜像。它仅分析在代理运行期间出现在镜像仓库中的镜像。

部署代理

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

前提条件

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

  • 您托管代理的服务器可以通过网络访问以下资源:
    • 您的 JFrog Artifactory 实例
    • hub.docker.com,端口 443,用于与 Docker 进行身份验证
    • api.dso.docker.com,端口 443,用于向 Docker Scout 传输数据
  • 注册表为 Docker V2 注册表。不支持 V1 注册表。

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

创建配置文件

您使用 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 run 运行 Docker Scout Artifactory 代理。该命令会在容器内 /opt/artifactory-agent/data 处创建一个绑定挂载,用于挂载之前创建的 JSON 配置文件所在的目录。请确保您使用的挂载路径是包含 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 仪表板中查看镜像分析结果。

  1. 前往 镜像页面(位于 Docker Scout 仪表板中)。

    此页面显示您组织中启用了 Docker Scout 的代码仓库。

  2. 从列表中选择镜像。

  3. 选择标签。

选择某个标签后,您将跳转到该标签的漏洞报告页面。在此页面,您可以选择查看镜像中的全部漏洞,或仅查看特定层引入的漏洞。您还可以按漏洞严重程度进行筛选,以及筛选是否有可用修复版本。