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

AWS Batch job getting Access Denied on S3 despite user role

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

但是当我 运行 与 AWS Batch 上的作业相同的脚本时,它由于 S3 访问上的访问被拒绝错误而失败。尽管事实上在作业定义中,我分配了一个具有完全 S3 访问权限的 IAM 角色(为 Elastic Container Service 任务创建)。

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

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

编辑

所以如果我只是 运行 aws s3 ls interlinked 作为我的工作,那也 运行 是正确的。不起作用的是 运行R 脚本:

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

因拒绝访问而失败。

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

问题原来是我为我的计算环境(限制性更强)和我的工作(限制性更小)指定了 IAM 角色。

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

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