Amazon Simple Storage Service (Amazon S3)

Amazon S3 提供了一个简单 Web 服务接口,可用于随时在 Web 上的任何位置存储和检索任何数量的数据。此服务让所有开发人员都能访问同一个具备高扩展性、可靠性、安全性和快速价廉的数据存储基础设施。

Amazon S3的简单操作:

开发指南

一、创建请求

1. 使用 AWS 账户或 IAM 用户凭证进行请求

为 AWS 开发工具包配置凭证的最简单方法是使用 AWS 凭证文件,AWS 开发工具包会寻找您的本地 AWS 凭证文件。如果您使用 AWS Command Line Interface (AWS CLI),那么您可能已经配置了本地 AWS 凭证文件。否则,请按照以下步骤设置凭证文件:

打开 IAM 控制台 -> 创建新 IAM 用户并赋予权限-> 下载csv -> 在本地计算机的主目录/.aws下创建credentials空文件->将csv文件内容复制到credentials文件中

[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

AWS SDK for Java  --  要使用 AWS 账户或 IAM 用户凭证向 Amazon S3 发出经身份验证的请求,请执行以下操作:

  • 使用 AmazonS3ClientBuilder 类创建 AmazonS3Client 实例。

  • 执行 AmazonS3Client 方法之一,以向 Amazon S3 发送请求。客户端将通过您提供的凭证生成所需的签名并将其包含在请求中。您可以在不提供安全凭证的情况下创建 AmazonS3Client 客户端。使用此客户端发送的请求是匿名的请求,它们不带签名。如果为不是公开可用的资源发送了匿名请求,Amazon S3 返回错误。

// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-s3-developer-guide/blob/master/LICENSE-SAMPLECODE.) import java.io.IOException;
import java.util.List; import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary; public class MakingRequests { public static void main(String[] args) throws IOException {
String clientRegion = "*** Client region ***";
String bucketName = "*** Bucket name ***"; try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build(); // Get a list of objects in the bucket, two at a time, and
// print the name and size of each object.
ListObjectsRequest listRequest = new ListObjectsRequest().withBucketName(bucketName).withMaxKeys(2);
ObjectListing objects = s3Client.listObjects(listRequest);
while(true) {
List<S3ObjectSummary> summaries = objects.getObjectSummaries();
for(S3ObjectSummary summary : summaries) {
System.out.printf("Object \"%s\" retrieved with size %d\n", summary.getKey(), summary.getSize());
}
if(objects.isTruncated()) {
objects = s3Client.listNextBatchOfObjects(objects);
}
else {
break;
}
}
}
catch(AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
}
catch(SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}

2. 使用 IAM 用户临时凭证进行请求

AWS 账户或 IAM 用户可以请求临时安全证书,然后使用它们向 Amazon S3 发送经身份验证的请求。

使用 IAM 用户临时证书进行请求 - AWS SDK for Java

二、存储桶

存储桶是 Amazon S3 中用于存储对象的容器。每个对象都储存在一个存储桶中。例如,如果名为 photos/puppy.jpg 的对象存储在 johnsmith 存储桶中,则可使用 URL http://johnsmith.s3.amazonaws.com/photos/puppy.jpg 对该对象进行寻址。存储桶有以下几种用途:组织最高等级的 Amazon S3 命名空间、识别负责存储和数据传输费用的账户、在访问控制中发挥作用以及用作使用率报告的汇总单位。

1. 将存储桶配置为申请方付款

通常,存储桶拥有者将支付与他们的存储桶相关联的所有 Amazon S3 存储和数据转移费用。但是,存储桶拥有者可以将存储桶配置为申请方付款存储桶。通常情况下,当您想共享数据,而又不会产生与访问数据等其他操作相关联的费用时,您可以将存储桶配置为申请方付款。将存储桶配置为申请方付款存储桶后,申请方必须在其请求中包含 x-amz-request-payer (在 POST、GET 和 HEAD 请求的标头中,或在 REST 请求中作为参数),以显示他们知道请求和数据下载将产生费用。但是,在以下条件下会对存储桶拥有者收取请求费用:

  • 申请方未在标头中 (GET、HEAD 或 POST) 包含参数 x-amz-request-payer,或未在请求中将其作为参数 (REST) (HTTP 代码 403)。
  • 请求身份验证失败 (HTTP 代码 403)。
  • 请求是匿名的 (HTTP 代码 403)。
  • 请求是 SOAP 请求。

1)控制台设置:在“Buckets”列表中单击存储桶名 -> 单击“Properties” -> 单击“Requester Pays” -> 选中 Enabled

2)API设置:使用 PUT 请求在指定存储桶上将 Payer 值设置为 Requester。您只能在存储桶级别上设置申请方付款;您不能为存储桶内的特定对象设置申请方付款。您可以随时将存储桶配置为 BucketOwner 或 Requester。但是,需要注意的是可能会出现一些短暂延迟 (大约数分钟),新配置值才会生效。

PUT ?requestPayment HTTP/1.1
Host: [BucketName].s3.amazonaws.com
Content-Length: 173
Date: Wed, 01 Mar 2009 12:00:00 GMT
Authorization: AWS [Signature] <RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Payer>Requester</Payer>
</RequestPaymentConfiguration>

三、托管静态网站

