AWS Batch容器无法通过AWS -cli访问S3



我正在尝试运行AWS批处理作业,但在调用aws-cli将数据从s3复制到容器中时失败。错误信息如下:

fatal error: Unable to locate credentials

我的作业定义有一个执行角色,有两个管理策略:AmazonS3FullAccessAmazonECSTaskExecutionRolePolicy。容器映像是从默认的ubuntu:22.04映像构建的,它有一个入口点文件,类似于:

#!/bin/bash
set -ex
aws s3 cp ...

我也一直在阅读以下问题:ECS法盖特任务不应用角色,其中规定容器应该有一个变量AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,但我没有。我在入口点中添加了declare -x,下面是执行批处理作业时的输出:

declare -x AWS_BATCH_CE_NAME="MyCluster"
declare -x AWS_BATCH_JOB_ATTEMPT="1"
declare -x AWS_BATCH_JOB_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
declare -x AWS_BATCH_JQ_NAME="MyQueue"
declare -x AWS_DEFAULT_REGION="us-west-2"
declare -x AWS_EXECUTION_ENV="AWS_ECS_FARGATE"
declare -x AWS_REGION="us-west-2"
declare -x DEBIAN_FRONTEND="noninteractive"
declare -x ECS_CONTAINER_METADATA_URI="http://111.111.111.1/v3/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx"
declare -x ECS_CONTAINER_METADATA_URI_V4="http://111.111.111.1/v4/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx"
declare -x HOME="/root"
declare -x HOSTNAME="ip-111-11-1-111.us-west-2.compute.internal"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
declare -x PWD="/"
declare -x SHLVL="1"

另外,当设置一个Fargate集群时,我可以看到任务定义有一个"任务角色"。除了执行角色之外。我的理解是"任务角色"是在容器内部定义的角色,而执行角色定义用于设置容器。在批处理中,没有这样的"任务角色"。所以,我的问题是,我如何授权我的容器使用容器内的aws-cli访问我的AWS资源?

我终于弄清楚了如何将权限传递给容器。工作定义有一个"工作角色"。直接传递给ECS任务角色,但该配置选项在AWS控制台中不可用。必须通过API或CLI在--container-properties参数中注册作业定义:

aws batch register-job-definition --container-properties '{"jobRoleArn": "...","executionRoleArn": "..."}' ...