本文向您介绍如何通过STS Token配置的方式实现风险识别产品的跨账号使用。
STS Token应用场景
STS Token可以支持跨账号使用风险识别产品,一个典型的场景是:同一个客户的A账号购买了风险识别流量包,而在正式使用时,其期望通过B账号发起请求,此时可以通过角色扮演调用。这样做的好处是满足了跨账号调用的同时,保护了A账号的AK信息。
STS Token配置方式
以上述场景为例,首先需要客户登录已购买的A账号,并对B账号进行权限配置,才能实现跨账号调用。
1. 登录已购买的账号A。
2. 新建角色
选择可信实体类型为阿里云账号,设置角色名称、并填写B账号为信任的云账号。
3. 为角色授权
在角色创建成功页面,点击为角色授权。添加权限值:AliyunYundunSAFFullAccess。
4. 获取角色ARN
点击角色名,进入角色详情展示页,复制右侧ARN信息。ARN信息在B账号调用时需要使用,请妥善保管。
至此,B账号已经可以通过主账号调用风险识别产品了。若需要授权B账号的子账号进行调用,则还需要开通子账号的STS调用权限,授权策略为:AliyunSTSAssumeRoleAccess。
STS Token调用代码Demo
1. 获取STS调用信息
public static AssumeRoleResponse.Credentials getSTSToken() throws Exception {
String stsRegionId = "cn-shanghai";
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取B账号的RAM用户AccessKey,来实现API访问的身份验证。运行本示例代码前,请确认配置这两个环境变量:ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET.
String bAccessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String bAccessSecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
IClientProfile profile = DefaultProfile.getProfile(stsRegionId, bAccessId, bAccessSecret);
IAcsClient client = new DefaultAcsClient(profile);
AssumeRoleRequest request = new AssumeRoleRequest();
// 指定请求方法
request.setSysMethod(com.aliyuncs.http.MethodType.POST);
request.setAcceptFormat(FormatType.JSON);
// 获取方式详细见步骤1.3
request.setRoleArn("{your_role_ARN}");
// A账号的主账号ID
request.setRoleSessionName("{account_A_main_user_id}");
AssumeRoleResponse httpResponse = client.getAcsResponse(request);
return httpResponse.getCredentials();
}
2. 通过STS Token方式调用
AssumeRoleResponse.Credentials credentials = getSTSToken();
IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", credentials.getAccessKeyId(), credentials.getAccessKeySecret(), credentials.getSecurityToken());
文档内容是否对您有帮助?