2013-05-02 67 views
4

我試圖在彈性beanstalk應用程序配置文件中配置'source'參數。相關的源代碼是一個bz2文件,我已經上傳到一個新的S3存儲桶中。例如,創建的存儲桶的名稱是'abc',文件名是'mysource.tar.bz2'。在配置文件中的相關行看起來是這樣的:在Elastic Beanstalk配置設置中拒絕S3對象的訪問

source: 
    /usr/bin/mysource: https://s3-us-west-2.amazonaws.com/abc/mysource.tar.bz2 

當嘗試部署的代碼,有錯誤和檢查日誌,它表明「存取遭拒」這個文件。

我已經在AWS IAM控制檯中創建了一個實例配置文件(角色),並具有Amazon EC2的信任關係,並已將訪問權限設置爲所需的存儲桶。

中的角色的權限如下:

{ 
    "Statement": [ 
    { 
     "Sid": "Stmt13674962346", 
     "Action": [ 
     "s3:*" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
     "arn:aws:s3:::abc/*" 
    ] 
    } 
    ] 
} 

甚至已經嘗試設置資源爲*:

"Resource": "*" 

但仍得到存取遭拒錯誤。

如果我通過將s3文件'mysource.tar.bz2'的權限變爲公共,更改了它的權限。

那麼,有沒有辦法讓這個工作,而不必公開S3文件?我的角色權限設置是否不正確?還是有其他方法可以實現這一目標?

回答

3

無法使用filessource鍵從Elastic Beanstalk訪問受保護的AWS資產。這些命令以基本方式處理,不會從實例元數據讀取,因此無法提取您的AWS憑證(據我所知)。

我對這個問題的解決方案是創建一個具有適當權限的IAM角色,安裝最新的AWS工具,並使用commands鍵來下載和解壓文件。關鍵是自動從實例中提取AWS憑證的AWS命令行工具。

commands: 
    01-install-awscli: 
    command: easy_install awscli 
    02-download-s3-asset: 
    command: aws s3 cp --region us-east-1 s3://abc/mysource.tar.bz2 . 
    03-extract-file: 
    command: tar xvjf mysource.tar.bz2 destination/ 

命令是在項目的源目錄執行,所以根據需要更改路徑或使用cwd選項來改變其中的命令是從運行。

1

我遇到了一個非常類似的情況,並找到了解決問題的方法。有關更多詳細信息,請參閱我的答案Permission denied while elastic beanstalk is retrieving S3 file

我找到的解決方案包括將Resources部分的認證信息添加到您的配置文件中。我的最終.ebextensions配置文件看起來像這樣

files: 
    "/target/file/path" : 
    source: https://s3-us-west-1.amazonaws.com/_MyBucket_/_MyFolder_/_MyFile.txt 
Resources: 
    AWSEBAutoScalingGroup: 
    Metadata: 
     AWS::CloudFormation::Authentication: 
     S3Access: 
      type: S3 
      roleName: aws-elasticbeanstalk-ec2-role 
      buckets: _MyBucket