前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云 COS 访问方法

腾讯云 COS 访问方法

原创
作者头像
dandelion1990
发布2024-01-02 01:10:38
6970
发布2024-01-02 01:10:38
举报
文章被收录于专栏:dandelion1990的专栏

腾讯云 COS 访问方法

前置条件

申请账号/子账号:访问管理 - 新建用户

申请 API 密钥:访问管理 - API 密钥管理

申请 COS 存储桶(bucket): 控制台 - 对象存储

签名算法

详见腾讯云文档中心 - 请求签名

签名验证工具:COS 签名工具

签名即输入 SecretIdSecretKey、有效时间时间戳,原始请求,得到以下签名内容的过程:

代码语言:plain
复制
q-sign-algorithm=sha1 			// 签名算法
&q-ak=SecretId					// SecretId
&q-sign-time=KeyTime			// 开始/结束时间戳,例如 `1557902800;1557910000`
&q-key-time=KeyTime
&q-header-list=HeaderList		// HTTP 请求头列表,例如 `date;host;x-cos-acl;x-cos-grant-read`
&q-url-param-list=UrlParamList	// URL 参数列表,例如 `delimiter;max-keys;prefix`
&q-signature=Signature			// 签名,具体算法见文档

将上述内容放入 HTTP 请求的 Header,例如 Authorization: q-sign-algorithm=sha1&q-ak=...&q-sign-time=1557989753;1557996953&...&q-signature=...,或者 URL 请求参数中,例如 /exampleobject?q-sign-algorithm=sha1&q-ak=...&q-sign-time=1557989753%3B1557996953&...&q-signature=...,即可访问 COS 资源

如果使用临时密钥,还应将对应 token 传入 Header x-cos-security-token: ...,或者路径参数 &x-cos-security-token=...

后端访问

使用永久密钥访问 COS

如果通过 HTTP API 请求,则按照上述算法传入签名参数请求。或者通过对应语言的 SDK 请求

Python:Python SDK

代码语言:python
代码运行次数:0
复制
!pip install -U cos-python-sdk-v5

from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import os

# 1. 设置用户属性, 包括 secret_id, secret_key, region等。Appid 已在 CosConfig 中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成
secret_id = os.environ['COS_SECRET_ID']
secret_key = os.environ['COS_SECRET_KEY']
token = None               # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入
region = 'ap-beijing'
scheme = 'https'           # 指定使用 http/https 协议来访问 COS,默认为 https,可不填

config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
client = CosS3Client(config)

安全凭证服务(Security Token Service,STS)

腾讯云提供的临时凭证的服务,调用其接口能获得临时访问凭证

域名为 sts.tencentcloudapi.com,可以直接调用云 API,也可以通过 SDK 内调用函数。

通常流程为在客户端调用后端自己的 STS 接口,后端使用永久密钥调用腾讯云 STS 服务得到临时密钥并返回给客户端,客户使用临时密钥访问资源。

../_assets/tencent_cos_requests
../_assets/tencent_cos_requests

SDK 调用,以 Go 为例 Github - qcloud-cos-sts-sdk

代码语言:go
复制
package main

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

func main() {
    appid := os.Getenv("COS_APPID")
	bucket := os.Getenv("COS_BUCKET")
    secret_id := os.Getenv("COS_SECRET_ID")
	secret_key := os.Getenv("COS_SECRET_KEY")
	c := sts.NewClient(
		secret_id,
		secret_key,
		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{
				{
					// 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 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 + "/*",
					},
					// 开始构建生效条件 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",
						// 	},
						// },
					},
				},
			},
		},
	}
    
    // case 1 请求临时密钥
	res, err := c.GetCredential(opt)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v\n", res)
	fmt.Printf("%+v\n", res.Credentials)
}

使用临时密钥访问 COS

使用临时密钥访问 COS

临时密钥是由 安全凭证服务(Security Token Service,STS) 提供的临时访问凭证,由 TmpSecretId、TmpSecretKey 和 Token 三部分组成

代码语言:python
代码运行次数:0
复制
!pip install -U cos-python-sdk-v5

from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import os

# 1. 设置用户属性, 包括 secret_id, secret_key, region等。Appid 已在 CosConfig 中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成
tmp_secret_id = 'TmpSecretId'
tmp_secret_key = 'TmpSecretKey'
token = 'TmpToken'
region = 'ap-beijing'
scheme = 'https'           # 指定使用 http/https 协议来访问 COS,默认为 https,可不填

config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
client = CosS3Client(config)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 腾讯云 COS 访问方法
    • 前置条件
      • 签名算法
        • 后端访问
          • 使用永久密钥访问 COS
          • 安全凭证服务(Security Token Service,STS)
          • 使用临时密钥访问 COS
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档