首页 > 解决方案 > Lambda 在使用 Boto3 访问另一个账户中的 S3 存储桶时超时

问题描述

我正在尝试使用 boto3 从我的 AWS Lambda 访问另一个账户中的 S3 存储桶。以下是我配置的步骤:
1. 在我的 Lambda 所在的账户 A 中,我创建执行角色 (Lambda-S3-SNS-VPC-Role) 并将一个 AmazonS3FullAccess 托管策略和一个内联策略附加到它:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1489133353000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::<Account-B-ID>:role/access-s3-bucket-from-lambda-in-another-acc-role"
            ]
        }
    ]
}

在我的 S3 存储桶所在的 Account-B 中,我创建了一个 IAM 角色 (access-s3-bucket-from-lambda-in-another-acc-role),如下所示: - 附加 AmazonS3FullAccess 托管策略和信任关系:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<Account-A-ID>:role/Lambda-S3-SNS-VPC-Role",
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

此外,在账户 B 的 S3 存储桶中,给出了以下存储桶策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<Account-A-ID>:role/Lambda-S3-SNS-VPC-Role"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-bucket-in-acc-B",
                "arn:aws:s3:::my-bucket-in-acc-B/*"
            ]
        }
    ]
}

下面是我的 Lambda 函数代码:

def lambda_handler(event, context):
    sts_connection = boto3.client('sts')

    acct_b = sts_connection.assume_role(
        RoleArn="arn:aws:iam::<Account-B-ID>:role/access-s3-bucket-from-lambda-in-another-acc-role",
        RoleSessionName="cross_acct_lambda"
    )
    print('acct_b: ',acct_b)

但是在测试时,什么都没有发生,并且函数超时。请指导。

标签: amazon-web-servicesamazon-s3aws-lambdaboto3amazon-iam

解决方案


我不确定您的功能为何超时,但我想推荐一种不同的方法:

  • Account-A使用 IAM 角色运行的Lambda 函数Lambda-S3-SNS-VPC-Role
  • Bucket-B使用Account-B允许访问的存储桶策略Lambda-S3-SNS-VPC-Role(这与您在上面显示的完全一样)

这就是你所需要的!

无需承担 IAM 角色Account-B因为存储桶策略Bucket-B允许从 Lambda 函数使用的 IAM 角色进行访问。


推荐阅读