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

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

编程语言依赖集合

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

去依赖扫描

编程语言 软件包管理器 支持的工件 工具链支持 开发依赖关系 传递依赖关系 私人旗帜 递归地
Go Go

go.mod

go.sum

Go Binaries

GOMODCACHE

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

不适用

支持

go.mod/go.sum

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

主要特征
  • 从中收集依赖项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网站上下载并安装。如果您使用的是其他供应商的Go工具链(例如),则由于分发和元数据可用性的潜在差异,评估可能不准确。Red Hat

主要特征
  • 直接从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

不适用

不适用

不适用

不适用

支持

不适用

不适用

支持

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

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

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

主要特征
  • 为所有已编译的工件生成 SHA—1 哈希值 Java

示例工件

以下是 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.proper

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

主要特征
  • 为所有已编译的工件生成 SHA—1 哈希值 Java

示例 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.c

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.j

较新版本的使用该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

不适用

不适用

不适用

不适用

支持

不适用

不适用

支持

作曲家.lock

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.loc

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

鸡蛋/轮子

对于全球安装的 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

.gemspecRubyGem文件是一个包含有关 Gem 的元数据的文件。Amazon Inspector SBOM 生成器会解析此文件以收集有关宝石的详细信息。

主要特征
  • 解析并提取 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

全球安装的宝石

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

Rust 二进制文件,可进行货物审计

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

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

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

注意

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

不支持的工件

本节介绍不支持的构件。

Java

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

JavaScript

esbuild 捆绑包

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

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 生成器仅扫描Rust二进制文件,前提是二进制文件是使用货物可审计库构建的 Rust未使用此库的二进制文件缺少精确提取依赖关系所需的元数据。Amazon Inspector SBOM 生成器从 Rust 1.7.3 开始提取已编译的Rust工具链版本,但仅适用于环境中的二进制文件。Linux要进行全面扫描,请在Linux使用 cargo-auditable 的基础上构建Rust二进制文件。

注意

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