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

相关推荐
杨运交11 分钟前
[071][验证码模块]基于Spring拦截器的验证码认证设计思想
java·后端·spring
Geek-Chow27 分钟前
CountDownLatch in Java
java
SL_staff1 小时前
从RBAC到场景化授权:《无忧·企业文档》三级权限模型的技术实践解析
java·开源·产品
传奇开心果编程2 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
SL_staff2 小时前
财务系统慎用低代码?从数据模型闭环看合规落地的技术实践
java·低代码·全栈
滕州市燕猫虎计算机科技工作室个体工商户2 小时前
IDEA:Command line is too long
java·ide·intellij-idea
步行cgn2 小时前
Spring p 命名空间注入详解
java·前端·spring
YatHinLay2 小时前
MyBatis 流式查询实战:ResultHandler 处理海量数据
java
天天被压力3 小时前
【跨市场数据实战 #08】可转债折价机会怎么筛:3个接口抓比价、列表和实时盘口
java·人工智能·python
张某布响丸辣3 小时前
附件下载的安全边界:路径白名单、NAS 哨兵文件与 Redis Lua 一次性令牌
java·redis·redis lua·nas哨兵