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 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen