您的位置 首页 java

存储_AWS的S3实践之路

前言

当今的开发基本已经基于云开发了,遥想当年自己也曾扛过 交换机 、抬过服务器和防火墙。读书人一声长叹,时代变化弹指一挥间。好吧,过去心不可得。

说到云上存储,当属 阿里云 的OSS和 亚马逊 的S3。

今天就入个S3的门,揭开它的面纱。

资料:

1、使用 AWS SDK for Java 的 Amazon S3 示例

AWS .amazon.com/zh_cn/sdk-for- Java /v1/developer-guide/examples-s3.html

2、适用于 Java 的 AWS 开发工具包

java /

3、AWS SDK for Java Documentation Examples

实操:

  1. 下载:
  2. 以java为例,通过api上传图片到S3测试,路径:aws-doc-sdk-examplesjavaexample_codes3
  3. 类:PutObject的执行mian方法,buckent_name和file_path按实际情况填写。

4、main方法报错:Access Denied

解决:https:// aws .amazon.com/cn/premiumsupport/knowledge-center/s3-access-denied-error-kms/

4.1 打开IAM控制台,创建用户

存储_AWS的S3实践之路

存储_AWS的S3实践之路

存储_AWS的S3实践之路

存储_AWS的S3实践之路

备注:“访问秘钥ID和私有访问秘钥“要记录下来,在SDK访问S3的时候使用。

4.2 main方法依旧报错:Access Denied,何解?

看了一些资料,加bucket的策略,如下:

4.3 增加策略仍然不可以,当一个问题一直没有解决,一定忽视了某些关键问题点,

在sdk的源码中,只有资源上传的功能,但是 鉴权 的机制在哪?

如何控制用户访问不同的s3资源?

于是乎,查看源代码中哪些类与鉴权有关系,尝试一下App.java,报错:

Exception in thread “main” java.lang.IllegalArgumentException: profile file cannot be null

顺藤摸瓜,stack overflow帮了忙,如下:

4.4 Credentials的格式如何定义

官网:

 [default]
aws_access_key_id={YOUR_ACCESS_KEY_ID}
aws_secret_access_key={YOUR_SECRET_ACCESS_KEY}

[profile2]
aws_access_key_id={YOUR_ACCESS_KEY_ID}
aws_secret_access_key={YOUR_SECRET_ACCESS_KEY}  

如上格式,创建credentials文件,内容为创建用户的 私钥 ,放在~/.aws/下即可。

5、S3上传的图片通过浏览器访问,报错如下:

5.1 增加桶策略

 {
"Version": "2012-10-17",
"Id": "Policy1647532048639",
"Statement": [
{
"Sid": "Stmt1647532038507",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111:user/s3-proxy"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::xx-22"
},
{
        "Sid": "PublicRead",
        "Effect": "Allow",
        "Principal": "*",
        "Action": ["s3: GetObject "],
        "Resource": "arn:aws:s3:::xxxx-22/*"
}
]
}  
存储_AWS的S3实践之路

5.2 编辑“阻止公有访问(存储桶设置)”

存储_AWS的S3实践之路

重复5.1 步骤,保存成功,重新访问URL即可。

反思

在鉴权的时候,走了一些弯路,如果先大体把官网的关于sdk-for-java相关的文档看一下,会更顺一些。

参考资料:

官方S3文档:

文章来源:智云一二三科技

文章标题:存储_AWS的S3实践之路

文章地址:https://www.zhihuclub.com/185231.shtml

关于作者: 智云科技

热门文章

网站地图