

适用于 JavaScript 的 AWS SDK v2 已终止支持。建议您迁移到 [适用于 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 有几种方法可以为 SDK 提供凭证。其中一些方法更安全，而另一些方法则在开发应用程序时可以提供更大的便利。在 Node.js 中获取凭证时，请注意依赖多个源，例如环境变量和您加载的 JSON 文件。您可以更改运行代码的权限，而不会意识到已发生更改。

下面是按推荐顺序提供凭证的方法：

1. 从适用于 Amazon EC2 的 AWS Identity and Access Management（IAM）角色加载

1. 从共享凭证文件 (`~/.aws/credentials`) 加载

1. 从环境变量加载

1. 从磁盘上的 JSON 文件加载

1. JavaScript 开发工具包提供的其他 credential-provider 类

如果多个凭证源适用于该开发工具包，则选择的默认优先顺序如下所示：

1. 通过服务-客户端构造函数显式设置的凭证

1. 环境变量

1. 共享凭证文件

1. 从 ECS 凭证提供程序加载的凭证（如果适用）

1. 通过使用共享的 AWS config 文件或共享凭证文件中指定的凭据过程获取的凭证。有关更多信息，请参阅[使用已配置过程在 Node.js 中加载凭证](loading-node-credentials-configured-credential-process.md)。

1. 使用 Amazon EC2 实例的凭证提供程序从 AWS IAM 加载的凭证（如果在实例元数据中配置）

有关更多信息，请参阅 API 参考中的 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html) 和 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CredentialProviderChain.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CredentialProviderChain.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 角色，则 SDK 会自动为您的应用程序选择 IAM 凭证，从而无需手动提供凭证。

有关向 Amazon EC2 实例添加 IAM 角色的更多信息，请参阅《AWS SDK 和工具参考指南》**中的[使用适用于 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 凭证数据保存在 SDK 和命令行界面使用的共享文件中。当 SDK for JavaScript 加载时，它会自动搜索共享凭证文件（名为“credentials”）。保存共享凭证文件的位置取决于您的操作系统：
+ Linux、Unix 和 macOS 上的共享凭证文件：`~/.aws/credentials`
+ Windows 上的共享凭证文件：`C:\Users\USER_NAME\.aws\credentials`

如果您还没有共享凭证文件，请参阅 [使用 AWS 进行 SDK 身份验证](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 and Tools Reference Guide》**中的 [Environment variables support](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)。