我有一个关于在 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 函数更易于维护和部署。
提前致谢!
答案 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 会话密钥,它似乎覆盖了显式密钥和秘密。