

# 传输中数据加密
<a name="encryption-of-data-in-transit"></a>

 您可以挂载文件系统，以便在传输过程中使用传输层安全性 1.2（TLS）和行业标准 AES-256 密码对所有 NFS 流量进行加密。TLS 是一组行业标准的加密协议，用于加密通过网络交换的信息。AES-256 是一种 256 位加密密码，用于 TLS 中的数据传输。我们建议对访问文件系统的每台客户端设置传输中加密。 

您可以使用 IAM 策略对访问 Amazon EFS 的 NFS 客户端强制实施传输中加密。当客户端连接到文件系统时，Amazon EFS 会评估文件系统的 IAM 资源策略（称为文件系统策略）以及任何基于身份的 IAM 策略，确定要授予的相应文件系统访问权限。您可以在文件系统资源策略中使用 `aws:SecureTransport` 条件键来强制 NFS 客户端在连接到 EFS 文件系统时使用 TLS。

**注意**  
必须使用 EFS 挂载帮助程序挂载 Amazon EFS 文件系统，从而使用 IAM 授权来控制 NFS 客户端的访问。有关更多信息，请参阅 *Amazon EFS 用户指南*中的[使用 IAM 授权挂载](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-mount-helper.html#mounting-IAM-option)。

以下示例 EFS 文件系统策略强制实施传输中加密，并具有以下特征：
+ `effect` 为 `allow`。
+ 所有 IAM 实体的主体设置为 `*`。
+ 操作设置为 `ClientMount`、`ClientWrite` 和 `ClientRootAccess`。
+ 授予权限的条件设置为 `SecureTransport`。仅向使用 TLS 连接到文件系统的 NFS 客户端授予访问权限。

  ```
  {
    “Version”: “2012-10-17”,
    “Id”: “ExamplePolicy01”,
    “Statement”: [
      {
        “Sid”: “VisualEditior0”,
        “Effect”: “Allow”,
        “Principal”: {
          “AWS”: “*”,
        },
        “Action”: [
  “elasticfilesystem:ClientRootAccess”,
  “elasticfilesystem:ClientMount”,
  “elasticfilesystem:ClientWrite”
        ],
        “Condition”: {
          “Bool”: {
            “aws:SecureTransport”: “true”
          }
        }
      }
    ]
  }
  ```

  您可以使用 Amazon EFS 控制台或 AWS CLI 创建文件系统策略。

要使用 EFS 控制台创建文件系统策略，请执行以下操作：

1. 打开 [Amazon EFS 控制台](https://console.aws.amazon.com/efs)。

1. 选择 **File Systems**（文件系统）。

1. 在 File systems（文件系统）页面上，选择要为其编辑或创建文件系统策略的文件系统。此时将显示该文件系统的详细信息页面。

1. 选择 **File system policy**（文件系统策略），然后选择 **Edit**（编辑）。 此时将显示 File system policy（文件系统策略）页面。  
![](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/efs-encrypted-file-systems/images/image8.jpeg)

   *创建文件系统策略*

1. 在 **Policy options**（策略选项）中，我们建议您选择以下可用的预配置策略选项：
   + 默认情况下阻止根访问
   + 默认情况下强制实施只读访问
   + 为所有客户端强制实施传输中加密

   如果选择预配置的策略，策略 JSON 对象将显示在 **Policy editor**（策略编辑器）面板中。

1. 使用 **Grant additional permissions**（授予额外权限）向其他 IAM 主体（包括另一个 AWS 账户）授予文件系统权限。选择 **Add**（添加），然后输入要向其授予权限的实体的主体 ARN，然后选择要授予的 **Permissions**（权限）。

1. 根据您的需求使用 **Policy editor**（策略编辑器）自定义预配置的策略或创建自己的策略。使用编辑器时，预配置的策略选项将变得不可用。要撤销策略更改，请选择 **Clear**（清除）。

   清除编辑器后，预配置的策略将再次变为可用。

1. 完成编辑或创建策略后，选择 **Save**（保存）。

   此时将显示文件系统的详细信息页面，其中显示 File system policy（文件系统策略）中的策略。

   也可以直接使用 AWS CloudFormation、AWS 开发工具包或 Amazon EFS API 以编程方式创建文件系统策略。有关创建文件系统策略的更多信息，请参阅 *Amazon EFS 用户指南*中的[创建文件系统策略](https://docs.aws.amazon.com/efs/latest/ug/create-file-system-policy.html)。

## 设置传输中数据加密
<a name="setting-up-encryption-of-data-in-transit"></a>

 要设置传输中数据加密，建议您在每个客户端下载 EFS 挂载帮助程序。EFS 挂载帮助程序是 AWS 提供的开源实用程序，用于简化 EFS 的使用，包括设置传输中数据加密。默认情况下，挂载帮助程序使用 EFS 推荐的挂载选项。 

以下 Linux 发行版支持 EFS 挂载帮助程序：
+  Amazon Linux 2017.09\+ 
+  Amazon Linux 2\+ 
+  Debian 9\+ 
+  Fedora 28\+ 
+  Red Hat Enterprise Linux / CentOS 7\+ 
+  Ubuntu 16.04\+ 

要设置传输中数据加密，请执行以下操作：

1.  安装 EFS 挂载帮助程序： 
   +  对于 Amazon Linux，请使用以下命令： 

     ```
     sudo yum install -y amazon-efs-utils
     ```
   +  对于其他 Linux 发行版，请从 GitHub 下载并安装。 

     amazon-efs-utils 软件包会自动安装以下依赖项：NFS 客户端（nfs-utils）、网络中继（stunnel）、OpenSSL 和 Python。

1.  挂载文件系统： 

   ```
         sudo mount -t efs -o tls {{file-system-id}}
         {{efs-mount-point}}
   ```
   +  `mount -t efs` 调用 EFS 挂载帮助程序。 
   +  使用 EFS 挂载帮助程序挂载时，不支持使用文件系统的 DNS 名称或挂载目标的 IP 地址，请改用文件系统 ID。 
   +  默认情况下，EFS 挂载帮助程序使用 AWS 推荐的挂载选项。不建议覆盖这些默认的挂载选项，但我们提供了在必要时进行覆盖的灵活性。我们建议彻底测试所有挂载选项覆盖，以便了解这些更改对文件系统访问权限和性能的影响。 
   +  下表显示了 EFS 挂载帮助程序使用的默认挂载选项。     
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/efs-encrypted-file-systems/encryption-of-data-in-transit.html)
   +  将以下行添加到 `/etc/fstab`，以便在系统重新启动后自动重新挂载文件系统。 

     ```
           {{file-system-id}} {{efs-mount-point}} efs _netdev, tls, iam 0 0
     ```

## 使用传输中数据加密
<a name="using-encryption-of-data-in-transit"></a>

 如果您组织的政策或监管政策要求对传输中数据进行加密，我们建议对访问文件系统的每个客户端上的传输中数据进行加密。在连接级别配置加密和解密，并增加了另一层安全性。 

 使用 EFS 挂载帮助程序挂载文件系统，在客户端和 Amazon EFS 之间设置并维护一个 TLS 1.2 隧道，并通过这个加密隧道路由所有 NFS 流量。用于建立加密 TLS 连接的证书由亚马逊证书颁发机构（CA）签名，并受到大多数现代 Linux 发行版的信任。EFS 挂载帮助程序还会生成一个监视程序进程来监视每个文件系统的所有安全隧道并确保它们正在运行。 

使用 EFS 挂载帮助程序建立与 Amazon EFS 的加密连接后，无需其他用户输入或配置。加密对访问文件系统的用户连接和应用程序是透明的。

使用 EFS 挂载帮助程序成功挂载并建立与 EFS 文件系统的加密连接后，挂载命令的输出显示文件系统已挂载，并且已使用 localhost（127.0.0.1）作为网络中继建立加密隧道。请参阅以下示例输出。

```
      127.0.0.1:/ on {{efs-mount-point}} type nfs4
      (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=20059,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1)
```

 要将 `efs-mount-point` 映射至 EFS 文件系统，请在 `/var/log/amazon/efs` 中查询 mount.log 文件，然后查找上次成功的挂载操作。这可以使用以下简单的 grep 命令来完成。 

```
      grep -E "Successfully
      mounted.*{{efs-mount-point}}"
      /var/log/amazon/efs/mount.log | tail -1
```

 此 grep 命令的输出将返回挂载的 EFS 文件系统的 DNS 名称。请参阅下面的示例输出。 

```
      2018-03-15 07:03:42,363 - INFO - Successfully mounted
      {{file-system-id}}.efs.{{region}}.amazonaws.com
      at {{efs-mount-point}}
```