在 CodeArtifact 中配置和使用 Cargo - CodeArtifact

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

在 CodeArtifact 中配置和使用 Cargo

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

使用 CodeArtifact 配置 Cargo

要使用 Cargo 从 AWS CodeArtifact 安装和发布 crate,首先需要使用您的 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

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

  • my_registry 替换为注册表名称。

  • my_domain 替换为您的 CodeArtifact 域名。

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

  • 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

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

  • my_registry 替换为注册表名称。

  • my_domain 替换为您的 CodeArtifact 域名。

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

  • 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. 要使用 CodeArtifact 配置 Cargo,您需要在 Cargo 配置中将 CodeArtifact 存储库定义为注册表,并提供凭证。

    • my_registry 替换为注册表名称。

    • my_domain 替换为您的 CodeArtifact 域名。

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

    • 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。有关更多信息,请参阅 跨账户域

    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-provider 设置为 cargo:token-from-stdout,当从 CodeArtifact 存储库发布或下载时,Cargo 客户端会自动获取新的授权令牌,因此您无需每 12 小时手动刷新授权令牌。

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

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

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

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

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

    注意

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

安装 Cargo crate

使用以下过程从 CodeArtifact 存储库或 crates.io 安装 Cargo crate。

从 CodeArtifact 安装 Cargo crate

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

使用 cargo 从 CodeArtifact 存储库安装 Cargo crate
  1. 如果还没有配置,请按照在 CodeArtifact 中配置和使用 Cargo 中的步骤将 cargo CLI 配置为通过适当的凭证来使用 CodeArtifact 存储库。

  2. 使用以下命令从 CodeArtifact 安装 Cargo crate:

    cargo add my_cargo_package@1.0.0

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

将 Cargo crate 发布到 CodeArtifact

按照以下步骤,使用 cargo CLI 将 Cargo crate 发布到 CodeArtifact 存储库。

  1. 如果还没有配置,请按照在 CodeArtifact 中配置和使用 Cargo 中的步骤将 cargo CLI 配置为通过适当的凭证来使用 CodeArtifact 存储库。

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

    cargo publish

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