- 文档首页
云服务器
云服务器ECS
最佳实践
实例配置
控制台内嵌--在外部系统中使用ECS Terminal登录实例
实例配置
控制台内嵌--在外部系统中使用ECS Terminal登录实例
控制台内嵌--在外部系统中使用ECS Terminal登录实例
云服务器ECS提供控制台内嵌功能,支持将实例登录页面嵌入到外部系统的自建Web页面中,您可以在外部系统中通过ECS Terminal登录云服务器实例并进行相关操作。本文介绍如何将实例登录页面嵌入到外部系统。
控制台内嵌功能通过安全令牌服务STS实现用户的自定义身份代理,您可以授予IAM用户相关数据和页面的访问权限,以此身份通过STS服务创建临时访问凭证,并获取临时登录Token。您访问内嵌的云服务器控制台页面时,通过URL中封装的临时登录Token进行鉴权,访问过程无需使用IAM用户账密,且登录无感知。涉及的鉴权流程如下:
-
"ecs:DescribeInstanceECSTerminalUrl",
"ecs:DescribeInstanceVncUrl",
"ecs:DescribeInstancesIamRoles",
"ecs:CheckPermissionForKeepLogin"
- 扮演IAM角色的权限:创建IAM角色时,默认的可信实体为云平台账号,您需要修改IAM角色的信任策略,将Principal(信任身份)中的账号配置修改为您在上一步中创建的IAM账号ID,表示该角色可以被指定的IAM用户扮演。
"trn:iam::Account ID:user/Role name"
-
- 调用AssumeRole的权限:为IAM角色授予STSAssumeRoleAccess系统策略后,您才能使用IAM用户的访问密钥调用AssumeRole接口申请临时安全令牌。
-
说明
AssumeRole接口的请求参数DurationSeconds用于指定临时安全令牌的有效期,过期之后需要重新调用此接口获取新的临时安全令牌,并以此请求获取登录Token。 登录Token(SigninToken)是STS服务提供的临时访问Token,外部系统的服务端需要通过登录Token构建ECS服务免密访问链接。
说明
- 通过登录Token完成一次登录后,登录Token随即失效,如果您刷新页面,则需要重新请求获取登录Token。
请求示例:
https://console.volc-embed.com/api/passport/login/getSigninTokenWithSTS
&accessKeyId=<Temporary AK obtained via AssumeRole>
&secretAccessKey=<Temporary SK obtained via AssumeRole>
&sessionToken=<Temporary Token obtained via AssumeRole>
&sessionDuration=<The duration of the login state. After expiration, re-login is required. The unit is seconds, with a value range of 900 ~ 43200.>
ECS云服务器控制台的免密访问链接格式如下所示。
const target_url = https:
以iFrame方式或者直接跳转URL的方式将ECS服务控制台嵌入到第三方自建Web页面中。您可以参考以下示例,在外部系统中嵌入ECS服务控制台页面。其中src或者href的值应指定为步骤三中构建的免密访问链接(target_url)。 注意
为避免因浏览器兼容性导致访问失败,推荐使用Chrome浏览器访问该页面。
<iframe src="target_url" width="1200" height="800" id="tlsIframePage"></iframe>
<a href="target_url" target="_blank">remote connection</a>
如何设置内嵌页面的登录态时长?
通过第三方系统的Web页面免密登录ECS服务控制台页面之后,登录状态会维持一段时间,超期之后应用服务端需要重新获取并刷新Token,以便用户侧重新登录。
内嵌页面的登录态时长由getSigninTokenWithSTS接口的可选参数sessionDuration 指定,单位为秒,取值范围为900 ~ 43200。不传入该参数时,将默认维持AssumeRole接口的DurationSeconds参数设置,而DurationSeconds默认为1 小时。即默认情况下,AssumeRole接口返回的ExpiredTime既是临时安全令牌的有效期截止时间,也是登录状态的结束时间。 const {Service} = require('@volcengine/openapi');
const axios= require("axios");
class StsService extends Service {
defaultVersion: "2018-01-01",
const stsService = new StsService()
stsService.setAccessKeyId('xxx');
stsService.setSecretKey('yy')
stsService.setHost('sts.volcengineapi.com')
const token = await assumeRole({
RoleTrn: 'trn:iam::${accountId}:role/${Role name}',
const { AccessKeyId, SecretAccessKey, SessionToken } = token.Result.Credentials;
"accessKeyId": AccessKeyId,
"secretAccessKey": SecretAccessKey,
"sessionToken": SessionToken
const signinToken = signinResp.data.Result.SigninToken;
最近更新时间:2026.06.25 15:24:37