本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 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:HomeFolder
、transfer:HomeBucket
和transfer:HomeDirectory
策略参数。这些参数是为用户配置的设置的,如HomeDirectory和中所述实现你的API网关方法。HomeDirectory
这些参数具有以下定义:
transfer:HomeBucket
参数将替换为的HomeDirectory
第一个组件。transfer:HomeFolder
参数将替换为HomeDirectory
参数的其余部分。该
transfer:HomeDirectory
参数删除了前导正斜杠 (/
),因此可以在Resource
语句中将其用作 S3 Amazon 资源名称 (ARN) 的一部分。
注意
如果您使用的是逻辑目录(即用户的homeDirectoryType
是LOGICAL
),则不支持这些策略参数(HomeBucket
、HomeDirectory
和HomeFolder
)。
例如,假设为 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/
的 put
和 get
访问权限。
借助上述策略,当用户登录时,他们只能访问其主目录中的对象。在连接时, 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-nameuser
--policy \ "$(aws iam get-policy-version --policy-arnpolicy
--version-idversion
--output json)"