Credentials 设置

升级版 SDK 的 Credentials 设置。

说明

在您开始之前,您需要注册阿里云账号并获取您的凭证。在您开始之前,您需要注册阿里云账号并获取您的凭证。通过用户信息管理设置 access_key,它们具有该账户完全的权限,请妥善保管。有时出于安全考虑,您不能把具有完全访问权限的主账户 AccessKey 交于一个项目的开发者使用,您可以创建RAM子账户并为子账户授权,使用 RAM 子用户的 AccessKey 来进行 API 调用。

使用 AccessKey 调用(包含 STS Token 方式)

重要

确保包含 AccessKey 的代码不会泄漏(例如提交到外部公开的 GitHub 项目),否则将会危害您的阿里云账号的信息安全。

直接通过 com.aliyun.teaopenapi.models.Config 配置进行设置:

import Client from "@alicloud/facebody20191230";
import * as Util from "@alicloud/tea-util";
// 创建客户端
const client = new Client({
  endpoint: "<endpoint>",
  accessKeyId: "<accessKeyId>",
  accessKeySecret: "<accessKeySecret>",
  // securityToken: "your sts token",
  type: "access_key",
  regionId: "cn-hangzhou"
});
// 初始化 runtimeObject
const runtimeObject = new Util.RuntimeOptions({});
// 初始化 request
const addFaceEntityRequest = new AddFaceEntityRequest({
  dbName: "dbName",
  entityId: "entityId",
  labels: "labels"
});
// 调用 api
const res = await client.addFaceEntity(addFaceEntityRequest, runtimeObject);

或者使用 SDK Credentials 的方式,该方式是最权威的方式,提供了多种 Credentials 认证配置。下面我们主要介绍 SDK Credentials 的方式。

使用 SDK Credentials 包

安装

请确保您的系统安装了不低于 8.x 版本的 Node.js 环境并对 TypeScript 有一定了解。

使用 npm 下载安装。

重要

为了良好体验,请尽量使用 credentials 最新版本,每个版本都是对上个版本的修复与优化,详细请参考变更历史

npm install @alicloud/credentials

使用

本节以云服务器(ECS) DescribeInstances 接口为例,配置 AccessKey 凭证发送请求,作为 SDK Credentials 使用参考。

说明

Credentials 是凭证工具,调用具体接口仍需要产品依赖。本例中调用云服务器(ECS) DescribeInstances 接口则需要安装云服务器(ECS) 的 SDK。

npm install @alicloud/ecs20140526@3.0.2
// This file is auto-generated, don't edit it
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Console from '@alicloud/tea-console';
import Util, * as $Util from '@alicloud/tea-util';
import Credential, { Config } from '@alicloud/credentials';
export default class Sample {
  static async main(): Promise<void> {
    const config=new Config ({
        type: 'access_key',
        accessKeyId: '<accessKeyId>',
        accessKeySecret: '<accessKeySecret>',
    })
    const cred = new Credential(config);
    let client = new Ecs20140526(new $OpenApi.Config({
      credential: cred,
      endpoint: "ecs.cn-hangzhou.aliyuncs.com"
    }));
    let describeInstancesRequest = new $Ecs20140526.DescribeInstancesRequest({
      regionId: "cn-hangzhou",
    });
    let runtime = new $Util.RuntimeOptions({});
    let resp = await client.describeInstancesWithOptions(describeInstancesRequest, runtime);
    console.log(resp);
  }
}
Sample.main();

配置 STS Token

通过安全令牌服务(Security Token Service,简称 STS),申请临时安全凭证(Temporary Security Credentials,简称 TSC),创建临时安全凭证。

import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
  type:                   'sts',             // 凭证类型
  accessKeyId:            '<accessKeyId>',     // AccessKeyId
  accessKeySecret:        '<accessKeySecret>', // AccessKeySecret
  securityToken:          '<securityToken>',   // STS Token
}
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let type: string = cred.getType();

配置 RamRoleArn

通过指定RAM角色,让凭证自动申请维护 STS Token。你可以通过为 Policy赋值来限制获取到的 STS Token 的权限。

