我尝试设置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这样的工具为您做的请求。
答案 0 :(得分:2)
这里没有看到......继续前进。 这个答案没有多大的意义,因为亚马逊已经增加了这个功能。
<击> 简答:不,您不能将IAM角色应用于EC2实例。
您可以在S3端定义S3 Bucket策略,也可以定义IAM角色并将其分配给用户/组。
这给了我一个“拒绝访问”错误。
您已创建IAM角色,但尚未将其分配给任何IAM用户。默认Access为“拒绝”。所以你必须明确地“允许”访问。如上所述运行curl
使我相信您希望您的S3对象可以公开访问,否则您正在编写的命令将无法正常工作。
击>