首页 > 解决方案 > 通过托管在 VPC 私有子网中的 Lambda 从另一个账户访问 S3 存储桶

问题描述

我有两个 AWS 账户 A 和 B,我有以下设置

账户 A:S3 存储桶

账户 B:托管需要从账户 A 访问 S3 存储桶的 Lambda

我在账户 B 中创建了一个具有以下策略的 IAM 角色并将其附加到 Lambda

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:::dest-bucket-name/*"
    },
    {
        "Effect": "Allow",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::dest-bucket-name/*"
    }
]
}

我还将存储桶策略(如下)与账户 A 中的 S3 存储桶相关联

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::AccountBID:role/lambda-role"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::dest-bucket-name/*"
    }
]
}

VPC 终端节点已正确配置。从存储桶下载工件的 Lambda 请求超时,有人可以指出我错在哪里。

标签: amazon-s3aws-lambdaamazon-iam

解决方案


有两点突出:

  1. 你确定你的 lambda 成功地扮演了它的角色吗?

  2. s3:ListBucket是应用于存储桶的权限。arn:aws:s3:::dest-bucket-name/*匹配存储桶中的所有对象。尝试ListBucket单独申请,以arn:aws:s3:::dest-bucket-name. (该模式通常具有一个用于对象操作的策略块,以及另一个用于存储桶操作的策略块。)


推荐阅读