

 適用於 Java 的 AWS SDK 1.x 已於 2025 年 12 月 31 日end-of-support。我們建議您遷移至 [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 會嘗試使用 [DefaultAWSCredentialsProviderChain](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 Identity Token 登入**資料。

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.  如果已`AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`設定環境變數，則從 Amazon ECS 載入的 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 會使用*預設*的設定檔，但有方法可以自訂從登入資料檔案取得的設定檔。

您可以使用 AWS 設定檔環境變數來變更 SDK 載入的設定檔。

例如，在 Linux、macOS 或 Unix 上，您會執行下列命令，將設定檔變更為 *myProfile*。

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

在 Windows 上，您會使用下列項目。

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

設定`AWS_PROFILE`環境變數會影響所有官方支援的 AWS SDKs和工具 （包括 AWS CLI 和 AWS Tools for Windows PowerShell) 的登入資料載入。若要僅變更 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>

設定臨時登入資料後，開發套件會使用預設登入資料提供者鏈結載入它們。

若要這樣做，您可以執行個體化 AWS 服務 用戶端，而不明確提供憑證給建置器，如下所示。

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

## 指定登入資料提供者或提供者鏈結
<a name="credentials-specify-provider"></a>

您可以使用用戶端建置器，指定與*預設*登入資料供應者鏈結不同的登入資料供應者。

您可以將登入資料提供者或提供者鏈結的執行個體提供給用戶端建置器，以 [AWSCredentialsProvider](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所提供登入資料提供者和提供者鏈的完整清單，請參閱 [AWSCredentialsProvider](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) 類別，並提供 AWS 開發套件用於連線的存取金鑰、 AWS 私密金鑰和 AWS 工作階段字符。

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

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) 