import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
  type:                   'ram_role_arn',     // 凭证类型
  accessKeyId:            '<accessKeyId>',      // AccessKeyId
  accessKeySecret:        '<accessKeySecret>',  // AccessKeySecret
  roleArn:                '<roleArn>',          // 格式: acs:ram::用户ID:role/角色名
  roleSessionName:        '<roleSessionName>',  // 角色会话名称
  policy:                 '<policy>',           // 可选, 限制 STS Token 的权限
  roleSessionExpiration:   3600,              // 可选, 限制 STS Token 的有效时间
}
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let securityToken: string = await cred.getSecurityToken();
let type: string = cred.getType();

配置 EcsRamRole

通过指定角色名称,让凭证自动申请维护 STS Token

import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
  type: 'ecs_ram_role',    // 凭证类型
  roleName: '<roleName>',    // 账户RoleName,非必填,不填则自动获取,建议设置,可以减少请求
}
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let securityToken: string = await cred.getSecurityToken();
let type: string = cred.getType();

配置 RsaKeyPair

通过指定公钥ID和私钥文件,让凭证自动申请维护 AccessKey。仅支持日本站。

import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
  type:                    'rsa_key_pair',       // 凭证类型
  privateKeyFile:          '<privateKeyFile>',     // PrivateKey文件路径
  publicKeyId:             '<publicKeyId>',        // 账户PublicKeyId
}
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let securityToken: string = await cred.getSecurityToken();
let type: string = cred.getType();

配置 Bearer Token

呼叫中心(CCC)需用此凭证,请自行申请维护 Bearer Token。

import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
  type:                 'bearer',            // 凭证类型
  bearerToken:          '<bearerToken>',       // BearerToken
}
const cred = new Credential(config);
let bearerToken: string = cred.getBearerToken();
let type: string = cred.getType();

配置 credentials_uri

通过本地或者远程的 URI,来获取凭证,并支持自动刷新。

import Credential, { Config } from '@alicloud/credentials';
const config: Config = {
  type: 'credentials_uri',
  credentialsURI: 'http://a_local_or_remote_address/'
};
const cred = new Credential(config);
let accessKeyId: string = await cred.getAccessKeyId();
let accessKeySecret: string = await cred.getAccessKeySecret();
let securityToken: string = await cred.getSecurityToken();
let type: string = cred.getType();

该地址必须满足如下条件:

  • 响应 200 状态码

  • 响应体为如下的结构:

{
  "Code": "Success",
  "AccessKeySecret": "AccessKeySecret",
  "AccessKeyId": "AccessKeyId",
  "Expiration": "2021-09-26T03:46:38Z",
  "SecurityToken": "SecurityToken"
}

凭证提供程序链

如果你调用 new Credential() 时传入空, 将通过凭证提供链来为你获取凭证。

1. 环境凭证

程序首先会在环境变量里寻找环境凭证,如果定义了 ALICLOUD_ACCESS_KEYALICLOUD_SECRET_KEY 环境变量且不为空,程序将使用他们创建凭证。如否则,程序会在配置文件中加载和寻找凭证。

2. 配置文件

如果用户主目录存在默认文件 ~/.alibabacloud/credentials (Windows 为 C:\Users\USER_NAME\.alibabacloud\credentials),程序会自动创建指定类型和名称的凭证。默认文件可以不存在,但解析错误会抛出异常。不同的项目、工具之间可以共用这个配置文件,因为超出项目之外,也不会被意外提交到版本控制。Windows 上可以使用环境变量引用到主目录 %UserProfile%。类 Unix 的系统可以使用环境变量 $HOME 或 ~ (tilde)。 可以通过定义 ALIBABA_CLOUD_CREDENTIALS_FILE 环境变量修改默认文件的路径。

[default]                          # 默认凭证
type = access_key                  # 认证方式为 access_key
access_key_id = foo                # access key id
access_key_secret = bar            # access key secret

3. 实例 RAM 角色

如果定义了环境变量 ALIBABA_CLOUD_ECS_METADATA 且不为空,程序会将该环境变量的值作为角色名称,请求 http://100.100.100.200/latest/meta-data/ram/security-credentials/ 获取临时安全凭证。

4. Credentials URI

如果定义了环境变量 ALIBABA_CLOUD_CREDENTIALS_URI 且不为空,程序会将该环境变量的值作为 credentials_uri 模式的地址,在调用时获取临时安全凭证。

阿里云首页 阿里云SDK 相关技术圈