Lambda在使用Boto3访问另一个帐户中的S3 Bucket时超时



我正试图使用boto3从我的AWS Lambda访问另一个帐户中的S3 bucket。以下是我配置的步骤
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 bucket所在的Account-B中,我创建了一个IAM角色(access-S3-bucket-from-lambda-In-another-acc-ole(,如下所示:-附件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 Bucket中,给出了低于Bucket策略的

{
"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)

但是在测试时,什么也没发生,函数超时了。请引导。

我不确定你的函数为什么超时,但我想推荐一种不同的方法:

与IAM角色Lambda-S3-SNS-VPC-Role一起运行的Account-A中的Lambda函数
  • Account-B中的Bucket-B,具有允许从Lambda-S3-SNS-VPC-Role访问的Bucket策略(这与上面所示完全相同(
  • 这就是你所需要的!

    不需要从Account-B承担IAM角色,因为Bucket-B上的Bucket策略允许Lambda函数使用的IAM角色进行访问。

    考虑到您可能需要为STS API指定区域和区域端点。(https://docs.aws.amazon.com/sdkref/latest/guide/feature-sts-regionalized-endpoints.html)

    def lambda_handler(event, context):
    sts_connection = boto3.client('sts'
    region_name='eu-west-1',
    endpoint_url="https://sts.eu-west-1.amazonaws.com")
    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)
    

    相关内容

    • 没有找到相关文章

    最新更新