Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 写入S3时,AWS胶水作业访问被拒绝_Amazon Web Services_Amazon S3_Aws Glue - Fatal编程技术网

Amazon web services 写入S3时,AWS胶水作业访问被拒绝

Amazon web services 写入S3时,AWS胶水作业访问被拒绝,amazon-web-services,amazon-s3,aws-glue,Amazon Web Services,Amazon S3,Aws Glue,我有一份由CloudFormation创建的胶水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资源

我有一份由CloudFormation创建的胶水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/thread/usercache/root/appcache/application_1…5_0002/container_15…45_0002_01_000001/py4j-0.10.4-src.zip/py4j/protocol.py”,第319行,在get_返回值中 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,executor 1):com.amazon.ws.emr.hadoop.fs.shade.com.amazonaws.services.s3.model.amazonS3异常:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求ID:F…49),S3扩展请求ID:eo…wXZw= 在com.amazon.ws.emr.hadoop.fs.shade.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1588


    不幸的是,这个错误没有告诉我们太多,只是在编写DynamicFrame的过程中失败了

    403的原因只有少数几个,您可以检查是否已全部满足:

  • 目标存储桶上的存储桶策略规则
  • IAM角色需要权限(尽管您提到有S3*)
  • 如果这是跨帐户的,那么就有更多的事情需要检查,比如允许bucket和用户上的策略。(通常,对规范帐户ID的信任是最简单的)
  • 我不知道您的策略文档对于角色和Bucket可能有多复杂,但请记住,显式的Deny语句优先于allow语句
  • 如果问题与KMS有关,我会检查以确保您为粘合连接选择的子网具有到达KMS端点的路由(您可以在VPC中为KMS添加端点)
  • 确保问题不存在于也为作业配置的临时目录中,或者可能不是最终的写入操作
  • 检查您的帐户是否是您要写入的位置的“对象所有者”(通常在帐户之间读取/写入数据时会出现问题)

  • 如果以上这些都不起作用,您可以进一步了解您的设置。可能是写操作的代码。

    除了Lydon的回答之外,如果您的数据源位置与数据目标位置相同(在Glue中创建作业时定义),也会收到错误403。如果这两个位置相同且问题相同,请更改其中任何一个我会解决的。

    您如何为
    PassRole
    提供粘合角色的权限

    {
            "Sid": "AllowAccessToRoleOnly",
            "Effect": "Allow",
            "Action": [
              "iam:PassRole",
              "iam:GetRole",
              "iam:GetRolePolicy",
              "iam:ListRolePolicies",
              "iam:ListAttachedRolePolicies"
            ],
            "Resource": "arn:aws:iam::*:role/<role>"
          }
    
    {
    “Sid”:“AllowAccessToRoleOnly”,
    “效果”:“允许”,
    “行动”:[
    “iam:PassRole”,
    “iam:GetRole”,
    “iam:GetRolePolicy”,
    “iam:ListrolePolicys”,
    “iam:ListAttachedRolePolicies”
    ],
    “资源”:“arn:aws:iam::*:角色/”
    }
    

    通常我们使用
    --
    创建角色,例如xyz glue dev,其中项目名为xyz,环境名为dev。在这种情况下,我们使用
    “资源”:“arn:aws:iam::*:role/xyz-*-dev”

    对我来说,这是两件事

  • 应该正确给出bucket的访问策略-bucket/*,这里我缺少了*部分
  • 必须在VPC中创建端点,以便glue访问S3

  • 在这两个设置之后,我的粘合作业成功运行。希望这有帮助。

    确保您提供了正确的策略。 我也面临同样的问题,认为我的角色配置得很好。
    但是,在我删除角色并执行步骤后,它起了作用;]

    您可以配置s3访问日志,也可以是s3 bucket的对象级日志,并使用Athena分析日志(或只是打开写入的日志),以查看403的确切原因。对于s3。*您是否将资源指定为[“bucket arn”,“bucket arn/*”?