我試圖設置一個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這樣的工具將爲你做。
您可以將IAM角色應用於EC2實例。您只需使用aws工具訪問這些文件(或者在機器上保存憑據)。 – johnharris85