S3是广泛使用对象存储服务。
当使用了S3或者S3兼容服务作对象存储服务时,免不了要进行设置桶策略。有很多种方法可以设置桶策略:
- 使用web管理页面
- 使用S3 Browser客户端程序
- AWS CLI 命令行客户端
这些方法虽然可行,但是增加了学习和记忆的成本。作为一个懒人,灵机一动想到了一个偷懒的办法,既然已经在程序中引入是AWS SDK了,并且代码库中已经写好了helper类和连接配置,何不好好利用它呢。
因为桶策略是使用json定义的,这是跨语言SDK的通用要求。所以只要定义好桶策略的json,就可以交给SDK执行了。
举例:比如要设置公开策略,则json格式如下:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadForBucketObjects",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::%s/*"
}
]
}
以上json,既可以作为参数传递给SDK,又可以直接定义在代码中直接使用,或者定义一组策略方便直接使用。
设置桶策略
调用putBucketPolicy方法实现,桶策略设置。在桶策略的json中%s,是用来设置桶名的占位符,方便动态替换。
java
public void setBucketPolicy(String bucketName, String bucketPolicyJson) {
PutBucketPolicyRequest policyRequest = PutBucketPolicyRequest.builder()
.bucket(bucketName)
.policy(String.format(bucketPolicyJson, bucketName))
.build();
s3Client.putBucketPolicy(policyRequest);
}
查询桶策略
java
public String getBucketPolicy(String bucketName) {
GetBucketPolicyRequest policyRequest = GetBucketPolicyRequest.builder()
.bucket(bucketName)
.build();
GetBucketPolicyResponse policyResponse = s3Client.getBucketPolicy(policyRequest);
String policyJson = policyResponse.policy();
return policyJson;
}
删除桶策略
java
public static void deleteBucketPolicy(String bucketName) {
DeleteBucketPolicyRequest policyRequest = DeleteBucketPolicyRequest.builder()
.bucket(bucketName)
.build();
s3Client.deleteBucketPolicy(policyRequest);
}
总结
通过以上API的调用,可以很方便的进行桶策略的管理。