创建IAM角色和策略 - AWS Transfer Family

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

创建IAM角色和策略

本主题介绍可与之配合使用的策略和角色类型 AWS Transfer Family,并介绍创建用户角色的过程。它还描述了会话策略的工作原理,并提供了一个用户角色示例。

AWS Transfer Family 使用以下类型的角色:

  • 用户角色-允许服务管理的用户访问必要的 Transfer Family 资源。 AWS Transfer Family 在 Transfer Family 用户的背景下担任此角色ARN。

  • 访问角色 - 仅提供对正在传输的 Amazon S3 文件的访问权限。对于入站AS2转移,访问角色使用协议的 Amazon 资源名称 (ARN)。对于出站AS2传输,访问角色使用连接器。ARN

  • 调用角色 — 用于 Amazon API Gateway 作为服务器的自定义身份提供商。Transfer Family 在 Transfer Family 服务器环境中扮演这个角色ARN。

  • 日志角色-用于将条目登录到 Amazon CloudWatch。Transfer Family 使用此角色记录成功和失败的详细信息以及有关文件传输的信息。Transfer Family 在 Transfer Family 服务器环境中扮演这个角色ARN。对于出站AS2传输,日志记录角色使用连接器ARN。

  • 执行角色 - 允许 Transfer Family 用户调用和启动工作流程。Transfer Family 在 Transfer Family 工作流程的背景下担任此角色ARN。

除了这些角色之外,您还可以使用会话策略。会话策略用于在必要时限制访问权限。请注意,这些策略是独立的:也就是说,您不会将这些策略添加到角色中。相反,您可以直接向 Transfer Family 用户添加会话策略。

注意

创建服务管理的 Transfer Family 用户时,可以选择基于主文件夹自动生成策略。如果您想限制用户访问自己的文件夹,这是一个有用的快捷方式。此外,您还可以在会话策略工作原理中查看有关会话策略的详细信息以及示例。您还可以在IAM用户指南的会话策略中找到有关会话策略的更多信息。

创建用户角色

在创建用户时,您会做出大量有关用户访问权限的决定。这些决定包括用户可以访问哪些 Amazon S3 存储桶或 Amazon EFS 文件系统、每个 Amazon S3 存储桶的哪些部分和文件系统中的哪些文件可以访问,以及用户拥有哪些权限(例如PUTGET)。

要设置访问权限,您需要创建基于身份的 AWS Identity and Access Management (IAM) 策略和角色来提供该访问信息。在此过程中,您需要为用户提供对作为文件操作目标或来源的 Amazon S3 存储桶或亚马逊EFS文件系统的访问权限。为此,请执行以下简要步骤(稍后将详细介绍):

创建用户角色
  1. 为创建IAM策略 AWS Transfer Family。为创建IAM策略 AWS Transfer Family中对此进行了描述。

  2. 创建IAM角色并附加新IAM策略。有关示例,请参阅读/写访问策略示例

  3. 在IAM角色 AWS Transfer Family 之间建立信任关系。建立信任关系中对此进行了描述。

以下过程描述了如何创建IAM策略和角色。

为创建IAM策略 AWS Transfer Family
  1. 打开IAM控制台,网址为https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 策略,然后选择 创建策略

  3. 创建策略页面上,选择JSON选项卡。

  4. 在出现的编辑器中,将编辑器的内容替换为要附加到IAM角色的IAM策略。

    您可以授予读/写访问权限或限制用户访问其主目录。有关更多信息,请参阅 读/写访问策略示例

  5. 选择查看策略,并提供策略的名称和描述,然后选择创建策略

接下来,创建IAM角色并将新IAM策略附加到该角色上。

为创建IAM角色 AWS Transfer Family
  1. 在导航窗格中,选择 Roles(角色),然后选择 Create role(创建角色)

    创建角色页面上,确保已选择AWS 服务

  2. 从服务列表中选择转移,然后选择下一步:权限。这在 AWS Transfer Family 和之间建立了信任关系 AWS。

  3. 附加权限策略部分中,找到并选择刚刚创建的策略,然后选择下一步:标签

  4. (可选)输入标签的键和值,然后选择下一步:审核

  5. 审核页面上,输入新角色的名称和描述,然后选择创建角色

接下来,在 AWS Transfer Family 和之间建立信任关系 AWS。

建立信任关系
注意

