本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
编程语言依赖关系集合
Amazon Inspector SBOM 生成器支持不同的编程语言和框架,它们构成了强大而详细的依赖关系集合。生成 SBOM 可以帮助您了解软件的构成,从而可识别漏洞并保持与安全标准的合规性。Amazon Inspector SBOM 生成器支持以下编程语言和文件格式。
Go 依赖关系扫描
| 编程语言 | 软件包管理器 | 支持的构件 | 工具链支持 | 开发依赖关系 | 传递依赖关系 | 私有标记 | 以递归方式 |
|---|---|---|---|---|---|---|---|
Go |
Go |
|
N/A N/A 支持 N/A |
N/A N/A N/A N/A |
N/A N/A N/A N/A |
N/A N/A N/A N/A |
是 是 是 否 |
去。 mod/go.sum
使用 go.mod 和 go.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=
注意
Go 二进制文件
Amazon Inspector SBOM 生成器从已编译的 Go 二进制文件中提取依赖关系,以提供关于使用中代码的保障。
注意
Amazon Inspector SBOM 生成器支持从使用官方 Go 编译器构建的 Go 二进制文件中捕获和评估工具链版本。有关更多信息,请参阅 Go 网站上的下载并安装
主要功能
-
直接从 Go 二进制文件中提取依赖关系信息
-
收集二进制文件中嵌入的依赖关系
-
检测并提取用于编译二进制文件的 Go 工具链版本。
GOMODCACHE
Amazon Inspector SBOM 生成器会扫描 Go 模块缓存,以收集有关已安装依赖关系的信息。此缓存会存储下载的模块,以确保在不同的构建中使用相同的版本。
主要功能
-
扫描
GOMODCACHE目录以识别缓存的模块 -
提取详细的元数据,包括模块名称、版本和来源 URL
示例结构
以下是 GOMODCACHE 结构的示例。
~/go/pkg/mod/ ├── github.com/gin-gonic/gin@v1.7.2 ├── golang.org/x/crypto@v0.0.0-20210616213533-5cf6c0f8e123
注意
Java 依赖关系扫描
| 编程语言 | 软件包管理器 | 支持的构件 | 工具链支持 | 开发依赖关系 | 传递依赖关系 | 私有标记 | 以递归方式 |
|---|---|---|---|---|---|---|---|
Java |
Maven |
已编译的 Java 应用程序(.jar/.war/.ear)
|
N/A N/A |
N/A N/A |
支持 是 |
N/A N/A |
是 是 |
注意
我们的漏洞评估功能仅支持 Maven Central 存储库。 Third-party 目前不支持存储库(例如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" } ] }
注意
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
注意
不包括嵌套 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>
注意
JavaScript 依赖扫描
| 编程语言 | 软件包管理器 | 支持的构件 | 工具链支持 | 开发依赖关系 | 传递依赖关系 | 私有标记 | 以递归方式 |
|---|---|---|---|---|---|---|---|
Javascript |
|
|
N/A N/A N/A N/A |
N/A 支持 是 是 |
是 N/A N/A N/A |
是 N/A N/A N/A |
是 否 否 否 |
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" }
注意
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=" }
注意
npm-shrinkwrap.json
npm 会自动生成 package-lock.json 和 npm-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
注意
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
注意
.NET 依赖关系扫描
| 编程语言 | 软件包管理器 | 支持的构件 | 工具链支持 | 开发依赖关系 | 传递依赖关系 | 私有标记 | 以递归方式 |
|---|---|---|---|---|---|---|---|
.NET |
|
|
N/A N/A N/A N/A |
N/A N/A N/A N/A |
N/A N/A 支持 N/A |
N/A N/A N/A N/A |
是 是 是 是 |
Packages.config
Packages.config 文件是较旧版本的 Nuget 用来管理项目依赖关系的 XML 文件。它列出了项目引用的所有程序包,包括特定版本。
主要功能
-
解析 XML 结构以提取程序包 ID 和版本
示例
以下是文件 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>
注意
*.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" }, }
注意
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==" } } } }
注意
.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)" />
注意
PHP 依赖关系扫描
| 编程语言 | 软件包管理器 | 支持的构件 | 工具链支持 | 开发依赖关系 | 传递依赖关系 | 私有标记 | 以递归方式 |
|---|---|---|---|---|---|---|---|
PHP |
Composer |
|
N/A N/A |
N/A N/A |
支持 是 |
N/A N/A |
是 是 |
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 }
注意
/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 }
注意
Python 依赖关系扫描
| 编程语言 | 软件包管理器 | 支持的构件 | 工具链支持 | 开发依赖关系 | 传递依赖关系 | 私有标记 | 以递归方式 |
|---|---|---|---|---|---|---|---|
Python |
|
|
N/A N/A N/A N/A N/A N/A |
N/A N/A N/A 支持 N/A N/A |
N/A N/A N/A N/A N/A N/A |
N/A N/A N/A N/A N/A N/A |
是 是 是 是 是 是 |
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
注意
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" } } }
注意
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"
注意
uv.lock
uv是一个写入的快速Python软件包管理器Rust。uv.lock 文件可锁定依赖关系的确切版本,以便实现一致的环境。Amazon Inspector SBOM 生成器会从该文件中提取详细的依赖关系信息。
主要功能
-
解析结构化数据格式化
uv.lock的 TOML -
提取依赖关系名称和版本
-
支持开发依赖关系
-
仅收集源为注册表的软件包
示例 uv.lock 文件
以下是文件 uv.lock 的示例。
version = 1 requires-python = ">=3.12" [[package]] name = "flask" version = "3.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "blinker" }, { name = "click" }, { name = "itsdangerous" }, { name = "jinja2" }, { name = "markupsafe" }, { name = "werkzeug" }, ] [[package]] name = "pytest" version = "8.3.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, ] [package.dev-dependencies] dev = [ { name = "pytest" }, ]
注意
Egg/Wheel
对于全局安装的 Python 程序包,Amazon Inspector SBOM 生成器支持解析在 .egg-info/PKG-INFO 和 .dist-info/METADATA 目录中找到的元数据文件。这些文件提供了有关已安装程序包的详细元数据。
主要功能
-
提取程序包名称和版本
-
同时支持 egg 和 wheel 两种格式
扩展了默认扫描路径(Sbomgen 1.13.0 及更高版本)
在 Amazon Inspector SBOM Generator 1.13.0 及更高版本中,扫描仪的默认本地主机扫描路径已扩展到包括用户级pip安装 (pip install --user) 和命令产生的安装。uv tool install这样可以检测安装在系统范围之外的 Python 包site-packages,包括 CrewaI、Aider、GPT Engineer 和 Open Interpreter 等框架和工具,它们推荐的安装方法会在这些位置进行安装(例如,)。uv tool install crewai
添加了默认扫描路径:
-
Linux—
/home/*/.local/lib/python*/site-packages/,/home/*/.local/share/uv/tools/*/lib/python*/site-packages/(对于以 root 身份运行的容器,则具有/root/等效项)。 -
Windows –
%APPDATA%\Python\Python*\Lib\site-packages\,%LOCALAPPDATA%\uv\tools\*\Lib\site-packages\.
对于任何平台上的非默认Python安装前缀,请使用--path参数将扫描仪指向安装位置。
示例 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/
注意
Ruby 依赖关系扫描
| 编程语言 | 软件包管理器 | 支持的构件 | 工具链支持 | 开发依赖关系 | 传递依赖关系 | 私有标记 | 以递归方式 |
|---|---|---|---|---|---|---|---|
Ruby |
Bundler |
|
N/A N/A N/A |
N/A N/A N/A |
支持 N/A N/A |
N/A N/A N/A |
是 是 是 |
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)
注意
.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
注意
全局安装的 Gem
Amazon Inspector SBOM 生成器支持扫描全球安装的 gem,这些宝石位于标准目录中,例如亚马逊 EC2/Amazon ECR 和 ruby/gems/<ruby_version>/gems/ Lambda /usr/local/lib/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
注意
Rust 依赖关系扫描
| 编程语言 | 软件包管理器 | 支持的构件 | 工具链支持 | 开发依赖关系 | 传递依赖关系 | 私有标记 | 以递归方式 |
|---|---|---|---|---|---|---|---|
Rust |
Cargo.toml |
|
N/A N/A 支持 |
N/A N/A N/A |
N/A 是 N/A |
N/A N/A N/A |
是 是 是 |
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"
注意
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"
注意
具有 cargo-auditable 的 Rust 二进制文件
Amazon Inspector SBOM 生成器收集来自使用 cargo-auditable 库构建的 Rust 二进制文件的依赖关系。这样,通过启用从已编译二进制文件中提取依赖关系,可提供额外的依赖关系信息。
主要功能
-
直接从使用
cargo-auditable库构建的 Rust 二进制文件中提取依赖关系信息 -
检索二进制文件中包含的依赖关系的元数据和版本信息
注意
快速依赖扫描
| 编程语言 | 软件包管理器 | 支持的构件 | 工具链支持 | 开发依赖关系 | 传递依赖关系 | 私有标记 | 以递归方式 |
|---|---|---|---|---|---|---|---|
Swift |
Swift Package Manager |
|
N/A |
N/A |
N/A |
N/A |
是 |
Package.resolved
该Package.resolved文件由 Package Man Swift ager 生成,用于锁定Swift项目依赖关系的确切版本。Amazon Inspector SBOM 生成器解析此文件以收集依赖项名称、版本和源存储库信息。支持该Package.resolved格式的架构版本 1、2 和 3。
注意
Amazon Inspector SBOM 生成器不会生成该Package.resolved文件。如果您的项目尚不包含Package.resolved文件,则必须在扫描之前通过在项目目录swift package resolve中运行来生成该文件。
支持的构件
-
Package.resolved(架构版本 1) -
Package.resolved(架构版本 2) -
Package.resolved(架构版本 3)
主要功能
-
从固定的软件包中提取依赖项名称和锁定版本
-
从源存储库 URL 派生包命名空间(例如,
github.com/Alamofire) -
跳过没有已解析版本的仅限分支的 pin
-
过滤掉本地源代码控制和文件系统依赖关系
-
排除
.build/目录内的Package.resolved文件以防止从 Package Man Swift ager 构建缓存中收集依赖关系
注意
该Package.resolved文件与平台无关。Amazon Inspector SBOM 生成器在Linux、macOS和上以递归方式发现此文件。Windows
示例 Package.resolved 文件 (v2)
以下是版本 2 Package.resolved 文件的示例。
{ "pins" : [ { "identity" : "alamofire", "kind" : "remoteSourceControl", "location" : "https://github.com/Alamofire/Alamofire.git", "state" : { "revision" : "a1b2c3...", "version" : "5.8.1" } }, { "identity" : "swift-argument-parser", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-argument-parser.git", "state" : { "revision" : "d4e5f6...", "version" : "1.3.0" } } ], "version" : 2 }
示例 Package.resolved 文件 (v1)
以下是版本 1 Package.resolved 文件的示例。
{ "object": { "pins": [ { "package": "Alamofire", "repositoryURL": "https://github.com/Alamofire/Alamofire.git", "state": { "branch": null, "revision": "a1b2c3...", "version": "5.8.1" } } ] }, "version": 1 }
PURL 示例
以下是 Package Manager 依赖项的Swift软件包 URL 示例。
pkg:swift/github.com/Alamofire/Alamofire@5.8.1
注意
不受支持的构件
本节介绍了不受支持的构件。
Java
Amazon Inspector SBOM 生成器仅支持对来源于主流 Maven 存储库
JavaScript
esbuild 捆绑包
对于 esbuild 压缩捆绑包,Amazon Inspector SBOM 生成器不支持对使用 esbuild 的项目进行依赖关系扫描。由 esbuild 生成的源映射不包含生成准确 Sbomgen 所需的足够元数据(依赖关系名称和版本)。要获得可靠的结果,请在捆绑过程之前扫描原始项目文件,例如 node_modules/directory 和 package-lock.json。
package.json
Amazon Inspector SBOM 生成器不支持扫描根级别 package.json 文件以获取依赖关系信息。此文件仅指定程序包名称和版本范围,但不包括完全解析的程序包版本。要获得准确的扫描结果,请使用 package.json 或包含已解析版本的其他锁定文件(例如 yarn.lock 和 pnpm.lock)。
Dotnet
当在 PackageReference 中使用浮动版本或版本范围时,如果不执行程序包解析,就更难确定项目中使用的确切程序包版本。浮动版本和版本范围允许开发人员指定可接受程序包版本,而不是固定版本的范围。
Go 二进制文件
Amazon Inspector SBOM 生成器不会扫描使用配置为排除构建 ID 的构建标志构建的 Go 二进制文件。这些构建标志会阻止 Amazon Inspector SBOM 生成器将二进制文件准确地映射到其原始来源。由于无法提取程序包信息,因此不支持不明确的 Go 二进制文件。要进行准确的依赖关系扫描,请确保 Go 二进制文件是使用默认设置(包括构建 ID)构建的。
Rust 二进制文件
Amazon Inspector SBOM 生成器只有在使用 cargo-auditable 库
注意
即使提取了工具链版本,也不支持对 Rust 工具链本身的漏洞检测。