You need to enable JavaScript to run this app.
文档中心
云服务器

云服务器

复制全文
下载 pdf
实例配置
控制台内嵌--在外部系统中使用ECS Terminal登录实例
复制全文
下载 pdf
控制台内嵌--在外部系统中使用ECS Terminal登录实例
云服务器ECS提供控制台内嵌功能,支持将实例登录页面嵌入到外部系统的自建Web页面中,您可以在外部系统中通过ECS Terminal登录云服务器实例并进行相关操作。本文介绍如何将实例登录页面嵌入到外部系统。​
背景信息​
控制台内嵌功能通过安全令牌服务STS实现用户的自定义身份代理,您可以授予IAM用户相关数据和页面的访问权限,以此身份通过STS服务创建临时访问凭证,并获取临时登录Token。您访问内嵌的云服务器控制台页面时,通过URL中封装的临时登录Token进行鉴权,访问过程无需使用IAM用户账密,且登录无感知。涉及的鉴权流程如下:​
​​​
操作步骤​
步骤一:获取临时安全令牌​
  1. 创建IAM角色并授权。​
  • ​​​
  1. 为IAM角色授予ECS服务权限。根据业务需求,为IAM角色授予的权限策略如下所示。如何新建权限策略并授权。​
  • ​
    {​
    "Statement": [​
    {​
    "Effect": "Allow",​
    "Action": [​
    "ecs:DescribeInstanceECSTerminalUrl",​
    "ecs:DescribeInstanceVncUrl",​
    "ecs:DescribeInstancesIamRoles",​
    "ecs:CheckPermissionForKeepLogin"​
    ],​
    "Resource": [​
    "*"​
    ]​
    }​
    ]​
    }​
    ​
  1. 创建IAM用户并授权。​
  1. 创建IAM用户,用于扮演IAM角色,便于后续获取临时安全令牌。​
  1. 为IAM用户添加以下权限:​
  • 扮演IAM角色的权限:创建IAM角色时,默认的可信实体为云平台账号,您需要修改IAM角色的信任策略,将Principal(信任身份)中的账号配置修改为您在上一步中创建的IAM账号ID,表示该角色可以被指定的IAM用户扮演。​
  • ​
    {​
    "Statement": [​
    {​
    "Effect": "Allow",​
    "Action": [​
    "sts:AssumeRole"​
    ],​
    "Principal": {​
    "IAM": [​
    "trn:iam::Account ID:user/Role name"​
    ]​
    }​
    }​
    ]​
    }​
    ​
  • ​​​
  • 调用AssumeRole的权限:为IAM角色授予STSAssumeRoleAccess系统策略后,您才能使用IAM用户的访问密钥调用AssumeRole接口申请临时安全令牌。​
  • ​​​
  1. 调用AssumeRole接口获取临时安全令牌。​
说明​
AssumeRole接口的请求参数DurationSeconds用于指定临时安全令牌的有效期,过期之后需要重新调用此接口获取新的临时安全令牌,并以此请求获取登录Token。​
步骤二:获取登录Token​
调用STS(临时安全凭证)的getSigninTokenWithSTS接口获取登录Token,调用时需要指定accessKeyId、secretAccessKey 和sessionToken,均为步骤一中获取的临时安全令牌。​
登录Token(SigninToken)是STS服务提供的临时访问Token,外部系统的服务端需要通过登录Token构建ECS服务免密访问链接。​
说明​
  • 登录Token的有效期默认为15分钟且不可更改,请在Token到期前完成访问链接的构建与鉴权登录,到期后需要重新请求getSigninTokenWithSTS获取新的登录Token。​
  • 通过登录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://console.volc-embed.com/api/passport/login/loginWithSigninToken?signinToken=${signinToken}&redirectURI=${target_console_url}​
​
​
参数​
说明​
signinToken​
步骤二中获取的登录Token。​
redirectURI​
支持内嵌的ECS实例登录页面的URL,如下所示: ​
​
https://iaas-api.console.volc-embed.com/ecs/connect/xterm/?Id=${Instance ID}&Region=${Region}&Name=${Instance name}&Ip=${Instance private IP}&Env=volc&lang=zh​
​
参数介绍:​
  • xterm:仅支持非Windows实例使用。如果是Windows实例,请将xterm替换为guac。​
注意​
在使用如上redirectURI链接前,需先使用encodeURL转码链接。即您需要先根据实际值替换链接中的xterm、Id、Region、Name、IP等参数,再通过encodeURL转码链接。​
转码后的链接示例如下:​
https://iaas-api.console.volc-embed.com/ecs/connect/xterm/?Id=i-xxxxxxxxxxx&Region=cn-beijing&Name=terminal%E6%B5%8B%E8%AF%95&Ip=192.168.**.**&Env=volc&lang=zh​
​
步骤四:在外部系统中嵌套页面​
以iFrame方式或者直接跳转URL的方式将ECS服务控制台嵌入到第三方自建Web页面中。您可以参考以下示例,在外部系统中嵌入ECS服务控制台页面。其中src或者href的值应指定为步骤三中构建的免密访问链接(target_url)。​
注意​
为避免因浏览器兼容性导致访问失败,推荐使用Chrome浏览器访问该页面。​
  • iFrame方式:​
  • ​
    <body> ​
    <iframe src="target_url" width="1200" height="800" id="tlsIframePage"></iframe> ​
    </body>​
    ​
  • URL方式:​
  • ​
    <body> ​
    <a href="target_url" target="_blank">remote connection</a>​
    </body>​
    ​
常见问题​
如何设置内嵌页面的登录态时长?​
通过第三方系统的Web页面免密登录ECS服务控制台页面之后,登录状态会维持一段时间,超期之后应用服务端需要重新获取并刷新Token,以便用户侧重新登录。​
内嵌页面的登录态时长由getSigninTokenWithSTS接口的可选参数sessionDuration 指定,单位为秒,取值范围为900 ~ 43200。不传入该参数时,将默认维持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/${Role name}',​
RoleSessionName: 'test'​
})​
​
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://iaas-api.console.volc-embed.com/ecs/connect/xterm/?Id=${实例ID}&Region=${Region}&Name=${实例名称}&Ip=${实例私网 IP}&Env=volc&lang=zh`)}`​
console.log(url)​
}​
main();​
​
​
​
​
最近更新时间:2026.06.25 15:24:37
这个页面对您有帮助吗?
有用
有用
无用
无用