从服务器上的容器访问 AWS S3 存储桶

Not*_*bby 7 amazon-s3 amazon-web-services amazon-iam docker docker-compose

如果代码中没有我的 AWS 凭证,如何从容器访问我的 S3 存储桶?

我的代码也会自动部署,因此将其作为环境变量也不好(部署脚本位于存储库中 - 并且凭据也应该在那里)。

我尝试研究 IAM 角色,但无法理解对我的用例有帮助的东西。

Mat*_*ava 6

如果您直接在 EC2 实例上运行容器(不使用 ECS 服务),那么您需要创建一个IAM role并向其附加适当的策略(例如AmazonS3FullAccess,如果您需要 S3 的所有权限,如果您只需要读取 S3 的内容) ,然后您可以添加AmazonS3ReadOnlyAccess策略)。创建此角色后,您可以将其附加到运行容器的 EC2 实例。

如果您使用的是 ECS 服务,那么您可以将此角色附加到您定义容器的任务(仍然可以将其附加到底层 EC2 容器实例 - 但仅限于 EC2 启动类型,而不是 Fargate - 用于容器来承担该角色,但最好尽可能细化 - 各个任务都有自己的角色)。

您永远不应该将 AWS 凭证添加到您的代码中或将它们存储在 EC2 实例/容器中,这就是您拥有角色的原因。

  • 但是如何向 S3 验证容器呢?如果是裸 EC2 实例,您是否通过环境变量将 aws 凭证传递到容器中?ECS 服务是否会自行将这些凭证注入到容器中? (7认同)
  • 当尝试从 aws 实例内的 docker 访问我的 s3 存储桶时,我收到 botocore.exceptions.NoCredentialsError: Unable to find凭据 (2认同)