2015-12-03 140 views
2

我需要啓動一個S3存儲桶,以便我的EC2實例有權訪問存儲圖像文件。 EC2實例需要讀/寫權限。我不想讓S3存儲桶公開可用,我只希望EC2實例能夠訪問它。來自EC2的AWS S3存儲桶存取

另一個問題是我的EC2實例正在被OpsWorks管理,我可能會根據負載/使用情況啓動不同的實例。如果我用IP來限制它,我可能並不總是知道EC2實例的IP。我可以通過VPC進行限制嗎?

我必須讓我的S3存儲桶啓用靜態網站託管嗎? 我是否需要公開存儲桶中的所有文件才能正常工作?

回答

1

IAM角色是您的解決方案。

您需要創建具有s3訪問權限的角色,如果ec2實例沒有任何角色啓動,您必須重新構建具有指定角色的角色。

enter image description here

參見:Allowing AWS OpsWorks to Act on Your Behalf

+0

我使用OpsWorks建立我的實例。不確定這些構建使用了哪些IAM角色。我將不得不檢查。 – hiddenicon

+0

是的,您可以添加角色到OpsWorks。 – BMW

5

你並不需要進行公開鬥可讀,也沒有文件公開可讀。水桶和它的內容可以保持私密。

不要根據IP地址限制對存儲區的訪問,而應根據EC2實例使用的IAM角色來限制對存儲區的訪問。

  1. 爲您的EC2實例創建一個IAM EC2實例角色。
  2. 使用該角色運行您的EC2實例。
  3. 爲此IAM角色提供訪問S3存儲桶的策略。

例如:

{ 
    "Version": "2012-10-17", 
    "Statement":[{ 
    "Effect": "Allow", 
    "Action": "s3:*", 
    "Resource": ["arn:aws:s3:::my_bucket", 
       "arn:aws:s3:::my_bucket/*"] 
    } 
    ] 
} 
  • 如果你想限制訪問桶本身,嘗試使用S3鬥政策。
  • 例如:

    { 
        "Version": "2012-10-17", 
        "Statement": [ 
        { 
         "Effect": "Allow", 
         "Principal": { 
         "AWS": ["arn:aws:iam::111122223333:role/my-ec2-role"] 
         }, 
         "Action": "s3:*", 
         "Resource": ["arn:aws:s3:::my_bucket", 
            "arn:aws:s3:::my_bucket/*"] 
        } 
        ] 
    } 
    

    其他信息:http://blogs.aws.amazon.com/security/post/TxPOJBY6FE360K/IAM-policies-and-Bucket-Policies-and-ACLs-Oh-My-Controlling-Access-to-S3-Resourc

    +0

    我試圖通過VPC進行限制,並且我完全鎖定了S3存儲桶。我必須在我的root帳戶上創建訪問密鑰,並使用AWS CLI工具刪除存儲桶策略。 我可以添加第二種訪問方法嗎?那麼我仍然可以通過公共IP訪問存儲區? – hiddenicon

    +0

    我遇到的一個問題是,我正在Apache上進行反向代理以訪問S3存儲桶上的映像,如下所示。所以它必須通過https公開可用。 將ProxyRequests關閉 訂單拒絕,允許 所有 的ProxyPass /圖片允許/ http://images.s3-website-us-east-1.amazonaws.com/ – hiddenicon