

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

# 在 中使用外部程序來採購登入資料 AWS CLI
<a name="cli-configure-sourcing-external"></a>

**警告**  
本主題討論從外部程序取得憑證。如果用於產生憑證的命令可由未經核准的程序或使用者所存取，這可能會有安全風險。我們建議您使用 AWS CLI 和 提供的支援、安全替代方案 AWS ，以降低入侵憑證的風險。務必保護 `config` 檔案及任何支援檔案和工具，以防止洩露。  
請確定您的自訂登入資料工具不會將任何秘密資訊寫入 ，`StdErr`因為 SDKs和 AWS CLI 可以擷取並記錄這類資訊，並可能將其公開給未經授權的使用者。

如果您有方法可以產生或查詢 未直接支援的登入資料 AWS CLI，您可以透過在 `config` 檔案中設定 `credential_process` 設定來設定 AWS CLI 來使用登入資料。

例如，您在 `config` 檔案中可能包含類似以下的項目。

```
[profile developer]
credential_process = /opt/bin/awscreds-custom --username helen
```

**語法**  
若要以與任何作業系統相容的方式建立此字串，請遵循這些規則：
+ 如果路徑或檔案名稱包含空格，完整的路徑和檔案名稱請以雙引號 (「」) 括住。路徑和檔案名稱只能包含字元：A-Z a-z 0-9 – \$1. 空格
+ 如果參數名稱或參數值包含空格，則該元素請以雙引號 (「」) 括住。僅括住名稱或值，而非對組。
+ 請勿在字串中包含任何環境變數。例如，您無法包含 `$HOME` 或 `%USERPROFILE%`。
+ 請勿將主資料夾指定為 `~`。您必須指定完整路徑。

**適用於 Windows 的範例**

```
credential_process = "C:\Path\To\credentials.cmd" parameterWithoutSpaces "parameter with spaces"
```

**適用於 Linux 或 macOS 的範例**

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

**登入資料程式的預期輸出**

會執行設定檔中指定的 AWS CLI 命令，然後從 讀取資料`STDOUT`。您指定的命令必須在 `STDOUT` 上產生符合以下語法的 JSON 輸出。

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

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

`Expiration` 索引鍵是 [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) 格式的時間戳記。如果 `Expiration` 索引鍵未出現在工具的輸出中，CLI 會假設憑證是不重新整理的長期憑證。否則，憑證就視為臨時憑證，在過期之前可透過重新執行 `credential_process` 命令來自動重新整理。

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

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