

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 AWS SDK for Rust 登入資料提供者
<a name="credproviders"></a>

 對 的所有請求 AWS 都必須使用 發行的登入資料以密碼編譯方式簽署 AWS。在執行時間，軟體開發套件會檢查多個位置來擷取登入資料的組態值。

如果擷取的組態包含[AWS IAM Identity Center 單一登入存取設定](credentials.md)，軟體開發套件會與 IAM Identity Center 搭配使用，以擷取用於提出請求的臨時登入資料 AWS 服務。

如果擷取的組態包含[臨時登入](https://docs.aws.amazon.com/sdkref/latest/guide/access-temp-idc.html)資料，軟體開發套件會使用它們來進行 AWS 服務 呼叫。暫時登入資料包含存取金鑰和工作階段字符。

使用 進行身分驗證 AWS 可以在您的程式碼庫之外處理。開發套件可以使用登入資料提供者鏈自動偵測、使用和重新整理許多身分驗證方法。

如需專案身分 AWS 驗證入門的引導選項，請參閱*AWS SDKs和工具參考指南》中的*[身分驗證和存取](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)。

## 登入資料提供者鏈結
<a name="credproviders-default-credentials-provider-chain"></a>

如果您在建構用戶端時未明確指定登入資料提供者，適用於 Rust 的 SDK 會使用登入資料提供者鏈結來檢查您可以提供登入資料的一系列位置。一旦 SDK 在其中一個位置找到登入資料，搜尋就會停止。如需建構用戶端的詳細資訊，請參閱 [在程式碼中設定適用於 Rust 服務用戶端的 AWS SDK](config-code.md)。

下列範例不會在程式碼中指定登入資料提供者。SDK 使用登入資料提供者鏈結來偵測已在託管環境中設定的身分驗證，並使用該身分驗證來進行呼叫 AWS 服務。

```
let config = aws_config::defaults(BehaviorVersion::latest()).load().await;
let s3 = aws_sdk_s3::Client::new(&config);
```

### 登入資料擷取順序
<a name="credproviders-credential-retrieval-order"></a>

登入資料提供者鏈結會使用下列預先定義的序列搜尋登入資料：

1. **存取金鑰環境變數**

   SDK 會嘗試從 `AWS_ACCESS_KEY_ID`和 `AWS_SECRET_ACCESS_KEY`以及 `AWS_SESSION_TOKEN`環境變數載入登入資料。

1. **共用 AWS `config` 和 `credentials` 檔案**

   SDK 會嘗試從共用 AWS `config` 和 `credentials` 檔案中的 `[default]` 設定檔載入登入資料。您可以使用 `AWS_PROFILE`環境變數來選擇您希望 SDK 載入的具名設定檔，而不是使用 `[default]`。`config` 和 `credentials` 檔案由 AWS SDKs和工具共用。如需這些檔案的詳細資訊，請參閱 SDK [`config`和工具參考指南中的共用 和 `credentials` 檔案](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。 *AWS SDKs * 如需您可以在設定檔中指定之標準化提供者的詳細資訊，請參閱 [AWS SDKs和工具標準化憑證提供者](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)。

1. **AWS STS Web 身分**

   建立需要存取的行動應用程式或用戶端型 Web 應用程式時 AWS， AWS Security Token Service (AWS STS) 會為透過公有身分提供者 (IdP) 驗證的聯合身分使用者傳回一組臨時安全登入資料。
   + 當您在設定檔中指定此項目時，軟體開發套件或工具會嘗試使用 AWS STS `AssumeRoleWithWebIdentity` API 方法擷取臨時登入資料。如需此方法的詳細資訊，請參閱 *AWS Security Token Service API 參考*中的 [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)。
   +  如需設定此提供者的指引，請參閱 *AWS SDKs和工具參考指南*中的[使用 Web 身分或 OpenID Connect 聯合](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role.html#webidentity)。
   +  如需此供應商 SDK 組態屬性的詳細資訊，請參閱《 *AWS SDKs和工具參考指南*》中的[擔任角色登入資料供應商](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html)。

1. **Amazon ECS 和 Amazon EKS 容器憑證 **

   您的 Amazon Elastic Container Service 任務和 Kubernetes 服務帳戶可以具有與其相關聯的 IAM 角色。在 IAM 角色中授予的許可，是由在 Pod 任務或容器中執行的容器所擔任。此角色可讓您的 SDK for Rust 應用程式碼 （在容器上） 使用其他 AWS 服務。

   SDK 會嘗試從 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`或 `AWS_CONTAINER_CREDENTIALS_FULL_URI`環境變數擷取登入資料，這些變數可由 Amazon ECS 和 Amazon EKS 自動設定。
   + 如需為 Amazon ECS 設定此角色的詳細資訊，請參閱[《Amazon Elastic Container Service 開發人員指南》中的 Amazon ECS 任務 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。 **
   + 如需 Amazon EKS 設定資訊，請參閱[《Amazon EKS 使用者指南》中的設定 Amazon EKS Pod Identity Agent](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html)。 ****
   +  如需此提供者 SDK 組態屬性的詳細資訊，請參閱 SDK *AWS SDKs 和工具參考指南*中的[容器憑證提供者](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)。

1. **Amazon EC2 執行個體中繼資料服務 **

   建立 IAM 角色並將其連接至您的執行個體。執行個體上的 SDK for Rust 應用程式會嘗試從執行個體中繼資料擷取角色提供的登入資料。
   + SDK for Rust 僅支援 [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)。
   + 如需設定此角色和使用中繼資料的詳細資訊，請參閱《[Amazon EC2 使用者指南》中的 Amazon EC2 的 IAM 角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)和[使用執行個體中繼資料](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)。 *Amazon EC2 *
   +  如需此供應商 SDK 組態屬性的詳細資訊，請參閱《 *AWS SDKs和工具參考指南*》中的 [IMDS 登入資料供應商](https://docs.aws.amazon.com/sdkref/latest/guide/feature-imds-credentials.html)。

1. 如果目前仍無法解析登入資料，則操作會panics發生錯誤。

如需 AWS 登入資料提供者組態設定的詳細資訊，請參閱 *AWS SDKs和工具參考指南**的設定參考*中的[標準化登入資料提供者](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)。

## 明確登入資料提供者
<a name="credproviders-explicit-credentials-provider"></a>

您可以指定 SDK 應使用的特定登入資料提供者，而不是依賴登入資料提供者鏈來偵測您的身分驗證方法。當您使用 載入一般組態時`aws_config::defaults`，您可以指定自訂登入資料提供者，如下所示：

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .credentials_provider(MyCredentialsProvider::new())
    .load()
    .await;
```

您可以透過實作 [https://docs.rs/aws-credential-types/latest/aws_credential_types/provider/trait.ProvideCredentials.html](https://docs.rs/aws-credential-types/latest/aws_credential_types/provider/trait.ProvideCredentials.html) 特性來實作自己的登入資料提供者。

## 身分快取
<a name="credproviders-identity-caching"></a>

SDK 會快取登入資料和其他身分類型，例如 SSO 字符。根據預設，開發套件會使用延遲快取實作，在第一次請求時載入登入資料、快取登入資料，然後在另一個請求接近過期時嘗試重新整理登入資料。從相同 建立的用戶端`SdkConfig`將共用 [https://docs.rs/aws-smithy-runtime/latest/aws_smithy_runtime/client/identity/struct.IdentityCache.html](https://docs.rs/aws-smithy-runtime/latest/aws_smithy_runtime/client/identity/struct.IdentityCache.html)。