View a markdown version of this page

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

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

主机前缀注入

注意

如需了解设置页面布局或解释后面的 Support by AWS SDK 和工具表的帮助,请参阅了解本指南的设置页面

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

例如,在使用 Amazon 简单存储服务对 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"
{Bucket}-{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"

Support by AWS SDK 和工具

以下 SDK 支持本主题中所述的功能和设置。所有部分例外情况均已注明。 适用于 Java 的 AWS SDK 和 AWS SDK for Kotlin 唯一支持任何 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 的软件开发工具包 不支持设置,但可以通过客户端使用 disableHostPrefix 在代码中配置。
适用于 JavaScript 2.x 的 SDK 不支持设置,但可以通过客户端使用 hostPrefixEnabled 在代码中配置。
适用于 Kotlin 的 SDK
适用于.NET 4.x 的 SDK 不支持设置,但可以通过客户端使用 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 中。