文档

控制台内嵌及分享(新版)

更新时间:
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

如果您需要将日志服务的查询分析页面、仪表盘页面,免密分享给其他人或者嵌入到第三方系统,可以使用Ticket方案。

工作原理

image

前提条件

已创建RAM用户。最终生成的免密链接具备CreateTicket接口调用者的所有权限,强烈建议不要使用阿里云主账号调用CreateTicket接口,请使用RAM用户调用接口,并为该RAM用户设置最小化的权限范围。

生成免密链接

步骤一:为RAM用户授权

  1. 为RAM用户授予调用CreateTicket接口的权限。在RAM用户的权限策略中添加以下内容,具体操作步骤请参见为RAM用户授权创建自定义权限策略

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "log:CreateTicket",
                "Resource": "acs:log:*:*:ticket/*"
            }
        ]
    }
  2. 为RAM用户授予访问日志服务的权限。最终生成的免密链接具备CreateTicket接口调用者的所有权限,建议为该RAM用户设置最小化的权限,例如某个Project的只读权限或者某个Logstore的只读权限。日志服务的权限,请参见概览RAM自定义授权场景

步骤二:获取票据Ticket

调用CreateTicket获取票据Ticket。服务地址只能是华东2(上海)新加坡,但获取的Ticket可以在各个地域使用。

image

步骤三:拼接免密链接

根据控制台链接和票据Ticket,获取最终的免密链接。

  1. 获取控制台链接。

    • 查询分析页面:

      https://sls.console.aliyun.com/lognext/project/<Project名称>/logsearch/<日志库名称>?slsRegion=<Project所在地域>&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true
    • 查询页面:

      https://sls.console.aliyun.com/lognext/project/<Project名称>/logsearch/<日志库名称>?slsRegion=<Project所在地域>&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true
    • 仪表盘页面:

      重要

      仪表盘ID为网页链接上的ID,并非仪表盘的展示名称。

      https://sls.console.aliyun.com/lognext/project/<Project名称>/dashboard/<仪表盘ID>?slsRegion=<Project所在地域>&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true
  2. 将控制台链接与票据Ticket拼接,生成免登录访问链接。

    https://sls.console.aliyun.com/lognext/project/<Project名称>/dashboard/<仪表盘ID>?slsRegion=<Project所在地域>&sls_ticket=eyJ***************.eyJ******************.KUT****************&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true
  3. 链接测试。您可以将生成的免登录链接放到HTML页面中进行测试。若可正常打开日志服务控制台分享页面,则说明已经成功生成免登录链接。

    警告
    • 生成的票据Ticket在有效期24小时内仅可使用一次。

    • 此处测试即为首次在浏览器中打开免登录链接,测试完成后,票据Ticket会失效。您需要重新调用CreateTicket获取新的票据Ticket。

    • 建议将链接复制到文件中,然后传输文件。如果直接在第三方软件中发送链接,可能因为被第三方软件读取而失效。

控制免密链接的权限范围

要区分不同人员访问不同权限的免登链接,可以通过以下方式:

使用多个RAM用户

  1. 为每个RAM用户设置日志服务的不同权限。

  2. 使用不同的RAM用户调用CreateTicket接口,获取不同权限范围的票据Ticket。

  3. 根据控制台链接和票据Ticket,拼接出不同权限范围的免密链接。

使用一个RAM用户和一个RAM角色

image
  1. 为RAM用户授予STS的管理权限(AliyunSTSAssumeRoleAccess)。创建可信实体为阿里云账号的RAM角色,为RAM角色授予调用CreateTicket接口的权限日志服务的相关权限,授权操作请参见为RAM角色授权

  2. 使用RAM用户调用AssumeRole- 获取扮演角色的临时身份凭证,在调用AssumeRole时设置不同的Policy参数,进一步限制返回的STS Token的权限。RAM用户将使用STS Token扮演RAM角色。

  3. RAM用户扮演RAM角色去调用CreateTicket接口,获取不同权限范围的票据Ticket。

    以下代码示例以Java语言为例,使用AssumeRole接口返回的不同权限的SecurityToken、AccessKeySecret和AccessKeyId,去调用CreateTicket接口。

    // This file is auto-generated, don't edit it. Thanks.
    package com.aliyun.sample;
    
    import com.aliyun.tea.*;
    
    public class Sample {
    
        /**
         * 使用AK&SK初始化账号Client
         * @param accessKeyId
         * @param accessKeySecret
         * @return Client
         * @throws Exception
         */
        public static com.aliyun.sls20201230.Client createClient() throws Exception {
            // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
            // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                    // 从环境变量中获取上一步生成的安全令牌SecurityToken。
                    .setSecurityToken(System.getenv("SLS_SESSION_TOKEN"));
            // Endpoint 请参考 https://api.aliyun.com/product/Sls
            config.endpoint = "cn-shanghai.log.aliyuncs.com";
            return new com.aliyun.sls20201230.Client(config);
        }
    
        public static void main(String[] args_) throws Exception {
            java.util.List<String> args = java.util.Arrays.asList(args_);
            com.aliyun.sls20201230.Client client = Sample.createClient();
            com.aliyun.sls20201230.models.CreateTicketRequest createTicketRequest = new com.aliyun.sls20201230.models.CreateTicketRequest();
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            java.util.Map<String, String> headers = new java.util.HashMap<>();
    
            try {
                // 复制代码运行请自行打印 API 的返回值
                com.aliyun.sls20201230.models.CreateTicketResponse resp = client.createTicketWithOptions(createTicketRequest, headers, runtime);
                com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
            } 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);
            }
        }
    }
    
    
    
  4. 根据控制台链接和票据Ticket,拼接出不同权限范围的免密链接。

相关文档

  • 本页导读 (1)
文档反馈