package
0.0.0-20250331052146-438e09f9e7f9
Repository: https://github.com/tencentyun/qcloud-cos-sts-sdk.git
Documentation: pkg.go.dev

# README

获取 SDK

go get -u github.com/tencentyun/qcloud-cos-sts-sdk

查看示例

请查看 example/sts_demo.go 文件,里面描述了如何调用SDK。

接口说明

NewClient

创建客户端。

func NewClient(secretId, secretKey string, hc *http.Client, opt ...func(*Client)) *Client

参数说明

字段类型描述
secretIdString云 API 密钥 Id
secretKeyString云 API 密钥 key
hc*http.Clientgo http模块Client
optfunc(*Client)Client配置项,可选, 可用于设置 Host 和 Scheme

NewClientWithCredential

通过 CredentialIface 创建客户端。

func NewClientWithCredential(cred CredentialIface, hc *http.Client, opt ...func(*Client)) *Client

参数说明

type CredentialIface interface {
	GetSecretId() string
	GetSecretKey() string
	GetToken() string
}

字段类型描述
credCredentialIface通过用户实现的CredentialIface接口获取密钥,用户需要自行保证接口线程安全
hc*http.Clientgo http模块Client
optfunc(*Client)Client配置项,可选, 可用于设置 Host 和 Scheme

GetCredential

获取临时密钥接口

func (c *Client) GetCredential(opt *CredentialOptions) (*CredentialResult, error)

参数说明

type CredentialPolicyStatement struct {
    Action    []string                       
    Effect    string                          
    Resource  []string                         
    Condition map[string]map[string]interface{} 
}
type CredentialPolicy struct {
    Version   string                      
    Statement []CredentialPolicyStatement 
}
type CredentialOptions struct {
    Policy          *CredentialPolicy
    Region          string
    DurationSeconds int64
}
字段类型描述
opt*CredentialPolicy授权策略
Versionstring策略语法版本,默认为2.0
Action[]string此处是指 COS API,根据需求指定一个或者一序列操作的组合或所有操作(*)
Effectstring有 allow (允许)和 deny (显式拒绝)两种情况
Resource[]string授权操作的具体数据,可以是任意资源、指定路径前缀的资源、指定绝对路径的资源或它们的组合
Conditionmap约束条件,可以不填,具体说明请参见 condition 说明
RegionstringSTS云API的地域,建议与存储桶地域保持一致
DurationSecondsint64指定临时证书的有效期,单位:秒,默认1800秒,最长可设定有效期为7200秒。

返回值说明

type Credentials struct {
    TmpSecretID  string 
    TmpSecretKey string 
    SessionToken string 
}
type CredentialResult struct {
    Credentials *Credentials 
    StartTime   int
    ExpiredTime int          
    Expiration  string                 
    RequestId   string  
}
字段类型描述
Credentials*Credentials临时密钥信息
TmpSecretIDstring临时密钥 Id,可用于计算签名
TmpSecretKeystring临时密钥 Key,可用于计算签名
SessionTokenstring请求时需要用的 token 字符串,最终请求 COS API 时,需要放在 Header 的 x-cos-security-token 字段
StartTimeint密钥的起始时间,是 UNIX 时间戳
ExpiredTimeint密钥的失效时间,是 UNIX 时间戳

使用方法

调用代码如下:

package main

import (
	"fmt"
	"github.com/tencentyun/qcloud-cos-sts-sdk/go"
	"os"
	"time"
)

func main() {
	appid := "1259654469"
	bucket := "test-1259654469"
	region := "ap-guangzhou"
	c := sts.NewClient(
		// 通过环境变量获取密钥, os.Getenv 方法表示获取环境变量
		os.Getenv("SECRETID"),  // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
		os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
		nil,
		// sts.Host("sts.internal.tencentcloudapi.com"), // 设置域名, 默认域名sts.tencentcloudapi.com
		// sts.Scheme("http"),      // 设置协议, 默认为https,公有云sts获取临时密钥不允许走http,特殊场景才需要设置http
	)
	// 策略概述 https://cloud.tencent.com/document/product/436/18023
	opt := &sts.CredentialOptions{
		DurationSeconds: int64(time.Hour.Seconds()),
		Region:          "ap-guangzhou",
		Policy: &sts.CredentialPolicy{
			Statement: []sts.CredentialPolicyStatement{
				{
					Action: []string{
						"name/cos:PostObject",
						"name/cos:PutObject",
					},
					Effect: "allow",
					Resource: []string{
						//这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径,例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)
						//存储桶的命名格式为 BucketName-APPID,此处填写的 bucket 必须为此格式
						"qcs::cos:" + region + ":uid/" + appid + ":" + bucket + "/exampleobject",
					},
					// 开始构建生效条件 condition
					// 关于 condition 的详细设置规则和COS支持的condition类型可以参考https://cloud.tencent.com/document/product/436/71306
					Condition: map[string]map[string]interface{}{
						"ip_equal": map[string]interface{}{
							"qcs:ip": []string{
								"10.217.182.3/24",
								"111.21.33.72/24",
							},
						},
					},
				},
			},
		},
	}
	res, err := c.GetCredential(opt)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v\n", res)
	fmt.Printf("%+v\n", res.Credentials)
}

