1

我正在 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包装上,或者更有可能是我对它的使用。

4

1 回答 1

1

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

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

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

于 2018-11-01T15:27:25.657 回答