附加了管理员策略的爬虫的 AWS Glue 访问被拒绝
AWS Glue Access denied for crawler with administrator policy attached
我正在尝试 运行 爬虫跨过我帐户中包含两个 csv 文件的 s3 数据存储。但是,当我尝试 运行 爬虫时,没有加载任何表,并且我在 cloudwatch 中看到每个文件的以下错误:
- 错误访问被拒绝(服务:Amazon S3;状态代码:403;错误
代码:拒绝访问;
- 创建的表未从该文件推断架构。
这特别奇怪,因为 IAM 角色附加了 AdministratorAccess 策略,所以不应该有任何访问被拒绝的问题。
如有任何帮助,我们将不胜感激。
确保附加到您的 IAM 角色的策略具有这些:
- AmazonS3FullAccess
- AwsGlueConsoleFullAccess
- AwsGlueServicerole。
检查您正在抓取的文件是否已加密。如果是,那么您的 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"
]
}
}
我确定我没有遗漏其他建议中提供的内容,但我没有遗漏。事实证明,我的组织对读取存储桶还有另一个级别的限制,但我不确定它是什么。
我们在 S3 爬虫中遇到了类似的问题。根据 AWS,S3 爬虫与 JDBC 爬虫不同,不会在您的 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"
}
}
您可能还需要添加一个状态,允许 s3:putObject*
和 s3:getObject*
与 aws 委托人担任角色。假定的角色类似于:
arn:aws:sts::123456789012:assumed-role/Test-Role/AWS-Crawler
希望对您有所帮助。
在我的例子中,问题是:爬虫配置在与它要爬网的 S3 存储桶不同的区域。在与我的 S3 存储桶相同的区域配置新的爬虫后,问题就解决了。
这是一个 S3 存储桶策略问题。我制作了我的表格 public(我知道这是个糟糕的政策)并且它奏效了。
我正在尝试 运行 爬虫跨过我帐户中包含两个 csv 文件的 s3 数据存储。但是,当我尝试 运行 爬虫时,没有加载任何表,并且我在 cloudwatch 中看到每个文件的以下错误:
- 错误访问被拒绝(服务:Amazon S3;状态代码:403;错误 代码:拒绝访问;
- 创建的表未从该文件推断架构。
这特别奇怪,因为 IAM 角色附加了 AdministratorAccess 策略,所以不应该有任何访问被拒绝的问题。
如有任何帮助,我们将不胜感激。
确保附加到您的 IAM 角色的策略具有这些:
- AmazonS3FullAccess
- AwsGlueConsoleFullAccess
- AwsGlueServicerole。
检查您正在抓取的文件是否已加密。如果是,那么您的 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"
]
}
}
我确定我没有遗漏其他建议中提供的内容,但我没有遗漏。事实证明,我的组织对读取存储桶还有另一个级别的限制,但我不确定它是什么。
我们在 S3 爬虫中遇到了类似的问题。根据 AWS,S3 爬虫与 JDBC 爬虫不同,不会在您的 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"
}
}
您可能还需要添加一个状态,允许 s3:putObject*
和 s3:getObject*
与 aws 委托人担任角色。假定的角色类似于:
arn:aws:sts::123456789012:assumed-role/Test-Role/AWS-Crawler
希望对您有所帮助。
在我的例子中,问题是:爬虫配置在与它要爬网的 S3 存储桶不同的区域。在与我的 S3 存储桶相同的区域配置新的爬虫后,问题就解决了。
这是一个 S3 存储桶策略问题。我制作了我的表格 public(我知道这是个糟糕的政策)并且它奏效了。