

 適用於 JavaScript 的 AWS SDK v2 已end-of-support。我們建議您遷移至 [適用於 JavaScript 的 AWS SDK v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/)。如需如何遷移的其他詳細資訊和資訊，請參閱此[公告](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)。

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

# 在 Node.js 設定登入資料
<a name="setting-credentials-node"></a>

在 Node.js 中將登入資料提供給軟體開發套件有幾種方法。有些方法比較安全，有些在開發應用程式時更方便。在 Node.js 中取得登入資料時，對於依賴不只一個來源 (像是環境變數和您載入的 JSON 檔案) 時請小心。您可以變更程式碼執行所用的許可，而不需了解發生的變更。

以下是您可以提供登入資料的方法，依建議順序列出：

1. 從 Amazon EC2 的 AWS Identity and Access Management (IAM) 角色載入

1. 從共享登入資料檔案 (`~/.aws/credentials`) 載入。

1. 從環境變數中載入

1. 從磁碟上的 JSON 檔案載入

1. JavaScript 開發套件提供的其他登入資料提供者類別

如果開發套件有不只一個登入資料來源，預設的選擇順序如下：

1. 透過服務客戶建構函數明確設定的登入資料

1. 環境變數

1. 共享登入資料檔案

1. 從 ECS 登入資料提供者 (若適用的話) 載入的登入資料

1. 使用共用 AWS 組態檔案或共用登入資料檔案中指定的登入資料程序取得的登入資料。如需詳細資訊，請參閱[使用所設定的登入資料程序在 Node.js 中載入登入資料](loading-node-credentials-configured-credential-process.md)。

1. 使用 AWS Amazon EC2 執行個體的登入資料提供者從 IAM 載入的登入資料 （如果在執行個體中繼資料中設定）

如需詳細資訊，請參閱 API 參考[https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CredentialProviderChain.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CredentialProviderChain.html)中的 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html)和 。

**警告**  
雖然可以這樣做，但不建議硬式編碼應用程式中的 AWS 登入資料。將登入資料寫死會造成存取金鑰 ID 和私密存取金鑰遭暴露的風險。

本節的主題說明如何在 Node.js 中載入登入資料。

**Topics**
+ [從 Amazon EC2 的 IAM 角色載入 Node.js 中的登入資料](loading-node-credentials-iam.md)
+ [載入 Node.js Lambda 函數的登入資料](loading-node-credentials-lambda.md)
+ [從共用登入資料檔案中在 Node.js 中載入登入資料](loading-node-credentials-shared.md)
+ [從環境變數在 Node.js 中載入登入資料](loading-node-credentials-environment.md)
+ [從 JSON 檔案中在 Node.js 中載入登入資料](loading-node-credentials-json-file.md)
+ [使用所設定的登入資料程序在 Node.js 中載入登入資料](loading-node-credentials-configured-credential-process.md)

# 從 Amazon EC2 的 IAM 角色載入 Node.js 中的登入資料
<a name="loading-node-credentials-iam"></a>

如果您在 Amazon EC2 執行個體上執行 Node.js 應用程式，您可以利用 Amazon EC2 的 IAM 角色自動提供登入資料給執行個體。如果您將執行個體設定為使用 IAM 角色，開發套件會自動選取應用程式的 IAM 登入資料，無需手動提供登入資料。

如需將 IAM 角色新增至 Amazon EC2 執行個體的詳細資訊，請參閱 *AWS SDKs和工具參考指南*中的[為 Amazon EC2 執行個體使用 IAM 角色](https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-roles-for-ec2.html)。

# 載入 Node.js Lambda 函數的登入資料
<a name="loading-node-credentials-lambda"></a>

建立 AWS Lambda 函數時，您必須建立具有執行函數許可的特殊 IAM 角色。此角色稱為*執行角色*。設定 Lambda 函數時，您必須指定您建立的 IAM 角色做為對應的執行角色。

執行角色提供 Lambda 函數執行 和 呼叫其他 Web 服務所需的登入資料。因此，您不需要提供登入資料給在 Lambda 函數中寫入的 Node.js 程式碼。

如需建立 Lambda 執行角色的詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的[管理許可：使用 IAM 角色 （執行角色）](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role)。

# 從共用登入資料檔案中在 Node.js 中載入登入資料
<a name="loading-node-credentials-shared"></a>

您可以將 AWS 登入資料保留在 SDKs和命令列界面所使用的共用檔案中。載入適用於 JavaScript 的 SDK 時，會自動搜尋名為「憑證」的共用登入資料檔案。共用登入資料檔案保存位置取決於您的作業系統：
+ 在 Linux、Unix 和 macOS 上的共用登入資料檔案：`~/.aws/credentials`
+ 在 Windows 上的共用登入資料檔案：`C:\Users\USER_NAME\.aws\credentials`