GetRoleCredential

申请扮演角色临时密钥接口。

func (c *Client) GetRoleCredential(opt *CredentialOptions) (*CredentialResult, error)

参数说明

type CredentialPolicyStatement struct {
    Action    []string                       
    Effect    string                          
    Resource  []string                         
    Condition map[string]map[string]interface{} 
}
type CredentialPolicy struct {
    Version   string                      
    Statement []CredentialPolicyStatement 
}
type CredentialOptions struct {
    Policy          *CredentialPolicy
    Region          string
    DurationSeconds int64
    RoleArn         string
    RoleSessionName string
    ExternalId      string
}
字段类型描述必选
opt*CredentialPolicy授权策略
Versionstring策略语法版本,默认为2.0
Action[]string此处是指 COS API,根据需求指定一个或者一序列操作的组合或所有操作(*)
Effectstring有 allow (允许)和 deny (显式拒绝)两种情况
Resource[]string授权操作的具体数据,可以是任意资源、指定路径前缀的资源、指定绝对路径的资源或它们的组合
Conditionmap约束条件,可以不填,具体说明请参见 condition 说明
RegionstringSTS云API的地域,建议与存储桶地域保持一致
DurationSecondsint64指定临时证书的有效期,单位:秒,默认1800秒,最长可设定有效期为7200秒。
RoleArnString角色的资源描述,可在访问管理,点击角色名获取。 普通角色: qcs::cam::uin/12345678:role/4611686018427397919、qcs::cam::uin/12345678:roleName/testRoleName 服务角色: qcs::cam::uin/12345678:role/tencentcloudServiceRole/4611686018427397920、qcs::cam::uin/12345678:role/tencentcloudServiceRoleName/testServiceRoleName
RoleSessionNameString临时会话名称,由用户自定义名称。 长度在2到128之间,可包含大小写字符,数字以及特殊字符:=,.@-。 正则为:[\w+=,.@-]*
ExternalIdString角色外部ID,可在访问管理,点击角色名获取。 长度在2到128之间,可包含大小写字符,数字以及特殊字符:=,.@:/-。 正则为:[\w+=,.@:/-]*

返回值说明

type Credentials struct {
    TmpSecretID  string 
    TmpSecretKey string 
    SessionToken string 
}
type CredentialResult struct {
    Credentials *Credentials 
    StartTime   int
    ExpiredTime int          
    Expiration  string                 
    RequestId   string  
}
字段类型描述
Credentials*Credentials临时密钥信息
TmpSecretIDstring临时密钥 Id,可用于计算签名
TmpSecretKeystring临时密钥 Key,可用于计算签名
SessionTokenstring请求时需要用的 token 字符串,最终请求 COS API 时,需要放在 Header 的 x-cos-security-token 字段
StartTimeint密钥的起始时间,是 UNIX 时间戳
ExpiredTimeint密钥的失效时间,是 UNIX 时间戳

使用方法

调用代码如下:

package main

import (
        "fmt"
        "github.com/tencentyun/qcloud-cos-sts-sdk/go"
        "os"
        "time"
)

