编程语言依赖关系集合 - Amazon Inspector
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

编程语言依赖关系集合

Amazon Inspector SBOM 生成器支持不同的编程语言和框架,它们构成了强大而详细的依赖关系集合。生成 SBOM 可以帮助您了解软件的构成,从而可识别漏洞并保持与安全标准的合规性。Amazon Inspector SBOM 生成器支持以下编程语言和文件格式。

Go 依赖关系扫描

编程语言 软件包管理器 支持的构件 工具链支持 开发依赖关系 传递依赖关系 私有标记 以递归方式
Go Go

go.mod

go.sum

Go Binaries

GOMODCACHE

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

支持

go.mod/go.sum

使用 go.modgo.sum 文件来定义和锁定 Go 项目中的依赖关系。Amazon Inspector SBOM 生成器会根据 Go 工具链版本以不同方式管理这些文件。

主要 功能
  • go.mod 收集依赖关系(如果 Go 工具链版本为 1.17 或更高版本)

  • go.sum 收集依赖关系(如果 Go 工具链版本为 1.17 或更低版本)

  • 解析 go.mod 以识别所有已声明的依赖关系和依赖关系版本

示例 go.mod 文件

以下是 go.mod 文件的示例。

module example.com/project go 1.17 require ( github.com/gin-gonic/gin v1.7.2 golang.org/x/crypto v0.0.0-20210616213533-5cf6c0f8e123 )
示例 go.sum 文件

以下是 go.sum 文件的示例。

github.com/gin-gonic/gin v1.7.2 h1:VZ7DdRl0sghbA6lVGSkX+UXO2+J0aH7RbsNugG+FA8Q= github.com/gin-gonic/gin v1.7.2/go.mod h1:ILZ1Ngh2f1pL1ASUj7gGk8lGFeNC8cRTaN2ZhsBNbXU= golang.org/x/crypto v0.0.0-20210616213533-5cf6c0f8e123 h1:b6rCu+qHze+BUsmC3CZzH8aNu8LzPZTVsNTo64OypSc= golang.org/x/crypto v0.0.0-20210616213533-5cf6c0f8e123/go.mod h1:K5Dkpb0Q4ewZW/EzWlQphgJcUMBCzoWrLfDOVzpTGVQ=
注意

这些文件中的每一个都会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

Go 二进制文件

Amazon Inspector SBOM 生成器从已编译的 Go 二进制文件中提取依赖关系,以提供关于使用中代码的保障。

注意

Amazon Inspector SBOM 生成器支持从使用官方 Go 编译器构建的 Go 二进制文件中捕获和评估工具链版本。有关更多信息,请参阅 Go 网站上的下载并安装。如果您使用来自其他供应商(例如 Red Hat)的 Go 工具链,由于分发和元数据可用性可能存在差异,因此评估结果可能不准确。

主要 功能
  • 直接从 Go 二进制文件中提取依赖关系信息

  • 收集二进制文件中嵌入的依赖关系

  • 检测并提取用于编译二进制文件的 Go 工具链版本。

GOMODCACHE

Amazon Inspector SBOM 生成器会扫描 Go 模块缓存,以收集有关已安装依赖关系的信息。此缓存会存储下载的模块,以确保在不同的构建中使用相同的版本。

主要 功能
  • 扫描 GOMODCACHE 目录以识别缓存的模块

  • 提取详细的元数据,包括模块名称、版本和源 URLs

示例结构

以下是 GOMODCACHE 结构的示例。

~/go/pkg/mod/ ├── github.com/gin-gonic/gin@v1.7.2 ├── golang.org/x/crypto@v0.0.0-20210616213533-5cf6c0f8e123
注意

此结构会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

Java 依赖关系扫描

编程语言 软件包管理器 支持的构件 工具链支持 开发依赖关系 传递依赖关系 私有标记 以递归方式
Java Maven

已编译的 Java 应用程序(.jar/.war/.ear)

pom.xml

不适用

不适用

不适用

不适用

支持

不适用

不适用

支持

注意

我们的漏洞评估功能仅支持 Maven Central 存储库。当前不支持第三方存储库,例如 JBoss Enterprise Maven Repository。

