本文介绍使用临时凭证(STS Token)访问 TOS。
在客户端上传文件到对象存储的使用场景中,可以将AK/SK写入客户端代码,然后进行上传,但出于安全考虑,并不建议将永久AK/SK放到客户端代码中,此时可以使用服务端STS生成临时凭证并设置有效期,然后客户端使用临时凭证进行上传,临时凭证过期便失效。
总体步骤如下:
具体操作步骤:
一、新建角色
首先调用iam:CreateRole接口,并指定TrustPolicy,授权IAM用户可以使用该角色。
本示例使用Postman+OpenAPI来新建角色,您可以使用其他工具或语言完成OpenAPI的请求,Postman使用时,需要将签名算法写到Pre-request Sscript中。
关于OpenAPI调用方法,您可以参考此链接,然后自行构造签名的http请求。
请求方式为HTTP GET请求,必填参数如下:
参数 | 类型 | 描述 |
---|---|---|
Action | String | CreateRole |
Version | String | 2018-01-01 |
TrustPolicyDocument | String | 角色的信任策略 |
RoleName | String | 角色名 |
DisplayName | String | 展示名称 |
Postman 请求参数配置如下:
其中host为: open.volcengineapi.com
TrustPolicyDocument如下:
{ "Statement":[ { "Effect":"Allow", "Action":[ "sts:AssumeRole" ], "Principal":{ "IAM":[ "trn:iam::账户ID:user/wanyix" ] } } ] }
Headers 配置如下:
其中AccessKey/SecretKey 更换为您环境的秘钥对。
创建完成后,控制台显示如下:
二、给上面创建的角色附加策略,以允许改角色操作TOS,本示例附加TOS全部权限,您可以根据需求调整此权限。
附加策略完成后,如下:
三、使用sts:AssumeRole来获取临时凭证。
关于AssumeRole调用,您可以参考此链接。
Postman配置如下:
可以看到成功获取了临时凭证,临时凭证由AccessKeyId、SecretAccessKey、SessionToken构成(此处获取的AccessKeyId对应第四部分示例代码accessKey变量;SecretAccessKey对应第四部分示例代码secretKey变量;SessionToken对应第四部分示例代码sessiontoken变量)。
四、使用临时凭证访问TOS。
获取到临时凭证后,使用TOS SDK来访问TOS,本示例以TOS GO SDK,关于TOS GO SDK,您可以参考此链接,代码如下:
package main import ( "context" "fmt" "github.com/volcengine/ve-tos-golang-sdk/tos" "os" ) var( endpoint = "https://tos-cn-beijing.volces.com" accessKey = "xxxx" secretKey = "xxxx" sessiontoken = "xxxxx" region = "cn-beijing" ) func check(err error, message string) { if err != nil { fmt.Printf("%s err: %s\n", message, err.Error()) os.Exit(1) } } func main(){ staticcredentials := tos.NewStaticCredentials(accessKey,secretKey) staticcredentials.WithSecurityToken(sessiontoken) client, err := tos.NewClient(endpoint, tos.WithRegion(region), tos.WithCredentials(staticcredentials)) check(err,"NewClient") handle, err := client.Bucket("xxxxx") check(err,"Bucket") file,_ := os.Open("/xxxx/xxxxx/testpolicy.json") head,err := handle.PutObject(context.Background(),"xxxxx",file) check(err,"Have error") fmt.Println(head) }
参考文档:
[1] TOS Go SDK
[2] API 调用指南
如果您有其他问题,欢迎您联系火山引擎技术支持服务