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

Ian*_*ues 2 amazon-web-services aws-cli aws-batch

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

fatal error: Unable to locate credentials
Run Code Online (Sandbox Code Playgroud)

我的作业定义具有执行角色,具有两个托管策略:AmazonS3FullAccess和AmazonECSTaskExecutionRolePolicy。容器映像是根据默认ubuntu:22.04映像构建的,并且具有类似于以下内容的入口点文件:

fatal error: Unable to locate credentials
Run Code Online (Sandbox Code Playgroud)

我还一直在阅读以下问题:ECS Fargate task not apply role,它指出容器应该有一个变量AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,但我没有。我在入口点添加了 a 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"
Run Code Online (Sandbox Code Playgroud)

此外,在设置 Fargate 集群时,我可以看到任务定义除了执行角色之外还有“任务角色”。我的理解是“任务角色”是在容器内部定义的角色,而执行角色是为了设置容器而定义的。在Batch中,不存在这样的“任务角色”。所以,我的问题是,如何授权我的容器在aws-cli容器内部访问我的 AWS 资源?

Ian*_*ues 8

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

aws batch register-job-definition --container-properties '{"jobRoleArn": "...","executionRoleArn": "..."}' ...
Run Code Online (Sandbox Code Playgroud)