AWS S3的更多相关文章

  1. AWS S3 CLI的权限bug

    使用AWS CLI在S3上创建了一个bucket,上传文件的时候报以下错误: A client error (AccessDenied) occurred when calling the Creat ...

  2. AWS S3使用小结

    使用场景一:储存网站的图片,并能被任何人访问 1. 创建一个bucket,名字与需要绑定的域名一致. 例如,根域名是mysite.com,希望把所有图片放在pic.mysite.com下面,访问的时候 ...

  3. AWS s3 python sdk code examples

    Yet another easy-to-understand, easy-to-use aws s3 python sdk code examples. github地址:https://github ...

  4. 【阿里聚安全·安全周刊】阿里双11技术十二讲直播预约|AWS S3配置错误曝光NSA陆军机密文件

    关键词:阿里双11技术十二讲直播丨雪人计划丨亚马逊AWS S3配置错误丨2018威胁预测丨MacOS漏洞丨智能风控平台MTEE3丨黑客窃取<权利的游戏>剧本|Android 8.1   本 ...

  5. AWS S3服务使用

    AWS S3是亚马逊的一种文件存储服务使用方便. 一.配置服务 public static class AWS_S3ClientInfo { private static readonly strin ...

  6. SQL Server Agent Job 中用Powershell将备份文件拷贝到AWS S3

    SQL Server 数据库备份后,如何再复制一份到AWS S3 上,步骤和需要注意的地方如下: 1. 首先在SQL Server 中创建一个Credential 2. 授权这个Credential ...

  7. AWS S3 递归上传文件和递归下载文件, 以及S3之间拷贝文件夹

    1. 递归上传文件: aws s3 cp 本地文件夹 s3://bucket-name -- recursive --region us-east-1 2. 递归下载S3上的文件夹: cd  本地下载 ...

  8. Upload a file with $.ajax to AWS S3 with a pre-signed url

    转载自:https://gist.github.com/guumaster/9f18204aca2bd6c71a24 生成预签名的Demo文档:https://docs.aws.amazon.com/ ...

  9. storj白皮书v3最全面解读,Docker创始人的加入能否扳倒AWS S3

    Storj新发了白皮书v3,地址是:https://storj.io/storjv3.pdf. 这次白皮书一共有90页,看完还真要费不少时间.如果你没有时间看,可以看一下我这篇快速技术解读. 上次St ...

  10. aws s3文件上传设置accesskey、secretkey、sessiontoken

    背景: 最近跟进的项目会封装aws S3资源管理细节,对外提供获取文件上传凭证的API,业务方使用获取到的凭证信息直接请求aws进行文件上传.因此,测试过程需要验证S3文件上传的有效性.aws官网有提 ...

随机推荐

  1. 使用OpenSSL进行转换

    使用OpenSSL进行转换 摘自:https://cloud.tencent.com/developer/ask/29886 这些命令允许您将证书和密钥转换为不同的格式,以使它们与特定类型的服务器或软 ...

  2. zigbee初探

    什么是zigbee? 1.它是一种通信方式,一种通信协议: 2.其作用就是构建一个类似无线局域网的东西:如果这个局域网用于传感器的数据收集.监控,那么这个网络就叫做无线传感器网络. 应用领域:家居.工 ...

  3. slice,substr和substring方法的区别

    slice(start[,end])方法需要提供至少一个整数参数,作用是返回从start的位置开始到end位置的字符子串.当参数start为负数的时候他将从字符串尾部开始计算,当end没有指定时,en ...

  4. 视觉SLAM实战(一):RGB-D SLAM V2

    写在前面 首先打个广告.SLAM研究者交流QQ群:254787961.欢迎各路大神和小白前来交流. 看了前面三篇博文之后,是不是有同学要问:博主你扯了那么多有用没用的东西,能不能再给力一点,拿出一个我 ...

  5. nignx ssl 配置

    1. 找一个目录,例如: usr/local/nginx/ssl ,进入该目录 2.  openssl genrsa -des3 -out server.key 1024  创建自身秘钥 3.  op ...

  6. 编写高质量代码改善C#程序的157个建议——建议151:使用事件访问器替换公开的事件成员变量

    建议151:使用事件访问器替换公开的事件成员变量 事件访问器包含两部分内容:添加访问器和删除访问器.如果涉及公开的事件字段,应该始终使用事件访问器.代码如下所示: class SampleClass ...

  7. [转载]Java线程的两种实现方式

    转载:http://baijiahao.baidu.com/s?id=1602265641578157555&wfr=spider&for=pc 前言 线程是程序的一条执行线索,执行路 ...

  8. C#基础入门 三

    C#基础入门 三 类 类使用class关键字进行声明,前面加一个访问修饰符,public class car{} 访问修饰符:修师傅可以用来修饰类和类成员等,控制它们的可见度 修饰符关键字分别为:pu ...

  9. RabbitMQ与.net core(四) 消息的优先级 与 死信队列

    1.消息的优先级 假如现在有个需求,我们需要让一些优先级最高的通知推送到客户端,我们可以使用redis的sortedset,也可以使用我们今天要说的rabbit的消息优先级属性 Producer代码 ...

  10. ExtJS浏览器对象模型BOM——命名空间和用户代理对象、Cookie

    BOM(浏览器对象模型(BrowserObjectModel)),允许访问和操控浏览器窗口.研发者通过使用BOM,可移动窗口.更改状态栏文本.执行其它不与页面内容发生直接联系的操作. 本文将从ExtJ ...