桶(Bucket)是 TOS 的全局唯一的命名空间,相当于数据的容器,用来储存对象(Object)数据。TOS 中权限控制通过 IAM Policy、Bucket Policy、桶和对象 ACL 实现,其中桶策略和 ACL 都是基于 TOS 资源的权限控制策略,桶策略相较于桶 ACL 具备更灵活的权限配置。本文介绍如何设置、获取和删除桶的授权策略(Policy)。
注意
tos:PutBucketPolicy
权限,具体操作请参见权限配置指南。以下代码用于设置桶 examplebucket
的桶策略。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 若要设置如下的 policy std::string policy = R"({"Statement": [{"Sid": "internal public","Effect": "Allow","Action": ["tos:ListBucket"],"Principal": "*","Resource": ["trn:tos:::examplebucket/*","trn:tos:::examplebucket"]}]})"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 设置桶的策略配置 PutBucketPolicyInput input(bucketName); input.setPolicy(Policy); auto output = client.putBucketPolicy(input); if (!output.isSuccess()) { // 异常处理 std::cout << "PutBucketPolicy failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "PutBucketPolicy success." << std::endl; // 释放网络等资源 CloseClient(); return 0; }
注意
获取桶策略,您必须具备 tos:GetBucketPolicy
权限,具体操作请参见权限配置指南。
以下代码用于获取桶 examplebucket
的桶策略。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 获取桶的策略配置 GetBucketPolicyInput input(bucketName); auto output = client.getBucketPolicy(input); if (!output.isSuccess()) { // 异常处理 std::cout << "GetBucketPolicy failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } // 打印 Policy 信息 std::cout << "GetBucketPolicy success, the bucket policy is:" << output.result().getPolicy() << std::endl; // 释放网络等资源 CloseClient(); return 0; }
注意
删除策略,您必须具备 tos:DeleteBucketPolicy
权限,具体操作请参见权限配置指南。
以下代码用于删除桶 examplebucket
的桶策略。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 删除桶的策略配置 DeleteBucketPolicyInput input(bucketName); auto output = client.deleteBucketPolicy(input); if (!output.isSuccess()) { // 异常处理 std::cout << "DeleteBucketPolicy failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "DeleteBucketPolicy success." << std::endl; // 释放网络等资源 CloseClient(); return 0; }
关于存储桶策略的更多信息,请参见存储桶授权策略管理。