1

我正在尝试设置一个 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

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

我设置了没有指定权限的 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 工具的请求,并获得该角色授予的权限。

但是,幕后发生的事情是,由于没有定义用户或组,因此用户隐含地是“root”用户或您在创建角色时登录到管理控制台的任何人。因此,创建但不分配角色并不意味着没有人有权访问 - 如果角色授予访问权限,则由创建者启动的 ec2 实例具有访问权限。

因此,现在您所要做的就是转到 S3 管理控制台并为您自己授予存储桶权限。就是这样。

此外,您实际上可以使用 curl 来检索 S3 对象,即使它们不是公开的 - 但是,由于它不是 aws 工具,因此您需要使用像 s3 这样的工具的请求显式传递 hmac'ed aws 令牌 - curl.pl 会为你做的。

4

1 回答 1

2

这里什么都看不到...继续前进。这个答案不再有效,因为亚马逊已经在某个时候添加了这个功能。

简短回答:不,您不能将 IAM 角色应用于 EC2 实例。

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

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

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

于 2013-12-08T12:49:09.413 回答