View a markdown version of this page

配置和使用 Cargo CodeArtifact - CodeArtifact

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

配置和使用 Cargo CodeArtifact

你可以使用 Cargo 从 CodeArtifact 存储库发布和下载板条箱,也可以从 Rust 社区的箱子注册表 crates .io 中获取板条箱。本主题介绍如何将 Cargo 配置为使用存储库进行身份验证和使用 CodeArtifact 存储库。

使用配置货物 CodeArtifact

要使用 Cargo 从中安装和发布板条箱 AWS CodeArtifact,您需要使用 CodeArtifact 存储库信息对其进行配置。按照以下过程之一中的步骤使用您的 CodeArtifact 存储库端点信息和凭据配置 Cargo。

按照控制台说明配置 Cargo

您可以使用控制台中的配置说明将 Cargo 连接到您的 CodeArtifact 存储库。控制台说明提供了为您的 CodeArtifact 仓库定制的 Cargo 配置。您可以使用此自定义配置来设置 Cargo,而无需查找和填写您的 CodeArtifact 信息。

  1. 打开 AWS CodeArtifact 控制台,网址为https://console.aws.amazon.com/codesuite/codeartifact/home

  2. 在导航窗格中,选择存储库,然后选择要连接到 Cargo 的存储库。

  3. 选择查看连接说明

  4. 选择操作系统。

  5. 选择 Cargo

  6. 按照生成的说明将 Cargo 连接到您的 CodeArtifact 存储库。

手动配置 Cargo

如果您无法或不想使用控制台中的配置说明,则可以按照以下说明手动将 Cargo 连接到您的 CodeArtifact 存储库。

macOS and Linux

要使用配置 Cargo CodeArtifact,您需要在 Cargo 配置中将存储 CodeArtifact 库定义为注册表并提供凭据。

  • my_registry用您的注册表名称替换。

  • my_domain用您的 CodeArtifact 域名替换。

  • 111122223333替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库,则无需包括 --domain-owner。有关更多信息,请参阅 Cross-account 域名

  • my_repo替换为您的 CodeArtifact 存储库名称。

复制配置以将 Cargo 程序包发布并下载到您的存储库,然后将其保存到 ~/.cargo/config.toml 文件(对于系统级配置)或 .cargo/config.toml(对于项目级配置):

[registries.my_registry] index = "sparse+https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/cargo/my_repo/" credential-provider = "cargo:token-from-stdout aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --region us-west-2 --query authorizationToken --output text" [registry] default = "my_registry" [source.crates-io] replace-with = "my_registry"
Windows: Download packages only

要使用配置 Cargo CodeArtifact,您需要在 Cargo 配置中将存储 CodeArtifact 库定义为注册表并提供凭据。

  • my_registry用您的注册表名称替换。

  • my_domain用您的 CodeArtifact 域名替换。

  • 111122223333替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库,则无需包括 --domain-owner。有关更多信息,请参阅 Cross-account 域名

  • my_repo替换为您的 CodeArtifact 存储库名称。

复制配置以仅从您的存储库下载 Cargo 程序包,然后将其保存到 %USERPROFILE%\.cargo\config.toml 文件(对于系统级配置)或 .cargo\config.toml(对于项目级配置):

