回答

0

你也可以做。這取決於您如何設置與用戶(或組)相關的策略。我會爲每個環境推薦一組不同的密鑰,以防一個環境受到危害,並防止意外覆蓋。

這裏有一個用戶名相匹配的水桶名政策:

{ 
    "Version":"2012-10-17", 
    "Statement":[ 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListAllMyBuckets" 
     ], 
     "Resource":"arn:aws:s3:::*" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource":"arn:aws:s3:::${aws:username}" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:PutObject", 
      "s3:PutObjectAcl", 
      "s3:GetObject", 
      "s3:GetObjectAcl", 
      "s3:DeleteObject", 
      "s3:DeleteObjectAcl" 
     ], 
     "Resource":"arn:aws:s3:::${aws:username}/*" 
     } 
    ] 
} 

然後,您可以生成開發,分期和生產IAM用戶。給他們與桶相同的名字。每個人都將獲得不同的鑰匙+祕密。當您的應用嘗試訪問存儲桶時,它會確認該密鑰和祕密對於環境特定存儲桶是否正確。

3

您當然可以使用一組AWS證書來管理多個S3存儲桶。

或者,您可以進行設置,以便每個存儲桶需要不同的AWS憑證。

或者,您可以配置訪問權限,以便您可以從我們的實例的EC2實例使用IAM實例角色,而無需創建和管理各個密鑰。

或者,您可以授予其他AWS賬戶中用戶的訪問權限,以承擔管理您賬戶中S3存儲桶的角色。

或者,您可以使用Amazon Cognito,以便個人用戶可以在亞馬遜,Facebook,Google或任何OpenID Connect兼容身份提供商處使用自己的個人帳戶登錄,然後在您的S3中創建和管理自己的對象沒有踩在對方的腳趾上。

或者,...

[請提交每個「如何」作爲一個獨立的,新的問題。]

0

儘管這個問題是老了,你可能現在解決您的問題。 我正在爲未來的讀者撰寫這個答案。

您可以在所有環境中使用相同的存儲桶。但是你應該使用不同的桶。 原因:資產被上傳到同一個桶中,所有環境都可能會在它們之間發生ID衝突。遲早你會面臨這個問題。所以它最好是安全的。

在Heroku中,您可以爲多個環境設置單獨的配置。在你的情況devproductionstaging(我假設你已經設置了這些引用上面的名字,或者如果你還沒有,並試圖添加分段環境到現有的應用程序,你可以參考this或從頭開始this)。

你可能有你的配置是這樣(它涉及到回形針配置)

has_attached_file :photo, 
    :styles => ..., 
    :path => ..., 
    :storage => :s3, 
    :bucket => ENV['S3_BUCKET'], 
    :s3_credentials => { 
    :access_key_id => ENV['S3_KEY'], 
    :secret_access_key => ENV['S3_SECRET'] 
    } 

你看到的環境變量ENV['S3_BUCKET']ENV['S3_KEY']ENV['S3_SECRET']

您可以設置這些變量對於您的應用程序的顯示如下

開發:

$ heroku config:set S3_BUCKET=XXX --remote dev 
$ heroku config:set S3_KEY=YYY --remote dev 
$ heroku config:set S3_SECRET=ZZZ --remote dev 

生產:

$ heroku config:set S3_BUCKET=XXX --remote production 
$ heroku config:set S3_KEY=YYY --remote production 
$ heroku config:set S3_SECRET=ZZZ --remote production 

分期:

$ heroku config:set S3_BUCKET=XXX --remote staging 
$ heroku config:set S3_KEY=YYY --remote staging 
$ heroku config:set S3_SECRET=ZZZ --remote staging 

希望此回答有助於某人:-)

相關問題