我正试图将数据框写入不同的帐户s3桶作为json输出。下面的代码在GLUE Spark流作业中出现S3访问拒绝错误。但是如果我在没有第一行的情况下运行代码,它可以工作并输出到S3桶
glueContext._jsc.hadoopConfiguration().set("fs.s3.canned.acl", "BucketOwnerFullControl")
glueContext.write_dynamic_frame.from_options(frame=dynamic_df, connection_type="s3",
connection_options={"path": output_path},
format=file_format, transformation_ctx="datasink")
下面是错误日志:
com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception:访问被拒绝(服务:Amazon S3;状态码:403;错误代码:AccessDenied;请求ID: W52125NY7G3EF7WH;S3扩展请求ID:4 t9jojedv2qnry6w8ysxdqq7r + TMN1MWpZCFOK1IKO6W4gx4a2oKuK5vwXUPnh4HkkPAG + LnEIc =;代理:null), S3扩展请求ID: 4t9JOJedv2qUPnh4HkkPAG+LnEIc= atcom.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient RequestExecutor.handleErrorResponse美元(AmazonHttpClient.java: 1819)在com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient RequestExecutor.handleServiceErrorResponse美元(AmazonHttpClient.java: 1403)在
这对我来说看起来很奇怪,因为Bucket具有完全的权限,并且当第二行单独执行时它可以完美地工作,但是Bucket所有者仍然是胶水帐户,我试图使用fs.s3.canned.acl
更改它。
目标桶也设置了Bucket owner preferred
选项请告诉我哪里做错了。
仅仅对桶策略有权限是不够的。
Glue role在IAM中缺少s3:PutObjectAcl
权限。