存储空间(Bucket)的访问权限(ACL)用于控制存储空间的访问。本文介绍如何使用 OSS C++ SDK V2 设置和获取存储空间的访问权限。
注意事项
运行示例代码前,请将代码中的
<region>替换为实际的地域,如cn-hangzhou。本文示例代码使用环境变量获取访问凭证。
要设置存储空间ACL,您必须拥有
oss:PutBucketAcl权限。要获取存储空间ACL,您必须拥有oss:GetBucketAcl权限。
Bucket ACL说明
ACL | 枚举值 | 说明 |
私有 |
| 只有该存储空间的拥有者可以对该存储空间内的对象进行读写操作,其他人无法访问。 |
公共读 |
| 只有该存储空间的拥有者可以对该存储空间内的对象进行写操作,任何人(包括匿名访问者)可以对该存储空间内的对象进行读操作。 |
公共读写 |
| 任何人(包括匿名访问者)都可以对该存储空间内的对象进行读写操作。 |
警告
设置公共读写权限会使所有人都能访问存储空间内的数据,可能存在安全风险,请谨慎使用。
设置存储空间ACL
以下代码演示如何设置存储空间的ACL:
#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
oss::OSSClient client(conf);
auto outcome = client.putBucketAcl(
oss::models::PutBucketAclRequest()
.setBucket("examplebucket")
.setAcl("public-read"));
if (!outcome.has_value()) {
auto& e = outcome.error();
std::cerr << "设置存储空间ACL失败"
<< ", code: " << e.getCode()
<< ", message: " << e.getMessage()
<< ", requestId: " << e.getRequestId() << std::endl;
return 1;
}
auto& result = outcome.value();
std::cout << "设置存储空间ACL成功"
<< ", status: " << result.getStatusCode()
<< ", requestId: " << result.getRequestId() << std::endl;
return 0;
}
获取存储空间ACL
以下代码演示如何获取存储空间的ACL:
#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
oss::OSSClient client(conf);
auto outcome = client.getBucketAcl(
oss::models::GetBucketAclRequest()
.setBucket("examplebucket"));
if (!outcome.has_value()) {
auto& e = outcome.error();
std::cerr << "获取存储空间ACL失败"
<< ", code: " << e.getCode()
<< ", message: " << e.getMessage()
<< ", requestId: " << e.getRequestId() << std::endl;
return 1;
}
auto& result = outcome.value();
auto& acp = result.getAccessControlPolicy();
std::cout << "获取存储空间ACL成功"
<< ", status: " << result.getStatusCode() << std::endl;
if (acp.owner) {
std::cout << "Owner Id: " << acp.owner->id.value_or("") << std::endl;
}
if (acp.accessControlList) {
std::cout << "ACL Grant: " << acp.accessControlList->grant.value_or("") << std::endl;
}
return 0;
}
相关文档
关于设置存储空间访问权限的完整示例代码,请参见PutBucketAcl.cpp。
关于获取存储空间访问权限的完整示例代码,请参见GetBucketAcl.cpp。
该文章对您有帮助吗?