

# 配置 Amazon S3 Files 访问权限
<a name="configuration-filesystem-s3files"></a>

Amazon S3 Files 提供共享文件系统，可将任意 Amazon 计算资源与 Amazon S3 内的数据直接连通。Amazon S3 Files 通过本地挂载路径上的读取、写入等标准文件系统操作，将 Amazon S3 对象作为文件进行访问。了解有关 [Amazon S3 Files](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files.html) 的更多信息。

**Topics**
+ [先决条件和设置](#configuration-filesystem-s3files-setup)
+ [执行角色和用户权限](#configuration-filesystem-s3files-permissions)
+ [连接到文件系统（控制台）](#configuration-filesystem-s3files-config)

## 先决条件和设置
<a name="configuration-filesystem-s3files-setup"></a>

在为 Lambda 函数设置 Amazon S3 Files 之前，务必先满足以下条件：
+ 拥有处于可用状态的 Amazon S3 文件系统和挂载目标，且与 Lambda 函数属于同一账户及 Amazon Web Services 区域。
+ Lambda 函数与挂载目标处于同一 VPC。函数部署所在的每个子网内均配置挂载目标。
+ 安全组允许 Lambda 函数与挂载目标之间的 NFS 流量（端口 2049）。[了解有关配置安全组的更多信息](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-prereq-policies.html#s3-files-prereq-security-groups)。

有关更多信息，请参阅《Amazon S3 用户指南》**中的以下主题：
+ [开始使用 Amazon S3 Files](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-getting-started.html)
+ [Amazon S3 Files 先决条件](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-prereq-policies.html)
+ [Amazon S3 Files 最佳实践](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-best-practices.html)

## 执行角色和用户权限
<a name="configuration-filesystem-s3files-permissions"></a>

函数执行角色需具备以下权限，方可访问 Amazon S3 Files 文件系统：

**执行角色权限**
+ **s3files:ClientMount**：挂载文件系统必需权限。
+ **s3files:ClientWrite**：读写访问所必需的。读写访问必需权限。只读连接无需此项。

这些权限包含在 [AmazonS3FilesClientReadWriteAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonS3FilesClientReadWriteAccess.html) 托管式策略中。此外，您的执行角色必须具有[连接到文件系统的 VPC 所需的权限](configuration-vpc.md#configuration-vpc-permissions)。

**注意**  
Amazon S3 Files 直接从 Amazon S3 读取数据，以此优化吞吐量。仅配置内存不低于 512 MB 的函数，支持从 Amazon S3 直接读取。

函数若要从 Amazon S3 直接读取，还需具备以下权限：
+ **s3:GetObject**
+ **s3:GetObjectVersion**

有关必要权限的更多信息，请参阅**《Amazon S3 用户指南》中的 [Amazon S3 Files 的 IAM 权限](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-prereq-policies.html#s3-files-prereq-iam)。

在控制台配置文件系统时，Lambda 会使用您的权限来验证挂载目标和接入点。要配置函数以连接到文件系统，您的用户需要以下权限：

**用户权限**
+ **s3files:ListFileSystems**
+ **s3files:ListAccessPoints**
+ **s3files:GetFileSystem**
+ **s3files:GetAccessPoint**
+ **s3files:CreateAccessPoint**：从控制台为函数挂载文件系统时，需要该权限。

以下示例策略可为函数执行角色授予权限，以挂载具有读写访问权限的 Amazon S3 文件系统，并直接从 Amazon S3 读取数据。

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "S3FilesLambdaAccess",
            "Effect": "Allow",
            "Action": [
                "s3files:ClientMount",
                "s3files:ClientWrite"
            ],
            "Resource": "*"
        },
        {
            "Sid": "S3DirectRead",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::{{bucket-name}}/*"
        },
        {
            "Sid": "S3FilesConsoleSetup",
            "Effect": "Allow",
            "Action": [
                "s3files:ListFileSystems",
                "s3files:ListAccessPoints",
                "s3files:GetFileSystem",
                "s3files:GetAccessPoint",
                "s3files:CreateAccessPoint"
            ],
            "Resource": "*"
        }
    ]
}
```

## 连接到文件系统（控制台）
<a name="configuration-filesystem-s3files-config"></a>

函数通过 VPC 中的本地网络连接到文件系统。函数连接到的子网可以是包含文件系统挂载点的相同子网，也可以是位于同一可用区中的子网，这些子网可以将 NFS 流量（端口 2049）路由到文件系统。

**注意**  
如果函数尚未连接到 VPC，请参阅[授予 Lambda 函数访问 Amazon VPC 中资源的权限](configuration-vpc.md)。

**配置 S3 Files 访问权限**

1. 打开 Lamba 控制台的[函数](https://console.amazonaws.cn/lambda/home#/functions)页面。

1. 选择函数。

1. 选择**配置**，然后选择**文件系统**。

1. 选择**添加文件系统**（或选择**编辑**，修改现有配置）。

1. 选择 **S3 Files**。

1. 配置以下属性：
   + **S3 文件系统**：从下拉列表中选择文件系统。
   + **接入点**（可选）：选择接入点。如果文件系统没有接入点，Lambda 会在您保存时自动创建一个访问点（UID/GID 为 1000:1000，根目录为 `/lambda`，权限为 755）。如果存在接入点，则必须选择一个。
   + **Local mount path**（本地挂载路径） – 文件系统在 Lambda 函数上的挂载位置，以 `/mnt/` 开头。

1. 选择**保存**。

下次调用 Lambda 函数时，将会自动挂载该文件系统。