日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

管理訪問憑證

更新時(shí)間:
重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對(duì)您的業(yè)務(wù)造成影響,請(qǐng)務(wù)必仔細(xì)閱讀。

當(dāng)您通過阿里云SDK調(diào)用OpenAPI進(jìn)行資源操作時(shí),必須正確配置憑證信息。阿里云的Credentials工具提供了一套強(qiáng)大的功能,使您能夠輕松地獲取和管理這些訪問憑證。無論是利用默認(rèn)憑證,AccessKey(AK),還是安全令牌服務(wù)(STS)令牌等,Credentials工具都能為您提供相應(yīng)支持。此外,本文檔將詳細(xì)闡述如何根據(jù)優(yōu)先級(jí)使用默認(rèn)憑證。您將深入理解如何在阿里云SDK中配置和維護(hù)憑證,從而確保您對(duì)云資源的操作既有效率又具有高度安全性。

背景信息

憑據(jù)是指用戶證明其身份的一組信息。用戶在系統(tǒng)中進(jìn)行登錄時(shí),需要提供正確的憑據(jù)才能驗(yàn)證身份。常見的憑據(jù)類型有:

  1. 阿里云主賬號(hào)和RAM用戶的永久憑據(jù) AccessKey(簡稱AK)是由AccessKey ID和AccessKey Secret組成的密鑰對(duì)。

  2. 阿里云RAM角色的STS臨時(shí)訪問Token,簡稱STS Token。它是可以自定義時(shí)效和訪問權(quán)限的臨時(shí)身份憑據(jù),詳情請(qǐng)參見什么是STS

  3. Bearer Token。它是一種身份驗(yàn)證和授權(quán)的令牌類型。

前提條件

安裝Credentials工具

使用npm下載安裝。

npm install @alicloud/credentials

使用最新發(fā)布Credentials依賴包,確保所有憑證支持。

初始化憑據(jù)客戶端

Credentials工具支持多種方式初始化憑據(jù)客戶端,您可根據(jù)實(shí)際情況選擇合適的方式進(jìn)行憑據(jù)客戶端初始化。

重要
  • 在項(xiàng)目中使用明文AccessKey,容易因代碼倉庫權(quán)限管理不當(dāng)造成AccessKey泄露,會(huì)威脅該賬號(hào)下所有資源的安全。建議通過環(huán)境變量、配置文件等方式獲取AccessKey。

  • 以下示例代碼所使用語言是JavaScript。

方式一:使用默認(rèn)憑據(jù)鏈

當(dāng)您在初始化憑據(jù)客戶端不傳入任何參數(shù)時(shí),Credentials工具會(huì)使用默認(rèn)憑據(jù)鏈方式初始化客戶端。默認(rèn)憑據(jù)的讀取邏輯請(qǐng)參見默認(rèn)憑據(jù)鏈

const Credential = require('@alicloud/credentials');

// 不指定參數(shù)
const credentialClient = new Credential.default();

接口調(diào)用方法

本示例以調(diào)用云服務(wù)器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');

async function main() {
  // 使用默認(rèn)憑證初始化Credentials Client。
  const credentialClient = new Credential.default();
  const ecsConfig = new OpenApi.Config();
  // 配置云產(chǎn)品服務(wù)接入地址(endpoint)。
  ecsConfig.endpoint = 'ecs.cn-hangzhou.aliyuncs.com';
  // 使用Credentials配置憑證。
  ecsConfig.credential = credentialClient;
  // 初始化ECS Client
  const ecsClient = new Ecs20140526.default(ecsConfig);
  // 初始化DescribeRegions請(qǐng)求。
  const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
  // 初始化運(yùn)行時(shí)配置。
  const runtime = new Util.RuntimeOptions();
  // 調(diào)用DescribeRegions接口并獲得響應(yīng)。
  ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((result) => {
    console.log(JSON.stringify(result.body));
  });
}

main().catch(console.error);

方式二:使用AK

阿里云賬號(hào)、RAM用戶可生成調(diào)用OpenAPI的密鑰對(duì)AK。如何獲取AK請(qǐng)參見文檔創(chuàng)建AccessKey。您可使用AK初始化憑據(jù)客戶端。

警告

阿里云主賬號(hào)擁有資源的全部權(quán)限,AK一旦泄露,會(huì)給系統(tǒng)帶來巨大風(fēng)險(xiǎn),不建議使用。

