You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Glue Studio作业运行报错:S3访问被拒绝(403状态码)

AWS Glue作业启动S3访问被拒绝(403)问题排查

问题背景

在AWS Glue Studio创建作业,处理S3桶tfe-scott-02中in/目录的CSV文件,添加1条数据质量规则,无转换操作,输出到同桶out/目录。运行作业时触发启动错误:

LAUNCH ERROR | Error downloading from S3 for bucket: tfe-scott-02, key: scripts/tfe-scott-02-job-04.py.Access Denied (Service: Amazon S3; Status Code: 403; Please refer logs for details.

错误日志显示:

com.amazonaws.SdkClientException: Error downloading from S3 for bucket: tfe-scott-02, key: scripts/tfe-scott-job-04.py.Access Denied (Service: Amazon S3; Status Code: 403;

Glue Studio生成的作业脚本如下:

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsgluedq.transforms import EvaluateDataQuality

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args["JOB_NAME"], args)

# Script generated for node S3 bucket
S3bucket_node1 = glueContext.create_dynamic_frame.from_options(
    format_options={
        "quoteChar": '"',
        "withHeader": True,
        "separator": "|",
        "optimizePerformance": False,
    },
    connection_type="s3",
    format="csv",
    connection_options={"paths": ["s3://tfe-scott-02/in/"], "recurse": True},
    transformation_ctx="S3bucket_node1",
)

# Script generated for node ApplyMapping
ApplyMapping_node2 = ApplyMapping.apply(
    frame=S3bucket_node1, mappings=[], transformation_ctx="ApplyMapping_node2"
)

# Script generated for node Evaluate Data Quality
EvaluateDataQuality_node1680983936721_ruleset = """
    Rules = [
        ColumnValues "patient_effective_date" between 20230101 and 20231231
    ]
"""

EvaluateDataQuality_node1680983936721_DQ_Results = EvaluateDataQuality.apply(
    frame=ApplyMapping_node2,
    ruleset=EvaluateDataQuality_node1680983936721_ruleset,
    publishing_options={
        "dataQualityEvaluationContext": "EvaluateDataQuality_node1680983936721",
        "enableDataQualityCloudWatchMetrics": True,
        "enableDataQualityResultsPublishing": True,
        "resultsS3Prefix": "s3://tfe-scott-02/out/",
    },
)
EvaluateDataQuality_node1680983936721 = ApplyMapping_node2

# Script generated for node S3 bucket
S3bucket_node3 = glueContext.getSink(
    path="s3://tfe-scott-02/out/",
    connection_type="s3",
    updateBehavior="UPDATE_IN_DATABASE",
    partitionKeys=[],
    enableUpdateCatalog=True,
    transformation_ctx="S3bucket_node3",
)
S3bucket_node3.setCatalogInfo(
    catalogDatabase="tfe-scott-database-03", catalogTableName="tbl_eligibility"
)
S3bucket_node3.setFormat("json")
S3bucket_node3.writeFrame(ApplyMapping_node2)
job.commit()

可能原因及解决办法

1. Glue作业IAM角色权限不足

Glue作业启动时需要读取存储在S3的作业脚本,若作业绑定的IAM角色没有tfe-scott-02/scripts/路径的读权限,就会触发403错误。

  • 解决步骤:
    • 进入Glue Studio作业的「Job details」标签,找到使用的IAM角色。
    • 进入IAM控制台,编辑该角色的权限策略,添加以下权限:
      {
          "Effect": "Allow",
          "Action": [
              "s3:GetObject",
              "s3:ListBucket"
          ],
          "Resource": [
              "arn:aws:s3:::tfe-scott-02",
              "arn:aws:s3:::tfe-scott-02/scripts/*",
              "arn:aws:s3:::tfe-scott-02/in/*",
              "arn:aws:s3:::tfe-scott-02/out/*"
          ]
      }
      
    • 保存策略后重新运行作业。

2. S3桶策略限制访问

S3桶的自定义策略可能拒绝了Glue角色的访问请求,即使角色本身有权限。

  • 解决步骤:
    • 进入S3控制台,找到tfe-scott-02桶,切换到「Permissions」标签查看「Bucket policy」。
    • 确认桶策略中存在允许该Glue角色访问的规则,示例如下:
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::[你的AWS账号ID]:role/[Glue作业角色名称]"
                  },
                  "Action": [
                      "s3:GetObject",
                      "s3:ListBucket",
                      "s3:PutObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::tfe-scott-02",
                      "arn:aws:s3:::tfe-scott-02/*"
                  ]
              }
          ]
      }
      
    • 若存在拒绝规则,检查是否误阻止了该角色的访问,必要时调整规则。

3. 脚本文件路径/名称不匹配

错误提示的脚本key是scripts/tfe-scott-02-job-04.py,但日志里显示的是scripts/tfe-scott-job-04.py,存在名称差异,可能是Glue Studio生成脚本时的路径错误,导致找不到文件。

  • 解决步骤:
    • 登录S3控制台,检查tfe-scott-02/scripts/目录下是否存在对应的脚本文件。
    • 如果文件不存在,回到Glue Studio,重新保存作业,触发脚本自动上传到S3。
    • 如果名称不一致,可尝试重新创建作业,或在Glue作业的「Script」标签下手动修正脚本存储路径。

4. S3桶所有权或ACL问题

如果桶属于其他AWS账号,或者脚本文件的ACL设置限制了访问,也会导致403错误。

  • 解决步骤:
    • 若桶属于其他账号,需对方账号配置桶策略允许你的账号角色访问,同时你的角色要有对应权限。
    • 检查脚本文件的ACL,确保允许Glue作业角色读取该文件,可设置ACL为「bucket-owner-full-control」或直接授权对应角色的读权限。

内容的提问来源于stack exchange,提问作者ScotterMonkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:13:11