全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
日志服务

用户角色

更新时间:2018-04-11 14:31:53

角色,与用户一样,都是 RAM 中使用的身份。与 RAM 用户相比,RAM 用户角色是一种虚拟用户,它没有确定的身份认证密钥,且需要被一个受信的实体用户(比如云账号、RAM-User 账号、云服务账号)扮演才能正常使用。扮演成功后实体用户将获得 RAM 用户角色的临时安全令牌,使用这个临时安全令牌就能以RAM用户角色身份访问被授权的资源。

如果您需要将日志服务的操作权限授予一个受信实体用户,允许该实体用户下的RAM角色操作日志服务,您需要创建RAM用户角色并指定受信云账号、为RAM用户角色授权、为受信账号下的RAM用户授予AssumeRole权限、获取RAM用户角色的临时安全令牌。

更多内容请参考RAM文档

步骤1 创建用户角色并指定受信云账号

  1. 登录到 RAM 控制台,并在左侧导航栏单击 角色管理

  2. 单击右上角 新建角色

  3. 选择角色类型子页,选择 用户角色

  4. 填写类型信息子页,选择 受信云账号

    注意:

    • 若创建的角色是给您自己名下的 RAM 用户使用(比如授权移动 App 客户端直接操作LOG资源),请选择 当前云账号 为受信云账号。
    • 若创建的角色是给其他云账号名下的 RAM 用户使用(比如跨账号的资源授权),请选择 其他云账号,并在受信云账号 ID 中填写其他云账号的 ID。

    ram

  5. 配置角色基本信息子页,输入 角色名称备注 后,单击 创建

步骤2 为RAM用户角色授权

成功创建用户角色后,该用户角色没有任何权限,您需要为RAM用户角色授予操作日志服务的权限。您上一步中指定的受信云账号将有权限扮演该RAM用户角色操作日志服务。

注意:您可以赋予RAM用户角色一个或多个授权策略,包括系统授权策略和自定义授权策略。本文档以授予RAM用户角色管理日志服务的权限为例。

  1. 在RAM控制台左侧导航栏单击 角色管理

  2. 单击目标RAM用户角色名称右侧的授权

  3. 选择AliyunLogFullAccess权限,并单击确定

更多内容请参考 授权

步骤3 为受信云账号的RAM用户授权

RAM用户角色需要被一个受信的实体用户扮演才能正常使用,但是受信实体用户不能以自己的身份扮演RAM用户角色,必须以RAM用户的身份和形式扮演。即RAM 用户角色只能通过 RAM 用户身份来扮演使用

另外,受信云账号必须为其名下的RAM用户进行AssumeRole授权,授予该RAM用户调用STS服务AssumeRole接口的权限,此RAM用户才能代表受信云账号扮演步骤1中创建的RAM用户角色。

  1. 登录受信云账号的RAM控制台。

  2. 用户管理页面中,选定用于授权的RAM用户,并单击右侧的授权

    如果您之前没有创建过RAM用户,请参考RAM文档创建一个RAM用户。

  3. 选择系统授权策略AliyunSTSAssumeRoleAccess并单击确定

  4. 单击点击获取以获取验证码,输入收到的验证码,单击确认

步骤4 获取RAM用户角色的临时安全令牌

当 RAM 用户被授予 AssumeRole 权限之后,可以使用其 AccessKey 调用安全令牌服务(STS) 的 AssumeRole 接口,以获取某个角色的临时安全令牌。

关于 AssumeRole API 的调用方法,请参考 STS API文档

使用STS SDK拿到AccessKeyId、AccessKeySecret 、SecurityToken 之后就可以使用日志服务的SDK访问日志服务了。

下面是使用AccessKeyId、AccessKeySecret 、SecurityToken初始化LogClient的示例,Java SDK使用请参考文档

  1. package sdksample;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Vector;
  5. import java.util.Date;
  6. import com.aliyun.openservices.log.Client;
  7. import com.aliyun.openservices.log.common.*;
  8. import com.aliyun.openservices.log.exception.*;
  9. import com.aliyun.openservices.log.request.*;
  10. import com.aliyun.openservices.log.response.*;
  11. import com.aliyun.openservices.log.common.LogGroupData;
  12. import com.aliyun.openservices.log.common.LogItem;
  13. import com.aliyun.openservices.log.common.Logs.Log;
  14. import com.aliyun.openservices.log.common.Logs.Log.Content;
  15. import com.aliyun.openservices.log.common.Logs.LogGroup;
  16. import com.aliyun.openservices.log.common.Consts.CursorMode;
  17. public class sdksample {
  18. public static void main(String args[]) throws LogException, InterruptedException {
  19. String endpoint = "<log_service_endpoint>"; // 选择与上面步骤创建 Project 所属区域匹配的Endpoint
  20. String accessKeyId = "<your_access_key_id>"; // 使用您的阿里云访问密钥 AccessKeyId
  21. String accessKeySecret = "<your_access_key_secret>"; // 使用您的阿里云访问密钥AccessKeySecret
  22. String securityToken = "<your_security_token>"; //角色的SecurityToken
  23. String project = "<project_name>"; // 上面步骤创建的项目名称
  24. String logstore = "<logstore_name>"; // 上面步骤创建的日志库名称
  25. // 构建一个客户端实例
  26. Client client = new Client(endpoint, accessKeyId, accessKeySecret);
  27. // 设置SecurityToken
  28. client.SetSecurityToken(securityToken);
  29. // 写入日志
  30. String topic = "";
  31. String source = "";
  32. // 连续发送 10 个数据包,每个数据包有 10 条日志
  33. for (int i = 0; i < 10; i++) {
  34. Vector<LogItem> logGroup = new Vector<LogItem>();
  35. for (int j = 0; j < 10; j++) {
  36. LogItem logItem = new LogItem((int) (new Date().getTime() / 1000));
  37. logItem.PushBack("index"+String.valueOf(j), String.valueOf(i * 10 + j));
  38. logGroup.add(logItem);
  39. }
  40. PutLogsRequest req2 = new PutLogsRequest(project, logstore, topic, source, logGroup);
  41. client.PutLogs(req2);
  42. }
  43. }
  44. }
本文导读目录