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

相关推荐
文丑颜不良啊6 分钟前
LeetCode1341~1360题目解析
java·leetcode
QianhangQianping33 分钟前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做
海绵宝宝转agent39 分钟前
LeetCodehot100题解
java·笔记·学习·算法·leetcode·深度优先
SunnyDays101140 分钟前
Java 操作 Word 脚注和尾注:添加、读取与删除
java·word
SunnyDays101141 分钟前
Java 为 Word 添加页码:隐藏封面页码、从指定页开始编号、奇偶页页码设置等
java·word·页码
开源推荐官1 小时前
多门店 O2O 商城选型复盘:从开发视角对比主流开源系统
java·架构·开源·php
吴名氏.1 小时前
Java转AI Agent教程(第二周)超时重试与错误分类
java·人工智能·python·分类·ai agent
从琳开始9891 小时前
从Socket到UDP回显服务器:Java网络编程完整指南
java·网络·网络协议·udp·java-ee
西瓜拿铁好喝2 小时前
开源和闭源 AI 办公工具,分别适合谁
java·前端·数据库
学长毕设2 小时前
基于SpringBoot的校园礼服租赁系统的设计与实现
java·spring boot·后端