推薦使用最小化授權(quán)的RAM用戶的AK。

const Credential = require('@alicloud/credentials');

// 使用AK 初始化Credentials Client。
const credentialsConfig = new Credential.Config({
  // 憑證類型。
  type: 'access_key',
  // 設(shè)置為AccessKey ID值。
  accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
  // 設(shè)置為AccessKey Secret值。
  accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
});
const credentialClient = new Credential.default(credentialsConfig);

接口調(diào)用方法

本示例以調(diào)用云服務(wù)器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');

async function main() {
  // 使用AK 初始化Credentials Client。
  const credentialsConfig = new Credential.Config({
    // 憑證類型。
    type: 'access_key',
    // 設(shè)置為AccessKey ID值。
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // 設(shè)置為AccessKey Secret值。
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
  });
  const credentialClient = new Credential.default(credentialsConfig);

  const ecsConfig = new OpenApi.Config();
  // 配置云產(chǎn)品服務(wù)接入地址(endpoint)。
  ecsConfig.endpoint = 'ecs.cn-hangzhou.aliyuncs.com';
  // 使用Credentials配置憑證。
  ecsConfig.credential = credentialClient;
  // 初始化ECS Client
  const ecsClient = new Ecs20140526.default(ecsConfig);
  // 初始化DescribeRegions請(qǐng)求。
  const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
  // 初始化運(yùn)行時(shí)配置。
  const runtime = new Util.RuntimeOptions();
  // 調(diào)用DescribeRegions接口并獲得響應(yīng)。
  ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((response) => {
    console.log(response.body.regions);
  });
}

main().catch(console.error);

方式三:使用STS Token

以一個(gè)RAM用戶的身份調(diào)用STS服務(wù)的AssumeRole接口,設(shè)置Token的最大過期時(shí)間,即可換取到臨時(shí)憑據(jù)STS Token。以下示例演示如何使用STS Token初始化憑據(jù)客戶端(不包含如何獲取到STS Token的過程)。

const Credential = require('@alicloud/credentials');

const credentialsConfig = new Credential.Config({
  type: 'sts',
  // 從環(huán)境變量中獲取AccessKey ID的值
  accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
  // 從環(huán)境變量中獲取AccessKey Secret的值
  accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
  // 從環(huán)境變量中獲取STS Token的值
  securityToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN,
});
const cred = new Credential.default(credentialsConfig);

接口調(diào)用方法

通過Credentials工具讀取臨時(shí)安全令牌(STS Token),完成云產(chǎn)品OpenAPI接口的調(diào)用。

本示例以調(diào)用云服務(wù)器ECS的DescribeRegions接口為例,因此需先安裝ECS SDKSTS SDK

const Ecs20140526 = require('@alicloud/ecs20140526');
const Sts20150401 = require('@alicloud/sts20150401');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');

async function main() {
  // 創(chuàng)建STS client,獲取STS token
  const stsConfig = new OpenApi.Config();
  stsConfig.endpoint = 'sts.cn-hangzhou.aliyuncs.com';
  // 從環(huán)境變量中獲取accessKeyId
  stsConfig.accessKeyId = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID;
  // 從環(huán)境變量中獲取accessKeySecret
  stsConfig.accessKeySecret = process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET;
  const stsClient = new Sts20150401.default(stsConfig);
  const assumeRoleRequest = Sts20150401.AssumeRoleRequest;
  // STS token有效時(shí)間
  assumeRoleRequest.durationSeconds = 3600;
  // 要扮演的RAM角色ARN,示例值:acs:ram::123456789012****:role/adminrole,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_ARN設(shè)置roleArn
  assumeRoleRequest.roleArn = '<RoleArn>';
  // 角色會(huì)話名稱,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設(shè)置RoleSessionName
  assumeRoleRequest.roleSessionName = '<RoleSessionName>';
  // 權(quán)限策略集合
  // assumeRoleRequest.policy = "";
  const assumeRoleResponsePromise = stsClient.assumeRole(assumeRoleRequest);
  const assumeRoleResponseBodyCredentials = (await assumeRoleResponsePromise).body.credentials;

  // 使用STS Token 初始化Credentials Client。
  const credentialsConfig = new Credential.Config({
    // 憑證類型。
    type: 'sts',
    accessKeyId: assumeRoleResponseBodyCredentials.accessKeyId,
    accessKeySecret: assumeRoleResponseBodyCredentials.accessKeySecret,
    securityToken: assumeRoleResponseBodyCredentials.securityToken,
  });
  const credentialClient = new Credential.default(credentialsConfig);

  const ecsConfig = new OpenApi.Config();
  // 配置云產(chǎn)品服務(wù)接入地址(endpoint)。
  ecsConfig.endpoint = 'ecs.cn-hangzhou.aliyuncs.com';
  // 使用Credentials配置憑證。
  ecsConfig.credential = credentialClient;
  // 初始化ECS Client
  const ecsClient = new Ecs20140526.default(ecsConfig);
  // 初始化DescribeRegions請(qǐng)求。
  const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
  // 初始化運(yùn)行時(shí)配置。
  const runtime = new Util.RuntimeOptions();
  // 調(diào)用DescribeRegions接口并獲得響應(yīng)。
  ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime).then((response) => {
    console.log(response.body.regions);
  });
}

