会话操作记录投递

您可以使用云助手的会话操作记录投递功能,将会话管理(Session Manager)操作记录投递到您的对象存储OSS或日志服务SLS中,进行持久化存储。本文介绍如何配置会话操作记录投递和查看已投递的会话操作记录。

背景信息

如果您需要对会话管理(Session Manager)操作记录进行查询、分析、审计以及持久保存等操作,或者您使用会话管理(Session Manager)用于安全性、合规性要求较高的场景,建议您使用会话操作记录投递功能,即将会话管理(Session Manager)操作记录投递到您指定的对象存储OSS或日志服务SLS中,进行持久化存储。

说明

会话操作记录投递功能支持的地域,请参见支持的地域

计费说明

会话操作记录投递功能本身不收费,但使用该功能的过程中,您需要为如下内容付费:

  • 使用SLS存储会话操作记录或使用SLS的日志索引等功能。

    具体计费信息,请参见SLS计费概述

  • 使用OSS存储会话操作记录或使用OSS的文件管理等功能。

    具体计费信息,请参见OSS计费概述

步骤一:配置会话操作记录投递

您需要在ECS管理控制台上完成会话操作记录投递配置,指定存储会话操作记录的SLS项目(Project)和日志库(LogStore)、OSS存储空间(Bucket),具体操作如下:

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择运维与监控 > 云助手

  3. 在顶部菜单栏左上角处,选择地域。

    说明

    不支持跨地域投递。如果您需要为不同地域投递会话操作记录,请分别在不同地域完成配置。

  4. ECS 云助手页面右上角,单击设置

  5. 在弹出的云助手设置对话框中,单击会话管理设置页签,完成投递配置。

    • 会话操作记录投递到日志服务SLS。

      1. 选中投递到日志服务SLS

      2. 选择已创建的SLS项目和日志库。

        • 如果还未创建SLS项目和日志库,请单击右侧的打开SLS控制台管理日志库开始即时创建,创建完成后返回该对话框单击刷新图标图标,查看最新的列表。具体操作,请参见管理Project管理Logstore

        • 在SLS中查询、分析日志还需要提前开启索引,具体操作,请参见创建索引

        • (可选)您还可以设置日志库的服务器端加密方式,会话操作记录投递会继承该加密方式。具体操作,请参见数据加密

    • 会话操作记录投递到对象存储OSS。

      1. 选中投递到对象存储OSS

      2. 选择已创建的OSS存储空间,并填写用于存储会话操作记录文件的根目录。

        如果还未创建OSS存储空间,请单击右侧的打开OSS控制台开始即时创建,创建完成后返回该对话框单击刷新图标图标,查看最新的列表。具体操作,请参见创建存储空间

      3. (可选)单击高级选项后的图标.png图标,设置服务器端加密方式。

        说明

        OSS提供了服务器端加密机制,提供静态数据保护,适合于对文件存储有高安全性或者合规性要求的应用场景。若您设置了服务器端加密方式,将为会话操作记录投递文件(Object)进行对应的加密。更多信息,请参见服务器端加密

  6. 单击确定

    首次进行投递配置时,系统自动授权云助手获取访问SLS和OSS资源的权限,即自动为您创建一个服务关联角色,以便将会话操作记录投递到您指定的SLS日志库或OSS存储空间中。如果已经存在,则不会重复创建。您可以手动管理授权,具体操作,请参见管理云助手服务关联角色

    111.png

步骤二:使用会话管理功能连接实例

使用会话管理功能连接实例后,会话操作记录会自动投递至您指定的SLS日志库或OSS存储空间中。

通过会话管理连接实例的具体操作,请参见通过会话管理连接实例

步骤三:查看会话操作记录

您可以前往SLS控制台或OSS控制台查看会话操作记录,具体操作如下:

在SLS查看会话操作记录

