通过 IAM 从 EC2 实例访问 S3 存储桶数据

Accessing S3 bucket data from EC2 instance through IAM

所以我创建了一个 IAM 用户并添加了访问 S3 的权限,然后我创建了一个 EC2 实例并通过 SSH 连接到其中。

发出“aws s3 ls”命令后,回复是 “无法找到凭据。您可以通过 运行“aws configure”配置凭据。

  1. 那么使用“aws configure”提供 IAM 凭据(密钥和密钥 ID)有什么区别编辑存储桶策略以允许 s3 访问我的实例的 public IP。

  2. 即使在编辑存储桶策略 (JSON) 以允许 S3 访问我实例的 public IP 之后,为什么我无法访问 s3 存储桶,除非我使用“ aws configure”(密钥和密钥 ID)?

请帮忙!谢谢。

由于您使用的是 EC2,因此您应该在文件系统中使用 EC2 Instance Profiles 而不是 运行 aws configure 和 hard-coding 凭据。


至于您的 S3 存储桶策略与 IAM 角色的问题,here is the official documentation。它们是您用来保护 AWS 账户安全的两个独立工具。


至于您失败的特定命令,请注意,默认情况下,AWS CLI 工具将始终尝试查找凭据。如果您希望它跳过查找凭据,您可以传递 --no-sign-request 参数。

但是,如果您只是 运行 aws s3 ls 那么它会尝试列出您帐户中的所有存储桶,您必须拥有 IAM 凭据。在这种情况下,不会考虑单独的存储桶策略。

如果你是 运行 aws s3 ls s3://bucketname 那么这可能会像 aws s3 ls s3://bucketname --no-sign-request.

创建iam用户的时候有两部分

  1. 政策
  2. 角色

政策附加到用户,比如所有服务用户可以 pr 不能访问 角色附加到应用程序,该应用程序可以拥有的所有访问权限

所以你必须允许ec2访问S3 有两种方法

  1. aws 配置
  2. 将角色附加到 ec2 实例

虽然 1 很棘手而且很长,但 2 很简单 转到 ec2-instance-> Actions -> Security -> Modify IAM role -> 然后 select role (ec2+s3 access role)

就是这样,您可以简单地从 ec2 实例执行 aws s3 ls