出于信息安全的考虑,建议您通过 STS 服务来申请临时访问凭证,使指定 IAM 用户在凭证有效期内访问权限范围内的 veImageX 资源。临时访问凭证包括临时访问密钥(AccessKeyId 和 AccessKeySecret)和安全令牌(SecurityToken),以下为您介绍临时访问凭证的适用场景和发起请求的操作步骤。
主要用于授权第三方临时访问 veImageX,通常是在移动 APP 或 PC 客户端上传文件至 veImageX 的场景,为了保障您的信息安全,使上传资源免受到污染。建议不要将火山引擎主账号和 IAM 用户访问密钥保存在客户端代码中,您可以由服务端签出临时凭证,并下发至客户端,为您的第三方应用或 IAM 子账号签发临时访问凭证。该方式的优势如下所示:

STSAssumeRoleAccess 权限基本信息设置:
| | | \
| 配置项 | 说明 |
|---|---|
| 用户名 | 您可自定义用户名,以 veImageXSTS 为例。 |
| 编程访问 | 勾选开启。 |

权限设置:搜索 STSAssumeRoleAccess 权限策略并勾选添加,然后单击下一步。

审阅:检查信息是否正确后,单击提交按钮,完成用户创建配置。
创建一个角色,并授予其必需的权限,子账号通过服务端角色扮演接口获取到角色所属账号的临时安全令牌,从而以角色所属账号的身份来访问资源。
选择信任身份:
| | | \
| 配置项 | 说明 |
|---|---|
| 选择信任身份类型 | 选择账号。 |
| 选择身份 | 选择当前账号。 |

配置角色信息:自定义角色名,此处以 veImageXSTS 为例。

添加权限:搜索并添加 ImageXDefaultAccess 策略,作用范围选择全局。

root替换为user/{IAMUserName},其中IAMUserName为步骤一中创建的用户名(本文以 veImageXSTS 为例)。该策略表示此 IAM 角色可以被火山引擎账号(AccountID = 2100*****)下的 IAM 用户 veImageXSTS 扮演。
请以创建的 IAM 子用户调用 AssumeRole 生成临时访问凭证(包含 AccessKeyId、SecretAccessKey 和 SessionToken),从而以角色所属账号的身份来访问云资源。
您也可以通过 AssumeRole SDK 获取临时访问凭证,如 Python SDK、Java SDK。
请求示例
GET /?RoleTrn=trn:iam::2100******:role/veImageXSTS&RoleSessionName=imagex_session&Action=AssumeRole&Version=2018-01-01 HTTP/1.1
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Host: open.volcengineapi.com
X-Date: 发请求时指定
Authorization: 待签算(此处用IAM用户veImageXSTS的密钥)
返回示例
{
"ResponseMetadata": {
"RequestId": "20210412725429273501625**",
"Action": "AssumeRole",
"Version": "2018-01-01",
"Service": "sts"
},
"Result": {
"Credentials": {
"CurrentTime": "2023-04-03T11:30:00+08:00",
"ExpiredTime": "2023-04-03T12:30:00+08:00",
"AccessKeyId": "AKTP8shJDSYGbi8*****",
"SecretAccessKey": "TVRUSGNCLhdsgTSDCXPJDJSAJNNNCbE1E****",
"SessionToken": "STSeyJBY2NvdW50SWklkZW50aXR5VHlwZSI6NCwiSWRlbnRpdHlJZCI6MzAyMTcsIkNoYW5uZWwiOiJyZXNvdXJjZSIsIkFjY2Vzc0tleUlkIjoiQUtUUE9EZzBNelZrWlRNMVlqQXlOR05sWkdGbU0yVTNaVEl6T0RnMlpEY3hNRGciLCJTaWduZWRTZWNyZXRBY2Nlc3NLZXkiOiJHSHRuc2Q1b3BOOThUeUNrckVuMVAxTDd1ZzBXczZFMytzTktDMDJQT01lNzFMOUloNzhYaDB5VXE4Ni9JMW8reEZxTmtkK01tVUR0cjRHR0NodXJQdz09IiwiRXhwaXJlZFRpbWUiOjE2MTgxOTk4MjksIlBvbGljeVN0cmluZyI6IiIsIlNpZ25hdHVyZSI6IjdiZTEzNTU1MDM5NzcyM2VkMDQxYmVkNTIyNzU4YmMyNjQ3YzRmNzZiNmRjYTViNzVhZDUyOTMwYTg1NjE5ZGEiLCJTZXNzaW9uTmFtZSI6ImNlc2hpYXNzdW1****"
},
"AssumedRoleUser": {
"Trn": "trn:sts::2100******:assumed-role/veImageXSTS/imagex_session",
"AssumedRoleId": "**:imagex_session"
}
}
}
在完成相关服务配置后,您可通过服务端 SDK 或上传 SDK 向 veImageX 上传任意合法资源。以下为 GO 的 Demo 示例:
:::tip
package main
import (
"fmt"
"os"
"github.com/volcengine/volc-sdk-golang/base"
"github.com/volcengine/volc-sdk-golang/service/imagex"
)
// 上传文件
func main() {
// 默认 ImageX 实例为 `cn-north-1`,如果您想使用其他区域的实例,请使用 `imagex.NewInstanceWithRegion(区域名)` 显式指定区域
instance := imagex.DefaultInstance
instance.SetCredential(base.Credentials{
//使用 Step 3 获取的临时访问凭证
AccessKeyID: "AKTP8shJDSYGbi8*****",
SecretAccessKey: "TVRUSGNCLhdsgTSDCXPJDJSAJNNNCbE1E****",
SessionToken: "STSeyJBY2NvdW50SWklkZW50aXR5VHlwZSI6NCwiSWRlbnRpdHlJZCI6MzAyMTcsIkNoYW5uZWwiOiJyZXNvdXJjZSIsIkFjY2Vzc0tleUlkIjoiQUtUUE9EZzBNelZrWlRNMVlqQXlOR05sWkdGbU0yVTNaVEl6T0RnMlpEY3hNRGciLCJTaWduZWRTZWNyZXRBY2Nlc3NLZXkiOiJHSHRuc2Q1b3BOOThUeUNrckVuMVAxTDd1ZzBXczZFMytzTktDMDJQT01lNzFMOUloNzhYaDB5VXE4Ni9JMW8reEZxTmtkK01tVUR0cjRHR0NodXJQdz09IiwiRXhwaXJlZFRpbWUiOjE2MTgxOTk4MjksIlBvbGljeVN0cmluZyI6IiIsIlNpZ25hdHVyZSI6IjdiZTEzNTU1MDM5NzcyM2VkMDQxYmVkNTIyNzU4YmMyNjQ3YzRmNzZiNmRjYTViNzVhZDUyOTMwYTg1NjE5ZGEiLCJTZXNzaW9uTmFtZSI6ImNlc2hpYXNzdW1****",
})
params := &imagex.ApplyUploadImageParam{
ServiceId: "service id", // 服务 ID
// StoreKeys: []string{"example.jpg"}, // 指定文件存储名
}
// 读取文件
dat, err := os.ReadFile("image file")
if err != nil {
fmt.Printf("read file from %s error %v", "", err)
os.Exit(-1)
}
// 上传文件
resp, err := instance.UploadImages(params, [][]byte{dat})
if err != nil {
fmt.Printf("error %v", err)
} else {
fmt.Printf("success %v", resp)
}
}
其他语言 SDK 的说明文档如下: