身份验证配置
本文介绍如何通过阿里云提供的Credentials工具,实现以非AK硬编码的方式进行编程,调用阿里云OpenAPI。
背景信息
AccessKey(简称AK)是阿里云提供给阿里云用户的访问密钥,用于访问阿里云OpenAPI时的身份验证。AccessKey包括AccessKey ID和AccessKey Secret,需妥善保管。AK如果泄露,会威胁该账号下所有资源的安全。访问阿里云OpenAPI时,如果在代码中硬编码明文AK,容易因代码仓库权限管理不当造成AK泄露。
Alibaba Cloud Credentials是阿里云为阿里云开发者用户提供的身份凭证管理工具。配置了Credentials默认凭据链后,访问阿里云OpenAPI时,您无需在代码中硬编码明文AK,可有效保证您账号下云资源的安全。
前提条件
已获取RAM用户账号的AccessKey ID和AccessKey Secret。相关操作,请参见查看RAM用户的AccessKey信息。
重要阿里云账号(即主账号)的AccessKey泄露会威胁该账号下所有资源的安全。为保证账号安全,强烈建议您为RAM用户创建AccessKey,非必要情况下请勿为阿里云主账号创建AccessKey。
RAM用户的AccessKey Secret只能在创建AccessKey时显示,创建完成后不支持查看。请在创建好AccessKey后,及时并妥善保存AccessKey Secret。
已安装阿里云SDK Credentials工具。
Maven安装方式(推荐使用Credentials最新版本):
<dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.2.11</version> </dependency>
JDK版本为1.7及以上。
配置方案
您可以选用以下任意一种方案进行配置。
使用配置文件的方案时,请确保您系统中不存在环境变量ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
。否则,配置文件将不生效。
配置环境变量
阿里云SDK支持通过定义ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
环境变量来创建默认的访问凭证。调用接口时,程序直接访问凭证,读取您的访问密钥(即AccessKey)并自动完成鉴权。
配置方法
配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
。
Linux和macOS系统配置方法
执行以下命令:
export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
<access_key_id>
需替换为已准备好的AccessKey ID,<access_key_secret>
替换为AccessKey Secret。Windows系统配置方法
新建环境变量文件,添加环境变量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并写入已准备好的AccessKey ID和AccessKey Secret。重启Windows系统。
接口调用方法
通过默认凭据提供链自动创建访问凭证,并在不使用硬编码AccessKey的情况下成功调用云产品OpenAPI接口。
本示例以调用云服务器ECS的DescribeRegions接口为例,因此需先安装ECS Java SDK。
import com.aliyun.tea.*;
public class Sample {
public static void main(String[] args_) throws Exception {
// 使用默认凭证初始化Credentials Client。
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
// 初始化Client。
com.aliyun.ecs20140526.Client ecsClient = new com.aliyun.ecs20140526.Client(
new com.aliyun.teaopenapi.models.Config()
// 配置云产品服务接入地址(endpoint)。
.setEndpoint("ecs.aliyuncs.com")
// 使用Credential配置凭证。
.setCredential(credentialClient)
);
// 初始化DescribeRegions请求。
com.aliyun.ecs20140526.models.DescribeRegionsRequest describeRegionsRequest = new com.aliyun.ecs20140526.models.DescribeRegionsRequest();
// 初始化运行时配置。
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 调用DescribeRegions接口并获得响应。
com.aliyun.ecs20140526.models.DescribeRegionsResponse response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
System.out.println(response.body.toMap());
}
}
配置文件
通过配置credentials
文件创建默认的访问凭证,调用接口时,程序直接访问凭证,读取您的访问密钥(即AccessKey)并自动完成鉴权。
配置方法
进入Java开发环境。
创建
credentials
文件。Linux/macOS系统
执行以下命令(默认安装路径为
.alibabacloud/credentials.ini
):sudo vi ~/.alibabacloud/credentials.ini
Windows系统
新建文件,并将文件存放在
C:\Users\<user_name>\.alibabacloud\credentials.ini
。
说明如果您想将
credentials
文件安装到其他指定目录,您需要先配置环境变量ALIBABA_CLOUD_CREDENTIALS_FILE
。以Linux和macOS系统为例,执行命令export ALIBABA_CLOUD_CREDENTIALS_FILE=/<example_path>/credentials.ini
。配置
credentials
文件。Credentials工具支持以下几类鉴权方式:
通过自动生成长期有效的STS凭证进行鉴权
通过您已获取的AccessKey,SDK将自动调用AssumeRole获取STS Token并定期刷新凭证。适用于希望通过阿里云SDK自动更新STS凭证,避免临时凭证失效后还需手动更新STS凭证。
阿里云STS(Security Token Service)是阿里云提供的一种临时访问权限管理服务,仅支持通过RAM用户使用,不支持通过阿里云主账号使用。
; 凭证配置名称。 [default] ; 是否启用配置,若非true则配置无效 enable=true ; 鉴权方式为ram_role_arn。 type=ram_role_arn ; 选填,为STS凭证指定权限策略,进一步限制STS Token的权限,请参见https://help.aliyun.com/document_detail/371864.html。 policy=<test_policy> ; 已准备好的AccessKeyID。 access_key_id=<access_key_id> ; 已准备好的AccessKeySecret。 access_key_secret=<access_key_secret> ; 您阿里云RAM用户的角色Arn,请参见https://help.aliyun.com/document_detail/39744.html。 role_arn=<ram_role_arn> ; 自定义的角色会话名称,用于日志审计时识别对应的操作者。通常设置为调用阿里云访问控制AssumeRole接口时使用的用户身份。 role_session_name=<session_name>
通过ECS实例RAM角色鉴权
适用于希望免创建AccessKey、通过为阿里云ECS实例授予RAM角色,来调用云产品接口。
使用该鉴权方式前,您需要先为ECS实例授予RAM角色。详细信息,请参见授予实例RAM角色。
使用以下配置内容,将默认启用ECS实例RAM角色鉴权方式。
; 默认配置。 [default] ; 是否启用配置,若非true则配置无效 enable=true ; 鉴权方式为ecs_ram_role。 type=ecs_ram_role ; ECS实例的RAM角色名称。 role_name=<ecs_ram_role_name>
通过RSA密钥对配置访问凭证
仅适用于支持RSA密钥对鉴权的接口。
; 默认配置。 [default] ; 是否启用配置,若非true则配置无效 enable=true ; 鉴权方式为rsa_key_pair。 type=rsa_key_pair ; Public Key ID public_key_id=<public_key_id> ; Private Key 文件 private_key_file=<private_key_file>
通过
credentials
文件保存访问凭证仅需配置一次AccessKey信息,适用于希望快速接入Credentials工具的用户。
; 默认配置。 [default] ; 是否启用配置,若非true则配置无效 enable=true ; 鉴权方式为access_key。 type=access_key ; 已准备好的AccessKeyID。 access_key_id=<access_key_id> ; 已准备好的AccessKeySecret。 access_key_secret=<access_key_secret>
需要不定期切换凭证类型
如果您配置了多个凭证类型,需要不定期启用其中某个凭证,您需要先变更
ALIBABA_CLOUD_PROFILE
环境变量,将环境变量的值设置为待启用凭证的配置名称。export ALIBABA_CLOUD_PROFILE=client1
[default] enable=true type=access_key access_key_id=<access_key_id> access_key_secret=<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_name> access_key_id=<access_key_id> access_key_secret=<access_key_secret> role_arn=<ram_role_arn> role_session_name=<role_session_name> [client3] enable=true type=rsa_key_pair public_key_id=<public_key_id> private_key_file=<file_name>
需要同时启用多个凭证类型
如果您配置了多个凭证类型,需要同时启用多个凭证类型,可以通过设置Credentials包中AuthUtils类clientType属性为待启用凭证的配置名称。
[default] enable=true type=access_key access_key_id=<access_key_id> access_key_secret=<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_name> access_key_id=<access_key_id> access_key_secret=<access_key_secret> role_arn=<ram_role_arn> role_session_name=<role_session_name>
import com.aliyun.credentials.utils.AuthUtils; // 若不配置AuthUtils类clientType属性,则默认使用default。 com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(); // AuthUtils.setClientType("client1"); // com.aliyun.credentials.Client credentialClient1 = new com.aliyun.credentials.Client(); // AuthUtils.setClientType("client2"); // com.aliyun.credentials.Client credentialClient2 = new com.aliyun.credentials.Client();
接口调用方法
本示例以调用云服务器ECS的DescribeRegions接口为例,因此需先安装ECS Java SDK。
import com.aliyun.credentials.utils.AuthUtils;
public class Sample {
public static void main(String[] args_) throws Exception {
// 使用默认凭证初始化Credentials Client。
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
/* 使用配置文件中client1初始化Credentials Client。*/
AuthUtils.setClientType("client1");
com.aliyun.credentials.Client credentialClient1 = new com.aliyun.credentials.Client();
// 初始化Client。
com.aliyun.ecs20140526.Client ecsClient = new com.aliyun.ecs20140526.Client(
new com.aliyun.teaopenapi.models.Config()
// 配置云产品服务接入地址(endpoint)。
.setEndpoint("ecs.aliyuncs.com")
// 使用Credentials配置凭证。
.setCredential(credentialClient)
);
// 初始化DescribeRegions请求。
com.aliyun.ecs20140526.models.DescribeRegionsRequest describeRegionsRequest = new com.aliyun.ecs20140526.models.DescribeRegionsRequest();
// 初始化运行时配置。
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 调用DescribeRegions接口并获得响应。
com.aliyun.ecs20140526.models.DescribeRegionsResponse response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
System.out.println(response.body.toMap());
}
}
配置访问令牌(STS Token、RamRoleArn、Bearer Token)
本章节介绍SDK支持的三种令牌鉴权能力:
STS Token
有权限的RAM用户可以使用自己的访问密钥调用AssumeRole接口,以获取某个RAM角色的STS Token,实现通过Credentials工具读取临时安全令牌(STS Token),访问云产品接口。
STS Token具有时效性,到期后会自动失效。相比于AK硬编码方式访问接口,使用STS Token可有效减少因长期访问AK导致AK泄露的风险。
本配置方案仅适用于支持阿里云STS的云服务。
配置方法
为该RAM用户授予AliyunRAMFullAccess权限、AliyunSTSAssumeRoleAccess权限。
详细操作,请参见为RAM用户授权。
调用AssumeRole接口,获取STS Token和临时访问密钥。
如果调用接口报错,根据界面提示跳转至诊断页面,查看具体的解决方案。
{ "RequestId": "EA7A3526-F7DB-54A5-8300-9B742CFAA5EA", "AssumedRoleUser": { "Arn": "acs:ram::125499367423****:role/STStokenTestRole/STSsessionName", "AssumedRoleId": "35219123109646****:STSsessionName" }, "Credentials": { "SecurityToken": "exampleToken", "AccessKeyId": "STS.exampleAccessKeyID", "AccessKeySecret": "exampleAccessKeySecret", "Expiration": "2023-03-26T05:26:06Z" } }
配置访问凭证。
运行以下代码示例,传入步骤2中返回的
SecurityToken
、AccessKeyId
、AccessKeySecret
值。需替换为步骤2中获取的临时AccessKey Secretimport com.aliyun.credentials.Client; import com.aliyun.credentials.models.Config; public class DemoTest { public static void main(String[] args) throws Exception{ Config config = new Config(); // 凭证类型。 config.type = "sts"; // <access_key_id>需替换为步骤2中获取的临时AccessKey ID。 config.accessKeyId = "<access_key_id>"; // <access_key_secret>需替换为步骤2中获取的临时AccessKey Secret。 config.accessKeySecret = "<access_key_secret>"; // <security_token>需替换为步骤2种获取的临时STS Token。 config.securityToken = "<security_token>"; Client client = new Client(config); } }
重要由于STS Token仅为临时凭证,后续再次通过STS Token方式访问云产品SDK代码时,请调用AssumeRole接口获取新的临时身份凭证。
接口调用方法
通过Credentials工具读取临时安全令牌(STS Token),完成云产品OpenAPI接口的调用。
本示例以调用云服务器ECS的DescribeRegions接口为例,因此需先安装ECS Java SDK。
public class Sample {
public static void main(String[] args_) throws Exception {
// 使用STS Token初始化Credentials Client。
com.aliyun.credentials.models.Config credentialsConfig = new com.aliyun.credentials.models.Config() {
{
// 凭证类型。
type = "sts";
// 设置为调用AssumeRole接口时返回的AccessKeyId值。
accessKeyId = "<access_key_id>";
// 设置为调用AssumeRole接口时返回的AccessKeySecret值。
accessKeySecret = "<access_key_secret>";
// 设置为调用AssumeRole接口时返回的STS Token值。
securityToken = "<security_token>";
}
};
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialsConfig);
// 初始化Client。
com.aliyun.ecs20140526.Client ecsClient = new com.aliyun.ecs20140526.Client(
new com.aliyun.teaopenapi.models.Config()
// 配置云产品服务接入地址(endpoint)。
.setEndpoint("ecs.aliyuncs.com")
// 使用Credentials配置凭证。
.setCredential(credentialClient)
);
// 初始化DescribeRegions请求。
com.aliyun.ecs20140526.models.DescribeRegionsRequest describeInstancesRequest = new com.aliyun.ecs20140526.models.DescribeRegionsRequest();
// 初始化运行时配置。
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 调用DescribeRegions接口并获得响应。
com.aliyun.ecs20140526.models.DescribeRegionsResponse response = ecsClient.describeRegionsWithOptions(describeInstancesRequest, runtime);
System.out.println(response.body.toMap());
}
}
RamRoleArn
通过您已获取的AccessKey,SDK将自动调用AssumeRole获取STS Token并定期刷新凭证。
通过指定具体的RAM角色ARN,实现Credentials凭证自动更新STS Token,避免使用AK硬编码的方式访问云产品接口。
本配置方案仅适用于支持阿里云STS的云服务。
配置方法
为该RAM用户授予AliyunRAMFullAccess权限、AliyunSTSAssumeRoleAccess权限。
详细操作,请参见为RAM用户授权。
配置访问凭证。
运行以下代码示例,传入
AccessKeyId
、AccessKeySecret
、Arn
等值。import com.aliyun.credentials.Client; import com.aliyun.credentials.models.Config; public class DemoTest { public static void main(String[] args) throws Exception{ Config config = new Config(); // 凭证类型。 config.type = "ram_role_arn"; // 设置为AccessKey ID值。 config.accessKeyId = "<access_key_id>"; // 设置为AccessKey Secret值。 config.accessKeySecret = "<access_key_secret>"; // 阿里云RAM用户的角色ARN,格式为:acs:ram::userId:role/roleName。 config.roleArn = "<role_arn>"; // 自定义的角色会话名称。 config.roleSessionName = "<role_session_name>"; // 可选,为STS凭证指定权限策略,进一步限制STS Token的权限,请参见https://help.aliyun.com/document_detail/371864.html。 config.policy = "<policy>"; Client client = new Client(config); } }
接口调用方法
通过Credentials工具自动更新临时安全令牌(STS Token),完成云产品OpenAPI接口的调用。
本示例以调用云服务器ECS的DescribeRegions接口为例,因此需先安装ECS Java SDK。
public class Sample {
public static void main(String[] args_) throws Exception {
// 使用RamRoleArn初始化Credentials Client。
com.aliyun.credentials.models.Config credentialsConfig = new com.aliyun.credentials.models.Config() {
{
// 凭证类型。
type = "ram_role_arn";
// 设置为AccessKey ID值。
accessKeyId = "<access_key_id>";
// 设置为AccessKey Secret值。
accessKeySecret = "<access_key_secret>";
// 阿里云RAM用户的角色ARN,格式为:acs:ram::userId:role/roleName。
roleArn = "<role_arn>";
// 自定义的角色会话名称。
roleSessionName = "<role_session_name>";
}
};
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialsConfig);
// 初始化Client。
com.aliyun.ecs20140526.Client ecsClient = new com.aliyun.ecs20140526.Client(
new com.aliyun.teaopenapi.models.Config()
// 配置云产品服务接入地址(endpoint)。
.setEndpoint("ecs.aliyuncs.com")
// 使用Credentials配置凭证。
.setCredential(credentialClient)
);
// 初始化DescribeRegions请求。
com.aliyun.ecs20140526.models.DescribeRegionsRequest describeRegionsRequest = new com.aliyun.ecs20140526.models.DescribeRegionsRequest();
// 初始化运行时配置。
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 调用DescribeRegions接口并获得响应。
com.aliyun.ecs20140526.models.DescribeRegionsResponse response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
System.out.println(response.body.toMap());
}
}
Bearer Token
使用OAuth协议进行用户认证和应用授权,当前仅有极少数产品支持,例如云呼叫中心,您可以前往OpenAPI门户查看。通过指定的Bearer Token,实现免创建AK和Token的方式访问云产品接口。
配置方法
运行以下示例代码,配置访问凭证。
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception {
Config config = new Config();
// 凭证类型。
config.type = "bearer";
// 服务器端自动生成的Bearer Token,带有效期。
config.bearerToken = "<bearer_token>";
Client client = new Client(config);
}
}
接口调用方法
本示例以调用云服务器ECS的DescribeRegions接口为例,因此需先安装ECS Java SDK。
public class Sample {
public static void main(String[] args_) throws Exception {
// 使用Bearer Token初始化Credentials Client。
com.aliyun.credentials.models.Config credentialsConfig = new com.aliyun.credentials.models.Config() {
{
// 凭证类型。
type = "bearer";
// 服务器端自动生成的Bearer Token,带有效期。
bearerToken = "<bearer_token>";
}
};
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialsConfig);
// 初始化Client。
com.aliyun.ecs20140526.Client ecsClient = new com.aliyun.ecs20140526.Client(
new com.aliyun.teaopenapi.models.Config()
// 配置云产品服务接入地址(endpoint)。
.setEndpoint("ecs.aliyuncs.com")
// 使用Credentials配置凭证。
.setCredential(credentialClient)
);
// 初始化DescribeRegions请求。
com.aliyun.ecs20140526.models.DescribeRegionsRequest describeRegionsRequest = new com.aliyun.ecs20140526.models.DescribeRegionsRequest();
// 初始化运行时配置。
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 调用DescribeRegions接口并获得响应。
com.aliyun.ecs20140526.models.DescribeRegionsResponse response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
System.out.println(response.body.toMap());
}
}
免创建AK和Token
EcsRamRole
指定具体的ECS角色名称,通过免手动创建AK和Token的方式访问云产品接口。
本配置方案仅适用于支持阿里云RAM的云服务。
配置方法
为ECS实例授予RAM角色。详细信息,请参见授予实例RAM角色。
运行以下示例代码,配置访问凭证。
import com.aliyun.credentials.Client; import com.aliyun.credentials.models.Config; public class DemoTest { public static void main(String[] args) throws Exception { Config config = new Config(); // 凭证类型。 config.type = "ecs_ram_role"; // 选填,该ECS角色的角色ARN,不填则自动获取。建议设置,可以减少请求数量。 config.roleName = "<role_name>"; Client client = new Client(config); } }
接口调用方法
本示例以调用云服务器ECS的DescribeRegions接口为例,因此需先安装ECS Java SDK。
public class Sample {
public static void main(String[] args_) throws Exception {
// 使用EcsRamRole初始化Credentials Client。
com.aliyun.credentials.models.Config credentialsConfig = new com.aliyun.credentials.models.Config() {
{
// 凭证类型。
type = "ecs_ram_role";
// 选填,该ECS角色的角色ARN,不填则自动获取。建议设置,可以减少请求数量。
roleName = "<role_name>";
}
};
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialsConfig);
// 初始化Client。
com.aliyun.ecs20140526.Client ecsClient = new com.aliyun.ecs20140526.Client(
new com.aliyun.teaopenapi.models.Config()
// 配置云产品服务接入地址(endpoint)。
.setEndpoint("ecs.aliyuncs.com")
// 使用Credentials配置凭证。
.setCredential(credentialClient)
);
// 初始化DescribeRegions请求。
com.aliyun.ecs20140526.models.DescribeRegionsRequest describeRegionsRequest = new com.aliyun.ecs20140526.models.DescribeRegionsRequest();
// 初始化运行时配置。
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 调用DescribeRegions接口并获得响应。
com.aliyun.ecs20140526.models.DescribeRegionsResponse response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
System.out.println(response.body.toMap());
}
}
Credentials URI
指定Credentials提供地址,实现通过本地或远程的URI来获取并自动更新Token。
配置方法
运行以下示例代码,配置访问凭证。
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception {
Config config = new Config();
// 凭证类型。
config.type = "credentials_uri";
// Credentials URI,格式为http://local_or_remote_uri/。
config.credentialsURI = "<local_or_remote_uri>";
Client client = new Client(config);
}
}
接口调用方法
本示例以调用云服务器ECS的DescribeRegions接口为例,因此需先安装ECS Java SDK。
public class Sample {
public static void main(String[] args_) throws Exception {
// 使用Credentials URI初始化Credentials Client。
com.aliyun.credentials.models.Config credentialsConfig = new com.aliyun.credentials.models.Config() {
{
// 凭证类型。
type = "credentials_uri";
credentialsURI = "<local_or_remote_uri>";
}
};
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialsConfig);
// 初始化Client。
com.aliyun.ecs20140526.Client ecsClient = new com.aliyun.ecs20140526.Client(
new com.aliyun.teaopenapi.models.Config()
// 配置云产品服务接入地址(endpoint)。
.setEndpoint("ecs.aliyuncs.com")
// 使用Credentials配置凭证。
.setCredential(credentialClient)
);
// 初始化DescribeRegions请求。
com.aliyun.ecs20140526.models.DescribeRegionsRequest describeRegionsRequest = new com.aliyun.ecs20140526.models.DescribeRegionsRequest();
// 初始化运行时配置。
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
// 调用DescribeRegions接口并获得响应。
com.aliyun.ecs20140526.models.DescribeRegionsResponse response = ecsClient.describeRegionsWithOptions(describeRegionsRequest, runtime);
System.out.println(response.body.toMap());
}
}