

 适用于 Java 的 AWS SDK 1.x于2025年 end-of-support 12月31日达到。我们建议您迁移到 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) 以继续获得新功能、可用性改进和安全更新。

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

# 向提供临时证书 适用于 Java 的 AWS SDK
<a name="credentials"></a>

要向发出请求 Amazon Web Services，您必须提供 AWS 临时证书， 适用于 Java 的 AWS SDK 以供其在调用服务时使用。您可以通过下列方式来执行此操作：
+ 使用默认凭证提供程序链*（推荐）*。
+ 使用特定的凭证提供程序或提供程序链（或创建您自己的）。
+ 在代码中自行提供临时凭证。

## 使用默认凭证提供程序链
<a name="credentials-default"></a>

[当您在不提供任何参数的情况下初始化新的服务客户端时，会 适用于 Java 的 AWS SDK 尝试使用 Default AWSCredentials ProviderChain 类实现的*默认凭证提供程序链*来查找临时证书。](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html)默认凭证提供程序链将按此顺序查找凭证：

1.  **环境变量**，`AWS_ACCESS_KEY_ID`、`AWS_SECRET_KEY` 或 `AWS_SECRET_ACCESS_KEY` 和 `AWS_SESSION_TOKEN`。 适用于 Java 的 AWS SDK 使用[EnvironmentVariableCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/EnvironmentVariableCredentialsProvider.html)类来加载这些证书。

1.  **Java 系统属性**，`aws.accessKeyId`、`aws.secretKey`（而不是 `aws.secretAccessKey`）和 `aws.sessionToken`。 适用于 Java 的 AWS SDK 使用加载[SystemPropertiesCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/SystemPropertiesCredentialsProvider.html)这些凭证。

1.  来自环境或容器的 **Web 身份令牌凭证**。

