本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
如果您需要将日志服务的查询分析结果、仪表盘等页面,分享给其他人或者嵌入到第三方系统。本文为您介绍配置免密免登录的链接及分享的具体操作步骤。
前提条件
您已完成以下操作:
已开通日志服务。更多信息,请参见开通日志服务。
已创建Project、标准型Logstore并完成日志采集。具体操作,请参见创建项目Project、创建Logstore和数据采集概述。
背景信息
Ticket是指一个短期有效的令牌(Token),用于拼接免密且免登录链接,获取链接的用户无需登录阿里云账户,就可以访问指定的查询分析页面或仪表盘页面。
操作流程如下:
为RAM用户授权。
准备分享链接。
调用
CreateTicket
接口获取Ticket
。用
Ticket
拼接到分享链接中,生成免密且免登录链接。
调用CreateTicket获取票据Ticket,服务地址只能是华东2(上海)或新加坡,但获取的Ticket可以在各个地域使用。
生成的票据Ticket只能使用一次,有效期默认为一天,最长为30天。如果需要动态生成Ticket,请参见下面的如何动态生成Ticket?
内嵌页面
日志服务支持将查询分析结果、仪表盘及告警页面嵌入第三方系统,并支持用户权限分离。下面通过两个场景为您介绍控制台内嵌操作步骤。
使用场景:内嵌同一个Project中的两个Logstore,所有用户具有指定Logstore的只读权限及Project中快速查询和仪表盘的只读权限。
操作步骤
创建一个RAM用户
sls-user
作为分享者,具体操作,请参见创建RAM用户。生成的链接会继承
CreateTicket
接口调用者在日志服务中已有的权限,为避免使用主账号调用接口而造成的数据安全风险,强烈建议使用RAM用户来调用CreateTicket
接口,并为该RAM用户设置最小化的权限范围。为RAM用户
sls-user
授权。创建访问指定资源(Project、Logstore)的权限
Allow-AccessLogstore
。权限策略如下所示,具体操作,请参见创建自定义权限策略。实际操作中,请使用具体Project和Logstore替换代码中<指定的Project名称>和<指定的Logstore名称A>、<指定的Logstore名称B>。
{ "Version": "1", "Statement": [ { "Action": [ "log:ListProject" ], "Resource": "acs:log:*:*:project/*", "Effect": "Allow" }, { "Action": [ "log:List*" ], "Resource": "acs:log:*:*:project/<指定的Project名称>/logstore/*", "Effect": "Allow" }, { "Action": [ "log:Get*", "log:List*" ], "Resource": [ "acs:log:*:*:project/<指定的Project名称>/logstore/<指定的Logstore名称A>", "acs:log:*:*:project/<指定的Project名称>/logstore/<指定的Logstore名称B>" ], "Effect": "Allow" }, { "Action": [ "log:Get*", "log:List*" ], "Resource": [ "acs:log:*:*:project/<指定的Project名称>/dashboard", "acs:log:*:*:project/<指定的Project名称>/dashboard/*" ], "Effect": "Allow" }, { "Action": [ "log:Get*", "log:List*" ], "Resource": [ "acs:log:*:*:project/<指定的Project名称>/savedsearch", "acs:log:*:*:project/<指定的Project名称>/savedsearch/*" ], "Effect": "Allow" } ] }
为RAM用户
sls-user
授予Allow-AccessLogstore
权限,用户访问内嵌页面继承该权限。具体操作,请参见RAM自定义授权示例。创建调用CreateTicket接口的权限
Allow-CreateTicket
。权限策略如下所示,具体操作,请参见创建自定义权限策略。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "log:CreateTicket", "Resource": "acs:log:*:*:ticket/*" } ] }
为RAM用户授予调用CreateTicket接口的权限
Allow-CreateTicket
。具体操作,请参见为RAM用户授权。
您可在自己的前端页面自行制作Logstore Select框/Tab,用于切换Logstore。
进入内嵌页面,使用RAM用户
sls-user-a
调用CreateTicket接口获取票据Ticket,此处以Java SDK为例。您可在CreateTicket页面调试接口,获取票据Ticket。将获取的Ticket拼接在查询页URL中访问。
添加Maven依赖。
在Java项目的根目录下,打开pom.xml文件,添加以下代码:
<dependency> <groupId>com.aliyun</groupId> <artifactId>sls20201230</artifactId> <version>5.5.0</version> </dependency>
-
将获取的Ticket拼接在查询页URL中。同时您可隐藏左侧导航栏、顶部导航栏、关闭Tab访问历史记录等(hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true)。关于控制台内嵌参数的具体用法,请参见配置控制台内嵌参数。
https://sls.console.aliyun.com/lognext/project/<Project名称>/logsearch/<日志库名称>?slsRegion=<Project所在地域>&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true&sls_ticket=eyJ***************.eyJ******************.KUT****************
切换Logstore,在同一个浏览器中可以重复使用上述生成的Ticket,拼接在URL中。
同一个浏览器中无需重复调用,不同用户(不同浏览器)还是需要重新调用CreateTicket的,Ticket仅限使用一次。
使用场景:内嵌两个project,用户A仅能只读访问Project-A
,用户B仅能只读访问Project-B
。
操作步骤
创建一个RAM用户
sls-user
作为分享者,具体操作,请参见创建RAM用户。生成的链接会继承
CreateTicket
接口调用者在日志服务中已有的权限,为避免使用主账号调用接口而造成的数据安全风险,强烈建议使用RAM用户来调用CreateTicket
接口,并为该RAM用户设置最小化的权限范围。为RAM用户
sls-user
授予调用STS服务AssumeRole接口的权限(AliyunSTSAssumeRoleAccess)。具体操作,请参见为RAM用户授权。创建RAM角色
sls-role
,具体操作,请参见创建可信实体为阿里云账号的RAM角色。为RAM角色
sls-role
授予指定资源(Project)的权限,以及调用CreateTicket接口的权限。创建访问指定资源(Project)的权限
Allow-AccessProject
,权限为所有用户权限的并集。具体操作,请参见创建自定义权限策略。这里需要只读访问Project-A
和Project-B
的权限,权限策略如下所示:实际操作中,请使用具体Project替换代码中<指定的Project名称A>和<指定的Project名称B>。
{ "Version": "1", "Statement": [ { "Action": [ "log:Get*", "log:List*" ], "Resource": [ "acs:log:*:*:project/<指定的Project名称A>/*", "acs:log:*:*:project/<指定的Project名称A>", "acs:log:*:*:project/<指定的Project名称B>/*", "acs:log:*:*:project/<指定的Project名称B>" ], "Effect": "Allow" } ] }
为RAM角色
sls-role
授予访问指定资源(Project)的权限Allow-AccessProject
,具体操作,请参见为RAM角色授权。创建调用CreateTicket接口的权限
Allow-CreateTicket
。权限策略如下所示,具体操作,请参见创建自定义权限策略。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "log:CreateTicket", "Resource": "acs:log:*:*:ticket/*" } ] }
为RAM角色
sls-role
授予调用CreateTicket接口的权限Allow-CreateTicket
,具体操作,请参见为RAM角色授权。
设置RAM角色最大会话时间,默认为1小时,内嵌有效时间会小于这个时间。
当用户进入内嵌页面时,使用RAM用户
sls-user
扮演的RAM角色sls-role
调用AssumeRole接口。主要设置四个参数。字段名称
字段说明
RoleArn
要扮演的RAM角色ARN。从RAM角色中复制。
RoleSessionName
角色会话名称。任意字符串,设置为用户ID或名称等,用于审计时区分不同用户。
DurationSeconds
Token有效期。可设置为最小900秒,最大为RAM角色最大会话时间,默认3600秒。
Policy
为 STS Token 额外添加的一个权限策略。
如果指定该权限策略,则 STS Token 最终的权限策略取 RAM 角色权限策略与该权限策略的交集。
如果不指定该权限策略,则 STS Token 最终的权限策略取 RAM 角色的权限策略。
调用时按照不同用户设置不同的policy,为STS Token额外添加的一个权限策略(STS Token 最终的权限策略取RAM角色权限策略与该权限策略的交集)。比如用户A进入内嵌页面时设置RoleSessionName为
UserA
,policy为:{ "Version": "1", "Statement": [ { "Action": [ "log:Get*", "log:List*" ], "Resource": [ "acs:log:*:*:project/<指定的Project名称A>/*", "acs:log:*:*:project/<指定的Project名称A>" ], "Effect": "Allow" }, { "Effect": "Allow", "Action": "log:CreateTicket", "Resource": "acs:log:*:*:ticket/*" } ] }
用户B进入内嵌页面时设置RoleSessionName为
UserB
,policy为:{ "Version": "1", "Statement": [ { "Action": [ "log:Get*", "log:List*" ], "Resource": [ "acs:log:*:*:project/<指定的Project名称B>/*", "acs:log:*:*:project/<指定的Project名称B>" ], "Effect": "Allow" }, { "Effect": "Allow", "Action": "log:CreateTicket", "Resource": "acs:log:*:*:ticket/*" } ] }
获取STS临时身份凭证SecurityToken、AccessKeySecret和AccessKeyId后,再使用这个STS调用CreateTicket获取票据Ticket,以Java为例:
package com.aliyun.sls20201230; import com.aliyun.sls20201230.models.CreateTicketRequest; import com.aliyun.sls20201230.models.CreateTicketResponse; import com.aliyun.sls20201230.models.CreateTicketResponseBody; import com.aliyun.sts20150401.models.AssumeRoleResponse; import com.aliyun.sts20150401.models.AssumeRoleResponseBody; import com.aliyun.tea.TeaException; import com.aliyun.teaopenapi.models.Config; import java.util.List; public class StsSample { public static void main(String[] args_) throws Exception { List<String> args = java.util.Arrays.asList(args_); String roleArn = "xxxx"; String roleSession = "UserA"; String policy = "{\n" + " \"Version\": \"1\",\n" + " \"Statement\": [\n" + " {\n" + " \"Action\": [\n" + " \"log:Get*\",\n" + " \"log:List*\"\n" + " ],\n" + " \"Resource\": [\n" + " \"acs:log:*:*:project/<指定的Project名称A>/*\",\n" + " \"acs:log:*:*:project/<指定的Project名称A>\"\n" + " ],\n" + " \"Effect\": \"Allow\"\n" + " },\n" + " {\n" + " \"Effect\": \"Allow\",\n" + " \"Action\": \"log:CreateTicket\",\n" + " \"Resource\": \"acs:log:*:*:ticket/*\"\n" + " }\n" + " ]\n" + "}"; Client client = StsSample.createClient(roleArn, roleSession, policy); try { CreateTicketRequest createTicketRequest = new CreateTicketRequest(); CreateTicketResponse response = client.createTicket(createTicketRequest); CreateTicketResponseBody embedded = response.getBody(); System.out.println(embedded.getTicket()); } catch (TeaException e) { e.printStackTrace(); } } public static Client createClient(String roleArn, String roleSession, String policy) throws Exception { com.aliyun.sts20150401.Client client = createStsClient(); com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest(); assumeRoleRequest.setRoleArn(roleArn); assumeRoleRequest.setRoleSessionName(roleSession); assumeRoleRequest.setDurationSeconds(3600L); assumeRoleRequest.setPolicy(policy); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); AssumeRoleResponse assumeRoleResponse = client.assumeRoleWithOptions(assumeRoleRequest, runtime); AssumeRoleResponseBody.AssumeRoleResponseBodyCredentials credentials = assumeRoleResponse.getBody().getCredentials(); Config config = new Config() .setAccessKeyId(credentials.getAccessKeyId()) .setAccessKeySecret(credentials.getAccessKeySecret()) .setSecurityToken(credentials.getSecurityToken()) // Endpoint 请参考 https://api.aliyun.com/product/Sls .setEndpoint("cn-shanghai.log.aliyuncs.com"); return new Client(config); } public static com.aliyun.sts20150401.Client createStsClient() throws Exception { String accessKeyId = "xxx"; String accessKeySecret = "xxx"; com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() .setAccessKeyId(accessKeyId) .setAccessKeySecret(accessKeySecret); // Endpoint 请参考 https://api.aliyun.com/product/Sts config.endpoint = "sts.cn-shanghai.aliyuncs.com"; return new com.aliyun.sts20150401.Client(config); } }
将获取的Ticket拼接在查询页URL中。同时您可隐藏左侧导航栏、顶部导航栏、关闭Tab访问历史记录等(hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true)。关于控制台内嵌参数的具体用法,请参见配置控制台内嵌参数。
https://sls.console.aliyun.com/lognext/project/<Project名称>/logsearch/<日志库名称>?slsRegion=<Project所在地域>&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true&sls_ticket=eyJ***************.eyJ******************.KUT****************
大屏展示
若想把仪表盘制作成大屏长期展示,可以使用免密分享与集成仪表盘功能。
在日志服务控制台创建仪表盘。
创建免密分享,时间选择“长期有效”。
打开分享链接,选择显示器全屏。也可以设置刷新时间,实时刷新数据。
分享协作
仪表盘免密分享功能使得用户可以将仪表盘共享给其他人,无需登录就能查看仪表盘。支持在PC端、钉钉、企业微信或阿里钉查看。也支持分享给其他阿里云账号和RAM用户、钉钉账号、企业微信账号或阿里钉用户。
场景一:团队有多个阿里云账号下,账号A下的RAM-User-A
想要分享仪表盘给账号B下的RAM-User-B
查看。
RAM-User-A
在日志服务控制台创建仪表盘,并创建免密分享。访问限制选择“阿里云账号”,阿里云账号ID填入RAM-User-B
的账号ID。RAM-User-B
登录后打开分享链接查看仪表盘。
场景二:公司使用钉钉或企业微信办公,运维团队在日志服务控制台后创建仪表盘后分享给开发人员查看。
如果需要分享到钉钉账号或企业微信账号,必须使用阿里云主账号和RAM用户绑定钉钉组织或企业微信组织,步骤如下:
相关文档
- 本页导读 (1)
- 前提条件
- 背景信息
- 内嵌页面
- 大屏展示
- 分享协作
- 相关文档