

# S3 Files 的先决条件
<a name="s3-files-prereq-policies"></a>

在开始使用 S3 Files 之前，请确保您已满足以下先决条件。

## AWS 账户和计算设置
<a name="s3-files-prereq-account-setup"></a>
+ 您已经有一个 AWS 账户。
+ 在您想要创建文件系统的所需 AWS 区域中，您有一个计算资源和一个 S3 通用存储桶。有关更多信息，请参阅 [创建通用存储桶](create-bucket-overview.md)。
+ 您的 S3 存储桶已启用版本控制。S3 Files 需要使用 S3 版本控制，以便在文件系统和 S3 存储桶之间同步更改。有关更多信息，请参阅 [在存储桶上启用版本控制](manage-versioning-examples.md)。
+ S3 存储桶必须使用以下加密类型之一：具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）或具有 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）。

## S3 Files 客户端
<a name="s3-files-prereq-client"></a>

要将 S3 Files 与 Amazon EC2 结合使用，您必须安装客户端 `amazon-efs-utils`，这是一组用于 Amazon EFS 和 Amazon S3 Files 的共享开源工具。要使用 S3 Files，需要 `amazon-efs-utils` 版本 3.0.0 或更高版本。该客户端包括一个挂载助手程序，该程序可简化 S3 文件系统的挂载，并启用 Amazon CloudWatch 指标来监控文件系统的挂载状态。

### 步骤 1：安装客户端
<a name="s3-files-prereq-client-install"></a>
+ 通过 Secure Shell（SSH）访问您的 Amazon EC2 实例的终端，然后使用相应的用户名登录。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)。
+ 对于那些使用 Amazon Linux 的客户端，请执行以下操作从 Amazon 的存储库安装 efs-utils：

  ```
  sudo yum -y install amazon-efs-utils
  ```
+ 如果您使用其它受支持的 Linux 发行版，则可以执行以下操作：

  ```
  curl https://amazon-efs-utils.aws.com/efs-utils-installer.sh | sudo sh -s -- --install
  ```
+ 有关其它 Linux 发行版，请参阅 GitHub 上 amazon-efs-utils 自述文件中的 [On other Linux distributions](https://github.com/aws/efs-utils/?tab=readme-ov-file#on-other-linux-distributions)。

### 步骤 2：安装 botocore
<a name="s3-files-prereq-client-botocore"></a>

`amazon-efs-utils` 客户端使用 botocore 与其它 AWS 服务进行交互。例如，您需要安装 botocore 才能使用 Amazon CloudWatch 来监控文件系统。有关安装和升级 botocore 的说明，请参阅 GitHub 上 amazon-efs-utils 自述文件中的 [Installing botocore](https://github.com/aws/efs-utils#install-botocore)。

### 为 S3 Files 启用 FIPS 模式
<a name="s3-files-prereq-client-fips"></a>

如果您需要符合联邦信息处理标准（FIPS），则必须在客户端中启用 FIPS 模式。要启用 FIPS 模式，需要修改操作系统上的 `s3files-utils.conf` 文件。

按照以下步骤在客户端中为 S3 Files 启用 FIPS 模式：

1. 使用所选的文本编辑器打开 `/etc/amazon/efs/s3files-utils.conf` 文件。

1. 找到包含以下文本的行：

   ```
   fips_mode_enabled = false
   ```

1. 将该文本更改为以下内容：

   ```
   fips_mode_enabled = true
   ```

1. 保存更改。

## IAM 角色和策略
<a name="s3-files-prereq-iam"></a>

要使用 S3 Files，您必须出于两个目的配置 IAM 角色和附加的策略：
+ 从文件系统访问您的存储桶
+ 将文件系统附加到 AWS 计算资源

### 用于从文件系统访问您的存储桶的 IAM 角色
<a name="s3-files-prereq-iam-creation-role"></a>

创建 S3 文件系统时，必须指定 S3 Files 代入的 IAM 角色，以读取和写入您的 S3 存储桶。此角色支持 S3 Files 在您的文件系统和 S3 存储桶之间同步更改。该角色还授予管理 Amazon EventBridge 规则的权限，S3 Files 使用这些规则来检测 S3 存储桶中的更改并触发同步。您还必须确保源存储桶的存储桶策略不会拒绝来自计算资源的访问。

**注意**  
当您使用 AWS 管理控制台创建文件系统时，S3 Files 将自动创建具有所需权限的此 IAM 角色。

此 IAM 角色需要以下各项：
+ 内联策略，如下所示：

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "S3BucketPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket",
                  "s3:ListBucketVersions"
              ],
              "Resource": "arn:aws:s3:::{{bucket}}",
              "Condition": {
                  "StringEquals": {
                      "aws:ResourceAccount": "{{accountId}}"
                  }
              }
          },
          {
              "Sid": "S3ObjectPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:AbortMultipartUpload",
                  "s3:DeleteObject*",
                  "s3:GetObject*",
                  "s3:List*",
                  "s3:PutObject*"
              ],
              "Resource": "arn:aws:s3:::{{bucket}}/*",
              "Condition": {
                  "StringEquals": {
                      "aws:ResourceAccount": "{{accountId}}"
                  }
              }
          },
          {
              "Sid": "UseKmsKeyWithS3Files",
              "Effect": "Allow",
              "Action": [
                  "kms:GenerateDataKey",
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncryptFrom",
                  "kms:ReEncryptTo"
              ],
              "Condition": {
                  "StringLike": {
                      "kms:ViaService": "s3.{{region}}.amazonaws.com",
                      "kms:EncryptionContext:aws:s3:arn": [
                          "arn:aws:s3:::{{bucket}}",
                          "arn:aws:s3:::{{bucket}}/*"
                      ]
                  }
              },
              "Resource": "arn:aws:kms:{{region}}:{{accountId}}:*"
          },
          {
              "Sid": "EventBridgeManage",
              "Effect": "Allow",
              "Action": [
                  "events:DeleteRule",
                  "events:DisableRule",
                  "events:EnableRule",
                  "events:PutRule",
                  "events:PutTargets",
                  "events:RemoveTargets"
              ],
              "Condition": {
                  "StringEquals": {
                      "events:ManagedBy": "elasticfilesystem.amazonaws.com"
                  }
              },
              "Resource": [
                  "arn:aws:events:*:*:rule/DO-NOT-DELETE-S3-Files*"
              ]
          },
          {
              "Sid": "EventBridgeRead",
              "Effect": "Allow",
              "Action": [
                  "events:DescribeRule",
                  "events:ListRuleNamesByTarget",
                  "events:ListRules",
                  "events:ListTargetsByRule"
              ],
              "Resource": [
                  "arn:aws:events:*:*:rule/*"
              ]
          }
      ]
  }
  ```

  将占位符值替换为您自己的值。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/s3-files-prereq-policies.html)
+ 支持 S3 Files 代入 IAM 角色的信任策略。将下面的信任策略添加到 IAM 角色中，以支持 S3 Files 服务代入该角色。将 {{accountId}} 和 {{region}} 替换为您的值。

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowS3FilesAssumeRole",
              "Effect": "Allow",
              "Principal": {
                  "Service": "elasticfilesystem.amazonaws.com"
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceAccount": "{{accountId}}"
                  },
                  "ArnLike": {
                      "aws:SourceArn": "arn:aws:s3files:{{region}}:{{accountId}}:file-system/*"
                  }
              }
          }
      ]
  }
  ```

