为 Amazon S3 存储桶创建会话策略 - Amazon Transfer Family
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

为 Amazon S3 存储桶创建会话策略

会话策略是一项 Amazon Identity and Access Management (IAM) 策略,它限制用户访问 Amazon S3 存储桶的某些部分。它通过实时评估访问来做到这一点。

注意

会话策略仅适用于 Amazon S3。对于 Amazon EFS,您可以使用 POSIX 文件权限限制访问权限。

当您需要向一组用户授予对 S3 存储桶的特定部分的相同访问权限时,可以使用范围缩小策略。例如,一组用户可能仅需访问 home 目录。该组用户共享相同的 角色。

注意

路径的长度上限是 4000 个字符。有关更多详细信息,请参阅 API 参考CreateUser操作的策略请求参数

要创建范围缩小策略,请在 IAM 策略中使用以下策略变量:

  • ${transfer:HomeBucket}

  • ${transfer:HomeDirectory}

  • ${transfer:HomeFolder}

  • ${transfer:UserName}

重要

您不能在托管策略中使用前述变量。也不能在 IAM 角色定义中将其用作策略变量。您可以在 策略中创建这些变量,并在设置用户时直接提供这些变量。另外,您不能在此范围缩小策略中使用 ${aws:Username} 变量。此变量引用了 用户名而不是 所需的用户名。

以下代码所示为会话策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::${transfer:HomeBucket}" ], "Condition": { "StringLike": { "s3:prefix": [ "${transfer:HomeFolder}/*", "${transfer:HomeFolder}" ] } } }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": "arn:aws:s3:::${transfer:HomeDirectory}/*" } ] }
注意

前面的策略示例假设用户的主目录设置为包含尾部斜杠,以表示它是一个目录。另一方面,如果您设置的用户HomeDirectory不带尾部的斜杠,则应将其作为策略的一部分。

在前面的示例策略中,请注意使用transfer:HomeFoldertransfer:HomeBuckettransfer:HomeDirectory策略参数。这些参数是为用户配置的设置的,如HomeDirectory和中所述实施您的 API Gateway 方法HomeDirectory这些参数具有以下定义:

  • transfer:HomeBucket参数将替换为的HomeDirectory第一个组件。

  • transfer:HomeFolder参数将替换为HomeDirectory参数的其余部分。

  • transfer:HomeDirectory参数删除了前导正斜杠 (/),因此可以在Resource语句中将其用作 S3 Amazon 资源名称(ARN)的一部分。

注意

如果您使用的是逻辑目录(即用户的homeDirectoryTypeLOGICAL),则不支持这些策略参数(HomeBucketHomeDirectoryHomeFolder)。

例如,假设为 Transfer Family 用户配置的HomeDirectory参数是/home/bob/amazon/stuff/

  • transfer:HomeBucket 设置为 /home

  • transfer:HomeFolder 设置为 /bob/amazon/stuff/

  • transfer:HomeDirectory 变为 home/bob/amazon/stuff/

第一个"Sid"允许用户列出从/home/bob/amazon/stuff/开始的所有目录。

第二个"Sid"限制用户对同一路径/home/bob/amazon/stuff/putget访问权限。

借助上述策略,当用户登录时,他们只能访问其主目录中的对象。在连接时, Amazon Transfer Family 将这些变量替换为适合用户的值。这样做可以更轻松地将相同的策略文档应用于多个用户。此方法减少了用于管理用户对 存储桶的访问的 角色和策略管理的开销。

您还可以使用范围缩小策略以根据业务需求自定义每个用户的访问权限。有关更多信息,请参阅 IAM 用户指南 AssumeRoleWithWebIdentity中的权限 AssumeRole、 AssumeRoleWith SAM L 和

注意

Amazon Transfer Family 存储策略 JSON,而不是策略的亚马逊资源名称 (ARN)。因此,当您在 IAM 控制台中对策略进行更改时,需要返回到 Amazon Transfer Family 控制台并使用最新策略内容更新您的用户。您可以在 用户配置 部分的 策略信息 选项卡上更新用户。

如果您使用的是 Amazon CLI,则可以使用以下命令来更新策略。

aws transfer update-user --server-id server --user-name user --policy \ "$(aws iam get-policy-version --policy-arn policy --version-id version --output json)"