

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

# 程序登入資料提供者
<a name="feature-process-credentials"></a>

**注意**  
如需了解設定頁面配置或解譯以下 **Support AWS SDKs和工具**資料表的說明，請參閱 [了解本指南的設定頁面](settings-reference.md#settingsPages)。

SDKs為自訂使用案例提供擴展憑證提供者鏈的方法。此提供者可用來提供自訂實作，例如從內部部署登入資料存放區擷取登入資料，或與您的內部部署識別提供者整合。

 例如，IAM Roles Anywhere 會使用 代表您的應用程式`credential_process`取得臨時登入資料。若要`credential_process`為此用途設定 ，請參閱 [使用 IAM Roles Anywhere 驗證 AWS SDKs和工具](access-rolesanywhere.md)。

**注意**  
以下說明從外部程序取得登入資料的方法，如果您在 外部執行軟體，可能會使用 AWS。如果您要在 AWS 運算資源上建置 ，請使用其他登入資料提供者。如果使用此選項，您應該使用作業系統的安全最佳實務，確保組態檔案盡可能鎖定。確認您的自訂登入資料工具不會將任何秘密資訊寫入 `StdErr`，因為 SDKs和 AWS CLI 可以擷取並記錄這類資訊，因此可能會將其暴露給未經授權的使用者。

使用下列項目設定此功能：

**`credential_process` - 共用 AWS `config`檔案設定**  
指定 SDK 或工具代表您執行的外部命令，以產生或擷取要使用的身分驗證憑證。設定會指定軟體開發套件將叫用的程式/命令名稱。當 SDK 調用程序時，會等待程序將 JSON 資料寫入 `stdout`。自訂提供者必須以特定格式傳回資訊。該資訊包含開發套件或工具可用來驗證您的登入資料。

**注意**  
程序登入資料提供者是 的一部分[了解登入資料提供者鏈結](standardized-credentials.md#credentialProviderChain)。不過，程序登入資料提供者只會在此系列中的幾個其他提供者之後進行檢查。因此，如果您希望程式使用此提供者的登入資料，您必須從組態中移除其他有效的登入資料提供者，或使用不同的設定檔。或者，不要依賴登入資料提供者鏈自動探索哪個提供者傳回有效的登入資料，而是在程式碼中指定使用程序登入資料提供者。您可以在建立服務用戶端時直接指定登入資料來源。

## 指定登入資料程式的路徑
<a name="feature-process-credentials-detail-path"></a>

設定的值是一個字串，其中包含 SDK 或開發工具代表您執行之程式的路徑：
+ 路徑和檔案名稱只能包含下列字元：A-Z、a-z、0-9、連字號 ( - )、底線 ( \$1 )、句點 ( . )、正斜線 ( / )、反斜線 ( \$1 ) 和空格。
+ 如果路徑或檔案名稱包含空格，完整的路徑和檔案名稱請以雙引號 (「」) 括住。
+ 如果參數名稱或參數值包含空格，則該元素請以雙引號 (「」) 括住。僅括住名稱或值，而非對組。
+ 請勿在字串中包含任何環境變數。例如，請勿包含 `$HOME`或 `%USERPROFILE%`。
+ 請勿將主資料夾指定為 `~`。\$1 您必須指定完整路徑或基本檔案名稱。如果有基本檔案名稱，系統會嘗試在`PATH`環境變數指定的資料夾中尋找程式。路徑會根據作業系統而有所不同：

  下列範例顯示在 Linux/macOS 的共用`config`檔案中設定 Credential\$1process。

  ```
  credential_process = "/path/to/credentials.sh" parameterWithoutSpaces "parameter with spaces"
  ```

  下列範例顯示在 Windows 的共用`config`檔案中設定 Credential\$1process。

  ```
  credential_process = "C:\Path\To\credentials.cmd" parameterWithoutSpaces "parameter with spaces"
  ```
+  可以在專用設定檔中指定：

  ```
  [profile cred_process] 
  credential_process = /Users/username/process.sh 
  region = us-east-1
  ```

## 登入資料程式的有效輸出
<a name="feature-process-credentials-output"></a>

SDK 會執行設定檔中指定的 命令，然後從標準輸出串流讀取資料。您指定的命令，無論是指令碼或二進位程式，都必須在 上產生符合下列語法`STDOUT`的 JSON 輸出。

```
{
    "Version": 1,
    "AccessKeyId": "an AWS access key",
    "SecretAccessKey": "your AWS secret access key",
    "SessionToken": "the AWS session token for temporary credentials", 
    "Expiration": "RFC3339 timestamp for when the credentials expire"
}
```

**注意**  
截至本文編寫時，`Version` 索引鍵必須設定為 `1`。這可能隨著結構演進而逐漸遞增。

`Expiration` 金鑰是 RFC3339 格式的時間戳記。如果`Expiration`金鑰不存在於工具的輸出中，開發套件會假設登入資料是不會重新整理的長期登入資料。否則，登入資料會被視為臨時登入資料，並在登入資料過期之前重新執行 `credential_process`命令來自動重新整理。

**注意**  
軟體開發套件***不會***像擔任角色登入資料一樣快取外部程序登入資料。如果需要快取，您必須在外部程序中實作它。

外部程序可能傳回非零傳回碼，以表示擷取憑證時發生錯誤。

## 支援 AWS SDKs和工具
<a name="feature-process-credentials-sdk-compat"></a>

下列 SDKs 支援本主題中所述的功能和設定。會記下任何部分例外狀況。 適用於 Java 的 AWS SDK 和 適用於 Kotlin 的 AWS SDK 僅支援任何 JVM 系統屬性設定。


| SDK | 支援 | 備註或更多資訊 | 
| --- | --- | --- | 
| [AWS CLI  ](https://docs.aws.amazon.com/cli/latest/userguide/) v2 | 是 |  | 
| [適用於 C\$1\$1 的 SDK](https://docs.aws.amazon.com/sdk-for-cpp/latest/developer-guide/) | 是 |  | 
| [適用於 Go V2 的 SDK (1.x)](https://docs.aws.amazon.com/sdk-for-go/v2/developer-guide/) | 是 |  | 
| [適用於 Go 的 SDK 1.x (V1)](https://docs.aws.amazon.com/sdk-for-go/latest/developer-guide/) | 是 | 若要使用共用config檔案設定，您必須開啟從組態檔案載入；請參閱[工作階段](https://docs.aws.amazon.com/sdk-for-go/api/aws/session/)。 | 
| [適用於 Java 的 SDK 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/) | 是 |  | 
| [適用於 Java 的 SDK 1.x](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/) | 是 |  | 
| [適用於 JavaScript 3.x 的 SDK](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/) | 是 |  | 
| [適用於 JavaScript 2.x 的 SDK](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/) | 是 |  | 
| [適用於 Kotlin 的 SDK](https://docs.aws.amazon.com/sdk-for-kotlin/latest/developer-guide/) | 是 |  | 
| [適用於 .NET 4.x 的 SDK](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/) | 是 |  | 
| [適用於 .NET 3.x 的 SDK](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/) | 是 |  | 
| [適用於 PHP 的 SDK 3.x](https://docs.aws.amazon.com/sdk-for-php/latest/developer-guide/) | 是 |  | 
| [適用於 Python 的 SDK (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) | 是 |  | 
| [適用於 Ruby 的 SDK 3.x](https://docs.aws.amazon.com/sdk-for-ruby/latest/developer-guide/) | 是 |  | 
| [適用於 Rust 的 SDK](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/) | 是 |  | 
| [適用於 Swift 的 SDK](https://docs.aws.amazon.com/sdk-for-swift/latest/developer-guide/) | 是 |  | 
| [PowerShell V5 的工具](https://docs.aws.amazon.com/powershell/latest/userguide/) | 是 |  | 
| [PowerShell V4 的工具](https://docs.aws.amazon.com/powershell/v4/userguide/) | 是 |  | 