AWS MediaStore Java SDK 2 如何启用容器对象公共访问?
MediaStore容器对象开启公共访问的实现方案
AWS Elemental MediaStore 没有S3那样直接通过容器级预定义ACL配置公共访问的机制,要实现类似S3 PUBLIC_READ/PUBLIC_READ_WRITE的效果,需要通过容器策略来配置,具体实现如下:
1. 配置公共读权限(对应S3的PUBLIC_READ)
通过MediaStore客户端调用putContainerPolicy接口,给目标容器添加允许匿名用户读取对象的策略:
MediaStoreClient mediaStoreClient = MediaStoreClient.create(); String containerName = "你的容器名称"; // 策略文档:允许所有匿名用户读取容器内的所有对象 String publicReadPolicy = "{\n" + " \"Version\": \"2012-10-17\",\n" + " \"Statement\": [\n" + " {\n" + " \"Effect\": \"Allow\",\n" + " \"Principal\": \"*\",\n" + " \"Action\": \"mediastore:GetObject\",\n" + " \"Resource\": \"arn:aws:mediastore:你的AWS区域:你的AWS账号ID:container/"+containerName+"/*\"\n" + " }\n" + " ]\n" + "}"; PutContainerPolicyRequest request = PutContainerPolicyRequest.builder() .containerName(containerName) .policy(publicReadPolicy) .build(); mediaStoreClient.putContainerPolicy(request);
2. 配置公共读写权限(对应S3的PUBLIC_READ_WRITE)
如果需要允许匿名用户上传、读取、删除对象,修改策略中的Action字段即可:
String publicReadWritePolicy = "{\n" + " \"Version\": \"2012-10-17\",\n" + " \"Statement\": [\n" + " {\n" + " \"Effect\": \"Allow\",\n" + " \"Principal\": \"*\",\n" + " \"Action\": [\n" + " \"mediastore:GetObject\",\n" + " \"mediastore:PutObject\",\n" + " \"mediastore:DeleteObject\"\n" + " ],\n" + " \"Resource\": \"arn:aws:mediastore:你的AWS区域:你的AWS账号ID:container/"+containerName+"/*\"\n" + " }\n" + " ]\n" + "}";
关键说明
- MediaStore 采用IAM策略模型而非S3的ACL模型,没有预定义的 canned ACL 选项,必须手动编写策略文档。
- 公共读写权限风险极高,仅建议在测试环境或非敏感内容场景下使用;生产环境优先通过IAM角色、预签名URL等方式控制访问。
- 配置后,匿名用户可直接通过MediaStore的对象端点访问对应资源,无需签名。
内容的提问来源于stack exchange,提问作者user1427947
相关产品推荐
相关产品推荐

