amazon-web-services - 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)
但是在测试时,什么都没有发生,并且函数超时。请指导。
解决方案
我不确定您的功能为何超时,但我想推荐一种不同的方法:
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 角色进行访问。
推荐阅读
- node.js - 在 ANGULAR 中使用 Typescript 的错误属性 _id
- flutter - 这个小部件在颤振中叫什么?
- r - 将计数转换为单个观察值
- reactjs - 使用 React 钩子的 Material-ui 分页
- firebase - 不支持 Cloud Firestore 嵌套数组 Error Flutter
- couchdb - CouchDB 配置中 chttpd 和 httpd 的区别
- python - GRPC 服务器和客户端在 Docker 中不起作用
- plpgsql - 将表作为输入传递给 postgres
- perl - 使用 Perl 从 yaml 文件中提取数据
- python - 正则表达式在 HTML 文件中搜索类和 id 名称