

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

# 使用 AWS 适用于 Ruby 的 SDK 凭证提供商
<a name="credential-providers"></a>

对的所有请求都 AWS 必须使用颁发的凭证进行加密签名。 AWS运行时，SDK 会通过检查多个位置来检索凭证的配置值。

身份验证 AWS 可以在您的代码库之外处理。SDK 可通过凭证提供程序链自动检测、使用并刷新多种身份验证方式。

有关项目 AWS 身份验证入门的指导选项，请参阅[和*工具参考指南中的身份验证AWS SDKs 和*访问权限](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)。

## 凭证提供程序链
<a name="credchain"></a>

所有 SDKs 人都有一系列地点（或来源）供他们检查，以便获得用于向某人提出请求的有效凭证 AWS 服务。找到有效凭证后，搜索即告停止。这种系统性搜索被称为默认凭证提供程序链。

**注意**  
如果您遵循推荐的方法让新用户开始使用，则在此期间使用控制台凭据登录进行身份验证[AWS 使用 AWS 适用于 Ruby 的 SDK 进行身份验证](credentials.md)。其他身份验证方法适用于不同的情况。为避免安全风险，我们建议始终使用短期凭证。有关其他身份验证方法的步骤，请参阅[和*工具参考指南中的身份验证AWS SDKs 和*访问](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)。

对于链中的每个步骤，都有不同的设置值的方法。直接在代码中设置值始终优先，然后设置为环境变量，然后在共享 AWS `config`文件中设置。

《*AWS SDKs 和工具参考指南》*包含有关所有 AWS SDKs 人使用的 SDK 配置设置的信息 AWS CLI。要详细了解如何通过共享 AWS `config`文件配置 SDK，请参阅[共享配置和凭据文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。要详细了解如何通过设置环境变量来配置 SDK，请参阅[环境变量支持](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html)。

要进行身份验证 AWS， AWS SDK for Ruby 将按下表所列顺序检查凭证提供者。


| 凭证提供程序（按优先顺序排列） | *AWS SDKs 和工具参考指南* | *适用于 Ruby 的 AWS SDK API 引用* | 
| --- | --- | --- | 
| AWS 访问密钥（临时和长期证书） | [AWS 访问密钥](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html) | [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Credentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Credentials.html)[https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/SharedCredentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/SharedCredentials.html) | 
| 来自 AWS Security Token Service (AWS STS) 的 Web 身份令牌  | [代入角色凭证提供程序](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html)使用 `role_arn`、`role_session_name` 和 `web_identity_token_file` | [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/AssumeRoleWebIdentityCredentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/AssumeRoleWebIdentityCredentials.html)  | 
| AWS IAM Identity Center。在本指南中，请参阅[AWS 使用 AWS 适用于 Ruby 的 SDK 进行身份验证](credentials.md)。 | [IAM Identity Center 凭证提供程序](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html) | [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/SSOCredentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/SSOCredentials.html) | 
| 可信实体提供程序（如 AWS\$1ROLE\$1ARN） 在本指南中，请参阅[创建 AWS STS 访问令牌](#aws-ruby-sdk-credentials-access-token)。 | [代入角色凭证提供者](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html)使用 `role_arn` 和 `role_session_name` | [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/AssumeRoleCredentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/AssumeRoleCredentials.html) | 
| 登录凭证提供商 | [登录凭证提供商](https://docs.aws.amazon.com/sdkref/latest/guide/feature-login-credentials.html) | [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/LoginCredentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/LoginCredentials.html) | 
| 流程凭证提供程序 | [流程凭证提供程序](https://docs.aws.amazon.com/sdkref/latest/guide/feature-process-credentials.html) | [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ProcessCredentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ProcessCredentials.html) | 
| Amazon Elastic Container Service (Amazon ECS) 凭证 | [容器凭证提供程序](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html) | [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ECSCredentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ECSCredentials.html) | 
| 亚马逊弹性计算云 (Amazon EC2) 实例配置文件证书（IMDS 凭证提供商） | [IMDS 凭证提供程序](https://docs.aws.amazon.com/sdkref/latest/guide/feature-imds-credentials.html) | [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/InstanceProfileCredentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/InstanceProfileCredentials.html) | 

如果设置了 AWS SDK f `AWS_SDK_CONFIG_OPT_OUT` or Ruby 环境变量，则不会对共享 AWS `config`文件（通常位` ~/.aws/config`于）进行凭据解析。

## 创建 AWS STS 访问令牌
<a name="aws-ruby-sdk-credentials-access-token"></a>

假设角色涉及使用一组临时安全证书，您可以使用这些证书来访问通常可能无法访问的 AWS 资源。这些临时凭证由访问密钥 ID、秘密访问密钥和安全令牌组成。您可以使用[https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/AssumeRoleCredentials.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/AssumeRoleCredentials.html)方法创建 AWS Security Token Service (AWS STS) 访问令牌。

以下示例使用访问令牌来创建 Amazon S3 客户端对象，其中 `linked::account::arn` 是要代入的角色的 Amazon 资源名称 (ARN)，`session-name` 是代入的角色会话的标识符。

```
role_credentials = Aws::AssumeRoleCredentials.new(
  client: Aws::STS::Client.new,
  role_arn: "linked::account::arn",
  role_session_name: "session-name"
)

s3 = Aws::S3::Client.new(credentials: role_credentials)
```

有关设置`role_arn`或或或`role_session_name`改为使用共享 AWS `config`文件进行设置的更多信息，请参阅*AWS SDKs 和工具参考指南*中的代入[角色凭据提供者](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html)。