IAM策略与AWS Transfer Family怎么设置最好?

0

【以下的问题经过翻译处理】 我有一个通过Okta身份验证SFTP文件传输的Lambda函数,并且Lambda函数通过API Gateway调用。由于我公司有许多不同的客户,所以我们选择使用此路由进行身份验证,而不是在AWS中为他们创建用户帐户,测试过程中一切正常,除了一个关键的功能部分。

由于我们有许多客户,我们不希望他们能够互相交互或甚至看到另一个客户的专用S3存储桶中的文件夹。目录结构将主S3桶置于顶层,并在该桶中包含每个客户的文件夹。从那里,他们可以创建子文件夹,上传文件等。我已经按照此文档中所述创建了IAM策略(作为角色的内联策略):https://docs.aws.amazon.com/transfer/latest/userguide/users-policies.html。我的IAM策略看起来与文档中“为Amazon S3桶创建会话策略”部分所示的一样。

“ transfer”变量在Lambda函数中定义。不过,这些“ transfer”变量似乎没有传递到IAM策略中。当我查看Transfer Family终端节点日志时,它显示连接成功后被拒绝访问(机密信息已经删除):

<user>.39e979320fffb078 CONNECTED SourceIP=<source_ip> User=<user> HomeDir=/<s3_bucket><customer_folder> Client="SSH-2.0-Cyberduck/8.3.3.37544 (Mac OS X/12.4) (x86_64)" Role=arn:aws:iam::<account_id>:role/TransferS3AccessRole Kex=diffie-hellman-group-exchange-sha256 Ciphers=aes128-ctr,aes128-ctr

<user>.39e979320fffb078

1 回答
0

【以下的回答经过翻译处理】 ${transfer:*} 变量不支持附加到 IAM 角色的策略中。如果你在那里使用它们,我建议将它们删除,因为它们不会被替换。而且,S3 将其视为原始字符串,导致访问被拒绝的错误。这些变量仅适用于直接与传输用户关联的会话策略或作为其 HomeDirectory 配置的一部分 (${transfer:Username} 仅适用于此情况)。

对于你的场景,要求建立基于 UserName 的动态映射,特别是将域部分映射到 S3 中的类似命名前缀。在这种情况下,我建议采用逻辑目录方法来消除会话策略的麻烦。请参考以下工作流程-

  • 客户端连接到服务器,并且最终发出相同的 Lambda 请求。
  • Lambda 使用 Okta 执行必要的身份验证检查,然后开始构建向服务器返回的响应。 【假设身份验证成功】
  • 在此响应中,您基于用户名部分中的域构建逻辑目录。Lambda 应该可以访问用户名,因为它接收了验证请求。 【附带参考代码片段如下所示】
  • 服务器接收用户配置并将用户映射到逻辑目录。

示例参考代码段:

# 解析来自 Username 的域
username = 'abc@xyz.com'
domain = username.split('@')[-1]

# 构建逻辑目录结构
# e = 条目-表示客户端登录时看到的内容 
# t = 目标-表示 S3 中的实际映射
profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则