You need to enable JavaScript to run this app.
导航

控制台内嵌

最近更新时间2023.12.08 18:07:39

首次发布时间2022.11.25 21:31:15

日志服务提供控制台内嵌功能,即支持将查询分析页面嵌入到外部系统的自建 Web 页面中,用户可以在外部系统中免密登录日志服务控制台的部分页面。

背景信息

日志服务支持通过控制台内嵌功能,将查询分析页面嵌入到外部系统的自建 Web 页面中。用户访问该页面时,无需跳转到火山引擎登录页面,可以直接在外部系统中免密登录,直接查询分析日志数据。
控制台内嵌功能通过 IAM 服务的 STS 实现用户的自定义身份代理,您可以授予 IAM 用户相关的数据和页面的访问权限、以此身份通过 STS 服务创建临时的访问凭证,并获取临时登录 Token。用户访问内嵌的日志服务控制台页面时,通过 URL 中封装的临时登录 Token 进行鉴权,访问过程无需使用 IAM 用户账密,且登录无感知。
您访问内嵌日志服务控制台的自建 Web 页面时,涉及的鉴权流程如下:
图片

操作步骤

1 获取临时安全令牌

登录自建的外部系统时,您需要通过外部系统的服务端访问火山引擎令牌服务(STS),获取 STS 下发的临时安全令牌。访问 STS 服务时,外部系统服务端必须以 IAM 用户身份发送 AssumeRole 请求,扮演指定的 IAM 角色,获取临时安全令牌。该临时安全令牌可用于访问该 IAM 角色权限范围内的云资源。
创建 IAM 角色、授权及获取临时安全令牌的操作流程如下,您也可以参考通过 STS 访问日志服务完成相关步骤。

  1. 创建 IAM 角色。
  2. 为 IAM 角色授予日志服务权限。
    在内嵌日志服务控制台页面的场景下,您可以为 IAM 角色授予系统默认权限 TLSReadOnlyAccess,表示该角色具备所有日志服务资源和页面的查看权限。您也可以根据日志服务可授权的操作与资源列表,创建自定义的授权策略。详细说明请参考可授权的操作可授权的资源
  3. 创建 IAM 用户。
  4. 为 IAM 用户授予扮演 IAM 角色的权限。
    1. 为 IAM 角色设置信任策略,即允许指定的 IAM 用户扮演该角色。
    2. 为 IAM 用户授予 STSAssumeRoleAccess 权限策略。
  5. 调用 AssumeRole 接口获取临时安全令牌。

    说明

    AssumeRole 接口的请求参数 DurationSeconds 用于指定临时安全令牌的有效期,过期之后需要重新调用此接口获取新的临时安全令牌,并以此请求获取登录 Token。

2 获取登录 Token

登录 Token(SigninToken)是 STS 服务提供的临时访问 Token,外部系统的服务端需要通过登录 Token 构建日志服务免密访问链接。
调用 STS 的接口 getSigninTokenWithSTS 获取登录 Token。在请求中需要指定临时 AK、SK 和 sessionToken,均为步骤 1 中获取的临时安全令牌。

说明

  • 登录 Token 的有效期默认为 15 分钟且不可更改,请在 Token 到期前完成访问链接的构建与鉴权登录,到期后需要重新请求 getSigninTokenWithSTS 获取新的登录 Token。
  • 通过登录 Token 完成一次登录后,登录 Token 随即失效,如果用户刷新页面,则需要重新请求获取登录 Token。

请求示例:

https://console.volc-embed.com/api/passport/login/getSigninTokenWithSTS
                    &accessKeyId=<通过AssumeRole获取的临时AK>
                    &secretAccessKey=<通过AssumeRole获取的临时Secret>
                    &sessionToken=<通过AssumeRole获取的临时Token>
                    &sessionDuration=<登录态的持续时长,超期后需要重新登录。单位秒 取值900~43200>

3 构建免密访问链接

日志服务控制台的免密访问链接的构建规则如下。
免密访问链接格式:

https://console.volc-embed.com/api/passport/login/loginWithSigninToken?signinToken=${signinToken}&redirectURI=${target_console_url}

链接中的参数说明如下:

参数

说明

signinToken

步骤 2 中获取的登录 Token。

redirectURI

被内嵌的日志服务页面访问链接,例如查询分析页面。
支持通过各种 UI 参数与第三方自建 Web 页面进行融合展示,详细说明请参考设置控制台内嵌参数

说明

该链接需经过 encodeURL 转码。

其中,支持被内嵌的日志服务页面及对应链接如下。
查询分析页面:

https://console.volc-embed.com/tls/region:tls+${regionId}/project/${projectId}/search?

4 在外部系统中嵌套页面

以 iFrame 方式将日志服务控制台嵌入到第三方自建 Web 页面中。您可以参考以下示例,在外部系统中嵌入日志服务控制台页面。其中 src 的值应指定为步骤 3 中构建的免密访问链接。

<body>   
    <iframe src="target_url" width="1200" height="800" id="tlsIframePage"></iframe> 
</body>

说明

为避免因浏览器兼容性导致访问失败,推荐使用 Chrome 浏览器访问该页面。

常见问题

如何设置内嵌页面的登录态时长

用户通过第三方系统的 Web 页面免密登录日志服务控制台页面之后,登录状态会维持一段时间,超期之后应用服务端需要重新获取并刷新 Token,以便用户侧重新登录。
内嵌页面的登录态时长由 getSigninTokenWithSTS 接口参数 sessionDuration 指定。调用接口 getSigninTokenWithSTS 时,通过请求参数 sessionDuration 设置内嵌页面的登录态时长。 sessionDuration 单位为秒,取值范围为 900~43200。
内嵌页面的登录态时长(sessionDuration)默认维持 AssumeRole 接口的 DurationSeconds 参数设置,而 DurationSeconds 默认为 1 小时。即默认情况下,AssumeRole 接口返回的 ExpiredTime 是既是临时安全令牌的有效期截止时间,也是登录状态的结束时间。

示例代码

Node.js

const {Service} = require('@volcengine/openapi');
const axios= require("axios");

class StsService extends Service {
    constructor(props) {
        super({
            ...props,
            defaultVersion: "2018-01-01",
            serviceName: "sts",
        });
    }
}

async function main() {
    const  stsService = new StsService()
    stsService.setAccessKeyId('xxx');
    stsService.setSecretKey('yy')
    stsService.setHost('sts.volcengineapi.com')

    // 调用assumeRole获取临时安全令牌
    const assumeRole = stsService.createAPI('AssumeRole', {
        method: 'GET',
    });

    const  token = await assumeRole({
        RoleTrn: 'trn:iam::${accountId}:role/${角色名}',
        RoleSessionName: 'tlsiframe'
    })

    const { AccessKeyId, SecretAccessKey, SessionToken } = token.Result.Credentials;


    // 根据临时安全令牌获取登录token
    const  signinResp = await axios.post('https://console.volc-embed.com/api/passport/login/getSigninTokenWithSTS', {
        "accessKeyId": AccessKeyId,
        "secretAccessKey": SecretAccessKey,
        "sessionToken": SessionToken
    })

    const  signinToken = signinResp.data.Result.SigninToken;

    // 根据登录signinToken生成免登录连接
    const url = `https://console.volc-embed.com/api/passport/login/loginWithSigninToken?signinToken=${signinToken}&redirectURI=${encodeURIComponent('https://console.volc-embed.com/tls/region:tls+cn-beijing/project/${projectId}/search')}`
    console.log(url)
}
main();

Go

tls_sts_demo.go
2.13KB