

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

# 使用適用於 C\$1\$1 憑證提供者的 AWS SDK
<a name="credproviders"></a>

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

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

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

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

如果您在建構用戶端時未明確指定登入資料提供者，適用於 C\$1\$1 的 SDK 會使用登入資料提供者鏈結來檢查您可以提供登入資料的一系列位置。一旦 SDK 在其中一個位置找到登入資料，搜尋就會停止。

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

所有 SDKs 都有一系列位置 （或來源） 進行檢查，以取得可用於向 提出請求的有效登入資料 AWS 服務。找到有效的憑證後，系統就會停止搜尋。此系統搜尋稱為登入資料提供者鏈結。

對於鏈結中的每個步驟，有不同的方法來設定值。直接在程式碼中設定值一律優先，接著設定為環境變數，然後在共用 AWS `config`檔案中設定。如需詳細資訊，請參閱 *AWS SDKs 和工具參考指南*中的[設定優先順序](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html#precedenceOfSettings)。

SDK 會嘗試從共用 AWS `config` 和 `credentials` 檔案中的 `[default]`設定檔載入登入資料。您可以使用 `AWS_PROFILE`環境變數來選擇您要 SDK 載入的具名設定檔，而不是使用 `[default]`。`config` 和 `credentials` 檔案由 AWS SDKs和工具共用。*AWS SDKs和工具參考指南*提供 AWS SDKs和 所使用的開發套件組態設定資訊 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，適用於 C\$1\$1 的 SDK 會依下列順序檢查登入資料提供者。

1. **AWS 存取金鑰 （暫時和長期登入資料）**

   SDK 會嘗試從 `AWS_ACCESS_KEY_ID`和 `AWS_SECRET_ACCESS_KEY`以及`AWS_SESSION_TOKEN`環境變數，或從共用 AWS `credentials`檔案載入登入資料。
   +  如需設定此提供者的指引，請參閱 *AWS SDKs和工具參考指南*中的[AWS 存取金鑰](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html)。
   +  如需此供應商 SDK 組態屬性的詳細資訊，請參閱 SDK *AWS SDKs 和工具參考指南*中的[AWS 存取金鑰](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-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. **IAM Identity Center**

   如果您使用 IAM Identity Center 進行身分驗證，這是指適用於 C\$1\$1 的 SDK 使用透過執行 CLI AWS 命令 設定的單一登入字符`aws sso login`。SDK 使用 IAM Identity Center 交換為有效字符的臨時登入資料。開發套件接著會在呼叫時使用臨時登入資料 AWS 服務。如需此程序的詳細資訊，請參閱《 [SDK 和工具參考指南》中的了解 的 SDK 登入資料解析 AWS 服務](https://docs.aws.amazon.com/sdkref/latest/guide/understanding-sso.html#idccredres)。 *AWS SDKs *
   +  如需設定此提供者的指引，請參閱 *AWS SDKs和工具參考指南中的 *[IAM Identity Center 身分驗證](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)。
   +  如需此提供者 SDK 組態屬性的詳細資訊，請參閱 SDK *AWS 和工具參考指南中的 SDKs*[IAM Identity Center 憑證提供者](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html)。

1. **使用 AWS Signin 登入登入憑證身分解析程式**

   如果您使用 AWS 登入和主控台登入資料進行驗證，這是指適用於 C\$1\$1 的 SDK 使用執行 `aws login`或在 CLI `aws login --profile`中設定的主控台登入資料。軟體開發套件會在呼叫 AWS 服務時使用這些登入資料。
   +  如需此程序的詳細資訊，請參閱 *AWS SDKs和工具參考指南*中的[使用主控台登入進行 AWS 本機開發](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html)。

1. **外部程序提供者**

   此提供者可用來提供自訂實作，例如從內部部署登入資料存放區擷取登入資料，或與您的內部部署識別提供者整合。
   +  如需設定此提供者之其中一種方式的指引，請參閱 *AWS SDKs 和工具參考指南*中的 [IAM Roles Anywhere](https://docs.aws.amazon.com/sdkref/latest/guide/access-rolesanywhere.html)。
   +  如需此供應商 SDK 組態屬性的詳細資訊，請參閱 SDK *AWS SDKs 和工具參考指南*中的[程序登入資料供應商](https://docs.aws.amazon.com/sdkref/latest/guide/feature-process-credentials.html)。

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

   您的 Amazon Elastic Container Service 任務和 Kubernetes 服務帳戶可以具有與其相關聯的 IAM 角色。IAM 角色中授予的許可由在任務或 Pod 容器中執行的容器擔任。此角色可讓您的 SDK for C\$1\$1 應用程式碼 （在容器上） 使用其他 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 角色並將其連接至您的執行個體。執行個體上的適用於 C\$1\$1 的 SDK 應用程式會嘗試從執行個體中繼資料擷取角色提供的登入資料。
   + 如需設定此角色和使用中繼資料的詳細資訊，請參閱《[Amazon EC2 使用者指南》中的適用於 Amazon EC2 ](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)的 IAM 角色。 *Amazon EC2 *
   +  如需此提供者 SDK 組態屬性的詳細資訊，請參閱《 *AWS SDKs和工具參考指南*》中的 [IMDS 登入資料提供者](https://docs.aws.amazon.com/sdkref/latest/guide/feature-imds-credentials.html)。

您可以在 GitHub 的 適用於 C\$1\$1 的 AWS SDK 原始程式碼[https://github.com/aws/aws-sdk-cpp/blob/main/src/aws-cpp-sdk-core/source/auth/AWSCredentialsProviderChain.cpp#L43-L86](https://github.com/aws/aws-sdk-cpp/blob/main/src/aws-cpp-sdk-core/source/auth/AWSCredentialsProviderChain.cpp#L43-L86)中檢閱登入資料提供者鏈結，網址為 。

如果您遵循建議的方法讓新使用者開始使用，您可以在[AWS 使用適用於 C\$1\$1 的 AWS SDK 透過 驗證](credentials.md)入門主題中設定 AWS 登入登入資料身分驗證。其他身分驗證方法適用於不同的情況。為了避免安全風險，我們建議您一律使用短期登入資料。如需其他身分驗證方法程序，請參閱《 *AWS SDKs和工具參考指南》中的身分*[驗證和存取](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)。

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

您可以指定 SDK 應使用的特定登入資料提供者，而不是依賴登入資料提供者鏈來偵測您的身分驗證方法。您可以在服務用戶端的建構函數中提供登入資料來執行此操作。

以下範例透過直接提供臨時存取憑證而非使用鏈結來建立 Amazon Simple Storage Service 用戶端。

```
    SDKOptions options;
    Aws::InitAPI(options);
    {
        const auto cred_provider = Aws::MakeShared<Auth::SimpleAWSCredentialsProvider>("TestAllocationTag",
            "awsAccessKeyId",
            "awsSecretKey",
            "sessionToken");
        S3Client client{cred_provider};
    }
    Aws::ShutdownAPI(options);
```

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

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