Amazon Inspector SBOM 生成器通过分析已编译的 Java 应用程序和 pom.xml 文件来执行 Java 依赖关系扫描。在扫描已编译的应用程序时,扫描器会生成 SHA–1 哈希以进行完整性验证,提取嵌入的 pom.properties 文件,并解析嵌套的 pom.xml 文件。

SHA–1 哈希集合(适用于已编译的 .jar、.war、.ear 文件)

Amazon Inspector SBOM 生成器会尝试收集项目中所有 .ear.jar.war 文件的 SHA–1 哈希,以保证已编译的 Java 构件的完整性和可追溯性。

主要 功能
  • 为所有已编译的 Java 构件生成 SHA–1 哈希

示例构件

以下是 SHA–1 构件的示例。

{ "bom-ref": "comp-52", "type": "library", "name": "jul-to-slf4j", "version": "2.0.6", "hashes": [ { "alg": "SHA-1", "content": "" } ], "purl": "pkg:maven/jul-to-slf4j@2.0.6", "properties": [ { "name": "amazon:inspector:sbom_generator:source_path", "value": "test-0.0.1-SNAPSHOT.jar/BOOT-INF/lib/jul-to-slf4j-2.0.6.jar" } ] }
注意

此构件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

pom.properties

pom.properties 文件用于 Maven 项目中以存储项目元数据,包括程序包名称和程序包版本。Amazon Inspector SBOM 生成器解析此文件以收集项目信息。

主要 功能
  • 解析和提取程序包构件、程序包组和程序包版本

示例 pom.properties 文件

以下是文件 pom.properties 的示例。

#Generated by Maven #Tue Mar 16 15:44:02 UTC 2021 version=1.6.0 groupId=net.datafaker artifactId=datafaker
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

排除嵌套 pom.xml 解析

如果要在扫描已编译的 Java 应用程序时排除 pom.xml 解析,请使用 --skip-nested-pomxml 参数。

pom.xml

pom.xml 文件是 Maven 项目的核心配置文件。它包含有关项目和项目依赖关系的信息。Amazon Inspector SBOM 生成器解析 pom.xml 文件以收集依赖关系,扫描存储库中的独立文件和已编译 .jar 文件内的文件。

主要 功能
  • 解析并提取 pom.xml 文件中的程序包构件、程序包组和程序包版本。

支持的 Maven 作用域和标签

依赖关系是通过以下 Maven 作用域收集的:

  • compile

  • 提供的

  • 运行时

  • 测试

  • 系统

  • 导入

依赖关系是通过以下 Maven 标签收集的:<optional>true</optional>

带有作用域的示例 pom.xml 文件

以下是带有作用域的 pom.xml 文件的示例。

<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> </version>6.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> <scope>runtime</scope> </dependency>
没有作用域的示例 pom.xml 文件

以下是没有作用域的 pom.xml 文件的示例。

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.17.1</version> </dependency> <dependency> <groupId>org.jenkins-ci.plugins</groupId> <artifactId>plain-credentials</artifactId> <version>183.va_de8f1dd5a_2b_</version> </dependency> <dependency> <groupId>org.jenkins-ci.plugins</groupId> <artifactId>jackson2-api</artifactId> <version>2.15.2-350.v0c2f3f8fc595</version> </dependency>
注意

这些文件中的每一个都会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

JavaScript 依赖扫描

编程语言 软件包管理器 支持的构件 工具链支持 开发依赖关系 传递依赖关系 私有标记 以递归方式
Javascript

Node Modules

NPM

PNPM

YARN

