管理访问控制 - Amazon Transfer Family
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

管理访问控制

注意

本节仅适用于服务托管的身份提供程序。如果您使用的是自定义身份提供程序,请参阅使用自定义身份提供商.

您可以控制用户对的访问权限Amazon Transfer Family资源通过使用Amazon Identity and Access Management(IAM) 策略。IAM 策略是一个语句(通常采用 JSON 格式),它允许对资源进行特定级别的访问。您可以使用 IAM 策略来定义希望允许用户执行和不执行哪些文件操作。您还可以使用 IAM 策略来定义希望允许用户访问哪些 Amazon S3 存储桶。要为用户指定这些策略,您可以为创建 IAM 角色Amazon Transfer Family,该文件具有与之关联的 IAM 策略和信任关系。

为每个用户分配一个 IAM 角色。当用户登录您的服务器时,Amazon Transfer Family承担映射到用户的 IAM 角色。要了解如何创建一个向用户提供对 Amazon S3 存储桶的访问权限的 IAM 角色,请参阅以下内容。有关如何创建角色和委派权限的信息,请参阅创建向Amazon服务中的IAM 用户指南.

IAM 角色的类型Amazon Transfer Family使用称作服务角色。

注意

如果您的 Amazon S3 存储桶使用Amazon Key Management Service(Amazon KMS),您必须在策略中指定其他权限。有关详细信息,请参阅数据加密。此外,您可以查看有关会话策略中的IAM 用户指南.

允许 Amazon S3 存储桶的读写访问权限

在下文中,您可以了解如何创建一个 IAM 策略来允许对特定 Amazon S3 存储桶进行读写访问。通过将具有此 IAM 策略的 IAM 角色分配给用户,将允许该用户对指定的 Amazon S3 存储桶进行读/写访问。

以下策略允许通过编程方式对 Amazon S3 存储桶进行读写访问。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"ReadWriteS3", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::bucketname"] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": ["arn:aws:s3:::bucketname/*"] } ] }

ListBucket 操作需要对存储桶本身的权限。PUTGETDELETE 操作需要对象权限。由于这些是不同的实体,因此使用不同的 Amazon 资源名称 (ARN) 指定它们。

如果您的存储桶启用了 Amazon Key Management Service (Amazon KMS) 加密,则需要在策略中启用其他操作。有关 的更多信息Amazon KMS,请参阅是什么AmazonKey Management Service

要进一步限制您的用户仅访问home目录中的信 Amazon S3 请参阅为 Amazon S3 存储桶创建会话策略.

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

A会话策略是一个Amazon Identity and Access Management(IAM) 策略,它仅允许用户访问 Amazon S3 存储桶的特定部分。它通过实时评估访问来做到这一点。

注意

会话策略仅与 Amazon S3 一起使用。对于亚马逊 EFS,您可以使用 Posix 文件权限来限制访问权限。

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

注意

会话策略的最大长度是 2048 个字符。有关详细信息,请参阅策略请求参数(对于 )CreateUser操作API 参考.

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

  • ${transfer:HomeBucket}

  • ${transfer:HomeDirectory}

  • ${transfer:HomeFolder}

  • ${transfer:UserName}

注意

您不能在 IAM 角色定义中使用前面列出的变量作为策略变量。您可以在 IAM 策略中创建这些变量,并在设置用户时直接提供这些变量。此外,您也不能使用${aws:Username}变量在此会话策略中。此变量引用 IAM 用户名而不是Amazon 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}/*" } ] }

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

  • 这些区域有:transfer:HomeBucket参数被替换为HomeDirectory.

  • 这些区域有:transfer:HomeFolder参数将替换为HomeDirectory参数。

  • 这些区域有:transfer:HomeDirectory参数具有前导正斜杠(/),以便它可以用作 S3 Amazon 资源名称 (ARN) 的一部分Resource网页。

注意

如果您使用的是逻辑目录,也就是说,用户的homeDirectoryTypeLOGICAL— 这些策略参数 (HomeBucketHomeDirectory, 和HomeFolder)不支持。

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

  • transfer:HomeBucket设置为/home.

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

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

第一个"Sid"允许用户列出所有目录,开始于/home/bob/amazon/stuff/.

第二个"Sid"限制用户putget访问相同的路径,/home/bob/amazon/stuff/.

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

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

注意

Amazon Transfer Family存储策略 JSON,而不是策略的 Amazon 资源名称 (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)"

防止用户在 S3 存储桶中创建目录

您可以防止用户在 Amazon S3 存储桶中创建目录。为此,您应创建 IAM 策略,允许s3:PutObject操作,但在密钥以 “/”(正斜杠)结尾时拒绝它。

以下示例策略允许用户将文件上传到 Amazon S3 存储桶,但不允许他们在存储桶中创建目录,也就是说,它拒绝mkdir命 Amazon S3。

{ "Sid":"DenyMkdir", "Action":[ "s3:PutObject" ], "Effect":"Deny", "Resource":"arn:aws:s3:::my-sftp-bucket/*/" }