跨账号STS Token方式调用

本文向您介绍如何通过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授权

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());