

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

# 教程：设置具有选择性多存储桶访问权限的 AWS Transfer Family Web 应用程序
<a name="webapp-s3-tutorial"></a>

本教程将指导您为单个用户配置具有特定的 Amazon S3 存储桶权限的 Transfer Family 网络应用程序。您将学习如何设置一个解决方案，允许用户从一个存储桶下载并上传到另一个存储桶，同时保持安全性。这是一个基于基础教程中介绍的概念的高级教程。如果你不熟悉 AWS Transfer Family Web 应用程序，可以考虑从开始[教程：设置基本的 Transfer Family 网络应用程序](web-app-tutorial.md)。

## 先决条件
<a name="webapp-s3-tutorial-prereqs"></a>

开始本教程之前，您需要：
+ IAM 身份中心配置在与您的 AWS Transfer Family Web 应用程序相同的区域。请注意，所有区域的每个 AWS 账户只 AWS 允许一个 IAM 身份中心实例。
+ 在 IAM 身份中心中配置了至少一个用户。
+ 两个 S3 存储桶：一个用于下载，一个用于上传。

**注意**  
本教程与基本 Web 应用程序教程有许多共同的前提条件。有关设置 IAM 身份中心和创建用户的更多信息，请参阅[教程：设置基本的 Transfer Family 网络应用程序](web-app-tutorial.md)。

## 第 1 步：创建 Transfer Family 网络应用程序
<a name="webapp-s3-tutorial-create-webapp"></a>

**创建 Transfer Family 网络应用程序**

1. 登录 AWS 管理控制台 并打开 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

1. 在左侧导航窗格中，选择 **Web 应用程序**。

1. 选择 “**创建 Web 应用程序**”。

   对于身份验证访问，请注意，该服务会自动找到您设置为先决条件的 AWS IAM Identity Center 实例。

1. 在 “**权限类型**” 窗格中，选择 “**创建并使用新的服务角色**”。该服务为您创建身份持有者角色。身份持有者角色在其会话中包括经过身份验证的用户的身份。

1. 在 **Web 应用程序单位**窗格中，接受默认值 1，或者根据需要调整为更高的值。

1. 添加标签以帮助您整理 Web 应用程序。在本教程中，为密钥输入**名称**，为值输入**教程 Web 应用程序**。
**提示**  
创建 Web 应用程序名称后，您可以直接从 **Web 应用程序**列表页面对其进行编辑。

1. 选择 “**下一步**” 打开 “**设计 Web 应用程序**” 页面。在此屏幕上，提供以下信息。

   您可以选择为 Web 应用程序提供标题。您也可以上传徽标和网站图标的图片文件。
   + 对于页面标题，请自定义用户在连接到 Web 应用程序时看到的浏览器选项卡的标题。如果您没有为页面标题输入任何内容，则默认为 Transfer **Web App**。
   + 要获取徽标，请上传图片文件。徽标图片的最大文件大小为 50 KB。
   + 对于网站图标，请上传图片文件。您的网站图标的最大文件大小为 20 KB。

1. 选择 “**下一步**”，然后选择 “**创建 Web 应用程序**”。

## 步骤 2：为 S3 访问权限配置 IAM 角色
<a name="webapp-s3-tutorial-iam-roles"></a>

您需要创建两个 IAM 角色：一个对第一个存储桶具有仅下载访问权限，另一个对第二个存储桶具有仅限上传的访问权限。

### 两个角色的信任政策
<a name="webapp-s3-tutorial-trust-policy"></a>

对两个 IAM 角色使用以下信任策略：

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessGrantsTrustPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "access-grants.s3.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetSourceIdentity",
                "sts:SetContext"
            ]
        }
    ]
}
```

### 下载存储桶的 IAM 政策
<a name="webapp-s3-tutorial-download-policy"></a>

使用以下策略创建 IAM 角色，以获取对您的下载存储桶的只读访问权限：

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ObjectLevelReadPermissions",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetObjectAcl",
                "s3:GetObjectVersionAcl",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                "arn:aws:s3:::amzn-s3-demo-bucket1"
            ]
        }
    ]
}
```

**重要**  
将 **amzn-s3-demo-bucket1 替换为下载存储桶**的实际名称。

### 上传存储桶的 IAM 政策
<a name="webapp-s3-tutorial-upload-policy"></a>

