You need to enable JavaScript to run this app.
文档中心
全栈可观测平台

全栈可观测平台

复制全文
下载 pdf
自定义看板
自定义看板内嵌
复制全文
下载 pdf
自定义看板内嵌
全栈可观测平台支持将自定义看板内嵌至外部系统的自建 Web 页面,您可以在外部系统中免密登录自定义看板并进行相关操作。本文介绍如何将自定义看板嵌入到外部系统。​
背景信息​
控制台内嵌功能基于安全令牌服务 STS 实现自定义身份代理,您可向 IAM 用户授予相关数据和页面的访问权限,并以该用户身份通过 STS 服务生成临时访问凭证和临时登录 Token。访问内嵌的自定义看板页面时,系统将通过 URL 中封装的临时登录 Token 进行鉴权,实现免密登录。​
操作步骤​
步骤一:创建 IAM 角色并授予权限​
IAM 角色是一种虚拟用户,无永久访问凭证。本步骤基于 账号 为例,其他创建方式请参考 角色管理。后续您可通过 IAM 角色将账号内的特定访问权限授予受信任的用户,该用户获得授权后可扮演该角色,从而访问账号内的资源。​
  1. 通过主账号登录 访问控制 IAM 控制台。​
  1. 在左侧导航栏中选择 角色管理。​
  1. 单击 新建角色,配置 选择信任身份类型 为 账号,选择身份 为 当前账号,然后单击 下一步。​
  • ​alt​​
  1. 配置角色信息,完成后单击 下一步。​
  • ​​​
  1. 选择包含 APMPlusServerReadOnlyAccess 的权限策略,单击 提交。​
说明​
本步骤需为 IAM 角色授予系统默认权限 APMPlusServerReadOnlyAccess 。授权后,该 IAM 角色具备所有 APMPlus 资源和页面的只读访问权限。您也可以根据业务需求,创建自定义权限策略。具体步骤请参见 配置 IAM 权限。​
  • ​​​
  1. 返回角色列表,单击创建完成的角色名称,前往角色详情页查看并记录“角色 TRN”信息。​
  • ​​​
步骤二:创建 IAM 用户​
IAM 用户是一种实体身份类型,拥有确定的身份 ID 和身份凭证、独立的登录密码和访问密钥。该用户用于扮演 步骤一 中创建的 IAM 角色,从而获取临时安全令牌。本步骤以 通过用户名创建 为例,其他创建方式请参考 用户管理。​
  1. 在左侧导航栏中,选择 用户管理 > 用户。​
  1. 单击 新建用户,选择 通过用户名创建。​
  1. 配置 用户名,并在 登录设置 中勾选 编程访问。然后单击 下一步。​
  • ​alt​​
  1. 在 权限设置 步骤,单击 下一步。​
  1. 在 审阅 步骤,确认用户名信息,单击 提交。​
步骤三:授予 IAM 用户扮演 IAM 角色的权限​
完成此授权后,IAM 用户才能扮演 IAM 角色去获取 IAM 角色的临时安全令牌,并访问 IAM 角色权限范围内的资源。​
此环节的授权包括以下两部分,均为必选设置。​
  • 为 IAM 角色设置信任策略。​
  • 创建 IAM 角色时,默认的可信实体为火山引擎账号,您需要修改 IAM 角色的信任策略,将 Principal 中的账号配置修改为您在 步骤二 中创建的 IAM 用户,表示该 IAM 角色可以被指定的 IAM 用户扮演。​
  • 为 IAM 用户授予 STSAssumeRoleAccess 权限策略。​
  • 为 IAM 用户授予 STSAssumeRoleAccess 权限策略后,您才能使用 IAM 用户的访问密钥调用 AssumeRole 接口申请临时安全令牌。​
修改 IAM 角色的信任策略​
  1. 在左侧导航栏中,选择 角色管理。​
  1. 在角色列表中,单击 步骤一 中创建角色的名称,进入角色详情页面。​
  1. 选择 信任关系 页签,单击 编辑信任策略。修改信任策略中的 IAM 字段,并单击 保存。​
  • 将 trn 中默认指定的 root 改为 user/${IAMUserName},例如 user/user-demo。 以下述信任策略为例,该策略表示此 IAM 角色可以被火山引擎账号 21000**** 下的 IAM 用户 user-demo 扮演。​
  • ​
    {​
    "Statement": [​
    {​
    "Effect": "Allow",​
    "Action": [​
    "sts:AssumeRole"​
    ],​
    "Principal": {​
    "IAM": [​
    "trn:iam::21000****:user/user-demo"​
    ]​
    }​
    }​
    ]​
    }​
    ​
为 IAM 用户授予 STSAssumeRoleAccess 权限​
  1. 在左侧导航栏中,选择 用户管理 > 用户。​
  1. 在用户列表中,单击 步骤二 中创建用户的名称,进入用户详情页面。​
  1. 选择 权限 页签,单击 添加权限。​
  1. 在权限列表中,选择STSAssumeRoleAccess权限,单击 提交。​
  • ​alt​​
