

适用于 Xamarin 的 AWS 移动 SDK 现已包含在。 适用于 .NET 的 AWS SDK本指南参考了适用于 Xamarin 的 Mobile SDK 的存档版本。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Simple Storage Service (S3)
<a name="s3"></a>

## 什么是 S3？
<a name="what-is-s3"></a>

 [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/) 为开发人员提供安全、持久、高度可扩展的对象存储。Amazon S3 易于使用，包含一个简单的 Web 服务界面，可从 Web 上的任何位置存储和检索任意数量的数据。使用 Amazon S3，您只需为实际使用的存储付费。没有最低费用，也没有设置成本。

Amazon S3 为各种使用情形提供经济高效的对象存储，包括云应用程序、内容分发、备份和归档、灾难恢复和大数据分析。

有关 AWS S3 区域可用性的信息，请参阅 [AWS 服务区域可用性](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。

## 重要概念
<a name="key-concepts"></a>

### 存储桶
<a name="bucket"></a>

存储于 Amazon S3 中的每个数据元都存储在存储段中。如同通过目录对文件系统中的文件进行分组一样，您也可以使用存储桶对相关对象进行分组。存储桶具有诸如访问权限和版本控制状态之类的属性，并且您可以指定希望它们所在的区域。

要了解更多有关 S3 存储桶的信息，请参阅《S3 开发人员指南》中的[使用存储桶](https://docs.aws.amazon.com/AmazonS3/latest/UG/BucketOperations.html)。

### 对象
<a name="objects"></a>

对象是您在 Amazon S3 中存储的数据。每个对象都位于您在特定 AWS 区域中创建的存储桶中。

在某一区域存储的对象将一直留在该区域，除非您特意将其传输到另一区域。例如，在欧洲地区（爱尔兰）区域存储的对象将一直保留在欧洲。在某个 Amazon S3 区域中存储的对象会以物理形式保留在该区域。Amazon S3 不会保留这些对象的副本或将其移动到其他任何区域。但是，只要您具有必要的权限，就可以从任何地方访问这些对象。

对象可以是任何类型的文件：图像、备份数据和电影等。一个对象的大小可以高达 5 TB。一个存储桶中可以有无限量的对象。

您必须先拥有存储段写入权限，才能将数据元上传到 Amazon S3 中。有关设置存储桶权限的更多信息，请参阅《S3 开发人员指南》中的[编辑存储桶权限](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingBucketPermissions.html)。

要了解更多有关 S3 对象的信息，请参阅《S3 开发人员指南》中的[使用对象](https://docs.aws.amazon.com/AmazonS3/latest/UG/ObjectOperations.html)。

### 对象元数据
<a name="object-metadata"></a>

Amazon S3 中的每个对象都有一组代表其元数据的键值对。元数据有两种类型：
+  **系统元数据** – 有时通过 Amazon S3 处理，例如 Content-Type 和 Content-Length。
+  **用户元数据** – 从不通过 Amazon S3 处理。用户元数据会与对象存储在一起，并会随其返回。用户元数据最大可以为 2 KB，键及其值均必须符合 US-ASCII 标准。

要了解更多有关 S3 对象元数据的信息，请参阅[编辑对象元数据](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingtheMetadataofanObject.html)。

## 项目设置
<a name="project-setup"></a>

### 先决条件
<a name="prerequisites"></a>

要在您的应用程序中使用 Amazon S3，需要将 SDK 添加到您的项目中。为此，请按照[设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK](setup.md) 中的说明操作。

### 创建 S3 存储桶
<a name="create-an-s3-bucket"></a>

Amazon S3 可将您的应用程序资源存储到 Amazon S3 存储桶（位于某个特定[区域](https://docs.aws.amazon.com/general/latest/gr/rande.html)的云存储容器）。每个 Amazon S3 存储桶必须具有一个全局唯一名称。您可以使用 [Amazon S3 控制台](https://console.aws.amazon.com/s3/)创建存储桶。

1. 登录 [Amazon S3 控制台](https://console.aws.amazon.com/s3/)，然后单击 **Create Bucket**。

1. 输入存储桶的名称，选择一个区域，然后单击 **Create**。

### 设置 S3 权限
<a name="set-permissions-for-s3"></a>

默认 IAM 角色策略会授予您的应用程序访问 Amazon Mobile Analytics 和 Amazon Cognito Sync 的权限。为了让您的 Cognito 身份池能够访问 Amazon S3，您必须修改身份池的角色。

1. 转至 [Identity and Access Management Console](https://console.aws.amazon.com/iam/home)，然后单击左窗格中的 **Roles**。

1. 在搜索框中键入您的身份池名称。将列出两个角色：一个用于未经身份验证的用户，另一个用于经过身份验证的用户。

1. 单击用于未经过身份验证的用户的角色 (身份池名称后附加有“unauth”)。

1. 单击 **Create Role Policy**，选择 **Policy Generator**，然后单击 **Select**。

1. 在**编辑权限**页面上，输入下图所示的设置，用您自己的资源名称替换 Amazon 资源名称 (ARN)。S3 存储桶的 ARN 类似 `arn:aws:s3:::examplebucket/*`，由存储桶所在的区域和存储桶的名称构成。下面显示的设置将赋予您的身份池对指定存储桶执行所有操作的完全访问权限。  
![](http://docs.aws.amazon.com/zh_cn/mobile/sdkforxamarin/developerguide/images/edit-permissions.png)

1. 单击 **Add Statement** 按钮，然后单击 **Next Step**。

1. 向导将向您显示生成的配置。单击**应用策略**。

有关授予访问 S3 的权限的更多信息，请参阅[授予访问 Amazon S3 存储桶的权限](http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket)。

### (可选) 配置针对 S3 请求的签名版本
<a name="optional-configure-the-signature-version-for-s3-requests"></a>

与 Amazon S3 的每一次交互都是经身份验证的或匿名的。AWS 使用签名版本 4 或签名版本 2 算法来对服务调用进行身份验证。

2014 年 1 月之后创建的所有新的 AWS 区域仅支持签名版本 4。但是，许多较旧的区域仍支持签名版本 4 和签名版本 2 请求。

如果您的存储桶位于不支持[本页](https://docs.aws.amazon.com/general/latest/gr/signature-version-2.html)所列签名版本 2 请求的区域之一，则必须设置 AWSConfigs S3。 UseSignatureVersion4 个属性变成 “true”，如下所示：

```
AWSConfigsS3.UseSignatureVersion4 = true;
```

有关 AWS 签名版本的更多信息，请参阅[对请求进行身份验证（AWS 签名版本 4）](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)。

## 将 S3 与您的应用程序集成
<a name="integrating-s3-with-your-application"></a>

您可以通过两种方式在您的 Xamarin 中与 S3 进行交互。以下主题更深入地探讨了这两种方法：

**Topics**