繁体   English   中英

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

[英]AWS Batch container cannot access S3 via aws-cli

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

fatal error: Unable to locate credentials

我的作业定义有一个具有两个托管策略的执行角色: AmazonS3FullAccessAmazonECSTaskExecutionRolePolicy 容器镜像是从默认的ubuntu:22.04镜像构建的,并且有一个类似于以下内容的入口点文件:

#!/bin/bash
set -ex

aws s3 cp ...

我也一直在阅读以下问题: ECS Fargate task not applying role ,它指出容器应该有一个变量AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ,但我没有。 我在我的入口点添加了一个declare -x ,这是我执行批处理作业时的 output:

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 集群时,我可以看到任务定义除了执行角色外还有一个“任务角色”。 我的理解是“任务角色”是在容器内部定义的角色,而执行角色则定义为设置容器。 在 Batch 中,没有这样的“任务角色”。 所以,我的问题是,如何授权我的容器使用容器内的aws-cli访问我的 AWS 资源?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM