具有 IAM 凭证的跨账户 AWS Lambda

时间:2021-02-17 15:20:30

标签: amazon-web-services aws-lambda scope amazon-iam

我有一个关于在 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 函数更易于维护和部署。

提前致谢!

3 个答案:

答案 0 :(得分:2)

Lambda 根本不使用 { "error" : { "root_cause" : [ { "type" : "parse_exception", "reason" : "request body is required" } ], "type" : "parse_exception", "reason" : "request body is required" }, "status" : 400 } 配置文件,它默认使用环境变量。在 boto3 中有 many ways 用于配置 AWS 凭证。您应该能够使用显式 AWS 凭证在您的 Lambda 函数中创建一个新的 boto3 客户端,如下所示:

~/.aws

并将 client = boto3.client( 's3', aws_access_key_id=ACCOUNT_A_ACCESS_KEY, aws_secret_access_key=ACCOUNT_A_SECRET_KEY ) ACCOUNT_A_ACCESS_KEY 作为环境变量传递给函数。

答案 1 :(得分:0)

用户错误。我可以验证 lambda 函数中的 boto3 是否可以使用其范围之外的凭据。

答案 2 :(得分:0)

在进行更多故障排除后。问题是我接受了在 lambda 函数上设置的“环境变量”SESSION,但在我的 ec2 实例上没有。所以我总是使用 lambda 会话密钥,它似乎覆盖了显式密钥和秘密。