将LTS日志查询页面嵌入用户自建系统
LTS支持将日志查询界面嵌入到客户自建系统。通过统一身份认证服务IAM的联邦代理机制实现用户自定义身份代理,再将登录链接嵌入至客户自建系统实现无需在华为云官网登录就可在自建系统界面查询LTS日志。
应用场景
- 该功能主要用于用户可以在自建系统免密登录LTS的场景,但是登录华为云LTS控制台还是需要账号密码。
- 用户在外部系统中(例如公司内部运维或运营系统)快速集成云日志服务的查询、分析能力。
- 无需管理众多华为子账户,方便将日志数据进行分享查看。
将LTS日志查询页面嵌入用户自建系统
您需要先在IAM服务为用户自定义创建身份代理并创建委托,然后再将LTS日志查询页面嵌入用户自建系统。
- 使用DomainA(该账号仅供参考,请以实际账号为准)登录统一身份认证服务控制台。
- 在用户组页面创建IAM用户组(用户组名以GroupC为例)并授予全局服务中的Agent Operator权限,该权限仅能切换角色至委托方账号中,访问授权的服务,具体方法请参见:创建用户组并授权。
- 在用户页面创建IAM用户(用户名以UserB为例),并加入GroupC用户组中,具体方法请参见:用户组添加用户。
请确认该IAM用户支持编程访问和管理控制台访问云日志服务。如需修改IAM用户访问方式,请参考:修改IAM用户信息。
- 在左侧导航栏选择“委托”,单击右上方的“创建委托”。
- 在创建委托页面,设置委托参数。
- “委托名称”以“iam_for_lts”为例,“委托类型”必须选择“普通账号”,“委托的账号”填写“DomainA”,“持续时间”选择“永久”,单击“下一步”。
- 设置最小授权范围,选择“LTS ReadOnlyAccess”权限(该权限为LTS云日志服务的只读权限,只能查询LTS服务的数据,不能对LTS服务做设置修改),单击“下一步”。
图1 选择策略
- 选择授权范围方案,勾选“指定区域项目资源”,根据需要勾选对应区域,单击“确定”。
- 使用postman等工具获取X-Subject-LoginToken参数。(以下示例截图仅供参考,请以实际获取的参数为准)
- 通过账号密码获取UserB用户的X-Subject-Token。
接口url:https://Endpoint/v3/auth/tokens,参数选择自定义格式,并输入如下参数,其中name从上而下依次为租户名称、用户名称、租户名称,password为用户密码。
终端节点(Endpoint)即调用API的请求地址,不同服务在不同区域的终端节点不同,您可以从地区和终端节点中查询IAM服务的终端节点。
{ "auth" : { "identity" : { "methods" : [ "password" ], "password" : { "user" : { "domain" : { "name" : "xxxxxxx" }, "name" : "xxxxxx", "password" : "xxxxxx" } } }, "scope" : { "domain" : { "name" : "xxxxxx" } } } }
在返回结果中获取响应头中X-Subject-Token字段。
图2 返回结果
- 根据1获取的用户X-Subject-Token获取临时访问密钥。
在请求header添加X-Auth-Token字段,value为1中获取到的X-Subject-Token。
图3 获取临时访问密钥
接口类型:POST
接口url:https://Endpoint/v3.0/OS-CREDENTIAL/securitytokens,参数选择自定义格式,并输入如下参数,其中具体参数含义分别为:agency_name为委托名称、domain_name为租户名称、duration_seconds为token过期时间(单位秒)、name为用户名。{ "auth" : { "identity" : { "methods" : [ "assume_role" ], "assume_role" : { "agency_name" : "iam_for_lts", "domain_name" : "xxxxxx", "duration_seconds" : 86400, "session_user" : { "name" : "xxxxxx" } } } } }
在返回结果中获取响应体中获取临时访问密钥。
图4 获取临时访问密钥
- 根据2获取的临时访问密钥获取登录X-Subject-LoginToken。
接口类型:POST
接口url:https://Endpoint/v3.0/OS-AUTH/securitytoken/logintokens,参数选择自定义格式,并输入如下参数,其中access、secret、id对应的值分别为2返回的access、secret、securitytoken,duration_seconds为token过期时间,单位为秒。{ "auth" : { "securitytoken" : { "access" : "xxxxxx", "secret" : "xxxxxx", "id" : "xxxxxx", "duration_seconds" : 43200 } } }
在返回结果中获取响应头中的X-Subject-LoginToken字段。
图5 获取X-Subject-LoginToken
- 通过账号密码获取UserB用户的X-Subject-Token。
- 根据3获取的X-Subject-LoginToken构建代理URL,完成免密登录。
代理登录地址的构建规则为:
https://auth.huaweicloud.com/authui/federation/login?service={target_console_url}&logintoken={logintoken}&idp_login_url={enterprise_system_loginURL}
表1 URL参数说明 参数名称
说明
{target_console_url}
云日志服务地址说明的urlencode编码结果。详细请参考云日志服务地址说明。
{logintoken}
为3获取的X-Subject-LoginToken的urlencode编码结果。
{enterprise_system_loginURL}
选填参数,为客户的页面地址的urlencode编码结果,当loginToken验证失效时会跳转到该页面。
- 以上三个参数都需要进行urlencode编码,否则可能导致免密登录失败。
- urlencode编码操作方式:打开浏览器按F12进入开发者模式,选择console(控制台),输入“encodeURIComponent("*")”,*为需要编码的信息,单击“Enter”,查看返回的urlencode编码值。
{target_console_url}的值为LTS前台服务URL地址的urlencode编码,编码前URL如下,具体参考表2。
https://console-intl.huaweicloud.com/lts/?region={regionId}&cfModuleHide=header_sidebar_floatlayer#/lts/logEventsLeftMenu/events?groupId={groupId}&topicId={topicId}&epsId={epsId}&condition={condition}
表2 参数说明 参数名称
说明
{regionId}
区域ID,登录console页面后,在浏览器地址栏中获取。
{groupId}
日志组ID。
{topicId}
日志流ID。
{epsId}
日志流所属的企业项目ID,若无企业项目,值为0。
{condition}
日志查询条件,如name:a and age:12 and addr:xx。
- 非必填
- 单个关键词形式为key:value
- 多个关键词用 and 隔开
- 关键词中不能包含英文分号(;)、英文冒号(:)
- 关键词中含有其他特殊字符如(+、=、?、#、%、&)需转换为十六进制,即%加字符的ASCII码(%2B、%3D、%3F、%23、%25、%26)
- 完成以上步骤,即可实现在自建系统免密登录云日志服务LTS。
使用如下iframe嵌套,其中src的值为7中获得的代理URL。
<body> <iframe src="target_url" width="100%" height="96%" id="ltsIframePage"></iframe> </body>
iframe内嵌功能依赖浏览器允许第三方Cookie,具体设置方法请以实际使用的浏览器为准,例如chrome浏览器参考如下方法:设置->隐私和安全->第三方Cookie->允许第三方Cookie。
云日志服务地址说明
- 云日志服务首页,基础URL为:
https://console-intl.huaweicloud.com/lts/?region={regionId}&cfModuleHide=header_sidebar_floatlayer#/cts/manager/groups
表3 参数说明表 参数名称
必填
类型
描述
regionId
是
String
区域ID,登录console页面后在浏览器的地址栏中获取。
- 日志搜索界面,基础URL为:
https://console-intl.huaweicloud.com/lts/?region={regionId}&cfModuleHide=header_sidebar_floatlayer#/cts/logEventsLeftMenu/events?groupId={groupId}&topicId={topicId}&epsId={epsId}&hideHeader={hideHeader}&fastAnalysisCollapsed={fastAnalysisCollapsed}&hideDashboard={hideDashboard}&hideFeedback={hideFeedback}&isFoldLabel={isFoldLabel}&hideStreamName={hideStreamName}&showK8sFilter={showK8sFilter}&clusterId={clusterId}&hideBarChart={hideBarChart}&hideTabs={hideTabs}&condition={condition}
表4 参数说明表 参数名称
必填
类型
默认值
描述
regionId
是
String
无
区域ID,登录console页面后在浏览器的地址栏中获取。
groupId
是
String
无
日志组ID。
topicId
是
String
无
日志流ID。
epsId
否
String
无
日志流所属的企业项目ID,若无企业项目,值为0。
hideHeader
否
Boolean
false
是否隐藏左侧列表及顶部横向日志流列表,如需隐藏,该参数值为true。
说明:使用iframe内嵌场景才会生效,不使用iframe内嵌场景则不生效。
fastAnalysisCollapsed
否
Boolean
false
是否收起快速分析,如需默认收起,该参数值为true。
hideDashboard
否
Boolean
false
是否隐藏创建仪表盘图标,如需隐藏,该参数值为true。
hideFeedback
否
Boolean
false
是否隐藏评价按钮,如需隐藏,该参数值为true。
isFoldLabel
否
Boolean
true
控制日志表格中的label字段是否换行,如需换行展示,该参数值为true。
hideStreamName
否
Boolean
false
是否隐藏日志流名称,如需隐藏,该参数值为true。
showK8sFilter
否
Boolean
false
是否展示容器日志筛选,容器日志搜索场景下,可选择该参数为true,控制是否展示容器日志筛选条件。
clusterId
否
String
无
集群ID,showK8sFilter参数为true时,该参数必填。
hideBarChart
否
Boolean
false
是否默认收起日志条数统计图,如需默认收起,该参数值为true。
hideTabs
否
Boolean
false
是否隐藏“日志搜索、日志分析、实时日志”标签tabs,默认不隐藏。如需隐藏,该参数值为true。
hideShare
否
Boolean
false
是否隐藏“分享”按钮,默认不隐藏。如需隐藏,该参数值为true。(当前仅华北-北京四局点支持该参数)
condition
否
String
无
日志查询条件,如name:a and age:12 and addr:xx。
- 非必填
- 单个关键词形式为key:value
- 多个关键词用 and 隔开
- 关键词中不能包含英文分号(;)、英文冒号(:)
- 关键词中含有其他特殊字符如(+、=、?、#、%、&)需转换为十六进
- 可视化日志搜索界面,基础URL为:
https://console-intl.huaweicloud.com/lts/?region={regionId}&cfModuleHide=header_sidebar_floatlayer#/cts/logEventsLeftMenu/events?visualization=true&groupId={groupId}&topicId={topicId}&epsId={epsId}&sql={sql}
表5 参数说明表 参数名称
必填
类型
默认值
描述
regionId
是
String
无
区域ID,登录console页面后在浏览器的地址栏中获取。
groupId
是
String
无
日志组ID。
topicId
是
String
无
日志流ID。
epsId
否
String
无
日志流所属的企业项目ID,若无企业项目,值为0。
hideHeader
否
Boolean
false
是否隐藏左侧列表及顶部横向日志流列表,如需隐藏,该参数值为true。
sql
否
String
无
SQL查询语句,如SELECT count (*)。
- 仪表盘界面,基础URL为:
https://console-intl.huaweicloud.com/lts/?region={regionId}&cfModuleHide=header_sidebar_floatlayer#/cts/manager/dashboard?dashboardId={dashboardId}&hideDashboardList={hideDashboardList}&showCurrentdashboardGroup={showCurrentdashboardGroup}&streamId={streamId}&streamDisabled={streamDisabled}&readonly={readonly}&filter=key1:value1,value2;key2:value3,value4&autoFresh={autoFresh}
表6 参数说明表 参数名称
必填
类型
默认值
描述
示例
regionId
是
String
无
区域ID,登录console页面后在浏览器的地址栏中获取。
region=xx-xx-xx
dashboardId
否
String
无
需要展示的仪表盘ID,默认值为""。
使用场景:当用户需要默认展示某仪表盘时,可添加此参数。
dashboardId=xxxxxxxx
hideDashboardList
否
Boolean
false
是否隐藏仪表盘选择下拉列表:默认不隐藏,true表示隐藏。
使用场景:当用户需要隐藏仪表盘下拉列表时,可通过添加该参数且值为true来实现。
hideDashboardList=true
showCurrentdashboardGroup
否
Boolean
false
是否只展示当前仪表盘所在分组/模板:默认值为false。
使用场景:当用户只需要展示当前仪表盘分组/模板的仪表盘时,可通过添加该参数且值为true来实现。
注意:若hideDashboardList参数值为true时,当前参数无效。
showCurrentdashboardGroup=true
streamId
否
String
无
日志流ID:默认值为""。
使用场景:只适用于仪表盘模板。当用户需要默认选中某日志流时,可添加该参数。
streamId=xxxxxx
streamDisabled
否
Boolean
false
日志流下拉框:默认可选择,true标识不可选择
使用场景:只适用于仪表盘模板。当用户需要置灰日志流下拉框时,可添加该参数。
streamDisabled=true
filter
否
String
无
过滤器参数,值为要选中的过滤器的名称及选中项。
key1、key2为过滤器名称,value1、value2为过滤器key1需要选中的值,value3、value4为过滤器key2需要选中的值。多个过滤器按照;分隔,多个选中项按照,分隔。
使用场景:当用户内嵌仪表盘界面需要默认选中某些过滤器的key、value时,可添加该参数。
filter=key1:value1,value2;key2:value3,value4
readonly
否
Boolean
false
是否是只读场景,只读场景下,操作类按钮会被隐藏。例如:新建过滤器、添加/修改/删除仪表盘等。
使用场景:当用户只需要展示仪表盘,不需要操作权限时,可添加该参数。
readonly=true
autoFresh
否
String
无
定时刷新时长,默认值为""。
使用场景:当用户需要指定默认定时刷新时长时,可添加此参数,当前支持的定时刷新时长参数取值为:0m,1m,5m,15m之一,对应:不定时刷新、1分钟定时刷新、5分钟定时刷新、15分钟定时刷新。
autoFresh=1m