在我们的示例中,我们同时使用 ArnLikeArnEquals。它们在功能上是相同的,因此您可以在制定策略时使用其中任何一个。Transfer Family 文档在条件包含通配符时使用 ArnLikeArnEquals 用于表示完全匹配的条件。

  1. 在IAM控制台中,选择您刚刚创建的角色。

  2. Summary (摘要) 页面上,选择 Trust relationships (信任关系),然后选择 Edit trust relationship (编辑信任关系)

  3. 编辑信任关系编辑器中,确保服务"transfer.amazonaws.com"。编辑后的访问策略如下所示。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "transfer.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    建议您使用 aws:SourceAccountaws:SourceArn 条件键来防止出现混淆代理人问题。源帐户是服务器的所有者,源帐户ARN是用户ARN的所有者。例如:

    "Condition": { "StringEquals": { "aws:SourceAccount": "account_id" }, "ArnLike": { "aws:SourceArn": "arn:aws:transfer:region:account_id:user/*" } }

    如果您希望限制到特定的服务器而不是用户账户中的任何服务器,也可以使用ArnLike条件。例如:

    "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:transfer:region:account-id:user/server-id/*" } }
    注意

    在上面的示例中,替换每个 user input placeholder 用你自己的信息。

    有关混淆代理人问题的详细信息以及更多示例,请参阅 防止跨服务混淆代理

  4. 选择更新信任策略以更新访问策略。

现在,您已经创建了一个 AWS Transfer Family 允许代表您呼叫 AWS 服务的IAM角色。您向该角色附加了您为向用户授予访问权限而创建的IAM策略。在AWS Transfer Family 服务器端点入门部分中,此角色和策略将分配给您的用户或用户。

另请参阅

会话策略工作原理

管理员创建角色时,该角色通常包含涵盖多个用例或团队成员的广泛权限。如果管理员配置了控制台 URL,则他们可以使用会话策略来减少对生成的会话的权限。例如,如果您创建了一个具有读/写访问权限的角色,则可以设置一个URL限制用户只能访问其主目录的权限。

会话策略是当您以编程方式为角色或用户创建临时会话时作为参数传递的高级策略。会话策略对于锁定用户非常有用,这样他们就只能访问存储桶中包含其用户名的对象前缀的部分。下图显示了会话策略的权限是会话策略和基于资源的策略的交集,以及会话策略和基于身份策略的交集。

会话策略权限 Venn 图。显示基于资源的策略、基于身份的策略和会话策略交叉点权限的有效性。

有关更多详细信息,请参阅《IAM用户指南》中的会话策略

在中 AWS Transfer Family,只有当您向 Amazon S3 传输或从 Amazon S3 传输数据时,才支持会话策略。以下示例策略是一个会话策略,它仅限制用户访问其 home 目录。请注意以下几点:

  • 只有当您需要启用跨账户存取时,才需要GetObjectACLPutObjectACL语句。也就是说,您的 Transfer Family 服务器需要访问其他账户中的存储桶。

  • 会话策略的最大长度为 2048 个字符。有关更多详细信息,请参阅API参考资料中CreateUser操作的 P olicy 请求参数

  • 如果您的 Amazon S3 存储桶使用 AWS Key Management Service (AWS KMS) 进行加密,则必须在策略中指定其他权限。有关详细信息,请参阅Amazon S3 中的数据加密

{ "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:DeleteObject", "s3:DeleteObjectVersion", "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访问权限。

读/写访问策略示例

授予对 Amazon S3 存储桶的读取/写入访问权限

以下示例策略 AWS Transfer Family 授予对您的 Amazon S3 存储桶中对象的读/写权限。

请注意以下几点:

  • Replace(替换) DOC-EXAMPLE-BUCKET 使用您的 Amazon S3 存储桶的名称。

  • 只有当您需要启用跨账户存取时,才需要 GetObjectACLPutObjectACL 语句。也就是说,您的 Transfer Family 服务器需要访问其他账户中的存储桶。

  • 只有在正在访问的 Amazon S3 存储桶上启用版本控制时,才需要使用GetObjectVersionDeleteObjectVersion语句。

    注意

    如果您曾经为存储桶启用过版本控制,则需要这些权限,因为您只能在 Amazon S3 中暂停版本控制,而不能完全将其关闭。有关详细信息,请参阅未版本化、启用版本控制和已暂停版本控制的存储桶。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ] }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
授予文件系统访问 Amazon EFS 文件系统中文件的权限

注意

除了策略外,您还必须确保您的POSIX文件权限授予了相应的访问权限。有关更多信息,请参阅 Amazon Elastic File System 用户指南中的在网络文件系统 (NFS) 级别使用用户、群组和权限

以下示例策略允许根文件系统访问您的 Amazon EFS 文件系统中的文件。

注意

在以下示例中,替换 region 与您所在的地区,account-id 使用文件所在的账户,以及 file-system-id 使用您的亚马逊 Elastic File System(亚马逊EFS)的 ID。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RootFileSystemAccess", "Effect": "Allow", "Action": [ "elasticfilesystem:ClientRootAccess", "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite" ], "Resource": "arn:aws:elasticfilesystem:region:account-id:file-system/file-system-id" } ] }

以下示例策略授予用户文件系统访问您的 Amazon EFS 文件系统中的文件的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "UserFileSystemAccess", "Effect": "Allow", "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite" ], "Resource": "arn:aws:elasticfilesystem:region:account-id:file-system/file-system-id" } ] }