帐户A中的S3桶具有以下策略
sid:whitelistIp
Effect: Deny
Principal: *
Resource :
arn:aws:s3:::my-s3
arn:aws:s3:::my-s3/*
Condition
NotIpaddress
awsSourceIP
[ list of Ips ]
StringsNotEqual
awsourcevpce
[ List of VpceIds ]
Sid: DenyNonSSLTraffic
Effect: Deny
Principal: *
Resource :
arn:aws:s3:::my-s3
Condition
Bool
"aws:secureTransport": "false"
Sid: AllowspecificIamRoles
Effect: Allow
Principal: *
Action:
s3:ListBucket
s3:DeleteObject
s3:GetObject
s3:PutObject
Resource :
arn:aws:s3:::my-s3
arn:aws:s3:::my-s3/*
Condition:
StringsLike:
awsuserId: [ List of userIds ]
现在从帐户B我试图从lambda函数读取对象。
s3_client.list_objects()
此方法有效
但是当我使用s3_client.download_file()
时,它会得到Access Denied error
我已经验证Lambda有足够的权限从S3读取。
还有一个问题,如果我给桶策略仍然我必须指定ACL跨帐户访问?
如果你的lambda函数运行到VPC中,那么你必须创建一个端点来访问s3
创建s3端点
选择s3网关并附加您的vpc
添加端点路由路由表。
现在可以读取s3对象了。