如果您還沒有共用的登入資料檔案，請參閱[使用 進行 SDK 身分驗證 AWS](getting-your-credentials.md)。完成這些指示之後，您應該會在登入資料檔案中看到類似下列的文字，其中 *<YOUR\$1ACCESS\$1KEY\$1ID>* 是您的存取金鑰 ID, 而 *<YOUR\$1SECRET\$1ACCESS\$1KEY>* 是您的私密存取金鑰：

```
[default]
aws_access_key_id = <YOUR_ACCESS_KEY_ID>
aws_secret_access_key = <YOUR_SECRET_ACCESS_KEY>
```

如需使用此檔案的使用範例，請參閱[Node.js 入門](getting-started-nodejs.md)。​

`[default]` 區段標題指定預設設定檔和登入資料的相關值。您可以在相同的共用組態檔中建立其他設定檔，每個設定檔包含其專屬的登入資料資訊。下列範例顯示具有預設設定檔和兩個其他設定檔的組態檔：

```
[default] ; default profile
aws_access_key_id = <DEFAULT_ACCESS_KEY_ID>
aws_secret_access_key = <DEFAULT_SECRET_ACCESS_KEY>
    
[personal-account] ; personal account profile
aws_access_key_id = <PERSONAL_ACCESS_KEY_ID>
aws_secret_access_key = <PERSONAL_SECRET_ACCESS_KEY>
    
[work-account] ; work account profile
aws_access_key_id = <WORK_ACCESS_KEY_ID>
aws_secret_access_key = <WORK_SECRET_ACCESS_KEY>
```

依預設，軟體開發套件會檢查 `AWS_PROFILE` 環境變數來判斷要使用哪個設定檔。如果未在您的環境中設定 `AWS_PROFILE` 變數，軟體開發套件會使用 `[default]` 設定檔的登入資料。若要使用其他設定檔的登入資料，請設定或變更 `AWS_PROFILE` 環境變數的值。例如上述的組態檔案，若要使用工作帳戶的登入資料，請將 `AWS_PROFILE` 環境變數設定為​ `work-account` (對應您的作業系統)。​

**注意**  
設定環境變數之後，請務必採取適當的動作 (根據作業系統需求)，讓您的變數可在 shell 或命令環境使用。

設定環境變數 （如有需要） 之後，您可以執行使用 SDK 的 JavaScript 檔案，例如名為 的檔案`script.js`。

```
$ node script.js
```

您也可以擇一在載入軟體開發套件前設定 `process.env.AWS_PROFILE`，或選取以下範例中所示的登入資料供應商，來明確選取軟體開發套件所用的設定檔：

```
var credentials = new AWS.SharedIniFileCredentials({profile: 'work-account'});
AWS.config.credentials = credentials;
```

# 從環境變數在 Node.js 中載入登入資料
<a name="loading-node-credentials-environment"></a>

SDK 會自動偵測您環境中設定為變數的 AWS 登入資料，並將其用於 SDK 請求，無需在應用程式中管理登入資料。您設為提供登入資料的環境變數為：
+ `AWS_ACCESS_KEY_ID`
+ `AWS_SECRET_ACCESS_KEY`
+ `AWS_SESSION_TOKEN`

如需設定環境變數的詳細資訊，請參閱 *AWS SDKs和工具參考指南*中的[環境變數支援](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html)。

# 從 JSON 檔案中在 Node.js 中載入登入資料
<a name="loading-node-credentials-json-file"></a>

您可以使用 `AWS.config.loadFromPath`，從磁碟上的 JSON 文件載入組態和登入資料。指定的路徑是相對於程序的目前工作目錄。例如，若要從包含以下內容的 `'config.json'` 檔案載入登入資料：

```
{ "accessKeyId": <YOUR_ACCESS_KEY_ID>, "secretAccessKey": <YOUR_SECRET_ACCESS_KEY>, "region": "us-east-1" }
```

然後使用下列程式碼：

```
var AWS = require("aws-sdk");
AWS.config.loadFromPath('./config.json');
```

**注意**  
從 JSON 文件載入組態資料會重設所有現有組態資料。在使用此技術後新增其他組態資料。從瀏覽器指令碼不支援的 JSON 文件中載入登入資料。

# 使用所設定的登入資料程序在 Node.js 中載入登入資料
<a name="loading-node-credentials-configured-credential-process"></a>

您可以使用沒有內建在軟體開發套件中的方法取得登入資料。若要這樣做，請在共用 AWS 組態檔案或共用登入資料檔案中指定登入資料程序。如果`AWS_SDK_LOAD_CONFIG`環境變數設定為任何值，則 SDK 會偏好組態檔案中指定的程序，而不是登入資料檔案中指定的程序 （如果有的話）。

如需在共用 AWS 組態檔案或共用登入資料檔案中指定登入資料程序的詳細資訊，請參閱 *AWS CLI 命令參考*，特別是[從外部程序取得登入](https://docs.aws.amazon.com/cli/latest/topic/config-vars.html#sourcing-credentials-from-external-processes)資料的相關資訊。

如需使用 `AWS_SDK_LOAD_CONFIG` 環境變數的相關資訊，請參閱本文件中的[使用共用組態檔](setting-region.md#setting-region-config-file)。