将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以查找新镜像来工作。当它找到一个新镜像时,它将执行以下步骤
- 从Artifactory拉取镜像
- 分析镜像
- 将分析结果上传到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_name | Docker组织的名称。 |
docker.username | Docker组织中管理员用户的用户名。 |
docker.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代理。此命令为包含前面在容器内/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仪表板中查看镜像分析结果。
访问Docker Scout仪表板中的镜像页面。
此页面显示您组织中启用了Docker Scout的仓库。
选择列表中的镜像。
选择标签。
选择标签后,您将进入该标签的漏洞报告。在这里,您可以选择是否要查看镜像中的所有漏洞,或特定层中引入的漏洞。您还可以按严重程度以及是否存在可修复版本来过滤漏洞。