[registries.my_registry] index = "sparse+https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/cargo/my_repo/" credential-provider = "cargo:token-from-stdout aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --region us-west-2 --query authorizationToken --output text" [registry] default = "my_registry" [source.crates-io] replace-with = "my_registry"
Windows: Publish and download packages
  1. 要使用配置 Cargo CodeArtifact,您需要在 Cargo 配置中将存储 CodeArtifact 库定义为注册表并提供凭据。

    • my_registry用您的注册表名称替换。

    • my_domain用您的 CodeArtifact 域名替换。

    • 111122223333替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库,则无需包括 --domain-owner。有关更多信息,请参阅 Cross-account 域名

    • my_repo替换为您的 CodeArtifact 存储库名称。

    复制配置以将 Cargo 程序包发布并下载到您的存储库,然后将其保存到 %USERPROFILE%\.cargo\config.toml 文件(对于系统级配置)或 .cargo\config.toml(对于项目级配置)。

    建议使用凭证提供程序 cargo:token,该提供程序使用存储在 ~/.cargo/credentials.toml 文件中的凭证。如果您使用 cargo:token-from-stdout,在 cargo publish 期间可能会遇到错误,因为 Cargo 客户端在 cargo publish 期间未正确修剪授权令牌。

    [registries.my_registry] index = "sparse+https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/cargo/my_repo/" credential-provider = "cargo:token" [registry] default = "my_registry" [source.crates-io] replace-with = "my_registry"
  2. 要使用 Windows 将 Cargo 软件包发布到存储库,必须使用 CodeArtifact get-authorization-token命令和 Cargo login 命令来获取授权令牌和您的凭据。

    • my_registry替换为中定义的注册表名称[registries.my_registry]

    • my_domain用您的 CodeArtifact 域名替换。

    • 111122223333替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库,则无需包括 --domain-owner。有关更多信息,请参阅 Cross-account 域名

    aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --region us-west-2 --query authorizationToken --output text | cargo login --registry my_registry
    注意

    生成的授权令牌有效期为 12 小时。如果自创建令牌以来已过去 12 小时,则需要创建一个新的令牌。

前面示例中的 [registries.my_registry] 部分定义了一个包含 my_registry 并提供 indexcredential-provider 信息的注册表。

  • index为您的注册表指定索引的 URL,这是以结尾的 CodeArtifact 存储库端点/。对于不是 Git 存储库的注册表,需要使用 sparse+ 前缀。

    注意

    要使用双堆栈端点,请使用 codeartifact.region.on.aws 端点。

  • credential-provider 指定给定注册表的凭证提供程序。如果未设置 credential-provider,则将使用 registry.global-credential-providers 中的提供程序。如果设置credential-providercargo:token-from-stdout,Cargo 客户端将在发布或从 CodeArtifact 存储库下载时自动获取新的授权令牌,因此您无需每 12 小时手动刷新授权令牌。

[registry] 部分定义了使用的默认注册表。

  • default指定中定义的注册表的名称[registries.my_registry],在发布或从 CodeArtifact 存储库下载时,默认使用该名称。

[source.crates-io] 部分定义了未指定注册表时使用的默认注册表。

  • replace-with = "my_registry"将公共注册表 crates.io 替换为中定义的存储 CodeArtifact 库。[registries.my_registry]如果您需要从外部连接(例如 crates.io)请求程序包,则建议采用此配置。

    要获得的所有好处 CodeArtifact,例如防止依赖混淆攻击的软件包起源控制,建议您使用源代码替换。使用源替换时, CodeArtifact 代理外部连接的所有请求,并将软件包从外部连接复制到您的存储库。如果不使用源代码替换,Cargo 客户端将根据项目的 Cargo.toml 文件中的配置直接检索程序包。如果依赖项未标记registry=my_registry,则 Cargo 客户端将直接从 crates.io 中检索依赖关系,无需与您的存储库通信。 CodeArtifact

    注意

    如果您最初使用源代码替换,但更新配置文件后不使用源代码替换,则可能会遇到错误。相反的情况也可能会导致错误。因此,建议避免更改项目的配置。

安装 Cargo crate

使用以下过程从 CodeArtifact 存储库或 crates.io 中安装 Cargo 板条箱

从中安装货箱 CodeArtifact

你可以使用 Cargo (cargo) CLI 从 CodeArtifact 仓库中快速安装特定版本的 Cargo crate。

从装有货物的 CodeArtifact 仓库中安装货箱
  1. 如果还没有,请按照中的步骤配置和使用 Cargo CodeArtifactcargo CLI 配置为使用具有正确凭据的 CodeArtifact 仓库。

  2. 使用以下命令从 CodeArtifact以下位置安装货箱:

    cargo add my_cargo_package@1.0.0

    有关更多信息,请参阅《The Cargo Book》中的 cargo add

将货箱发布到 CodeArtifact

使用以下步骤使用 C cargo LI 将 Crago 箱子发布到 CodeArtifact 仓库。

  1. 如果还没有,请按照中的步骤配置和使用 Cargo CodeArtifactcargo CLI 配置为使用具有正确凭据的 CodeArtifact 仓库。

  2. 使用以下命令将 Cargo 箱子发布到 CodeArtifact 存储库:

    cargo publish

    有关更多信息,请参阅《The Cargo Book》中的 cargo publish