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

相关推荐
腻害兔7 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说12 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane199412 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了13 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品13 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘13 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记14 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端