凭证提供程序 - AWS SDK for JavaScript

AWS SDK for JavaScript V3 API 参考指南详细描述了 AWS SDK for JavaScript 版本 3 (V3) 的所有API操作。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

凭证提供程序

在 v2 中,的 SDK JavaScript 提供了一个可供选择的凭证提供商列表,以及一个凭证提供者链(默认在 Node.js 上可用),它会尝试从所有最常见的提供商加载 AWS 证书。适用于 JavaScript v3 的 SDK 简化了凭据提供程序的界面,使其更易于使用和编写自定义凭据提供程序。在新的凭证提供商链之上,v JavaScript 3 版 SDK 都提供了旨在提供等同于 v2 的凭证提供商的列表。

以下是 v2 中的所有证书提供者以及 v3 中的等效凭证提供商。

默认凭证提供商

如果您明确提供凭证,则默认凭证提供程序是用于 SDK JavaScript 解析 AWS 凭证的方式。

临时证书

  • v2ChainableTemporaryCredentials表示从中检索到AWS.STS的临时证书。在没有任何额外参数的情况下,将从AWS.STS.getSessionToken()操作中获取凭证。如果提供了 IAM 角色,则该AWS.STS.assumeRole()操作将改为用于获取该角色的证书。 AWS.ChainableTemporaryCredentials不同AWS.TemporaryCredentials于主凭证和刷新的处理方式。 AWS.ChainableTemporaryCredentials使用用户传递的主凭证刷新过期的凭证,以支持 STS 凭证的链接。但是,在实例化过程中AWS.TemporaryCredentials以递归方式折叠 MasterCredentials,从而无法刷新需要中间临时凭证的证书。

    在 v2 中 TemporaryCredentials,原版已被弃用ChainableTemporaryCredentials

  • v3: fromTemporaryCredentials。你可以fromTemporaryCredentials()@aws-sdk/credential-providers包裹里打电话。示例如下:

    import { FooClient } from "@aws-sdk/client-foo"; import { fromTemporaryCredentials } from "@aws-sdk/credential-providers"; // ES6 import // const { FooClient } = require("@aws-sdk/client-foo"); // const { fromTemporaryCredentials } = require("@aws-sdk/credential-providers"); // CommonJS import const sourceCredentials = { // A credential can be a credential object or an async function that returns a credential object }; const client = new FooClient({ credentials: fromTemporaryCredentials({ masterCredentials: sourceCredentials, params: { RoleArn }, }), });

亚马逊 Cognito 身份凭证

从 Amazon Cognito 身份服务加载证书,该服务通常在浏览器中使用。

  • v2CognitoIdentityCredentials表示使用亚马逊 Cognito 身份服务从 STS Web 联合身份验证检索到的证书。

  • v3Cognito Identity Credential Provider@aws/credential-providers软件包提供了两个凭据提供程序函数,其中fromCognitoIdentity一个使用身份 ID 进行调用cognitoIdentity:GetCredentialsForIdentity,而另一个fromCognitoIdentityPool则使用身份池 ID,cognitoIdentity:GetId在第一次调用时调用,然后调用。fromCognitoIdentity对后者的后续调用不会重新调用。 GetId

    提供商实施了《Amazon Cognito 开发者指南》中描述的 “简化流程”。支持先打电话cognito:GetOpenIdToken然后再打电话sts:AssumeRoleWithWebIdentity的 “经典流程”。如果您需要,请向我们提交功能请求

    // fromCognitoIdentityPool example import { fromCognitoIdentityPool } from "@aws-sdk/credential-providers"; // ES6 import // const { fromCognitoIdentityPool } = require("@aws-sdk/credential-providers"); // CommonJS import const client = new FooClient({ region: "us-east-1", credentials: fromCognitoIdentityPool({ clientConfig: cognitoIdentityClientConfig, // Optional identityPoolId: "us-east-1:1699ebc0-7900-4099-b910-2df94f52a030", customRoleArn: "arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity", // Optional logins: { // Optional "graph.facebook.com": "FBTOKEN", "www.amazon.com": "AMAZONTOKEN", "api.twitter.com": "TWITTERTOKEN", }, }), });
    // fromCognitoIdentity example import { fromCognitoIdentity } from "@aws-sdk/credential-providers"; // ES6 import // const { fromCognitoIdentity } = require("@aws-sdk/credential-provider-cognito-identity"); // CommonJS import const client = new FooClient({ region: "us-east-1", credentials: fromCognitoIdentity({ clientConfig: cognitoIdentityClientConfig, // Optional identityId: "us-east-1:128d0a74-c82f-4553-916d-90053e4a8b0f", customRoleArn: "arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity", // Optional logins: { // Optional "graph.facebook.com": "FBTOKEN", "www.amazon.com": "AMAZONTOKEN", "api.twitter.com": "TWITTERTOKEN", }, }), });

