将Docker Scout与Artifactory集成

将Docker Scout与JFrog Artifactory集成允许您自动对Artifactory注册表中的镜像运行镜像分析。

本地镜像分析

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

docker login {URL}

提示

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

远程镜像分析

要自动分析在远程环境中运行的镜像,您需要部署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
  • 构建指令
  • 构建日期
  • 标签和摘要
  • 目标平台
  • 层大小

代理永远不会处理镜像本身,也不处理镜像内的任何数据,例如代码、二进制文件和层块。

代理不会检测和分析预先存在的镜像。它只分析在代理运行期间出现在注册表中的镜像。

部署代理

本节描述部署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 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-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. 选择标签。

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