使用以下策略创建另一个 IAM 角色以获取对上传存储桶的写入权限：

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ObjectLevelWritePermissions",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:AbortMultipartUpload",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket2/*",
                "arn:aws:s3:::amzn-s3-demo-bucket2"
            ]
        }
    ]
}
```

**重要**  
将 **amzn-s3-demo-bucket2 替换为上传存储桶**的实际名称。

## 步骤 3：设置 S3 访问授权
<a name="webapp-s3-tutorial-access-grants"></a>

1. 打开 S3 控制台，网址为[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在导航窗格中，选择**访问授权**。

1. 单击 “**创建 S3 访问权限授予实例**”。

1. 选择**添加 IAM 身份中心实例**选项并输入身份中心实例 ARN。

1. 单击 “**下一步**”，然后单击 “**取消**” 以完成 S3 访问权限授予实例的创建，无需继续执行其他步骤。

此步骤创建 S3 访问权限授予实例。现在，您将注册营业地点并创建访问授权。

## 步骤 4：注册 S3 存储桶位置
<a name="webapp-s3-tutorial-register-locations"></a>

使用 S3 访问权限将两个 S3 存储桶注册为位置：

1. 在 S3 访问权限授予控制台中，导航到 “**位置**”，然后单击 “**注册位置**”。

1. 在 “**位置范围**” 下，选择用于下载的特定的 S3 存储桶（amzn-s3-demo-bucket1）。

1. 当系统提示您选择 IAM 角色时，请选择您之前创建的下载 IAM 角色。

1. 完成注册流程。

1. 重复该过程注册上传存储桶 (amzn-s3-demo-bucket2)，并在出现提示时选择上传 IAM 角色。

## 步骤 5：创建访问授权
<a name="webapp-s3-tutorial-create-grants"></a>

创建两个赠款，每个注册地点一个：

1. 在 S3 访问权限授权控制台中，导航到 “**授**权”，然后单击 “**创建授权**”。

1. 在 “**位置**” 中，单击 “**浏览位置**”，然后选择下载存储桶位置 (amzn-s3-demo-bucket1)。

1. 在 **Subprefix**（可选）中，输入`*`以允许访问整个存储桶，或者指定路径，例如限制`folder1/folder2/*`对特定前缀的访问。

   使用`*`会将授权范围设置为`s3://bucket-name/*`，允许访问整个存储桶。要仅允许访问特定的前缀，请输入类似的路径`folder1/folder2/*`，该路径会将授权范围设置为`s3://bucket-name/folder1/folder2/*`。

1. 在 “**权限和访问**权限” 下，为下载存储桶选择 “**读取**”。

1. 在**被授权者类型**中，**从 IAM 身份中心选择目录身份**。

1. 对于 **IAM 委托人类型**，选择**用户**并输入您的 IAM 身份中心用户的用户 ID。

1. 完成赠款创建流程。

1. **重复该过程为上传存储桶 (amzn-s3-demo-bucket2) 创建授权，但为权限选择读写。**

## 步骤 6：为 S3 存储桶配置 CORS 策略
<a name="webapp-s3-tutorial-cors"></a>

为两个 S3 存储桶配置 CORS 策略，以允许通过以下方式进行访问： AWS Transfer Family WebApp

1. 打开 S3 控制台并导航到您的下载存储桶 (amzn-s3-demo-bucket1)。

1. 选择**权限**选项卡。

1. **向下滚动到**跨源资源共享 (CORS)** 部分，然后点击编辑。**

1. 添加以下 CORS 配置，替换为实际*WebAppEndpoint*的 WebApp 终端节点 URL：

   你可以在 AWS Transfer Family 控制台的下方找到你的 Web 应用程序终端节点 URL WebApps。它看起来会像 **https://webapp-\$1\$1\$1\$1\$1\$1\$1\$1\$1\$1\$1\$1\$1\$1\$1.transfer-webapp.us-west-2.on.aws**。

   ```
   [
     {
       "AllowedHeaders": [
         "*"
       ],
       "AllowedMethods": [
         "GET",
         "PUT",
         "POST",
         "DELETE",
         "HEAD"
       ],
       "AllowedOrigins": [
         "https://WebAppEndpoint"
       ],
       "ExposeHeaders": [
         "last-modified",
         "content-length",
         "etag",
         "x-amz-version-id",
         "content-type",
         "x-amz-request-id",
         "x-amz-id-2",
         "date",
         "x-amz-cf-id",
         "x-amz-storage-class",
         "access-control-expose-headers"
       ],
       "MaxAgeSeconds": 3000
     }
   ]
   ```

1. 单击**保存更改**。

1. 对您的上传存储桶 (amzn-s3-demo-bucket2) 重复该过程。

## 步骤 7：测试配置
<a name="webapp-s3-tutorial-testing"></a>

1. 打开您的 AWS Transfer Family 网络应用程序网址。您可以在 AWS Transfer Family 控制台的 “**访问端点**” 字段 WebApps 下找到此 URL。

1. 使用您配置的访问权限的 IAM Identity Center 用户证书登录。

1. 登录后，您应该会在主页上看到两个 S3 位置。

1. 导航到下载存储桶 (amzn-s3-demo-bucket1)，确认您可以下载文件但不能上传。

1. 导航到上传存储桶 (amzn-s3-demo-bucket2)，然后验证您是否可以上传文件。

## 结论
<a name="webapp-s3-tutorial-conclusion"></a>

您已成功为单个用户配置 AWS Transfer Family WebApp 了选择性 S3 存储桶访问权限。此设置允许用户从一个存储桶下载并上传到另一个存储桶，同时通过 IAM 角色和 S3 访问权限授予维护安全。

通过在 S3 访问权限中为每个用户创建额外的授权，可以将此方法扩展到多个用户，从而对存储桶访问权限进行精细控制。有关基本 Web 应用程序设置的信息，请参阅[教程：设置基本的 Transfer Family 网络应用程序](web-app-tutorial.md)。