大家好!
代码:(entrypoint.sh)
printenv
CREDENTIALS=$(curl -s "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI")
ACCESS_KEY_ID=$(echo "$CREDENTIALS" | jq .AccessKeyId)
SECRET_ACCESS_KEY=$(echo "$CREDENTIALS" | jq .SecretAccessKey)
TOKEN=$(echo "$CREDENTIALS" | jq .Token)
export AWS_ACCESS_KEY_ID=$ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=$SECRET_ACCESS_KEY
export AWS_SESSION_TOKEN=$TOKEN
aws s3 cp s3://BUCKET/file.txt /PATH/file.txt问题:
我正在尝试将AWS S3文件从AWS文件 (但我是直接从S3获取,而不是通过VPC端点获取)
我已经配置了桶策略和角色策略(在taskDefinition中作为taskRoleArn和executionRoleArn传递)
在本地,当我使用aws获取并传递临时凭据(我用in脚本中printenv命令登录ECS时),一切都正常。我可以把文件保存在我的电脑上。
在ECS上,我有错误:
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden我在哪里能找到解决办法?有人也有类似的问题?
发布于 2019-10-21 12:20:23
首先,如果您在AWS中工作,强烈建议使用AWS ECS服务角色、ECS任务角色或EC2角色。您确实需要从元数据中获取凭据。
但是,现在的角色似乎确实拥有s3或入口点的权限,无法正确导出环境变量。
如果您的容器实例已经具有外派角色,那么不需要导出Accesskey,只需调用aws s3 cp s3://BUCKET/file.txt /PATH/file.txt就可以了。
任务的IAM角色
使用用于Amazon任务的IAM角色,您可以指定一个IAM角色,该角色可以由任务中的容器使用。应用程序必须使用AWS凭据对其API请求进行签名,此特性提供了管理应用程序使用的凭据的策略,类似于Amazon实例配置文件向EC2实例提供凭据的方式。与创建AWS凭据并将其分发到容器或使用EC2实例的角色不同,您可以将一个IAM角色与ECS任务定义或RunTask API操作关联起来。
因此,当您将角色分配给ECS任务或ECS服务时,您的入口点将非常简单。
printenv
aws s3 cp s3://BUCKET/file.txt /PATH/file.txt而且,您的导出将不像您所期望的那样工作,将ENV传递给容器表单任务定义的最佳方法,在本例中导出不会。
我建议给ECS任务分配角色,它应该能像你期望的那样工作。
https://stackoverflow.com/questions/58485776
复制相似问题