控制台指南

最佳实践

开发者指南

API 文档

SDK 文档

存储桶策略

最近更新时间:2021-12-14 17:02:30

简介

本文档提供关于存储桶策略的 API 概览以及 SDK 示例代码。

API 操作名 操作描述
PUT Bucket policy 设置存储桶策略 设置指定存储桶的权限策略
GET Bucket policy 查询存储桶策略 查询指定存储桶的权限策略
DELETE Bucket policy 删除存储桶策略 删除指定存储桶的权限策略

设置存储桶策略

功能说明

PUT Bucket policy 请求可以向 Bucket 写入权限策略,当存储桶已存在权限策略时,该请求上传的策略将覆盖原有的权限策略。

方法原型

func (s *BucketService) PutPolicy(ctx context.Context, opt *BucketPutPolicyOptions) (*Response, error)

请求示例

package main

import (
    "context"
    "github.com/tencentyun/cos-go-sdk-v5"
    "net/http"
    "net/url"
    "os"
)

func main() {
    // 存储桶名称,由bucketname-appid 组成,appid必须填入,可以在COS控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucket
    // 替换为用户的 region,存储桶region可以在COS控制台“存储桶概览”查看 https://console.cloud.tencent.com/ ,关于地域的详情见 https://cloud.tencent.com/document/product/436/6224 。
    u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
    b := &cos.BaseURL{BucketURL: u}
    client := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            // 通过环境变量获取密钥
            // 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
            SecretID: os.Getenv("SECRETID"),
            // 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
            SecretKey: os.Getenv("SECRETKEY"),
        },
    })
    opt := &cos.BucketPutPolicyOptions{
        Version: "2.0",
        Statement: []cos.BucketStatement{
            {
                Principal: map[string][]string{
                    "qcs": []string{
                        "qcs::cam::uin/100000000001:uin/100000000011", //替换成您想授予权限的账户uin
                    },
                },
                Action: []string{
                    "name/cos:GetObject",
                },
                Effect: "allow",
                Resource: []string{
                    //这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径,例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)
                    "qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/exampleobject",
                },
                Condition: map[string]map[string]interface{}{
                    "ip_not_equal": map[string]interface{}{
                        "qcs:ip": []string{
                            "192.168.1.1",
                        },
                    },
                },
            },
        },
    }
    _, err := client.Bucket.PutPolicy(context.Background(), opt)
    if err != nil {
        // ERROR
    }
}

参数说明

type BucketStatement struct {
    Principal map[string][]string
    Action    []string
    Effect    string
    Resource  []string
    Condition map[string]map[string]interface{}
}

type BucketPutPolicyOptions struct {
    Statement []BucketStatement
    Version   string
    Principal map[string][]string
}

参数名称 描述 类型
Statement 描述一条或多条权限的详细信息 Struct
Version 策略语法版本 Struct
Principal 描述策略授权的实体,详情请参见 访问策略语言概述 String
Action 此处是指 COS API,根据需求指定一个或者一序列操作的组合或所有操作(*),例如 action 为 name/cos:GetService,请注意区分英文大小写 Array
Effect 有 allow(允许)和 deny(显式拒绝)两种情况 String
Resource 授权操作的具体数据,可以是任意资源、指定路径前缀的资源、指定绝对路径的资源或它们的组合 Array
Condition 约束条件,可以不填,具体说明请参见 condition 说明 Struct

查询存储桶策略

功能说明

GET Bucket policy 请求可以向 Bucket 读取权限策略。

方法原型

func (s *BucketService) GetPolicy(ctx context.Context) (*BucketGetPolicyResult, *Response, error)

请求示例

package main

import (
    "context"
    "github.com/tencentyun/cos-go-sdk-v5"
    "net/http"
    "net/url"
    "os"
)

func main() {
    // 存储桶名称,由bucketname-appid 组成,appid必须填入,可以在COS控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucket
    // 替换为用户的 region,存储桶region可以在COS控制台“存储桶概览”查看 https://console.cloud.tencent.com/ ,关于地域的详情见 https://cloud.tencent.com/document/product/436/6224 。
    u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
    b := &cos.BaseURL{BucketURL: u}
    client := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            // 通过环境变量获取密钥
            // 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
            SecretID: os.Getenv("SECRETID"),
            // 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
            SecretKey: os.Getenv("SECRETKEY"),
        },
    })
    res, _, err := client.Bucket.GetPolicy(context.Background())
    if err != nil {
        // ERROR
    }
    fmt.Println(res)
}

返回结果说明

type BucketGetPolicyResult BucketPutPolicyOptions
// 详情见BucketPutPolicyOptions

删除存储桶策略

功能说明

DELETE Bucket policy 请求可以向 Bucket 删除权限策略。

方法原型

func (s *BucketService) DeletePolicy(ctx context.Context) (*Response, error)

请求示例

package main

import (
    "context"
    "github.com/tencentyun/cos-go-sdk-v5"
    "net/http"
    "net/url"
    "os"
)

func main() {
    // 存储桶名称,由bucketname-appid 组成,appid必须填入,可以在COS控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucket
    // 替换为用户的 region,存储桶region可以在COS控制台“存储桶概览”查看 https://console.cloud.tencent.com/ ,关于地域的详情见 https://cloud.tencent.com/document/product/436/6224 。
    u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
    b := &cos.BaseURL{BucketURL: u}
    client := cos.NewClient(b, &http.Client{
        Transport: &cos.AuthorizationTransport{
            // 通过环境变量获取密钥
            // 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
            SecretID: os.Getenv("SECRETID"),
            // 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.cloud.tencent.com/cam/capi
            SecretKey: os.Getenv("SECRETKEY"),
        },
    })
    _, err := client.Bucket.DeletePolicy(context.Background())
    if err != nil {
        // ERROR
    }
}

目录