本文介绍如何配置访问方式和授予权限,以使用 RAM 用户调用云控制 API。合理管理 RAM 用户可降低安全风险并支持多用户协作。
RAM用户是指RAM账号,是RAM的一种实体身份类型。您可以为阿里云账号(主账号)创建RAM用户并进行权限授权,以实现不同RAM用户对资源的差异化访问权限。当您的企业存在多个用户需协同访问资源的场景时,您可以创建多个RAM用户,并按需分配最小权限,这样可以避免多用户共享阿里云账号(主账号)密码或访问密钥(AccessKey),从而降低企业的安全风险。
配置访问方式
调用云控制 API 有两种主要方式:控制台调用及OpenAPI调用。RAM 用户在调用时需要具备对应的访问方式,具体对应关系如下:
RAM用户类型 | RAM用户访问方式 | 云控制API调用方式 | 适用场景 |
人员账号 | 控制台访问 | 控制台调用 | 控制台界面操作 |
应用程序 | OpenAPI调用访问 | OpenAPI调用 | 程序调用 |
如果RAM用户代表人员,建议启用控制台访问。如果RAM用户代表应用程序,则可以使用永久访问密钥(AccessKey)调用OpenAPI以访问阿里云。
您可以在创建RAM用户时选择访问方式,也可以修改已有RAM用户的访问方式。
控制台界面操作
以获取VPC资源详细信息为例:
您可以登录专有网络VPC控制台,查看VPC详情。
程序调用
以下代码展示了如何使用Java语言获取专有网络VPC资源的详细信息。
package com.aliyun.sample;
import com.aliyun.tea.*;
/*<dependency>
<groupId>com.aliyun</groupId>
<artifactId>cloudcontrol20220830</artifactId>
<version>1.1.1</version>
</dependency>*/
public class Sample {
public static com.aliyun.cloudcontrol20220830.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// System.getenv()表示从环境变量获取AccessKey
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = "cloudcontrol.aliyuncs.com";
return new com.aliyun.cloudcontrol20220830.Client(config);
}
public static void main(String[] args_) throws Exception {
com.aliyun.cloudcontrol20220830.Client client = Sample.createClient();
String requestPath = "/api/v1/providers/Aliyun/products/VPC/resources/VPC/vpc-m5e6l4XXXXXXXX";
com.aliyun.cloudcontrol20220830.models.GetResourcesRequest getResourcesRequest = new com.aliyun.cloudcontrol20220830.models.GetResourcesRequest()
.setRegionId("cn-qingdao");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
java.util.Map<String, String> headers = new java.util.HashMap<>();
try {
GetResourcesResponse getResourcesResponse = client.getResourcesWithOptions(requestPath, getResourcesRequest, headers, runtime);
System.out.println(new Gson().toJson(getResourcesResponse.getBody()));
} catch (TeaException error) {
// 错误 message
System.out.println(error.getMessage());
// 诊断地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 错误 message
System.out.println(error.getMessage());
// 诊断地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}
响应结果:
{
"resource": {
"resourceId": "vpc-m5e6l4XXXXXXXX",
"resourceAttributes": {
"IsDefault": false,
"Status": "Available",
"Description": "",
"ResourceGroupId": "rg-acfmyXXXXXXXX",
"SecondaryCidrBlocks": [],
"VSwitchIds": [
"vsw-m5emwh9XXXXXXXX",
"vsw-m5e7uotXXXXXXXX"
],
"CreateTime": "2025-03-26T07:27:25Z",
"CidrBlock": "1XX.XXX.X.X/XX",
"RouterId": "vrt-m5e65XXXXXXXX",
"UserCidrs": [],
"VpcId": "vpc-m5e6lXXXXXXXX",
"VpcName": "caf-qingdao-vpc",
"RegionId": "cn-qingdao",
"Ipv6CidrBlock": "",
"Ipv6CidrBlocks": [
{
"Ipv6CidrBlock": ""
}
],
"Tags": [
{
"TagKey": "acs:XXXXXXXX",
"TagValue": "sub:XXXXXXXX"
}
]
}
},
"requestId": "DDEF766D-C25E-51A8-9DF7-1AAF437B8260"
}
授予权限
RAM用户调用云控制API需要权限,您可以根据需求为RAM用户授权。权限策略分为系统策略与自定义策略。
为RAM用户授权时,应遵循最小权限原则。
系统策略如下表所示:
权限名称 | 作用 | 适用范围 |
具备管理云控制API权限。 |
| |
仅具备云控制API的只读访问权限。 |
|
如果系统权限策略无法满足您的需求,可以使用自定义策略以精细化权限管理。具体操作,请参见自定义权限策略。