### 用于将文件系统附加到 AWS 计算资源的 IAM 角色
<a name="s3-files-prereq-iam-compute-role"></a>

您在其中挂载 S3 文件系统的计算资源必须附加了一个 IAM 角色（例如，EC2 实例配置文件），其策略可让您的计算资源与 S3 文件系统和源 S3 存储桶进行交互。您还必须确保源存储桶的存储桶策略不会拒绝来自计算资源的访问。

将以下两个策略添加到已附加到计算资源的 IAM 角色：
+ **计算资源连接到 S3 文件系统并与之交互的权限**

  IAM 角色必须包括供挂载助手连接到 S3 文件系统并与之交互的权限。如果您想授予计算资源对 S3 文件系统的完全读写权限，或者授予 `AmazonS3FilesClientReadOnlyAccess` 以获得只读访问权限，则可以附加 AWS 托管式策略，例如 `AmazonS3FilesClientFullAccess` 托管式策略。如果您想启用 Amazon CloudWatch 监控，也可以附加 `AmazonElasticFileSystemUtils` 托管式策略。有关更多信息和 S3 Files 的可用托管式策略的完整列表，请参阅 [Amazon S3 Files 的 AWS 托管式策略](s3-files-security-iam-awsmanpol.md)。还可以通过向计算资源的 IAM 角色添加单独的 IAM 权限来提供这些权限，例如 `s3files:ClientMount` 或 `s3files:ClientWrite`（对于只读连接则不需要）。
+ **授予计算资源对 S3 对象的读取权限的内联策略**

  将下面的内联策略添加到 IAM 角色。此策略向计算资源授予直接从同一账户中关联的 S3 存储桶读取对象的权限，以优化读取性能。将 {{bucket}} 替换为您的 S3 存储桶名称或带前缀的存储桶名称。

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "S3ObjectReadAccess",
              "Effect": "Allow",
              "Action": [
                  "s3:GetObject",
                  "s3:GetObjectVersion"
              ],
              "Resource": "arn:aws:s3:::{{bucket}}/*"
          },
          {
              "Sid": "S3BucketListAccess",
              "Effect": "Allow",
              "Action": "s3:ListBucket",
              "Resource": "arn:aws:s3:::{{bucket}}"
          }
      ]
  }
  ```

## 安全组
<a name="s3-files-prereq-security-groups"></a>

创建文件系统和挂载目标后，必须配置正确的安全组才能开始使用您的文件系统。计算资源和挂载目标上的安全组都必须支持所需的流量，如下表所示：


| 安全组 | 规则类型 | 协议 | 端口 | 源/目标 | 
| --- | --- | --- | --- | --- | 
| EC2 实例 | 出站 | TCP | 2049 | 挂载目标安全组 | 
| 挂载目标 | 入站 | TCP | 2049 | EC2 实例安全组 | 