2013-12-08 54 views
1

我試圖設置一個EC2實例來獲取訪問S3存儲桶的一些私人數據。我成立了一個IAM角色,像這樣:我應該爲S3存儲桶分配什麼權限才能使用IAM角色從EC2實例訪問?

{ 
    "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對象,即使它們不是public - 但是,因爲它不是一個aws工具,所以你需要明確地傳入帶有請求的hmac'ed aws標記,像s3-curl.pl這樣的工具將爲你做。

回答

2

這裏沒有什麼可以看到的......繼續前進。 這個答案是沒有更多的有效,因爲亞馬遜有時候添加了這個功能。

簡答:不,您不能將IAM角色應用於EC2實例。

您可以在S3端定義S3桶策略,或者定義IAM角色並將其分配給用戶/組。

這給了我一個「訪問被拒絕」的錯誤。

您創建了IAM角色,但尚未將其分配給任何IAM用戶。默認的訪問是「拒絕」。所以你必須明確地「允許」訪問。和上面一樣運行 curl讓我相信你希望你的S3對象可以公開訪問,否則你寫的命令將不起作用。

+0

您可以將IAM角色應用於EC2實例。您只需使用aws工具訪問這些文件(或者在機器上保存憑據)。 – johnharris85

相關問題