【发布时间】:2025-12-31 02:20:11
【问题描述】:
我有一个关于在 Lambda 函数中运行的跨账户 IAM 问题。 (我知道人们可能会使用 STS 假设,但是这个包确实不值得保护,我不想通过链接帐户)
帐户“A”。
S3 – package “s3://foo/foo”
IAM credentials “pkg_creds” for bucket "s3://foo"
帐户“B”
Lamba function “gogo” runs
In this Lambda function, it attempts to use boto3 and the pkg_creds to
download package “s3://foo/foo”, but if fails with this error:
**The provided token is malformed or otherwise invalid.**
Lambda 是只读的,但如果我使用 boto3.client(不是会话),我相信 boto3 不会将凭据写入 ~/.aws。但是,我还将 AWS_CONFIG_FILE 设置为 /tmp 以防万一。它仍然失败。我怀疑我的提议是不可能的,因为 LAMBDA 具有不可变的 AWS 凭证,您无法更改范围,即使是明确赋予 boto3 的范围。
让我知道你的想法。我可能会尝试使用 Faragate 来完成这项工作,但 Lambda 函数更易于维护和部署。
提前致谢!
【问题讨论】:
-
与不正确且可能不安全的操作(共享 IAM 用户凭证)相比,正确且安全地执行此操作(具有跨账户角色信任)并没有那么大的努力。 PS“Lambda 是只读的”是什么意思?
-
jarmod,谢谢!我完全想坚持良好的标准做法。它实际上是一个 saas,我在其他用户帐户中创建存储桶。这不像一对少数的关系。用户提供 iam,然后我使用自己的 lambda 帐户为他们创建存储桶。
-
对不起,当我用谷歌搜索这个错误时,它说 boto3 正在尝试将凭据写入主目录。实际上,如果我使用 boto3.session。我的错。应该提到我为什么写只读。
-
他们为您提供他们账户的 IAM 用户凭证?或者他们授予您的账户(或您的 Lambda 函数的角色)在其账户中担任 IAM 角色的权限,并且该担任的角色授予您对其 S3 存储桶的权限?或者是其他东西? IAM 用户选项有效,但不是一个好的选项。第二个选项是您想要的理想位置。
-
对于入职培训,我们将引导他们完成向导。他们提供 iam 凭据。他们可以在入职后删除即时消息凭据,但我们需要它像令牌一样为他们创建底层存储桶。如果我们让他们创建存储桶,它将被错误命名,没有加密......等等。
标签: amazon-web-services aws-lambda scope amazon-iam