main().catch(console.error);

方式四:使用AK及RamRoleArn

該方式底層實(shí)現(xiàn)是STS Token。通過指定RAM角色的ARN(Alibabacloud Resource Name),Credentials工具可以幫助開發(fā)者前往STS換取STS Token。您也可以通過為policy賦值來限制RAM角色到一個(gè)更小的權(quán)限集合。

const Credential = require('@alicloud/credentials');

const credentialsConfig = new Credential.Config({
  type: 'ram_role_arn',
  accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
  accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
  // 要扮演的RAM角色ARN,示例值:acs:ram::123456789012****:role/adminrole,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_ARN設(shè)置roleArn
  roleArn: '<RoleArn>',
  // 角色會(huì)話名稱,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設(shè)置RoleSessionName
  roleSessionName: '<RoleSessionName>',
  // 設(shè)置更小的權(quán)限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
  policy: '<Policy>',
  roleSessionExpiration: 3600,
});
const cred = new Credential.default(credentialsConfig);

接口調(diào)用方法

本示例以調(diào)用云服務(wù)器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');

async function main() {
  // 使用RamRoleArn初始化Credentials Client。
  const credentialsConfig = new Credential.Config({
    // 憑證類型。
    type: 'ram_role_arn',
    // 設(shè)置為AccessKey ID值。
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    // 設(shè)置為AccessKey Secret值。
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
    // 要扮演的RAM角色ARN,示例值:acs:ram::123456789012****:role/adminrole,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_ARN設(shè)置roleArn
    roleArn: '<RoleArn>',
    // 角色會(huì)話名稱,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設(shè)置RoleSessionName
    roleSessionName: '<RoleSessionName>',
    // 設(shè)置更小的權(quán)限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    roleSessionExpiration: 3600,
  });
  const credentialClient = new Credential.default(credentialsConfig);

  const ecsConfig = new OpenApi.Config();
  // 配置云產(chǎn)品服務(wù)接入地址(endpoint)。
  ecsConfig.endpoint = 'ecs.cn-hangzhou.aliyuncs.com';
  // 使用Credentials配置憑證。
  ecsConfig.credential = credentialClient;
  // 初始化ECS Client
  const ecsClient = new Ecs20140526.default(ecsConfig);
  // 初始化DescribeRegions請(qǐng)求。
  const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
  // 初始化運(yùn)行時(shí)配置。
  const runtime = new Util.RuntimeOptions();
  // 調(diào)用DescribeRegions接口并獲得響應(yīng)。
  const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
  console.log((await response).body.regions);
}

main().catch(console.error);

方式五:通過ECS實(shí)例RAM角色

該方式底層實(shí)現(xiàn)是STS Token。Credentials工具會(huì)自動(dòng)獲取ECS實(shí)例綁定的RAM角色,調(diào)用ECS的元數(shù)據(jù)服務(wù)(Meta Data Server)換取STS Token,完成憑據(jù)客戶端初始化。ECI實(shí)例,容器服務(wù) Kubernetes 版的Worker節(jié)點(diǎn)均支持綁定實(shí)例RAM角色。

const Credential = require('@alicloud/credentials');

const credentialsConfig = new Credential.Config({
  type: 'ecs_ram_role',
  // 選填,該ECS角色的角色名稱,不填會(huì)自動(dòng)獲取,但是建議加上以減少請(qǐng)求次數(shù),可以通過環(huán)境變量ALIBABA_CLOUD_ECS_METADATA設(shè)置roleName
  roleName: '<RoleName>',
});
const cred = new Credential.default(credentialsConfig);

接口調(diào)用方法

本示例以調(diào)用云服務(wù)器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');

async function main() {
  // 使用RamRoleArn初始化Credentials Client。
  const credentialsConfig = new Credential.Config({
    // 憑證類型。
    type: 'ecs_ram_role',
    // 選填,該ECS角色的角色名稱,不填會(huì)自動(dòng)獲取,但是建議加上以減少請(qǐng)求次數(shù),可以通過環(huán)境變量ALIBABA_CLOUD_ECS_METADATA設(shè)置roleName
    roleName: '<RoleName>',
  });
  const credentialClient = new Credential.default(credentialsConfig);

  const ecsConfig = new OpenApi.Config();
  // 配置云產(chǎn)品服務(wù)接入地址(endpoint)。
  ecsConfig.endpoint = 'ecs.aliyuncs.com';
  // 使用Credentials配置憑證。
  ecsConfig.credential = credentialClient;
  // 初始化ECS Client
  const ecsClient = new Ecs20140526.default(ecsConfig);
  // 初始化DescribeRegions請(qǐng)求。
  const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
  // 初始化運(yùn)行時(shí)配置。
  const runtime = new Util.RuntimeOptions();
  // 調(diào)用DescribeRegions接口并獲得響應(yīng)。
  const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
  console.log((await response).body.regions);
}

main().catch(console.error);

方式六:使用OIDCRoleArn

容器服務(wù) Kubernetes 版中設(shè)置了Worker節(jié)點(diǎn)RAM角色后,對(duì)應(yīng)節(jié)點(diǎn)內(nèi)的Pod中的應(yīng)用也就可以像ECS上部署的應(yīng)用一樣,通過元數(shù)據(jù)服務(wù)(Meta Data Server)獲取關(guān)聯(lián)角色的STS Token。但如果容器集群上部署的是不可信的應(yīng)用(比如部署您的客戶提交的應(yīng)用,代碼也沒有對(duì)您開放),您可能并不希望它們能通過元數(shù)據(jù)服務(wù)獲取Worker節(jié)點(diǎn)關(guān)聯(lián)實(shí)例RAM角色的STS Token。為了避免影響云上資源的安全,同時(shí)又能讓這些不可信的應(yīng)用安全地獲取所需的 STS Token,實(shí)現(xiàn)應(yīng)用級(jí)別的權(quán)限最小化,您可以使用RRSA(RAM Roles for Service Account)功能。阿里云容器集群會(huì)為不同的應(yīng)用Pod創(chuàng)建和掛載相應(yīng)的服務(wù)賬戶OIDC Token文件,并將相關(guān)配置信息注入到環(huán)境變量中,Credentials工具通過獲取環(huán)境變量的配置信息,調(diào)用STS服務(wù)的AssumeRoleWithOIDC - OIDC角色SSO時(shí)獲取扮演角色的臨時(shí)身份憑證接口換取綁定角色的STS Token。詳情請(qǐng)參見通過RRSA配置ServiceAccount的RAM權(quán)限實(shí)現(xiàn)Pod權(quán)限隔離

注入的環(huán)境變量如下:

ALIBABA_CLOUD_ROLE_ARN:RAM角色名稱ARN;

ALIBABA_CLOUD_OIDC_PROVIDER_ARN:OIDC提供商ARN;

ALIBABA_CLOUD_OIDC_TOKEN_FILE:OIDC Token文件路徑;

const Credential = require('@alicloud/credentials');

const credentialsConfig = new Credential.Config({
  type: 'oidc_role_arn',
  // RAM角色名稱ARN,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_ARN設(shè)置roleArn
  roleArn: '<RoleArn>',
  // OIDC提供商ARN,可以通過環(huán)境變量ALIBABA_CLOUD_OIDC_PROVIDER_ARN設(shè)置oidcProviderArn
  oidcProviderArn: '<OidcProviderArn>',
  // OIDC Token文件路徑,可以通過環(huán)境變量ALIBABA_CLOUD_OIDC_TOKEN_FILE設(shè)置oidcTokenFilePath
  oidcTokenFilePath: '<OidcTokenFilePath>',
  // 角色會(huì)話名稱,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設(shè)置roleSessionName
  roleSessionName: '<RoleSessionName>',
  // 設(shè)置更小的權(quán)限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
  policy: '<Policy>',
  // 設(shè)置session過期時(shí)間
  roleSessionExpiration: 3600,
});
const credentialClient = new Credential.default(credentialsConfig);

