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

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

创建 IAM 角色和策略

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

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

  • 用户角色-允许服务管理的用户访问必要的 Transfer Family 资源。 Amazon 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)。

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

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

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

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

以下过程介绍如何创建 IAM policy 和角色。

为创建 IAM 策略 Amazon Transfer Family
  1. 访问:https://console.aws.amazon.com/iam/,打开 IAM 控制台。

  2. 在导航窗格中,选择 Policies (策略),然后选择 Create policy (创建策略)

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

  4. 在显示的编辑器中,将编辑器的内容替换为要附加到 IAM 角色的 IAM policy。

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

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

接下来,您将创建一个 IAM 角色并向该角色附加新的 IAM 策略。

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

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

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

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

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

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

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

建立信任关系
注意

在我们的示例中,我们同时使用 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/*" } }
    注意

    在上述示例中,将每个用户输入占位符替换为您自己的信息。

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

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

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

另请参阅

会话策略工作原理

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

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

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

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

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

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

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

  • 如果您的 Amazon S3 存储桶使用 Amazon Key Management Service (Amazon 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 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 S3 存储桶的读取/写入访问权限

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

请注意以下几点:

  • 请将 DOC-EXAMPLE-BUCKET 替换为您的 Amazon S3 Bucket 名称。

  • 只有当您需要启用跨账户存取时,才需要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 文件系统中的文件。

注意

在以下示例中,将区域替换为您的区域,将账户 ID 替换为文件所在的账户,file-system-id使用您的亚马逊弹性文件系统 (Amazon 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" } ] }