我应该为S3存储桶分配哪些权限才能使用IAM角色从EC2实例访问它?

时间:2013-12-08 08:57:05

标签: permissions amazon-s3 amazon-ec2 amazon-iam

我尝试设置EC2实例以获取对具有一些私有数据的S3存储桶的访问权限。我设置了像这样的IAM角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
       "Action": [
       "s3:Get*",
       "s3:List*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my_bucket_name/*"
    }
  ]
}

我调用了角色" s3_bin_download_role"

我使用以下命令启动EC2实例:

ec2-run-instances ami-4b143122 -n 1 -k us_east_key_pair -p s3_bin_download_role -g sg-????? -t t1.micro -z us-east-1a 

这看起来干净利落。但我还没弄明白如何验证这个EC2实例是否真的具有此角色。

无论如何,一旦实例启动,我将SSH连接到机器并输入:

curl http://my_bucket_name.s3.amazonaws.com/myfile.html

这给了我一个" Access Denied"错误。

我已经设置了没有指定权限的S3存储桶。这显然是不正确的。但我不确定我需要在存储桶上指定的最小权限列表是什么,以允许此EC2实例上的程序读取它。

作为奖励,如果有人能告诉我如何确定EC2实例是否应用了特定的IAM角色,我将非常感激。 AWS控制台似乎没有这些信息。

编辑 -

@slayedbylucifer是对的,但细节非常混乱,所以我在这里添加细节。

令人困惑的是,您实际上可以创建IAM角色并立即使用这些角色启动EC2实例,而无需创建任何用户或组。只需使用带有-p标志的ec2-run-instances(来自cli工具)传入刚刚创建的角色的名称 - 实例将启动您可以通过发出以下命令来验证的角色 -

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<rolename>

如果这样做,那么此实例现在将运行所有使用aws工具的请求,并使用该角色授予它的权限。

但是,幕后发生的事情是,由于没有定义用户或组,因此用户隐含了&#34; root&#34;用户或您在创建角色时登录管理控制台的任何人。因此,不是创建而是分配角色意味着没有人可以访问 - 如果角色提供访问权限,创建者启动的ec2实例可以访问。

所以现在你要做的就是转到S3管理控制台并为你自己提供存储桶权限。就是这样。

此外,您实际上可以使用curl来检索S3对象,即使它们不是公共对象 - 但是,由于它不是aws工具,因此您需要明确传入hmac&#39; ed aws令牌与s3-curl.pl这样的工具为您做的请求。

1 个答案:

答案 0 :(得分:2)

这里没有看到......继续前进。 这个答案没有多大的意义,因为亚马逊已经增加了这个功能。

<击> 简答:不,您不能将IAM角色应用于EC2实例。

您可以在S3端定义S3 Bucket策略,也可以定义IAM角色并将其分配给用户/组。

  

这给了我一个“拒绝访问”错误。

您已创建IAM角色,但尚未将其分配给任何IAM用户。默认Access为“拒绝”。所以你必须明确地“允许”访问。如上所述运行curl使我相信您希望您的S3对象可以公开访问,否则您正在编写的命令将无法正常工作。