接口調(diào)用方法

本示例以調(diào)用云服務(wù)器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');

async function main() {
  const credentialsConfig = new Credential.Config({
    // 憑證類型。
    type: 'oidc_role_arn',
    // RAM角色名稱ARN,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_ARN設(shè)置roleArn
    roleArn: '<RoleArn>',
    // OIDC提供商ARN,可以通過環(huán)境變量ALIBABA_CLOUD_OIDC_PROVIDER_ARN設(shè)置oidcProviderArn
    oidcProviderArn: '<OidcProviderArn>',
    // OIDC Token文件路徑,可以通過環(huán)境變量ALIBABA_CLOUD_OIDC_TOKEN_FILE設(shè)置oidcTokenFilePath
    oidcTokenFilePath: '<OidcTokenFilePath>',
    // 角色會(huì)話名稱,可以通過環(huán)境變量ALIBABA_CLOUD_ROLE_SESSION_NAME設(shè)置roleSessionName
    roleSessionName: '<RoleSessionName>',
    // 設(shè)置更小的權(quán)限策略,非必填。示例值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
    policy: '<Policy>',
    // 設(shè)置session過期時(shí)間
    roleSessionExpiration: 3600,
  });
  const credentialClient = new Credential.default(credentialsConfig);

  const ecsConfig = new OpenApi.Config();
  // 配置云產(chǎn)品服務(wù)接入地址(endpoint)。
  ecsConfig.endpoint = 'ecs.aliyuncs.com';
  // 使用Credentials配置憑證。
  ecsConfig.credential = credentialClient;
  // 初始化ECS Client
  const ecsClient = new Ecs20140526.default(ecsConfig);
  // 初始化DescribeRegions請(qǐng)求。
  const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
  // 初始化運(yùn)行時(shí)配置。
  const runtime = new Util.RuntimeOptions();
  // 調(diào)用DescribeRegions接口并獲得響應(yīng)。
  const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
  console.log((await response).body.regions);
}

main().catch(console.error);

方式七:使用URI憑據(jù)

該方案底層實(shí)現(xiàn)是STS Token。Credentials工具通過您提供的URI獲取STS Token,完成憑據(jù)客戶端初始化。

const Credential = require('@alicloud/credentials');

const config = new Credential.Config({
  type: 'credentials_uri',
  // 獲取憑證的 URI,格式為http://local_or_remote_uri/,可以通過環(huán)境變量ALIBABA_CLOUD_CREDENTIALS_URI設(shè)置credentialsUri
  credentialsURI: '<CredentialsUri>',
});
const credentialClient = new Credential(config);

該地址必須滿足如下條件:

  • 響應(yīng) 200 狀態(tài)碼

  • 響應(yīng)體為如下的結(jié)構(gòu)

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

接口調(diào)用方法

指定Credentials提供地址,實(shí)現(xiàn)通過本地或遠(yuǎn)程的URI來獲取并自動(dòng)更新Token,完成云產(chǎn)品接口的調(diào)用。

調(diào)用單個(gè)云產(chǎn)品的接口需要云產(chǎn)品依賴。本示例以調(diào)用云服務(wù)器ECS的DescribeRegions接口為例,因此需先安裝ECS SDK

const Ecs20140526 = require('@alicloud/ecs20140526');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');

async function main() {
  // 使用CredentialsUri初始化Credentials Client。
  const credentialsConfig = new Credential.Config({
    // 憑證類型。
    type: 'credentials_uri',
    // 獲取憑證的 URI,格式為http://local_or_remote_uri/,可以通過環(huán)境變量ALIBABA_CLOUD_CREDENTIALS_URI設(shè)置credentialsUri
    credentialsURI: '<CredentialsUri>',
  });
  const credentialClient = new Credential.default(credentialsConfig);

  const ecsConfig = new OpenApi.Config();
  // 配置云產(chǎn)品服務(wù)接入地址(endpoint)。
  ecsConfig.endpointType = 'ecs.aliyuncs.com';
  // 使用Credentials配置憑證。
  ecsConfig.credential = credentialClient;
  // 初始化ECS Client
  const ecsClient = new Ecs20140526.default(ecsConfig);
  // 初始化DescribeRegions請(qǐng)求。
  const describeRegionsRequest = new Ecs20140526.DescribeRegionsRequest();
  // 初始化運(yùn)行時(shí)配置。
  const runtime = new Util.RuntimeOptions();
  // 調(diào)用DescribeRegions接口并獲得響應(yīng)。
  const response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
  console.log((await response).body.regions);
}