EC2 元数据 (IMDS) 凭证

表示从 Amazon EC2 实例上的元数据服务收到的证书。

  • v2: EC2MetadataCredentials

  • v3: fromInstanceMetadata: 创建将从 Amazon EC2 实例元数据服务获取证书的凭证提供商。

    import { fromInstanceMetadata } from "@aws-sdk/credential-providers"; // ES6 import // const { fromInstanceMetadata } = require("@aws-sdk/credential-providers"); // CommonJS import const client = new FooClient({ credentials: fromInstanceMetadata({ maxRetries: 3, // Optional timeout: 0, // Optional }), });

ECS 凭证

表示从指定 URL 收到的凭证。该提供程序将向AWS_CONTAINER_CREDENTIALS_RELATIVE_URIAWS_CONTAINER_CREDENTIALS_FULL_URI环境变量指定的 URI 请求临时证书。

  • v2ECSCredentials或者。RemoteCredentials

  • v3fromContainerMetadata创建证书提供商,该提供者将从 Amazon ECS 容器元数据服务获取证书。

    import { fromContainerMetadata } from "@aws-sdk/credential-providers"; // ES6 import const client = new FooClient({ credentials: fromContainerMetadata({ maxRetries: 3, // Optional timeout: 0, // Optional }), });

文件系统凭证

  • v2FileSystemCredentials表示来自磁盘上 JSON 文件的凭证。

  • v3已弃用。您可以显式读取 JSON 文件并提供给客户端。如果您需要,请向我们提交功能请求

SAML 凭证提供商

共享凭证文件凭证

从共享凭证文件加载凭证(默认为环境变量~/.aws/credentials或由AWS_SHARED_CREDENTIALS_FILE环境变量定义)。不同的 AWS SDK 和工具都支持此文件。您可以参阅共享配置和凭据文件文档了解更多信息。

  • v2: SharedIniFileCredentials

  • v3: fromIni

    import { fromIni } from "@aws-sdk/credential-providers"; // const { fromIni } from("@aws-sdk/credential-providers"); const client = new FooClient({ credentials: fromIni({ configFilepath: "~/.aws/config", // Optional filepath: "~/.aws/credentials", // Optional mfaCodeProvider: async (mfaSerial) => { // implement a pop-up asking for MFA code return "some_code"; }, // Optional profile: "default", // Optional clientConfig: { region }, // Optional }), });

Web 身份凭证

使用 OIDC 令牌从磁盘上的文件中检索凭证。它通常在 EKS 中使用。

  • v2: TokenFileWebIdentityCredentials

  • v3: fromTokenFile

    import { fromTokenFile } from "@aws-sdk/credential-providers"; // ES6 import // const { fromTokenFile } from("@aws-sdk/credential-providers"); // CommonJS import const client = new FooClient({ credentials: fromTokenFile({ // Optional. If skipped, read from `AWS_ROLE_ARN` environmental variable roleArn: "arn:xxxx", // Optional. If skipped, read from `AWS_ROLE_SESSION_NAME` environmental variable roleSessionName: "session:a", // Optional. STS client config to make the assume role request. clientConfig: { region }, }), });

Web 联合身份验证凭证

从 STS Web 联合身份验证支持中检索证书。

  • v2: WebIdentityCredentials

  • v3: fromWebToken

    import { fromWebToken } from "@aws-sdk/credential-providers"; // ES6 import // const { fromWebToken } from("@aws-sdk/credential-providers"); // CommonJS import const client = new FooClient({ credentials: fromWebToken({ // Optional. If skipped, read from `AWS_ROLE_ARN` environmental variable roleArn: "arn:xxxx", // Optional. If skipped, read from `AWS_ROLE_SESSION_NAME` environmental variable roleSessionName: "session:a", // Optional. STS client config to make the assume role request. clientConfig: { region }, }), });