Python 3.x 使用具有boto3的访问点从/向S3存储桶进行读写
我必须使用带有Python 3.x 使用具有boto3的访问点从/向S3存储桶进行读写,python-3.x,amazon-web-services,amazon-s3,boto3,amazon-s3-access-points,Python 3.x,Amazon Web Services,Amazon S3,Boto3,Amazon S3 Access Points,我必须使用带有boto3的访问点访问S3存储桶 我已创建了一个具有允许读写策略的访问点(是我的访问点ARN): 当我在附加了AmazonS3FullAccessmanaged策略的Lambda中执行此代码时,我收到一个ClientError:调用HeadObject操作时发生错误(403):禁止 Lambda和S3接入点都连接到同一VPC。替换 “资源”:“arn:aws:s3:区域名称::桶名称” s3.Bucket('Bucket_name')。下载_文件('hello.txt','/tmp
boto3
的访问点访问S3存储桶
我已创建了一个具有允许读写策略的访问点(
是我的访问点ARN
):
当我在附加了AmazonS3FullAccess
managed策略的Lambda中执行此代码时,我收到一个ClientError:调用HeadObject操作时发生错误(403):禁止
Lambda和S3接入点都连接到同一VPC。替换
“资源”:“arn:aws:s3:区域名称::桶名称”s3.Bucket('Bucket_name')。下载_文件('hello.txt','/tmp/hello.txt'))
希望它有帮助…我的第一个猜测是,您缺少必须定义的权限(1)在bucket(bucket策略)上,以及(2)在boto3 SDK中使用的IAM用户或角色上 (1) 从照片上我可以看出 为了让应用程序或用户能够通过访问点访问对象,访问点和底层bucket都必须允许请求 例如,您可以添加一个bucket策略,将访问控制权委托给访问点,这样就不必指定通过访问点来的每个主体。链接文档中给出了一个示例 (2) 正如问题中所述,您已经在LambdaExecutionRole中使用了AmazonS3FullAccess策略。我唯一的猜测(即发生在我身上的事情)是,例如,您的bucket中的对象上存在KMS加密,并且您的角色缺少KMS操作的权限。尝试在附加了管理策略的情况下执行该函数,看看它是否有效。如果有,请找出缺少哪些特定权限 进一步说明:我想你
- 未限制接入点仅在特定专有网络内可用
- 正在阻止公众访问
AmazonS3FullAccess
策略,我认为该策略将赋予它所有必要的权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "<access_point_arn>/object/*"
]
}
import boto3
s3 = boto3.resource('s3')
s3.Bucket('<access_point_arn>').download_file('hello.txt', '/tmp/hello.txt')