main().catch(console.error);

方式八:使用Bearer Token

目前只有云呼叫中心CCC這款產(chǎn)品支持Bearer Token的憑據(jù)初始化方式。

const Credential = require('@alicloud/credentials');

const config = new Credential.Config({
  type: 'bearer',
  // 填入您的Bearer Token
  bearerToken: '<BearerToken>',
});
const credentialClient = new Credential(config);

接口調(diào)用方法

本示例以調(diào)用呼叫中心CCC的GetInstance接口為例,因此需先安裝CCC SDK

const CCC20200701 = require('@alicloud/ccc20200701');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');

async function main() {
  // 使用Bearer Token初始化Credentials Client。
  const credentialsConfig = new Credential.Config({
    // 憑證類型。
    type: 'bearer',
    // 填入您的Bearer Token
    bearerToken: '<BearerToken>',
  });
  const credentialClient = new Credential.default(credentialsConfig);

  let config = new OpenApi.Config();
  config.endpoint = `ccc.cn-shanghai.aliyuncs.com`;
  config.credential = credentialClient;

  const client = new CCC20200701.default(config);
  let getInstanceRequest = new CCC20200701.GetInstanceRequest({
    instanceId: 'ccc-test',
  });
  let runtime = new Util.RuntimeOptions({});
  const response = client.getInstanceWithOptions(getInstanceRequest, runtime);
  console.log((await response).body);
}

main().catch(console.error);

默認(rèn)憑據(jù)鏈

當(dāng)您的程序開發(fā)環(huán)境和生產(chǎn)環(huán)境采用不同的憑據(jù)類型,常見做法是在代碼中獲取當(dāng)前環(huán)境信息,編寫獲取不同憑據(jù)的分支代碼。借助Credentials工具的默認(rèn)憑據(jù)鏈,您可以用同一套代碼,通過程序之外的配置來控制不同環(huán)境下的憑據(jù)獲取方式。當(dāng)您在不傳入?yún)?shù)的情況下,直接使用new Credential()初始化憑據(jù)客戶端時(shí),阿里云SDK將會(huì)嘗試按照如下順序查找相關(guān)憑據(jù)信息。

1. 使用環(huán)境變量

若不存在優(yōu)先級(jí)更高的憑據(jù)信息,Credentials工具會(huì)優(yōu)先在環(huán)境變量中獲取憑據(jù)信息。

  • 如果系統(tǒng)環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID(密鑰Key) ALIBABA_CLOUD_ACCESS_KEY_SECRET(密鑰Value) 不為空,Credentials工具會(huì)優(yōu)先使用它們作為默認(rèn)憑據(jù)。

  • 如果系統(tǒng)環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID(密鑰Key)、ALIBABA_CLOUD_ACCESS_KEY_SECRET(密鑰Value)、ALIBABA_CLOUD_SECURITY_TOKEN(Token)均不為空,Credentials工具會(huì)優(yōu)先使用STS Token作為默認(rèn)憑據(jù)。

2. 使用OIDC RAM角色

若不存在優(yōu)先級(jí)更高的憑據(jù)信息,Credentials工具會(huì)在環(huán)境變量中獲取如下內(nèi)容:

ALIBABA_CLOUD_ROLE_ARN:RAM角色名稱ARN;

ALIBABA_CLOUD_OIDC_PROVIDER_ARN:OIDC提供商ARN;

ALIBABA_CLOUD_OIDC_TOKEN_FILE:OIDC Token文件路徑;

若以上三個(gè)環(huán)境變量都已設(shè)置內(nèi)容,Credentials將會(huì)使用變量內(nèi)容調(diào)用STS服務(wù)的AssumeRoleWithOIDC - OIDC角色SSO時(shí)獲取扮演角色的臨時(shí)身份憑證接口換取STS Token作為默認(rèn)憑據(jù)。

