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

相关推荐
代码什么用8 小时前
Spring基础使用
java·后端·spring
Su米苏9 小时前
Spring AI 中MCP 与普通 @Tool的区别
java·人工智能·spring
码云数智-园园9 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
老板一杯拿铁9 小时前
Java 异常体系详解:从字节码原理到最佳实践
java
蜗牛互联网9 小时前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端
禾小西10 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨10 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
小卡车55510 小时前
java反射、自定义注解的应用(自定义分页)
java
BLUcoding11 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
yuniko-n11 小时前
【JUC】Lock 和 synchronzied 锁
java