在另一个账户中跨账户访问 S3 for AWS Glue
Cross-account access to S3 for AWS Glue in another account
我想为另一个账户中的 AWS Glue 设置对 S3 存储桶的跨账户访问以进行爬网。我们的环境中有两个帐户(A 和 B):
- AccountA 有一个具有 ACL 权限的 S3 存储桶(即管理员不喜欢使用存储桶策略)允许 AccountB
'List objects' 和 'Read Bucket Permissions'.
- AccountB想使用Glue(在AccountB中)爬取驻留在S3 bucket中的数据
AccountA,从而填充其自己的数据目录。
我已验证我可以通过 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=
我也尝试关注此博客 post 以获取上述内容
如何向另一个账户中的 AWS Glue & Athena 提供对 Amazon S3 存储桶中对象的跨账户访问
我所做的与博客 [=41=] 所做的唯一真正区别是他们在 S3 存储桶上设置了存储桶策略,而我的管理员在 S3 存储桶上设置了 ACL 权限桶。我想知道这是否是问题的原因。任何帮助将不胜感激。
您的方向是正确的。 ACL 不同于 S3 存储桶策略。为确保 S3 存储桶的对象可从特定 IAM 角色访问,您需要在 S3 策略中明确允许访问该 IAM 角色。
问题是管理员在存储桶上设置了 ACL,但没有在存储桶内的对象上设置 ACL(读取对象)。由于桶中有大量对象,并且必须在每个对象上放置一个 ACL,ACL 方法被放弃了。改为执行存储桶策略 - 解决了问题。
我想为另一个账户中的 AWS Glue 设置对 S3 存储桶的跨账户访问以进行爬网。我们的环境中有两个帐户(A 和 B):
- AccountA 有一个具有 ACL 权限的 S3 存储桶(即管理员不喜欢使用存储桶策略)允许 AccountB 'List objects' 和 'Read Bucket Permissions'.
- AccountB想使用Glue(在AccountB中)爬取驻留在S3 bucket中的数据 AccountA,从而填充其自己的数据目录。
我已验证我可以通过 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=
我也尝试关注此博客 post 以获取上述内容 如何向另一个账户中的 AWS Glue & Athena 提供对 Amazon S3 存储桶中对象的跨账户访问
我所做的与博客 [=41=] 所做的唯一真正区别是他们在 S3 存储桶上设置了存储桶策略,而我的管理员在 S3 存储桶上设置了 ACL 权限桶。我想知道这是否是问题的原因。任何帮助将不胜感激。
您的方向是正确的。 ACL 不同于 S3 存储桶策略。为确保 S3 存储桶的对象可从特定 IAM 角色访问,您需要在 S3 策略中明确允许访问该 IAM 角色。
问题是管理员在存储桶上设置了 ACL,但没有在存储桶内的对象上设置 ACL(读取对象)。由于桶中有大量对象,并且必须在每个对象上放置一个 ACL,ACL 方法被放弃了。改为执行存储桶策略 - 解决了问题。