amazon-web-services - AWS Glue 作业在写入 S3 时被拒绝访问
问题描述
我有一个由 CloudFormation 创建的 Glue ETL 作业。此作业从 RDS Aurora 中提取数据并写入 S3。
当我运行此作业时,我收到以下错误。
该作业具有 IAM 服务角色。
此服务角色允许
- 胶水和RDS服务,
- 假设 arn:aws:iam::aws:policy/AmazonS3FullAccess 和 arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole,以及
- 具有全范围的 rds:* 、 kms:* 和 s3:* 操作允许对应的 RDS、KMS 和 S3 资源。
无论 S3 存储桶是使用 AES256 还是 aws:kms 加密的,我都会遇到同样的错误。
无论作业是否具有安全配置,我都会收到相同的错误。
我的工作与我手动创建的完全相同,并且可以在没有安全配置的情况下成功运行。
我错过了什么?这是完整的错误日志
“/mnt/yarn/usercache/root/appcache/application_1...5_0002/container_15...45_0002_01_000001/py4j-0.10.4-src.zip/py4j/protocol.py”,第 319 行,在 get_return_value py4j.protocol 中。 Py4JJavaError:调用 o145.pyWriteDynamicFrame 时出错。:org.apache.spark.SparkException:作业因阶段失败而中止:阶段 2.0 中的任务 3 失败 4 次,最近一次失败:阶段 2.0 中丢失任务 3.3(TID 30,ip-10-....us-west -2.compute.internal,执行程序 1):com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求 ID:F...49),S3 扩展请求 ID:eo...wXZw= 在 com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor .handleErrorResponse(AmazonHttpClient.java:1588
解决方案
不幸的是,这个错误并没有告诉我们太多,只是它在你的 DynamicFrame 的写入过程中失败了。
403的可能原因只有少数,你可以检查一下你是否都遇到过:
- 目标存储桶上的存储桶策略规则。
- IAM 角色需要权限(尽管您提到拥有 S3*)
- 如果这是跨账户,那么还有更多关于桶和用户的允许策略等方面的检查。(一般来说,Canonical Account ID 的信任是最简单的)
- 我不知道您的角色和存储桶的策略文档可能有多复杂,但请记住,明确的拒绝语句优先于允许。
- 如果问题与 KMS 相关,我会检查以确保您为 Glue Connection 选择的子网具有到达 KMS 端点的路由(您可以在 VPC 中为 KMS 添加端点)
- 确保问题不在于也为您的工作配置的临时目录,或者可能不是您最终的写入操作。
- 检查您的帐户是否是您正在写入的位置的“对象所有者”(通常在帐户之间读取/写入数据时出现问题)
如果上述方法都不起作用,您可以对您的设置有更多了解。也许是写操作的代码。
推荐阅读
- delphi - 如何在 Delphi 中向我的 csExDropDownList 组合框添加标题/文本?
- cuda - 警告:不允许从 __host__ __device__ 函数调用 __host__ 函数
- vb.net - 动画面板宽度取决于提供的秒数
- msbuild - 将 PostBuildEvent 中生成的文件包含到 ClickOnce 部署中会发生竞争情况,有时无法正常工作
- c# - 在 HTML5 上使用拖放时未定义 DndSimulator
- java - 我可以有一个基础测试类,只是为了在 testNG 中使用 @BeforeTest 方法
- docker - Db2 on docker swarm 内存消耗
- java - 什么是 PBEWithMD5AndDes?
- python - 如何使用 tensorflow 成对导入 jpg 和 npy 文件以进行深度学习?
- angular - 应用自定义全局字体系列时,Angular mat-icon 不加载图标