步骤四:调用 AssumeRole 获取临时安全令牌​
注意​
AssumeRole 接口 不支持通过火山引擎账号调用,请使用 IAM 子用户调用。​
IAM 用户将通过扮演 IAM 角色来调用安全令牌服务的 AssumeRole 接口,并获取 IAM 角色的临时安全令牌。临时安全令牌包括临时访问密钥(AccessKeyId、SecretAccessKey)和临时登录 Token(SessionToken)。​
请求示例如下,其中参数 RoleTrn 应指定为 步骤一 创建的 IAM 角色的 TRN。​
​
GET /?RoleTrn=trn:iam::210000****:role/VMPDemoRole&RoleSessionName=ceshiassume&Action=AssumeRole&Version=2018-01-01 HTTP/1.1​
Accept: application/json​
Content-Type: application/x-www-form-urlencoded​
Host: iam.volcengineapi.com​
X-Date: 20180614T131357Z​
Authorization: HMAC-SHA256 Credential=AKLT4MQ/20180614/cn-north-1/sts/request, SignedHeaders=accept;content-type;host;x-date, Signature=83671ac2**8a5581f​
​
返回结果示例如下,其中AccessKeyId、SecretAccessKey和SessionToken 为临时安全令牌。​
​
{​
"ResponseMetadata": {​
"RequestId": "20241217152800659FA79FAB8752F0992A",​
"Action": "AssumeRole",​
"Version": "2018-01-01",​
"Service": "sts",​
"Region": "cn-beijing"​
},​
"Result": {​
"Credentials": {​
"ExpiredTime": "2024-12-17T16:28:00+08:00",​
"CurrentTime": "2024-12-17T15:28:00+08:00",​
"AccessKeyId": "AKT***",​
"SecretAccessKey": "vqD***",​
"SessionToken": "nCg***"​
},​
"AssumedRoleUser": {​
"Trn": "trn:sts::210***:assumed-role/VMPDemoRole/ceshiassume",​
"AssumedRoleId": "183***:ceshiassume"​
}​
}​
}​
​
步骤五:获取登录 Token​
登录 Token(SigninToken)是 STS 服务提供的临时访问 Token,用于构建可观测平台的免密访问链接。​
调用 STS 的接口 getSigninTokenWithSTS 获取登录 Token,请求中需要传入 步骤四 中获取的临时安全令牌。​
注意​
  • 登录 Token 的有效期默认为 15 分钟且不可更改,请在 Token 到期前完成访问链接的构建与鉴权登录,到期后需要重新请求 getSigninTokenWithSTS 获取新的登录 Token。​
  • 通过登录 Token 完成一次登录后,登录 Token 随即失效,如果您刷新页面,则需要重新请求获取登录 Token。​
请求示例如下:​
​
curl -X POST https://console.volc-embed.com/api/passport/login/getSigninTokenWithSTS \​
-H "Content-Type: application/x-www-form-urlencoded" \​
-d "accessKeyId=AKT***&secretAccessKey=vqD***&sessionToken=nCg***&sessionDuration=900"​
​
请求参数说明如下:​
​
参数​
说明​
accessKeyId​
步骤四 中通过 AssumeRole 获取的临时 AccessKeyId。​
secretAccessKey​
步骤四 中通过 AssumeRole 获取的临时 SecretAccessKey。​
sessionToken​
步骤四 中通过 AssumeRole 获取的临时 SessionToken。​
sessionDuration​
登录态的持续时长,超期后需要重新登录。单位为秒,取值为 900~43200。​
​
返回结果如下,其中 SigninToken 字段即为登录使用的 Token。​
​
{​
"ResponseMetadata": {​
"RequestId": "2024121715500018B2E1BD90E5AEEA2701"​
},​
"Result": {​
"SigninToken": "UTV***"​
}​
}​
​
步骤六:获取自定义看板的 dashboard_id​
  1. 登录 全栈可观测平台控制台,在左侧导航栏选择 自定义看板。​
  1. 单击目标自定义看板名称前往详情页面,浏览器地址栏 URL 中的看板 ID 段即为 dashboard_id。​