3. 使用配置文件

若不存在優(yōu)先級(jí)更高的憑據(jù)信息,Credentials工具會(huì)優(yōu)先在如下位置查找文件是否存在。

Linux系統(tǒng):~/.alibabacloud/credentials

Windows系統(tǒng): C:\Users\USER_NAME\.alibabacloud\credentials

您也可通過環(huán)境變量 ALIBABA_CLOUD_CREDENTIALS_FILE 指定配置文件路徑。如果文件存在,程序?qū)?huì)使用配置文件中default 指定的憑據(jù)信息初始化憑據(jù)客戶端。當(dāng)然,您也可以通過環(huán)境變量 ALIBABA_CLOUD_PROFILE 來指定憑據(jù)信息,例如設(shè)置 ALIBABA_CLOUD_PROFILE 的值為client1

配置示例信息如下:

[default]
enable=true
type=access_key
access_key_id=<ALIBABA_CLOUD_ACCESS_KEY_ID>
access_key_secret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>

[client1]
enable=true
type=ecs_ram_role
role_name=<ecs_ram_role_name>

[client2]
enable=true
type=ram_role_arn
policy=<policy>
access_key_id=<ALIBABA_CLOUD_ACCESS_KEY_ID>
access_key_id=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
role_arn=<ram_role_arn>
role_session_name=<role_session_name>

[client3]
enable=true
type=oidc_role_arn
policy=<policy>
oidc_provider_arn=<ALIBABA_CLOUD_ACCESS_KEY_ID>
oidc_token_file_path=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
role_arn=<ram_role_arn>
role_session_name=<role_session_name>

4. 使用ECS實(shí)例RAM角色

若不存在優(yōu)先級(jí)更高的憑據(jù)信息,Credentials工具會(huì)在環(huán)境變量中獲取ALIBABA_CLOUD_ECS_METADATA(ECS實(shí)例RAM角色名稱),若存在,程序?qū)?huì)通過ECS的元數(shù)據(jù)服務(wù)(Meta Data Server)獲取ECS實(shí)例RAM角色的STS Token作為默認(rèn)憑據(jù)信息。

5. 使用Credentials工具URI

若不存在優(yōu)先級(jí)更高的憑據(jù)信息,Credentials工具會(huì)在環(huán)境變量中獲取ALIBABA_CLOUD_CREDENTIALS_URI,若存在,程序?qū)⒄?qǐng)求該URI地址,獲取臨時(shí)安全憑證作為默認(rèn)憑據(jù)信息。

如何保護(hù)憑據(jù)信息

憑據(jù)信息泄露導(dǎo)致系統(tǒng)被攻擊是云上業(yè)務(wù)普遍存在的一種安全問題,您可通過如下方案避免在代碼中暴露明文憑據(jù)信息,降低憑據(jù)泄露的風(fēng)險(xiǎn)。

  1. 推薦使用ECS實(shí)例RAM角色或者使用STS方式。

  2. 推薦使用默認(rèn)憑據(jù)鏈,使用環(huán)境變量或者配置文件記錄憑據(jù)信息。

  3. 如使用顯示初始化方案初始化憑據(jù)客戶端,推薦使用系統(tǒng)屬性及環(huán)境變量記錄憑據(jù)信息,通過process.env對(duì)象獲取。

import Credential, { Config } from '@alicloud/credentials';

const credentialsConfig = new Config({
  type: 'access_key',
  accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
  accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
})
const credentialClient = new Credential(credentialsConfig);

如何切換憑據(jù)

當(dāng)您想要在程序中使用不同的訪問憑據(jù)調(diào)用不同OpenAPI時(shí),可以通過如下方式。

使用多個(gè)憑據(jù)客戶端

通過初始化多個(gè)憑據(jù)客戶端,傳入到不同的接口請(qǐng)求客戶端。

import Credential, { Config } from '@alicloud/credentials';

const credentialsConfig1 = new Config({
  type: 'access_key',
  accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
  accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
})
const credentialClient1 = new Credential(credentialsConfig1);

const credentialsConfig2 = new Config({
  type: 'sts',
  accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
  accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
  securityToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN,
})
const credentialClient2 = new Credential(credentialsConfig2);

相關(guān)文檔