func main() {
        appid := "1259654469"
        bucket := "test-1259654469"
        c := sts.NewClient(
                // 通过环境变量获取密钥, os.Getenv 方法表示获取环境变量
                os.Getenv("SECRETID"),  // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
                os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
                nil,
                // sts.Host("sts.internal.tencentcloudapi.com"), // 设置域名, 默认域名sts.tencentcloudapi.com
                // sts.Scheme("http"),      // 设置协议, 默认为https,公有云sts获取临时密钥不允许走http,特殊场景才需要设置http
        )
        // 发起角色授权临时密钥请求, policy选填
        // 策略概述 https://cloud.tencent.com/document/product/436/18023
        opt := &sts.CredentialOptions{
                DurationSeconds: int64(time.Hour.Seconds()),
                Region:          "ap-guangzhou",
                Policy: &sts.CredentialPolicy{
                        Statement: []sts.CredentialPolicyStatement{
                                {
                                        // 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
                                        Action: []string{
                                                // 简单上传
                                                "name/cos:PostObject",
                                                "name/cos:PutObject",
                                                // 分片上传
                                                "name/cos:InitiateMultipartUpload",
                                                "name/cos:ListMultipartUploads",
                                                "name/cos:ListParts",
                                                "name/cos:UploadPart",
                                                "name/cos:CompleteMultipartUpload",
                                        },
                                        Effect: "allow",
                                        Resource: []string{
                                                //这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径,例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)
                                                //存储桶的命名格式为 BucketName-APPID,此处填写的 bucket 必须为此格式
                                                "qcs::cos:ap-guangzhou:uid/" + appid + ":" + bucket + "/exampleobject",
                                        },
                                        // 开始构建生效条件 condition
                                        // 关于 condition 的详细设置规则和COS支持的condition类型可以参考https://cloud.tencent.com/document/product/436/71306
                                        Condition: map[string]map[string]interface{}{
                                            "ip_equal": map[string]interface{}{
                                                "qcs:ip": []string{
                                                    "10.217.182.3/24",
                                                    "111.21.33.72/24",
                                                },
                                            },
                                        },
                                },
                        },
                },
                RoleArn:         "qcs::cam::uin/100010805041:roleName/COSBatch_QCSRole",
                RoleSessionName: "test",
        }

        res, err := c.GetRoleCredential(opt)
        if err != nil {
                panic(err)
        }
        fmt.Printf("%+v\n", res)
        fmt.Printf("%+v\n", res.Credentials)
}

AssumeRoleWithWebIdentity

申请OIDC角色临时密钥申请OIDC角色临时密钥。

func (c *Client) AssumeRoleWithWebIdentity(opt *WebIdentityOptions) (*CredentialResult, error)

参数说明

type WebIdentityOptions struct {
	Region           string
	ProviderId       string
	WebIdentityToken string
	RoleArn          string
	RoleSessionName  string
	DurationSeconds  int64
}
字段类型描述必选
opt*WebIdentityOptions授权策略
RegionstringSTS云API的地域,建议与存储桶地域保持一致
ProviderIdstring身份提供商名称
WebIdentityTokenstringIdP签发的OIDC令牌
RoleArnString角色访问描述名
RoleSessionNamestring会话名称
DurationSecondsint64指定临时证书的有效期,单位:秒,默认7200秒,最长可设定有效期为43200秒。

返回值说明

type Credentials struct {
    TmpSecretID  string
    TmpSecretKey string
    SessionToken string
}
type CredentialResult struct {
    Credentials *Credentials
    StartTime   int
    ExpiredTime int
    Expiration  string
    RequestId   string
}
字段类型描述
Credentials*Credentials临时密钥信息
TmpSecretIDstring临时密钥 Id,可用于计算签名
TmpSecretKeystring临时密钥 Key,可用于计算签名
SessionTokenstring请求时需要用的 token 字符串,最终请求 COS API 时,需要放在 Header 的 x-cos-security-token 字段
StartTimeint密钥的起始时间,是 UNIX 时间戳
ExpiredTimeint密钥的失效时间,是 UNIX 时间戳

使用方法

调用代码如下:

package main

import (
        "fmt"
        "github.com/tencentyun/qcloud-cos-sts-sdk/go"
        "os"
        "time"
)

func main() {
        appid := "1259654469"
        bucket := "test-1259654469"
        c := sts.NewClient(
                // 通过环境变量获取密钥, os.Getenv 方法表示获取环境变量
                os.Getenv("SECRETID"),  // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
                os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
                nil,
                // sts.Host("sts.internal.tencentcloudapi.com"), // 设置域名, 默认域名sts.tencentcloudapi.com
                // sts.Scheme("http"),      // 设置协议, 默认为https,公有云sts获取临时密钥不允许走http,特殊场景才需要设置http
        )
        opt := &sts.WebIdentityOptions{
            ProviderId:       "your ProviderId",
            WebIdentityToken: "your WebIdentityToken",
            RoleArn:          "your RoleArn",
            RoleSessionName:  "test",
        }
        res, err := c.AssumeRoleWithWebIdentity(wopt)
        if err != nil {
            panic(err)
        }
        fmt.Printf("%+v\n", res)
        fmt.Printf("%+v\n", res.Credentials)
}

# Packages

No description provided by the author

# Functions

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Interfaces

No description provided by the author

# Type aliases

No description provided by the author