​​​
步骤七:构建内嵌 URL​
内嵌 URL 由嵌入域名、嵌入 Path 与嵌入 Query 参数拼接构成,请根据实际业务参数完成拼接。​
嵌入域名​
​
https://console.volc-embed.com​
​
嵌入 Path​
其中参数 dashboard_id 应指定为 步骤六 获取的自定义看板的 dashboard_id。​
​
/observer-dashboard/dashboard/:dashboard_id/embedded​
​
嵌入 Query 参数​
可通过在 URL 中设置 Query 参数以控制内嵌页面的初始状态与筛选行为,参数说明及示例如下:​
​
参数名​
说明​
示例​
var-{变量名}​
筛选项变量的初始值,{变量名} 需与看板配置中的变量名称保持一致。​
?var-clusterId=1234&var-node=1.2.3.4?var-region=cn-beijing​
hide_variables​
需要隐藏的筛选项变量名。隐藏后仅界面不展示,筛选项的初始值仍然生效。​
?hide_variables=ClusterId&hide_variables=Node​
from、to​
初始时间范围。支持毫秒级时间戳与相对时间表达式。​
?from=1720000000000&to=1720003600000?from=now-1h&to=now​
hiddenNavbarInFrame​
控制是否隐藏火山引擎官方顶部导航栏。​
?hiddenNavbarInFrame=true​
skip_missing_value_fallback_variables​
指定需要跳过变量值不存在时自动回退逻辑的变量名。建议与 hide_variables 保持一致,避免变量取值缺失时被系统自动改写。​
?skip_missing_value_fallback_variables=ClusterId&skip_missing_value_fallback_variables=Node​
​
嵌入完整 URL​
内嵌 URL 为免密访问链接。其中 redirectURI 为目标自定义看板的内嵌页面地址,由嵌入域名、嵌入 Path 与嵌入 Query 参数拼接而成:​
​
https://console.volc-embed.com/api/passport/login/loginWithSigninToken?signinToken=${signinToken}&redirectURI=${target_url}​
​
步骤八:在外部系统中嵌套页面​
支持以 iFrame 方式将自定义看板嵌入到第三方自建 Web 页面中。其中 target_url 为 步骤七 中构建的完整 URL:​
​
<body> ​
<iframe src="target_url" width="1200" height="800" id="observeDashboardIframe"></iframe> ​
</body>​
​
结果验证​
使用 步骤七 构建的免密访问链接,可以正确访问目标自定义看板:​
​
https://console.volc-embed.com/api/passport/login/loginWithSigninToken?signinToken=Z21t***dyaz0%3D&redirectURI=https%3A%2F%2Fconsole.volc-embed.com%2Fobserver-dashboard%2Fdashboard%2F197%2Fembedded%3FhiddenNavbarInFrame%3Dtrue​
​
​​​
代码示例​
以下提供完整的接口调用代码示例,包括获取临时安全令牌、获取登录 Token 和构建内嵌 URL。代码可直接复制使用,按实际业务参数替换占位变量即可。​
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: 'vmpiframe'​
})​
​
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/prometheus/region:prometheus+${regionId}/dashboard/embedded?dashboard_id=${DashboardId}&workspace_id=${WorkspaceId}')}`​
console.log(url)​
}​
main();​
​
Python​
​
# coding=utf-8​
from __future__ import absolute_import​
from __future__ import division​
from __future__ import print_function​
​
import os​
import json​
import requests​
​
from urllib.parse import quote​
from volcengine.sts.StsService import StsService​
​
​
if __name__ == "__main__":​
# 初始化客户端,推荐通过环境变量动态获取密钥等身份认证信息,以免 AccessKey 硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455。​
access_key_id = os.environ["VOLCENGINE_ACCESS_KEY_ID"]​
access_key_secret = os.environ["VOLCENGINE_ACCESS_KEY_SECRET"]​
​
sts_service = StsService()​
sts_service.set_ak(access_key_id)​
sts_service.set_sk(access_key_secret)​
​
role_trn = "trn:iam::${yourAccountID}:role/${yourRole}"​
role_session_name = "vmpiframe"​
target_console_url = "https://console.volc-embed.com/prometheus/region:prometheus+${regionId}/dashboard/embedded?dashboard_id=${DashboardId}&workspace_id=${WorkspaceId}"​
​
# 调用 AssumeRole 接口获取临时安全令牌。​
assume_role_params = {​
"DurationSeconds": "900",​
"RoleSessionName": role_session_name,​
"RoleTrn": role_trn​
}​
assume_role_resp = sts_service.assume_role(assume_role_params)​
​
assume_rule_ak = assume_role_resp["Result"]["Credentials"]["AccessKeyId"]​
assume_role_sk = assume_role_resp["Result"]["Credentials"]["SecretAccessKey"]​
session_token = assume_role_resp["Result"]["Credentials"]["SessionToken"]​
​
# 获取登录 Token。​
url_str = "https://console.volc-embed.com/api/passport/login/getSigninTokenWithSTS"​
url_str = url_str + "?accessKeyId=" + quote(assume_rule_ak)​
url_str = url_str + "&secretAccessKey=" + quote(assume_role_sk)​
url_str = url_str + "&sessionToken=" + quote(session_token)​
url_str = url_str + "&sessionDuration=3600"​
​
get_signin_token_with_sts_resp = json.loads(requests.post(url_str).content)​
signin_token = get_signin_token_with_sts_resp["Result"]["SigninToken"]​
​
# 构建免密访问链接。​
result = "https://console.volc-embed.com/api/passport/login/loginWithSigninToken"​
result = result + "?signinToken=" + quote(signin_token)​
result = result + '&redirectURI=' + quote(target_console_url)​
​
print(result)​
​
​
最近更新时间:2026.07.22 16:08:36
这个页面对您有帮助吗?
有用
有用
无用
无用