进程凭证提供者
注意
如需获得相关帮助,以了解设置页面的布局或解释后面的 Amazon SDK 和工具支持表,请参阅了解本指南的设置页面。
SDK 提供了一种扩展自定义用例的凭证提供者链的方法。此提供者可用于提供自定义实现,例如从本地凭证存储中检索凭证或与本地身份提供者集成。
例如,IAM Roles Anywhere 使用 credential_process 来代表您的应用程序获取临时凭证。要对此用途配置 credential_process,请参阅 使用 IAM Roles Anywhere 进行 Amazon SDK 和工具的身份验证。
注意
下面介绍了一种从外部进程获取凭证的方法,可在您在 Amazon 之外运行软件时使用。如果您在 Amazon 计算资源上进行构建,请使用其他凭证提供者。使用此选项时,应确保按照适用于操作系统的安全最佳实践,尽可能锁定 config 文件。确保您的自定义凭证工具不会将任何秘密信息写入 StdErr,因为 SDK 和 Amazon CLI 可以捕获和记录此类信息,可能会将其向未经授权的用户公开。
使用以下方法配置此功能:
credential_process- 共享 Amazonconfig文件设置-
指定 SDK 或工具代表您运行的外部命令,以生成或检索用于该命令的身份验证凭证。该设置指定 SDK 将调用的程序/命令的名称。当 SDK 调用该进程时,它会等待进程将 JSON 数据写入
stdout。自定义提供者必须以特定格式返回信息。该信息包含 SDK 或工具可用于对您进行身份验证的凭据。
注意
进程凭证提供者是 了解默认凭证提供者链 的一部分。但是,只有在本系列中的其他几个提供者之后,才会检查进程凭证提供者。因此,如果您希望您的程序使用此提供者的凭证,则必须从配置中删除其他有效的凭证提供者或使用其他配置文件。或者,与其依赖凭证提供者链自动发现哪个提供者返回了有效凭证,不如在代码中指定使用的进程凭证提供者。创建服务客户端时,可直接指定凭证来源。
指定凭证程序的路径
该设置的值是一个字符串,其中包含指向 SDK 或开发工具代表您运行的程序的路径:
-
路径和文件名只能由以下字符组成:A-Z、a-z、0-9、连字符(-)、下划线(_)、句点(.)、正斜杠(/)、反斜杠(\)和空格。
-
如果路径或文件名包含空格,请将完整路径和文件名用双引号 (" ") 括起来。
-
如果参数名称或参数值包含空格,则用双引号 (" ") 将该元素括起来。仅括起来名称或值,而不是名称值对。
-
请勿在字符串中包含任何环境变量。例如,您不能包含
$HOME或%USERPROFILE%。 -
不要将主文件夹指定为
~。* 您必须指定完整路径或基文件名。如果存在基本文件名,则系统会尝试在PATH环境变量指定的文件夹中查找该程序。路径因操作系统而异:以下示例显示了在 Linux/macOS 上的共享
config文件中设置 credential_process。credential_process ="/path/to/credentials.sh" parameterWithoutSpaces "parameter with spaces"以下示例显示了在 Windows 上的共享
config文件中设置 credential_process。credential_process ="C:\Path\To\credentials.cmd" parameterWithoutSpaces "parameter with spaces" -
可以在专属配置文件中指定:
[profilecred_process] credential_process =/Users/username/process.shregion =us-east-1
凭证计划的有效输出
SDK 按照配置文件中指定的方式运行该命令,然后从标准输出流中读取数据。您指定的命令,无论是脚本还是二进制程序,都必须在 STDOUT 上生成符合以下语法的 JSON 输出。
{ "Version": 1, "AccessKeyId": "an AWS access key", "SecretAccessKey": "your AWS secret access key", "SessionToken": "the AWS session token for temporary credentials", "Expiration": "RFC3339 timestamp for when the credentials expire" }
注意
截至撰写本文之时,Version 密钥必须设置为 1。随时间推移和该结构的发展,该值可能会增加。
Expiration 密钥是采用 RFC3339 格式的时间戳。如果工具的输出中不存在 Expiration 密钥,则 SDK 假定凭证是不刷新的长期凭证。否则,将其视为临时凭证,并通过在其过期前重新运行 credential_process 命令来自动刷新凭证。
注意
SDK 不 缓存外部进程凭证,这一点不同于代入角色凭证。如果需要缓存,则必须在外部进程中实现。
外部进程可以返回非零返回代码,以指示在检索凭证时发生错误。
Amazon SDK 和工具支持
以下 SDK 支持本主题中所述的功能和设置。所有部分例外情况均已注明。任何 JVM 系统属性设置都仅支持 适用于 Java 的 Amazon SDK 和 适用于 Kotlin 的 Amazon SDK。
| SDK | 支持 | 备注或更多信息 |
|---|---|---|
| Amazon CLI v2 | 是 | |
| 适用于 C++ 的 SDK | 是 | |
| 适用于 Go V2 (1.x) 的 SDK |
是 | |
| 适用于 Go 1.x(V1)的 SDK | 是 | 要使用共享 config 文件设置,必须开启从配置文件加载的功能;请参阅会话。 |
| 适用于 Java 2.x 的 SDK | 是 | |
| 适用于 Java 1.x 的 SDK | 是 | |
| 适用于 JavaScript 3.x 的 SDK | 是 | |
| 适用于 JavaScript 2.x 的 SDK | 是 | |
| 适用于 Kotlin 的 SDK | 是 | |
| 适用于 .NET 4.x 的 SDK | 是 | |
| 适用于 .NET 3.x 的 SDK | 是 | |
| 适用于 PHP 3.x 的 SDK | 是 | |
| 适用于 Python (Boto3) 的 SDK |
是 | |
| 适用于 Ruby 3.x 的 SDK | 是 | |
| 适用于 Rust 的 SDK | 是 | |
| 适用于 Swift 的 SDK | 是 | |
| Tools for PowerShell V5 | 是 | |
| Tools for PowerShell V4 | 是 |