amazon-s3 - 在另一个账户中跨账户访问 AWS Glue 的 S3
问题描述
我想为另一个账户中的 AWS Glue 设置对 S3 存储桶的跨账户访问权限以进行爬网。我们的环境中有两个帐户(A 和 B):
- AccountA有一个具有 ACL 权限的 S3 存储桶(即管理员不喜欢使用存储桶策略),允许 AccountB '列出对象'和'读取存储桶权限'。
- AccountB想要使用 Glue(在 AccountB 中)来抓取驻留在 AccountA 中的 S3 存储桶中的数据,从而填充自己的数据目录。
我已经验证我可以通过 AccountB 凭证使用 AWS CLI 列出 AccountA 的 S3 存储桶的内容,即aws s3 ls AccountA-S3-Bucket
在 AccountB 中,我使用以下内联策略设置了一个角色(允许 Glue 代表您调用 AWS 服务)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": "arn:aws:s3:::AccountA-S3-Bucket/*"
}
]
}
该角色还附加了 AmazonS3FullAccess、AWSGlueServiceRole 和 CloudWatchLogsFullAccess 托管策略,这是一个很好的衡量标准。我设置了一个 Glue 爬虫,该爬虫将此角色附加为服务角色。
在爬网程序停止后查看 CloudWatch 日志时,我收到以下错误:
[3c81da32-b1eb-49f8-8e51-123fa94f789b] ERROR : Not all read errors will be logged. com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 4C75D2487246DC4B; S3 Extended Request ID: GoXpY+6XC0pL73qJDmHGt3/4Mp/HeFXNiNFU3QGxVxt2ltTV4W41/LuJCBDVCcqc6Hep+tlG+Wg=), S3 Extended Request ID: GoXpY+6XC0pL73qJDmHGt3/4Mp/HeFXNiNFU3QGxVxt2ltTV4W41/LuJCBDVCcqc6Hep+tlG+Wg=
我还尝试关注这篇博客文章,了解 如何将 Amazon S3 存储桶中的对象提供跨账户访问到另一个账户中的 AWS Glue 和 Athena
我所做的和博客文章所做的唯一真正的区别是他们在 S3 存储桶上设置了存储桶策略,而我的管理员在存储桶上设置了 ACL 权限。我想知道这是否是问题的原因。任何帮助将不胜感激。
解决方案
你正在寻找正确的方向。ACL 不同于 S3 存储桶策略。为确保可从特定 IAM 角色访问 S3 存储桶的对象,您需要在 S3 策略中明确允许访问该 IAM 角色。
推荐阅读
- amazon-web-services - 如何使 aws 负载均衡器只命中已启动的服务器?
- java - Leetcode 34. 使用 ArrayIndexOutOfBoundsException 查找有序数组中元素的第一个和最后一个位置
- java - 无法打开 LibGDX 游戏的第二个实例?
- python - 正则表达式警告我没有称为组的属性
- r - 防止 R 生成的进程因错误而退出
- javascript - Firestore 批量更新 - 检查文档是否存在
- angular - CORS 阻止 iTunes api 用于 Angular 应用程序
- python - Django 表单抛出 ValueError
- c# - 使用 PlayOneShot 后一切都会中断
- reactjs - 可以无限期地推送到 React Router 历史记录吗?