对于附加了管理员策略的搜寻器,AWS Glue Access被拒绝

时间:2018-08-17 16:19:07

标签: amazon-s3 aws-glue

我正在尝试在包含两个csv文件的帐户中的s3数据存储区上运行搜寻器。但是,当我尝试运行搜寻器时,未加载任何表,并且在cloudwatch中针对每个文件看到以下错误:

  • 错误访问被拒绝(服务:Amazon S3;状态代码:403;错误 代码:AccessDenied;
  • 创建的表未从该文件推断模式。

这特别奇怪,因为IAM角色附加了AdministratorAccess策略,因此不应存在任何拒绝访问的问题。

任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:4)

检查要爬网的文件是否已加密。如果是这样,则您的Glue角色可能没有允许其解密的策略。

如果是这样,它可能需要这样的东西:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
      "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"
    ]
  }
}

答案 1 :(得分:1)

确保与您的IAM角色关联的策略具有以下这些条件:

  1. AmazonS3FullAccess
  2. AwsGlueConsoleFullAccess
  3. AwsGlueServicerole。

答案 2 :(得分:0)

我确保我不会错过其他建议中提供的内容,但我没有。事实证明,在读取由我的组织强加的存储桶时,存在另一层次的限制,尽管我不确定这是什么。

答案 3 :(得分:0)

我们在使用S3搜寻器时遇到了类似的问题。根据AWS的说法,与JDBC搜寻器不同,S3搜寻器不会在VPC中创建ENI。这意味着您的存储桶策略必须允许从VPC外部进行访问。

检查您的存储桶策略在S3:*的某处没有明确拒绝。如果有一个,请确保在语句中添加一个条件,并在该条件中将角色ID添加为aws:userId。请记住,角色ID和角色arn不是同一回事。

要获取角色ID:

aws iam get-role --role-name Test-Role

输出:

{
  "Role": {
      "AssumeRolePolicyDocument": "<URL-encoded-JSON>",
      "RoleId": "AIDIODR4TAW7CSEXAMPLE",
      "CreateDate": "2013-04-18T05:01:58Z",
      "RoleName": "Test-Role",
      "Path": "/",
      "Arn": "arn:aws:iam::123456789012:role/Test-Role"
  }
}  

您可能还需要添加一个状态,该状态允许使用aws主体的s3:putObject*s3:getObject*担任假定角色。假定的角色将类似于:

arn:aws:sts::123456789012:assumed-role/Test-Role/AWS-Crawler

希望这会有所帮助。

答案 4 :(得分:0)

在我的情况下,问题是:搜寻器的配置区域与它要进行搜寻的S3存储桶的区域不同。在与我的S3存储桶相同的区域中配置了新的搜寻器后,问题得以解决。

答案 5 :(得分:0)

这是S3存储桶策略问题。我把我的桌子公开了(我知道这是错误的政策),并且奏效了。