

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

# 进程凭证提供者
<a name="feature-process-credentials"></a>

**注意**  
如需了解设置页面布局或解释后面的 Support b **y AWS SDKs 和 tools** 表格的帮助，请参阅[了解本指南的设置页面](settings-reference.md#settingsPages)。

SDKs 提供一种针对自定义用例扩展凭证提供者链的方法。此提供者可用于提供自定义实现，例如从本地凭证存储中检索凭证或与本地身份提供者集成。

 例如，IAM Roles Anywhere 使用 `credential_process` 来代表您的应用程序获取临时凭证。要对此用途配置 `credential_process`，请参阅 [使用 IAM Anywhere 角色进行身份验证 AWS SDKs 和工具](access-rolesanywhere.md)。

**注意**  
下面介绍了一种从外部进程获取凭证的方法，可在您在 AWS之外运行软件时使用。如果您在 AWS 计算资源上进行构建，请使用其他凭证提供程序。使用此选项时，应确保按照适用于操作系统的安全最佳实践，尽可能锁定 config 文件。确认您的自定义凭证工具未向其写入任何机密信息`StdErr`，因为 SDKs和 AWS CLI 可以捕获和记录此类信息，从而有可能将其暴露给未经授权的用户。

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

**`credential_process`-共享 AWS `config`文件设置**  
指定 SDK 或工具代表您运行的外部命令，以生成或检索用于该命令的身份验证凭证。该设置指定 SDK program/command 将调用的名称。当 SDK 调用该进程时，它会等待进程将 JSON 数据写入 `stdout`。自定义提供者必须以特定格式返回信息。该信息包含 SDK 或工具可用于对您进行身份验证的凭据。

**注意**  
进程凭证提供者是 [了解默认凭证提供者链](standardized-credentials.md#credentialProviderChain) 的一部分。但是，只有在本系列中的其他几个提供者之后，才会检查进程凭证提供者。因此，如果您希望您的程序使用此提供者的凭证，则必须从配置中删除其他有效的凭证提供者或使用其他配置文件。或者，与其依赖凭证提供者链自动发现哪个提供者返回了有效凭证，不如在代码中指定使用的进程凭证提供者。创建服务客户端时，可直接指定凭证来源。

## 指定凭证程序的路径
<a name="feature-process-credentials-detail-path"></a>

该设置的值是一个字符串，其中包含指向 SDK 或开发工具代表您运行的程序的路径：
+ 路径和文件名只能由以下字符组成：A-Z、a-z、0-9、连字符（-）、下划线（\$1）、句点（.）、正斜杠（/）、反斜杠（\$1）和空格。
+ 如果路径或文件名包含空格，请将完整路径和文件名用双引号 (" ") 括起来。
+ 如果参数名称或参数值包含空格，则用双引号 (" ") 将该元素括起来。仅括起来名称或值，而不是名称值对。
+ 请勿在字符串中包含任何环境变量。例如，您不能包含 `$HOME` 或 `%USERPROFILE%`。
+ 不要将主文件夹指定为 `~`。\$1 您必须指定完整路径或基文件名。如果存在基本文件名，则系统会尝试在 `PATH` 环境变量指定的文件夹中查找该程序。路径因操作系统而异：

  以下示例显示了在 Linux/macOS 上的共享 `config` 文件中设置 credential\$1process。

  ```
  credential_process = "/path/to/credentials.sh" parameterWithoutSpaces "parameter with spaces"
  ```

  以下示例显示了在 Windows 上的共享 `config` 文件中设置 credential\$1process。

  ```
  credential_process = "C:\Path\To\credentials.cmd" parameterWithoutSpaces "parameter with spaces"
  ```
+  可以在专属配置文件中指定：

  ```
  [profile cred_process] 
  credential_process = /Users/username/process.sh 
  region = us-east-1
  ```

## 凭证计划的有效输出
<a name="feature-process-credentials-output"></a>

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 ***不*** 缓存外部进程凭证，这一点不同于代入角色凭证。如果需要缓存，则必须在外部进程中实现。

外部进程可以返回非零返回代码，以指示在检索凭证时发生错误。

## Support AWS SDKs by 和工具
<a name="feature-process-credentials-sdk-compat"></a>

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


| SDK | 支持 | 备注或更多信息 | 
| --- | --- | --- | 
| [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/) v2 | 是 |  | 
| [适用于 C\$1\$1 的 SDK](https://docs.aws.amazon.com/sdk-for-cpp/latest/developer-guide/) | 是 |  | 
| [适用于 Go V2 (1.x) 的 SDK](https://docs.aws.amazon.com/sdk-for-go/v2/developer-guide/) | 是 |  | 
| [适用于 Go 1.x（V1）的 SDK](https://docs.aws.amazon.com/sdk-for-go/latest/developer-guide/) | 是 | 要使用共享 config 文件设置，必须开启从配置文件加载的功能；请参阅[会话](https://docs.aws.amazon.com/sdk-for-go/api/aws/session/)。 | 
| [适用于 Java 2.x 的 SDK](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/) | 是 |  | 
| [适用于 Java 1.x 的 SDK](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/) | 是 |  | 
| [适用于 JavaScript 3.x 的软件开发工具包](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/) | 是 |  | 
| [适用于 JavaScript 2.x 的 SDK](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/) | 是 |  | 
| [适用于 Kotlin 的 SDK](https://docs.aws.amazon.com/sdk-for-kotlin/latest/developer-guide/) | 是 |  | 
| [适用于.NET 4.x 的 SDK](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/) | 是 |  | 
| [适用于 .NET 3.x 的 SDK](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/) | 是 |  | 
| [适用于 PHP 3.x 的 SDK](https://docs.aws.amazon.com/sdk-for-php/latest/developer-guide/) | 是 |  | 
| [适用于 Python (Boto3) 的 SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) | 是 |  | 
| [适用于 Ruby 3.x 的 SDK](https://docs.aws.amazon.com/sdk-for-ruby/latest/developer-guide/) | 是 |  | 
| [适用于 Rust 的 SDK](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/) | 是 |  | 
| [适用于 Swift 的 SDK](https://docs.aws.amazon.com/sdk-for-swift/latest/developer-guide/) | 是 |  | 
| [适用于 PowerShell V5 的工具](https://docs.aws.amazon.com/powershell/latest/userguide/) | 是 |  | 
| [适用于 PowerShell V4 的工具](https://docs.aws.amazon.com/powershell/v4/userguide/) | 是 |  | 