1.  **默认凭证配置文件** ——通常位于`~/.aws/credentials`（位置可能因平台而异），并由许多 AWS SDKs 和共享。 AWS CLI 适用于 Java 的 AWS SDK 使用加载[ProfileCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/profile/ProfileCredentialsProvider.html)这些凭证。

   您可以使用提供的`aws configure`命令创建凭据文件 AWS CLI，也可以使用文本编辑器编辑该文件来创建凭证文件。有关凭证文件格式的信息，请参阅 [AWS 凭证文件格式](#credentials-file-format)。

1.  **Amazon ECS 容器凭证** – 如果设置了环境变量 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`，则从 Amazon ECS 加载该凭证。 适用于 Java 的 AWS SDK 使用加载[ContainerCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/ContainerCredentialsProvider.html)这些凭证。可以指定此值的 IP 地址。

1.  **实例配置文件证书**-用于 EC2 实例，并通过 Amazon EC2 元数据服务提供。 适用于 Java 的 AWS SDK 使用加载[InstanceProfileCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/InstanceProfileCredentialsProvider.html)这些凭证。可以指定此值的 IP 地址。
**注意**  
仅在未设置 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` 时使用实例配置文件凭证。请参阅[EC2ContainerCredentialsProviderWrapper](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/EC2ContainerCredentialsProviderWrapper.html)了解更多信息。

### 设置临时凭证
<a name="setting-credentials"></a>

为了能够使用 AWS 临时证书，必须*至少在上述位置之一*进行设置。有关设置凭证的信息，请参阅以下主题：
+ 要在*环境* 或默认*凭证配置文件* 中指定凭证，请参阅[配置临时凭证](setup-credentials.md#setup-credentials-setting)。
+ 要设置 Java *系统属性*，请参阅官方 [Java 教程](http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html)网站中的*系统属性*教程。
+ 要在您的 EC2 *实例上设置和使用实例配置文件证书*，请参阅上的 “[使用 IAM 角色授予对 AWS 资源的访问权限” Amazon EC2](java-dg-roles.md)。

### 设置备用凭证配置文件
<a name="setting-an-alternate-credentials-profile"></a>

默认 适用于 Java 的 AWS SDK 使用*默认*配置文件，但也有一些方法可以自定义哪个配置文件来自凭据文件。

您可以使用 P AWS rofile 环境变量来更改 SDK 加载的配置文件。

例如，在 Linux、macOS 或 Unix 上，您可运行以下命令来将配置文件更改为 *myProfile*。

```
export AWS_PROFILE="myProfile"
```

在 Windows 上，您将使用以下配置文件。

```
set AWS_PROFILE="myProfile"
```

设置`AWS_PROFILE`环境变量会影响所有官方支持的工具 AWS SDKs 和工具（包括和 AWS Tools for Windows PowerShell）的 AWS CLI 凭证加载。如果只需要更改 Java 应用程序的配置文件，则可改用系统属性 `aws.profile`。

**注意**  
环境变量优先于系统属性。

### 设置备用凭证文件位置
<a name="setting-an-alternate-credentials-file-location"></a>

会自动从默认凭证文件位置 适用于 Java 的 AWS SDK 加载 AWS 临时证书。但是，您也可以通过在 `AWS_CREDENTIAL_PROFILES_FILE` 环境变量中设置凭证文件的完整路径来指定位置。

您可以使用此功能临时更改证书文件所在的位置（例如，通过使用命令行设置此变量）。 适用于 Java 的 AWS SDK 或者，您也可以在您的用户环境或系统环境中设置该环境变量，在用户范围或系统范围内对其进行更改。

#### 覆盖默认凭证文件位置
<a name="w3aab9c15b9c11b7b1"></a>
+ 将`AWS_CREDENTIAL_PROFILES_FILE`环境变量设置为 AWS 凭据文件的位置。
  + 在 Linux、macOS 或 Unix 上，请使用：

    ```
    export AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
    ```
  + 在 Windows 上，请使用：

    ```
    set AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
    ```

### `Credentials` 文件格式
<a name="credentials-file-format"></a>

根据本指南中的[基本设置说明](signup-create-iam-user.md#setup-temp-creds)，您的凭证文件应采用以下基本格式。

```
[default]
aws_access_key_id=<value from AWS access portal>
aws_secret_access_key=<value from AWS access portal>
aws_session_token=<value from AWS access portal>

[profile2]
aws_access_key_id=<value from AWS access portal>
aws_secret_access_key=<value from AWS access portal>
aws_session_token=<value from AWS access portal>
```

在方括号中指定配置文件名（例如：`[default]`），后跟该配置文件中的可配置字段作为键值对。您的 `credentials` 文件可包含多个配置文件，可使用 `aws configure --profile PROFILE_NAME ` 选择要配置的配置文件来添加或编辑这些配置文件。

您可以指定其他字段，例如 `metadata_service_timeout` 和 `metadata_service_num_attempts`。无法使用 CLI 配置这些文件 – 如果您想使用这些文件，则必须手动编辑它们。有关配置文件及其可用字段的更多信息，请参阅 AWS Command Line Interface 用户指南[AWS Command Line Interface中的配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。

### 加载凭证
<a name="loading-credentials"></a>

在设置临时凭证后，SDK 使用默认凭证提供程序链来加载这些凭证。

为此，您需要实例化 AWS 服务 客户端，而无需向生成器明确提供证书，如下所示。

```
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                       .withRegion(Regions.US_WEST_2)
                       .build();
```

## 指定凭证提供程序或提供程序链
<a name="credentials-specify-provider"></a>

您可以通过客户端生成器来指定一个不同于*默认*凭证提供程序链的凭证提供程序。

您可以向以提供者接口作为输入的客户端生成器提供凭证提供程序或[AWSCredentials提供程序](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/AWSCredentialsProvider.html)链的实例。以下示例演示使用*环境* 凭证的具体情况。

```
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                       .withCredentials(new EnvironmentVariableCredentialsProvider())
                       .build();
```

[有关 适用于 Java 的 AWS SDK提供的凭证提供者和提供者链的完整列表，请参阅 Provider 中的**AWSCredentials所有已知实现类**。](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/AWSCredentialsProvider.html)

**注意**  
您可以使用此技术来提供凭证提供程序或提供者链，这些证书提供程序或通过使用自己实现`AWSCredentialsProvider`接口的凭证提供程序或对类进行子类来创建。[AWSCredentialsProviderChain](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/AWSCredentialsProviderChain.html)

## 明确指定临时凭证
<a name="credentials-explicit"></a>

如果默认凭证链和特定的或自定义的提供程序或提供程序链都不适用于您的代码，您可以通过自行提供来明确设置这些凭证。如果您使用检索了临时证书 AWS STS，请使用此方法指定 AWS 访问凭证。

1. 实例化该[BasicSessionCredentials](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/BasicSessionCredentials.html)类，并为其提供 SDK 用于连接的 AWS 访问 AWS 密钥、密钥和会 AWS 话令牌。

1. [AWSStaticCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/AWSStaticCredentialsProvider.html)用`AWSCredentials`对象创建。

1. 使用 `AWSStaticCredentialsProvider` 配置客户端生成器并构建客户端。

示例如下：

```
BasicSessionCredentials awsCreds = new BasicSessionCredentials("access_key_id", "secret_key_id", "session_token");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                        .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                        .build();
```

## 更多信息
<a name="more-info"></a>
+  [注册 AWS 并创建 IAM 用户](signup-create-iam-user.md) 
+  [为开发设置 AWS 凭证和区域](setup-credentials.md) 
+  [使用 IAM 角色授予对 AWS 资源的访问权限 Amazon EC2](java-dg-roles.md) 