为 Amazon S3 存储桶创建会话策略 - AWS Transfer Family

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

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

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

注意

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

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

注意

路径的长度上限是 2048 个字符。有关更多详细信息,请参阅API参考资料中CreateUser操作的 P olicy 请求参数

要创建会话策略,请在策略中使用以下IAM策略变量:

  • ${transfer:HomeBucket}

  • ${transfer:HomeDirectory}

  • ${transfer:HomeFolder}

  • ${transfer:UserName}

重要

您不能在托管策略中使用前述变量。您也不能在IAM角色定义中将它们用作策略变量。您可以在IAM策略中创建这些变量,并在设置用户时直接提供这些变量。另外,您不能在此会话策略中使用 ${aws:Username} 变量。此变量指的是IAM用户名,而不是所需的用户名 AWS Transfer Family。

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

{ "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网关方法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 访问权限。

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

您还可以使用会话策略以根据业务需求自定义每个用户的访问权限。有关更多信息,请参阅《IAM用户指南》 AssumeRoleWithWebIdentity中的 AssumeRole AssumeRoleWithSAML、和的权限

注意

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

如果您使用的是 AWS 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)"