尽管用户角色,AWS Batch 作业在 S3 上被拒绝访问

Posted

技术标签:

【中文标题】尽管用户角色,AWS Batch 作业在 S3 上被拒绝访问【英文标题】:AWS Batch job getting Access Denied on S3 despite user role 【发布时间】:2019-04-05 06:19:50 【问题描述】:

我正在 AWS 上部署我的第一个批处理作业。当我在 EC2 实例中运行我的 docker 映像时,作业调用的脚本运行良好。我已为此实例分配了一个 IAM 角色以允许 S3 访问。

但是,当我在 AWS Batch 上运行与作业相同的脚本时,由于 S3 访问时出现拒绝访问错误,它会失败。尽管在作业定义中,我分配了一个具有完全 S3 访问权限的 IAM 角色(为弹性容器服务任务创建)。

如果我使用不访问 S3 的命令启动批处理作业,它运行良好。

由于对作业定义使用 IAM 角色似乎还不够,那么如何在 AWS 上的批处理作业中授予 S3 权限?

编辑

因此,如果我只是将aws s3 ls interlinked 作为我的工作,那么它也可以正常运行。运行 R 脚本不起作用:

 library(aws.s3)
 get_bucket("mybucket")[[1]]

访问被拒绝。

所以看来问题出在aws.s3 包上,或者更有可能是我对它的使用。

【问题讨论】:

【参考方案1】:

问题是我为我的计算环境(限制更严格)和我的工作(限制更少)指定了 IAM 角色。

在这种情况下(需要基于角色的凭据),aws.s3 R 包使用 aws.signatureaws.ec2metadata 从角色中提取临时凭据。它提取计算环境角色(这是一个 ec2 角色),而不是作业角色。

我的解决方案只是向我的计算环境角色授予所需的 S3 权限。

【讨论】:

所以您使用了两个不同的角色,一个具有更多权限,另一个具有较小的权限?我已经有一个与 ec2 实例关联的角色,但我仍然遇到问题 @DJ_Stuffy_K 是的,我有两个角色。就我而言,我必须确保与计算环境相关的角色拥有足够的权限。

以上是关于尽管用户角色,AWS Batch 作业在 S3 上被拒绝访问的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Secrets Manager 密钥注册 AWS Batch 作业定义

AWS Batch:未列出 aws batch 的角色

上传到 S3 之前的 AWS 临时文件?

如何在 AWS Batch 上使用 docker compose?

如何将 S3 存储桶锁定到特定用户和 IAM 角色

角色分配策略中无法识别 aws 自定义属性