node_modules/*/package.json

package-lock.json (v1, v2, and v3) / npm-shrinkwrap.json

pnpm-lock.yaml

yarn.lock

不适用

不适用

不适用

不适用

不适用

支持

不适用

不适用

不适用

不适用

不适用

不适用

package.json

package.json 文件是 Node.js 项目的核心组件。它包含有关已安装程序包的元数据。Amazon Inspector SBOM 生成器会扫描此文件,以识别程序包名称和程序包版本。

主要 功能
  • 解析 JSON 文件结构以提取程序包名称和版本

  • 识别具有私有值的私有程序包

示例 package.json 文件

以下是文件 package.json 的示例。

{ "name": "arrify", "private": true, "version": "2.0.1", "description": "Convert a value to an array", "license": "MIT", "repository": "sindresorhus/arrify" }
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

package-lock.json

package-lock.json 文件由 npm 自动生成,用于锁定为项目安装的依赖关系的确切版本。它通过存储所有依赖关系及其子依赖关系的确切版本来确保在不同环境中的一致性。该文件可以区分常规依赖关系和开发依赖关系。

主要 功能
  • 解析 JSON 文件结构以提取程序包名称和程序包版本

  • 支持开发依赖关系检测

示例 package-lock.json 文件

以下是文件 package-lock.json 的示例。

"verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" }
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

npm-shrinkwrap.json

npm 会自动生成 package-lock.jsonnpm-shrinkwrap.json 文件,用于锁定为项目安装的依赖关系的确切版本。这样,通过存储所有依赖关系及子依赖关系的确切版本,可确保在不同环境中的一致性。这些文件可区分常规依赖关系和开发依赖关系。

主要 功能
  • 解析 JSON 文件结构的 package-lock 版本 1、2 和 3,以提取程序包名称和版本

  • 支持开发人员依赖关系检测(package-lock.json 会捕获生产和开发依赖关系,允许工具识别开发环境中使用了哪些程序包)

  • npm-shrinkwrap.json 文件优先于 package-lock.json 文件

示例

以下是文件 package-lock.json 的示例。

"verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" }

pnpm-yaml.lock

pnpm-lock.yaml 文件由 pnpm 生成,用于维护已安装依赖关系版本的记录。它还单独跟踪开发依赖关系。

主要 功能
  • 解析 YAML 文件结构以提取程序包名称和版本

  • 支持开发依赖关系检测

示例

以下是文件 pnpm-lock.yaml 的示例。

lockfileVersion: 5.3 importers: my-project: dependencies: lodash: 4.17.21 devDependencies: jest: 26.6.3 specifiers: lodash: ^4.17.21 jest: ^26.6.3 packages: /lodash/4.17.21: resolution: integrity: sha512-xyz engines: node: '>=6' dev: false /jest/26.6.3: resolution: integrity: sha512-xyz dev: true
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

yarn.lock

Amazon Inspector SBOM 生成器会尝试收集项目中 .ear.jar.war 文件的 SHA–1 哈希,以保证已编译的 Java 构件的完整性和可追溯性。

主要 功能
  • 为所有已编译的 Java 构件生成 SHA–1 哈希

示例 SHA–1 构件

以下是 SHA–1 构件的示例。

"@ampproject/remapping@npm:^2.2.0": version: 2.2.0 resolution: "@ampproject/remapping@npm:2.2.0" dependencies: "@jridgewell/gen-mapping": ^0.1.0 "@jridgewell/trace-mapping": ^0.3.9 checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 languageName: node linkType: hard "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.21.4": version: 7.21.4 resolution: "@babel/code-frame@npm:7.21.4" dependencies: "@babel/highlight": ^7.18.6 checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c languageName: node linkType: hard
注意

此构件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

.NET 依赖关系扫描

编程语言 软件包管理器 支持的构件 工具链支持 开发依赖关系 传递依赖关系 私有标记 以递归方式
.NET

.NET Core

Nuget

Nuget

.NET

*.deps.json

Packages.config

packages.lock.json

.csproj

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

支持

Packages.config

Packages.config 文件是较旧版本的 Nuget 用来管理项目依赖关系的 XML 文件。它列出了项目引用的所有程序包,包括特定版本。

主要 功能
  • 解析 XML 结构以提取软件包 IDs 和版本

示例

以下是文件 Packages.config 的示例。

<?xml version="1.0" encoding="utf-8"? > <packages> <package id="FluentAssertions" version="5.4.1" targetFramework="net461" /> <package id="Newtonsoft.Json" version="11.0.2" targetFramework="net461" /> <package id="SpecFlow" version="2.4.0" targetFramework="net461" /> <package id="SpecRun.Runner" version="1.8.0" targetFramework="net461" /> <package id="SpecRun.SpecFlow" version="1.8.0" targetFramework="net461" /> <package id="SpecRun.SpecFlow.2-4-0" version="1.8.0" targetFramework="net461" /> <package id="System.ValueTuple" version="4.5.0" targetFramework="net461" /> </packages>
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

*.deps.json

*.deps.json 文件由 .NET Core 项目生成,包含有关所有依赖关系的详细信息,包括路径、版本和运行时依赖关系。此文件可确保运行时具有用于加载正确版本的依赖关系的必要信息。

主要 功能
  • 解析 JSON 结构以获取全面的依赖关系详细信息

  • libraries 列表中提取程序包名称和版本。

示例 .deps.json 文件

以下是文件 .deps.json 的示例。

{ "runtimeTarget": { "name": ".NETCoreApp,Version=v7.0", "signature": "" }, "libraries": { "sample-Nuget/1.0.0": { "type": "project", "serviceable": false, "sha512": "" }, "Microsoft.EntityFrameworkCore/7.0.5": { "type": "package", "serviceable": true, "sha512": "sha512-RXbRLHHWP2Z3pq8qcL5nQ6LPeoOyp8hasM5bd0Te8PiQi3RjWQR4tcbdY5XMqQ+oTO9wA8/RLhZRn/hnxlTDnQ==", "path": "microsoft.entityframeworkcore/7.0.5", "hashPath": "microsoft.entityframeworkcore.7.0.5.nupkg.sha512" }, }
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

packages.lock.json

packages.lock.json 文件由较新版本的 Nuget 用来锁定 .NET 项目依赖关系的确切版本,以保证在不同环境中一致使用相同的版本。

主要 功能
  • 解析 JSON 结构以列出锁定的依赖关系

  • 同时支持直接依赖关系和传递依赖关系

  • 提取程序包名称和已解析的版本

示例 packages.lock.json 文件

以下是文件 packages.lock.json 的示例。

{ "version": 1, "dependencies": { "net7.0": { "Microsoft.EntityFrameworkCore": { "type": "Direct", "requested": "[7.0.5, )", "resolved": "7.0.5", "contentHash": "RXbRLHHWP2Z3pq8qcL5nQ6LPeoOyp8hasM5bd0Te8PiQi3RjWQR4tcbdY5XMqQ+oTO9wA8/RLhZRn/hnxlTDnQ==", "dependencies": { "Microsoft.EntityFrameworkCore.Abstractions": "7.0.5", "Microsoft.EntityFrameworkCore.Analyzers": "7.0.5", "Microsoft.Extensions.Caching.Memory": "7.0.0", "Microsoft.Extensions.DependencyInjection": "7.0.0", "Microsoft.Extensions.Logging": "7.0.0" } }, "Newtonsoft.Json": { "type": "Direct", "requested": "[13.0.3, )", "resolved": "13.0.3", "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" }, "Microsoft.Extensions.Primitives": { "type": "Transitive", "resolved": "7.0.0", "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==" } } } }
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

.csproj

.csproj 文件采用 XML 编写,是 .NET 项目的项目文件。它包括对 Nuget 程序包、项目属性和构建配置的引用。

主要 功能
  • 解析 XML 结构以提取程序包引用

示例 .csproj 文件

以下是文件 .csproj 的示例。

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <RootNamespace>sample_Nuget</RootNamespace> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile> </PropertyGroup> <ItemGroup> </ItemGroup> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" /> </ItemGroup> </Project>
示例 .csproj 文件

以下是文件 .csproj 的示例。

<PackageReference Include="ExamplePackage" Version="6.*" /> <PackageReferencePackageReference Include="ExamplePackage" Version="(4.1.3,)" /> <PackageReference Include="ExamplePackage" Version="(,5.0)" /> <PackageReference Include="ExamplePackage" Version="[1,3)" /> <PackageReference Include="ExamplePackage" Version="[1.3.2,1.5)" />
注意

这些文件中的每一个都会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

PHP 依赖关系扫描

编程语言 软件包管理器 支持的构件 工具链支持 开发依赖关系 传递依赖关系 私有标记 以递归方式
PHP Composer

composer.lock

/vendor/composer/installed.json

不适用

不适用

不适用

不适用

支持

不适用

不适用

支持

composer.lock

会在运行 composer install 或 composer update 命令时自动生成 composer.lock 文件。该文件可保证在每个环境中均安装相同版本的依赖关系。这样可提供一致且可靠的构建过程。

主要 功能
  • 解析结构化数据的 JSON 格式

  • 提取依赖关系名称和版本

示例 composer.lock 文件

以下是文件 composer.lock 的示例。

{ "packages": [ { "name": "nesbot/carbon", "version": "2.53.1", // TRUNCATED }, { "name": "symfony/deprecation-contracts", "version": "v3.2.1", // TRUNCATED }, { "name": "symfony/polyfill-mbstring", "version": "v1.27.0", // TRUNCATED } ] // TRUNCATED }
注意

该文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

/vendor/composer/installed.json

/vendor/composer/installed.json 文件位于 vendor/composer 目录中,提供了所有已安装程序包及程序包版本的详尽列表。

主要 功能
  • 解析结构化数据的 JSON 格式

  • 提取依赖关系名称和版本

示例 /vendor/composer/installed.json 文件

以下是文件 /vendor/composer/installed.json 的示例。

{ "packages": [ { "name": "nesbot/carbon", "version": "2.53.1", // TRUNCATED }, { "name": "symfony/deprecation-contracts", "version": "v3.2.1", // TRUNCATED }, { "name": "symfony/polyfill-mbstring", "version": "v1.27.0", // TRUNCATED } ] // TRUNCATED }
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

Python 依赖关系扫描

编程语言 软件包管理器 支持的构件 工具链支持 开发依赖关系 传递依赖关系 私有标记 以递归方式
Python

pip

Poetry

Pipenv

Egg/Wheel

requirements.txt

Poetry.lock

Pipfile.lock

.egg-info/PKG-INFO

.dist-info/METADATA

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

支持

requirements.txt

requirements.txt 文件是在 Python 项目中广泛使用的一种格式,用于指定项目依赖关系。此文件中的每一行都包含一个带有其版本约束的程序包。Amazon Inspector SBOM 生成器会解析此文件以准确识别和编目依赖关系。

主要 功能
  • 支持版本说明符(== 和 ˜=)

  • 支持注释和复杂的依赖关系行

注意

不支持版本说明符 <= 和 =>。

示例 requirements.txt 文件

以下是文件 requirements.txt 的示例。

flask==1.1.2 requests==2.24.0 numpy==1.18.5 foo~=1.2.0 # Comment about a dependency scipy. # invalid
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

Pipfile.lock

Pipenv 是一款集所有打包世界精华(捆绑、固定和解除固定)于一身的工具。Pipfile.lock 可锁定依赖关系的确切版本,以便实现确定性构建。Amazon Inspector SBOM 生成器读取此文件,以列出依赖关系及其已解析的版本。

主要 功能
  • 解析依赖关系解析的 JSON 格式

  • 支持默认依赖关系和开发依赖关系

示例 Pipfile.lock 文件

以下是文件 Pipfile.lock 的示例。

{ "default": { "requests": { "version": "==2.24.0", "hashes": [ "sha256:cc718bb187e53b8d" ] } }, "develop": { "blinker": { "hashes": [ "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01", "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83" ], "markers": "python_version >= '3.8'", "version": "==1.8.2" } } }
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

Poetry.lock

Poetry 是一款适用于 Python 的依赖关系管理和打包工具。Poetry.lock 文件可锁定依赖关系的确切版本,以便实现一致的环境。Amazon Inspector SBOM 生成器会从该文件中提取详细的依赖关系信息。

主要 功能
  • 解析结构化数据的 TOML 格式

  • 提取依赖关系名称和版本

示例 Poetry.lock 文件

以下是文件 Poetry.lock 的示例。

[[package]] name = "flask" version = "1.1.2" description = "A simple framework for building complex web applications." category = "main" optional = false python-versions = ">=3.5" [[package]] name = "requests" version = "2.24.0" description = "Python HTTP for Humans." category = "main" optional = false python-versions = ">=3.5"
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

Egg/Wheel

对于全局安装的 Python 程序包,Amazon Inspector SBOM 生成器支持解析在 .egg-info/PKG-INFO.dist-info/METADATA 目录中找到的元数据文件。这些文件提供了有关已安装程序包的详细元数据。

主要 功能
  • 提取程序包名称和版本

  • 同时支持 egg 和 wheel 两种格式

示例 PKG-INFO/METADATA 文件

以下是文件 PKG-INFO/METADATA 的示例。

Metadata-Version: 1.2 Name: Flask Version: 1.1.2 Summary: A simple framework for building complex web applications. Home-page: https://palletsprojects.com/p/flask/
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

Ruby 依赖关系扫描

编程语言 软件包管理器 支持的构件 工具链支持 开发依赖关系 传递依赖关系 私有标记 以递归方式
Ruby Bundler

Gemfile.lock

.gemspec

globall installed Gems

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

支持

Gemfile.lock

Gemfile.lock 文件可锁定所有依赖关系的确切版本,以确保在每个环境中均使用相同的版本。

主要 功能
  • 解析 Gemfile.lock 文件以识别依赖关系和依赖关系版本

  • 提取详细的程序包名称和程序包版本

示例 Gemfile.lock 文件

以下是文件 Gemfile.lock 的示例。

GEM remote: https://rubygems.org/ specs: ast (2.4.2) awesome_print (1.9.2) diff-lcs (1.5.0) json (2.6.3) parallel (1.22.1) parser (3.2.2.0) nokogiri (1.16.6-aarch64-linux)
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

.gemspec

.gemspec 文件是包含关于 Gem 的元数据的 RubyGem 文件。Amazon Inspector SBOM 生成器可解析此文件以收集有关 Gem 的详细信息。

主要 功能
  • 解析并提取 Gem 名称和 Gem 版本

注意

不支持参考规范。

示例 .gemspec 文件

以下是文件 .gemspec 的示例。

Gem::Specification.new do |s| s.name = "generategem" s.version = "2.0.0" s.date = "2020-06-12" s.summary = "generategem" s.description = "A Gemspec Builder" s.email = "edersondeveloper@gmail.com" s.files = ["lib/generategem.rb"] s.homepage = "https://github.com/edersonferreira/generategem" s.license = "MIT" s.executables = ["generategem"] s.add_dependency('colorize', '~> 0.8.1') end
# Not supported Gem::Specification.new do |s| s.name = &class1 s.version = &foo.bar.version
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

全局安装的 Gem

Amazon Inspector SBOM 生成器支持扫描全球安装的 gem,这些宝石位于标准目录中,例如/usr/local/lib/ruby/gems/<ruby_version>/gems/亚马逊 EC2 /亚马逊 ECR 和 Lambda 中ruby/gems/<ruby_version>/gems/。这样可确保识别和编目所有全局安装的依赖关系。

主要 功能
  • 识别并扫描标准目录中所有全局安装的 Gem

  • 提取每个全球安装的 Gem 的元数据和版本信息

示例目录结构

以下是目录结构的示例。

. └── /usr/local/lib/ruby/3.5.0/gems/ ├── actrivesupport-6.1.4 ├── concurrent-ruby-1.1.9 └── i18n-1.8.10
注意

此结构会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

Rust 依赖关系扫描

编程语言 软件包管理器 支持的构件 工具链支持 开发依赖关系 传递依赖关系 私有标记 以递归方式
Rust Cargo.toml

Cargo.toml

Cargo.lock

Rust binary (built with cargo-auditable)

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

支持

Cargo.toml

Cargo.toml 文件是 Rust 项目的清单文件。

主要 功能
  • 解析并提取 Cargo.toml 文件以识别项目程序包名称和版本。

示例 Cargo.toml 文件

以下是文件 Cargo.toml 的示例。

[package] name = "wait-timeout" version = "0.2.0" description = "A crate to wait on a child process with a timeout specified across Unix and\nWindows platforms.\n" homepage = "https://github.com/alexcrichton/wait-timeout" documentation = "https://docs.rs/wait-timeout" readme = "README.md" categories = ["os"] license = "MIT/Apache-2.0" repository = "https://github.com/alexcrichton/wait-timeout" [target."cfg(unix)".dependencies.libc] version = "0.2" [badges.appveyor] repository = "alexcrichton/wait-timeout"
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

Cargo.lock

Cargo.lock 文件会锁定依赖关系版本,以确保无论何时构建项目均使用相同的版本。

主要 功能
  • 解析 Cargo.lock 文件以识别所有依赖关系和依赖关系版本。

示例 Cargo.lock 文件

以下是文件 Cargo.lock 的示例。

# This file is automatically @generated by Cargo. # It is not intended for manual editing. [[package]] name = "adler32" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "aho-corasick" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index"
注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

具有 cargo-auditable 的 Rust 二进制文件

Amazon Inspector SBOM 生成器收集来自使用 cargo-auditable 库构建的 Rust 二进制文件的依赖关系。这样,通过启用从已编译二进制文件中提取依赖关系,可提供额外的依赖关系信息。

主要 功能
  • 直接从使用 cargo-auditable 库构建的 Rust 二进制文件中提取依赖关系信息

  • 检索二进制文件中包含的依赖关系的元数据和版本信息

注意

此文件会生成包含程序包 URL 的输出。此 URL 可用于在生成软件物料清单时指定有关软件包的信息,并且可以包含在 ScanSbomAPI 中。有关更多信息,请参阅网站上的软件包网址。 GitHub

不受支持的构件

本节介绍了不受支持的构件。

Java

Amazon Inspector SBOM 生成器仅支持对来源于主流 Maven 存储库的依赖关系进行漏洞检测。不支持私有或自定义 Maven 存储库,例如 Red Hat Maven 和 Jenkins。为了准确检测漏洞,请确保 Java 依赖关系是从主流 Maven 存储库中拉取的。来自其他存储库的依赖关系不会包含在漏洞扫描中。

JavaScript

esbuild 捆绑包

对于 esbuild 压缩捆绑包,Amazon Inspector SBOM 生成器不支持对使用 esbuild 的项目进行依赖关系扫描。由 esbuild 生成的源映射不包含生成准确 Sbomgen 所需的足够元数据(依赖关系名称和版本)。要获得可靠的结果,请在捆绑过程之前扫描原始项目文件,例如 node_modules/directorypackage-lock.json

package.json

Amazon Inspector SBOM 生成器不支持扫描根级别 package.json 文件以获取依赖关系信息。此文件仅指定程序包名称和版本范围,但不包括完全解析的程序包版本。要获得准确的扫描结果,请使用 package.json 或包含已解析版本的其他锁定文件(例如 yarn.lockpnpm.lock)。

Dotnet

当在 PackageReference 中使用浮动版本或版本范围时,如果不执行程序包解析,就更难确定项目中使用的确切程序包版本。浮动版本和版本范围允许开发人员指定可接受程序包版本,而不是固定版本的范围。

Go 二进制文件

Amazon Inspector SBOM 生成器不会扫描使用配置为排除构建 ID 的构建标志构建的 Go 二进制文件。这些构建标志会阻止 Bomerman 将相应二进制文件准确映射到其原始来源。由于无法提取程序包信息,因此不支持不明确的 Go 二进制文件。要进行准确的依赖关系扫描,请确保 Go 二进制文件是使用默认设置(包括构建 ID)构建的。

Rust 二进制文件

Amazon Inspector SBOM 生成器只有在使用 cargo-auditable 库构建二进制文件时才会扫描 Rust 二进制文件。未利用此库的 Rust 二进制文件缺少进行准确依赖关系提取所需的必要元数据。Amazon Inspector SBOM 生成器从 Rust 1.7.3 开始提取已编译的 Rust 工具链版本,但仅适用于 Linux 环境中的二进制文件。为了进行全面扫描,请在 Linux 上使用 cargo-auditable 构建 Rust 二进制文件。

注意

即使提取了工具链版本,也不支持对 Rust 工具链本身的漏洞检测。