使用AWS SDK实现S3桶策略配置

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的调用,可以很方便的进行桶策略的管理。

相关推荐
2601_962055811 分钟前
Spring全部注解
java·后端·spring
chjif13 分钟前
一张照片和一段声音如何生成口播视频:MiniMax H3 音画同步实测
java·前端·javascript
何以解忧,唯有..24 分钟前
LangChain 中 Pydantic 格式输出:结构化输出的完整指南
java·开发语言·langchain
旧梦952744 分钟前
Java 捕获多个异常:从基础语法到最佳实践
java·开发语言
2601_962189601 小时前
【SpringBoot】使用IDEA创建SpringBoot项目
java·spring boot·intellij-idea
步行cgn1 小时前
Spring Boot 启动报错:MissingServletWebServerFactoryBean 的排查与解决
java·spring boot·后端
XLYcmy1 小时前
HTML/CSS/JS 基础与 Vue 技术栈深度解析
java·前端·css·html·vue3·vue2·api
~木雨1 小时前
String 底层原理与常量池全解析:byte []+coder、intern 陷阱、substring 内存泄漏,一篇讲透
java·jvm·内存优化·string·字符串常量池
新知图书1 小时前
12.3 智能体中Skill的约束与自进化实战
java·前端·数据库
en.en..1 小时前
C语言 static函数与头文件封装规范
java·c语言·前端