View a markdown version of this page

主机前缀注入 - AWS 软件开发工具包和工具

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

主机前缀注入

注意

要帮助了解设置页面的布局或解释下方的 “ AWS SDK 和工具支持” 表格,请参阅了解本指南的设置页面。

主机前缀注入是一项功能,在该功能中, AWS SDK 会自动在某些 API 操作的服务端点的主机名前添加前缀。此前缀可以是一个静态字符串,也可以是包含请求参数中数据的动态值。

例如,当使用亚马逊简单存储服务对 Amazon S3 对象或存储桶执行操作时,开发工具包将在最终 API 终端节点中替换您的存储桶名称和 AWS 账户 ID。

虽然这种行为是普通 AWS 服务终端节点所必需的,但在使用 VPC 终端节点或本地测试工具等自定义终端节点时可能会导致问题。对于这些情况,您可能需要禁用主机前缀注入。

使用以下方法配置此功能:

disable_host_prefix_injection-共享 AWS config文件设置
AWS_DISABLE_HOST_PREFIX_INJECTION - 环境变量
aws.disableHostPrefixInjection-JVM 系统属性:仅限 Java/Kotlin

此设置用于控制 SDK 或工具是否将通过附加在 SDK 的客户端对象或变量中定义的主机前缀来修改端点主机名。

默认值:false

有效值:

  • true:禁用主机前缀注入。SDK 不会修改端点主机名。

  • false:启用主机前缀注入。SDK 将在端点主机名前附加主机前缀。

在 config 文件中设置此值的示例:

[default] disable_host_prefix_injection = true

Linux/macOS 通过命令行设置环境变量的示例:

export AWS_DISABLE_HOST_PREFIX_INJECTION=true

Windows 通过命令行设置环境变量的示例:

setx AWS_DISABLE_HOST_PREFIX_INJECTION true

主机前缀注入示例

下面的示例表展示了启用和禁用主机前缀注入后 SDK 将会如何修改最终端点。

  • 主机前缀:在 SDK 客户端对象或代码变量上设置的主机前缀属性字符串模板。

  • 输入:在 SDK 客户端对象或代码变量上设置的其他输入。

  • 客户端端点:客户端的派生端点。

  • 设置值:先前设置的解析值。

  • 结果端点:SDK 客户端用于执行 API 调用的最终端点。

主机前缀 输入 客户端端点 设置值 结果端点
“数据。” {} "https://service.us-west-2.amazonaws.com" false "https://data.service.us-west-2.amazonaws.com"
“{存储桶}-{AccountId}。” 存储桶:“amzn-s3-demo-bucket1”,: “123456789012” AccountId "https://service.us-west-2.amazonaws.com" false "https://amzn-s3-demo-bucket1-123456789012.service.us-west-2.amazonaws.com"
“数据。” {} "https://override.us-west-2.amazonaws.com"(作为替代端点) true "https://override.us-west-2.amazonaws.com"

支持者 AWS SDK 和工具

以下 SDK 支持本主题中所述的功能和设置。所有部分例外情况均已注明。 适用于 Java 的 AWS SDK 和 适用于 Kotlin 的 AWS SDK 仅支持任何 JVM 系统属性设置。

SDK 支持 备注或更多信息
AWS CLI v2 是
适用于 C++ 的 SDK 否 不支持设置,但可以通过客户端使用 enableHostPrefixInjection 在代码中配置。
适用于 Go V2 (1.x) 的 SDK 否 可以使用中间件禁用。
适用于 Go 1.x(V1)的 SDK 否
适用于 Java 2.x 的 SDK 否 不支持设置,但可以通过客户端使用 SdkAdvancedClientOption.DISABLE_HOST_PREFIX_INJECTION 在代码中配置。
适用于 Java 1.x 的 SDK 否 不支持设置,但可以通过客户端使用 withDisableHostPrefixInjection 在代码中配置。
适用于 JavaScript 3.x 的 SDK 否 不支持设置,但可以通过客户端使用 disableHostPrefix 在代码中配置。
适用于 JavaScript 2.x 的 SDK 否 不支持设置,但可以通过客户端使用 hostPrefixEnabled 在代码中配置。
适用于 Kotlin 的 SDK 否
.NET 4.x 软件开发工具包 否 不支持设置,但可以通过客户端使用 DisableHostPrefixInjection 在代码中配置。
适用于 .NET 3.x 的 SDK 否 不支持设置,但可以通过客户端使用 DisableHostPrefixInjection 在代码中配置。
适用于 PHP 3.x 的 SDK 否 不支持设置,但可以通过客户端使用 disable_host_prefix_injection 在代码中配置。
适用于 Python (Boto3) 的 SDK 是 可以通过客户端使用 inject_host_prefix 在代码中配置。
适用于 Ruby 3.x 的 SDK 否 不支持设置,但可以通过客户端使用 disable_host_prefix_injection 在代码中配置。
适用于 Rust 的 SDK 否
适用于 Swift 的 SDK 否
PowerShell V5 工具 否 不支持设置,但可以使用参数 -ClientConfig @{DisableHostPrefixInjection = $true} 将其包含在特定的 cmdlet 中。
PowerShell V4 工具 否 不支持设置,但可以使用参数 -ClientConfig @{DisableHostPrefixInjection = $true} 将其包含在特定的 cmdlet 中。