

# 加密
<a name="s3-files-encryption"></a>

S3 Files 提供全面的加密功能来保护静态数据和传输中数据。

## 静态加密
<a name="s3-files-encryption-at-rest"></a>

您的 S3 存储桶已使用 Amazon S3 的加密机制进行加密。有关 S3 中数据加密的信息，请参阅[利用加密来保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html)。

S3 Files 使用服务器端加密对 S3 文件系统中的静态数据进行加密。服务器端加密是指由接收数据的应用程序或服务在目标位置对数据进行加密。在 S3 文件系统中，默认情况下，数据和元数据在写入存储之前会进行加密，并在读取时自动解密。这些过程是 S3 Files 以透明方式处理的，因此，您无需修改您的应用程序。使用 AWS Key Management Service（KMS）密钥通过以下方法之一对文件系统中的所有静态数据进行加密：
+ （默认）具有 AWS 拥有的 KMS 密钥的服务器端加密（SSE-KMS）
+ 具有客户自主管理型 KMS 密钥的服务器端加密（SSE-KMS-CMK）

使用 AWS KMS 密钥需要支付额外费用。有关更多信息，请参阅《AWS Key Management Service 指南》**中的 [AWS KMS 关键概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)和 [AWS KMS 定价](https://aws.amazon.com/kms/pricing/)。

### 具有 AWS 拥有的 KMS 密钥的服务器端加密（SSE-KMS）
<a name="s3-files-encryption-aws-owned-key"></a>

这是加密 S3 文件系统中的静态数据的默认密钥。AWS 拥有的密钥是 AWS 服务拥有并管理的 KMS 密钥的集合。当您使用 AWS 拥有的密钥时，S3 Files 拥有并管理 S3 文件系统中静态数据和元数据的加密。有关 AWS 拥有的密钥的更多详细信息，请访问 [AWS KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)。

### 具有客户自主管理型 AWS KMS 密钥的服务器端加密（SSE-KMS-CMK）
<a name="s3-files-encryption-sse-kms"></a>

在创建文件系统时，您可以选择配置您管理的 AWS Key Management Service（AWS KMS）密钥。将 SSE-KMS 加密用于 S3 文件系统时，AWS KMS 密钥必须位于与该文件系统相同的区域中。

## 适用于 AWS KMS 的 S3 Files 密钥策略
<a name="s3-files-encryption-key-policies"></a>

密钥策略是控制对客户托管式密钥的访问的主要方式。有关密钥策略的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [AWS KMS 中的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。以下列表描述了 S3 Files 支持的所有与 AWS KMS 相关的权限，用于加密静态文件系统：

kms:Encrypt  
（可选）将明文加密为加密文字。该权限包含在默认密钥策略中。

kms:Decrypt  
（必需）解密加密文字。密文是以前加密的明文。该权限包含在默认密钥策略中。

kms:ReEncrypt  
（可选）使用新的客户自主管理型密钥加密服务器端的数据，而不公开客户端的数据明文。将先解密数据，然后重新加密。该权限包含在默认密钥策略中。

kms:GenerateDataKeyWithoutPlaintext  
（必需）返回根据自主管理型密钥加密的数据加密密钥。该权限包含在默认密钥政策中的 kms:GenerateDataKey\* 下面。

kms:CreateGrant  
（必需）为密钥添加授权以指定哪些用户可以在什么条件下使用密钥。授权是密钥政策的替代权限机制。有关授权的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [AWS KMS 中的授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。该权限包含在默认密钥策略中。

kms:DescribeKey  
（必需）提供有关指定的客户自主管理型密钥的详细信息。该权限包含在默认密钥策略中。

kms:ListAliases  
（可选）列出账户中的所有密钥别名。使用控制台创建加密的文件系统时，该权限将填充选择 KMS 密钥列表。我们建议您使用该权限以提供最佳的用户体验。该权限包含在默认密钥策略中。

## 密钥状态及其影响
<a name="s3-files-encryption-key-states"></a>

KMS 密钥的状态直接影响到对加密文件系统的访问：

已启用  
正常操作 - 对文件系统具有完全读取和写入权限。

已禁用  
一段时间后，文件系统变得无法访问。可以重新启用。

待删除  
文件系统变得无法访问。在等待期间可以取消删除。请注意，取消密钥删除后，需要将密钥移至启用状态。

已删除  
文件系统永久无法访问。此操作无法撤消。

**警告**  
如果您禁用或删除用于文件系统的 KMS 密钥，或者撤销 S3 Files 对该密钥的访问权限，您的文件系统将变得无法访问。如果您没有备份，这可能会导致数据丢失。在更改加密密钥之前，请务必确保已创建正确的备份过程。

## 传输中加密
<a name="s3-files-encryption-in-transit"></a>

S3 Files 要求使用传输层安全性协议（TLS）对传输中数据进行加密。使用挂载助手挂载文件系统时，所有在客户端和文件系统之间传输的数据都将使用 TLS 进行加密。挂载助手初始化 efs-proxy 进程，以与您的文件系统建立安全的 TLS 连接。挂载助手还会创建一个名为 amazon-efs-mount-watchdog 的进程，用于监视挂载的运行状况，并在首次挂载 S3 文件系统时自动启动。它可确保每个挂载的 efs-proxy 进程正在运行，并在卸载文件系统后停止该进程。如果该进程由于某种原因而意外终止，watchdog 进程将重新启动该进程。

以下内容介绍传输中 TLS 加密的工作原理：

1. 在您的客户端和文件系统之间建立安全的 TLS 连接

1. 所有 NFS 流量都通过此加密连接进行路由

1. 数据在传输前经过加密，接收后解密

传输中数据加密会更改 NFS 客户端设置。在检查您主动挂载的文件系统时，将会看到一个文件系统挂载到 127.0.0.1 或 localhost，如以下示例中所示。

```
$ mount | column -t
127.0.0.1:/  on  /home/ec2-user/s3files        type  nfs4         (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=20127,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1)
```

您可以使用挂载助手来挂载文件系统，该助手始终使用 TLS 对传输中数据进行加密。因此，在挂载时，将重新配置 NFS 客户端以挂载到本地端口。