本步骤为从ECS控制台跳转至指定日志库的方法,您也可以直接登录SLS控制台,自行查找对应的日志库。

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择运维与监控 > 云助手

  3. 在顶部菜单栏左上角处,选择地域。

  4. ECS 云助手页面右上角,单击设置

  5. 在弹出的云助手设置对话框中,单击会话管理设置页签,然后选中投递到日志服务SLS

  6. 单击请选择日志服务日志库区域右侧的管理日志库

    • 查看和分析日志的具体操作,请参见查询和分析日志

    • 会话操作记录中,具体参数说明如下。

      参数

      描述

      LoginUser

      使用会话管理功能连接实例后,进行操作的用户名称。

      CallerUid

      使用会话管理功能连接实例后,进行操作的账号ID。

      Content

      使用会话管理功能连接实例后,操作命令与对应的输出。

      操作命令与输出结果间一般以“=======”分隔。

      InstanceId

      使用会话管理功能连接到的实例ID。

      SessionId

      使用会话管理功能连接实例的会话ID。

      ChannelId

      使用会话管理功能连接实例的通道ID。

      TokenPrincipalId

      使用会话管理功能,通过STS角色扮演方式连接实例后,进行操作的实际委托人ID。

在OSS查看会话操作记录

本步骤为从ECS控制台跳转至指定存储空间的方法,您也可以直接登录OSS控制台,自行查找对应的存储空间。

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择运维与监控 > 云助手

  3. 在顶部菜单栏左上角处,选择地域。

  4. ECS 云助手页面右上角,单击设置

  5. 在弹出的云助手设置对话框中,单击会话管理设置页签,然后选中投递到对象存储OSS

  6. 单击请选择存储空间区域右侧的打开OSS控制台

  7. 进入存储某个会话操作记录相关文件的目录。

    跳转到OSS控制台后,系统会自动定位到您在配置会话操作记录投递时填写的文件根目录,您可以逐级进入自动生成的子目录,查看会话记录投递文件,目录格式如下:

    <文件根目录>/<实例所在地域ID>/<会话操作时间(年-月)>/<会话操作时间(日)>/<实例ID>/<SessionId>/<ChannelId>.yaml

  8. 分析会话操作记录文件。

    会话操作记录文件为YAML格式,您可以下载并解析YAML文件,进行分析、审计等操作。

    以解析会话操作记录YAML文件的Java代码为例,示例如下:

    //会话操作记录的YAML文件解析类
    public static class Document {
        //会话基本信息
        private MetaData metaData;
        //会话操作记录
        private List<SessionData> sessionData;
    }
    
    //会话基本信息
    public static class MetaData {
        //解析版本
        private String version;
        //使用会话管理功能连接实例后,进行操作的用户名称
        private String loginUser;
        //使用会话管理功能连接实例后,进行操作的账号ID
        private Long callerUid;
        //使用会话管理功能连接到的实例ID
        private String instanceId;
        //使用会话管理功能连接实例的会话ID
        private String sessionId;
        //使用会话管理功能连接实例的通道ID
        private String channelId;
        //使用会话管理功能,通过STS角色扮演方式连接实例后,进行操作的实际委托人ID
        private String stsTokenPrincipalId;
    }
    
    //会话操作记录
    public static class SessionData {
        //会话操作时间
        private String time;
        //操作命令与对应的输出,操作命令与输出结果间一般以“>>>>>>>>>>>>”分隔
        private String content;
    }
    
    /**
    * 获取Session Manager会话记录
    *
    * @param deliveryFileName Session Manager会话记录投递的yaml文件
    * @return Session Manager会话记录
    */
    public Document getSessionData(String deliveryFileName) {
        Yaml yaml = new Yaml(new Constructor(Document.class));
    	  File deliveryFile = new File(deliveryFileName);
    	  try (InputStream deliveryInputStream = new FileInputStream(deliveryFile)) {
            Document document = (Document) yaml.load(deliveryInputStream);
            //会话基本信息
            //MetaData metaData = document.getMetaData();
            //会话操作记录
            //List<SessionData> sessionDataList = document.getSessionData();
            return document;
        } catch (IOException exception) {
            // log.error("");
        }
        return null;
    }