首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在入口点脚本中加载S3文件

问在入口点脚本中加载S3文件
EN

Stack Overflow用户
提问于 2019-10-21 11:54:29
回答 1查看 2.3K关注 0票数 0

大家好!

代码:(entrypoint.sh)

代码语言:javascript
复制
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上,我有错误:

代码语言:javascript
复制
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

我在哪里能找到解决办法?有人也有类似的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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服务时,您的入口点将非常简单。

代码语言:javascript
复制
printenv
aws s3 cp s3://BUCKET/file.txt /PATH/file.txt

而且,您的导出将不像您所期望的那样工作,将ENV传递给容器表单任务定义的最佳方法,在本例中导出不会。

我建议给ECS任务分配角色,它应该能像你期望的那样工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58485776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档