回答
你也可以做。這取決於您如何設置與用戶(或組)相關的策略。我會爲每個環境推薦一組不同的密鑰,以防一個環境受到危害,並防止意外覆蓋。
這裏有一個用戶名相匹配的水桶名政策:
{
"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用戶。給他們與桶相同的名字。每個人都將獲得不同的鑰匙+祕密。當您的應用嘗試訪問存儲桶時,它會確認該密鑰和祕密對於環境特定存儲桶是否正確。
您當然可以使用一組AWS證書來管理多個S3存儲桶。
或者,您可以進行設置,以便每個存儲桶需要不同的AWS憑證。
或者,您可以配置訪問權限,以便您可以從我們的實例的EC2實例使用IAM實例角色,而無需創建和管理各個密鑰。
或者,您可以授予其他AWS賬戶中用戶的訪問權限,以承擔管理您賬戶中S3存儲桶的角色。
或者,您可以使用Amazon Cognito,以便個人用戶可以在亞馬遜,Facebook,Google或任何OpenID Connect兼容身份提供商處使用自己的個人帳戶登錄,然後在您的S3中創建和管理自己的對象沒有踩在對方的腳趾上。
或者,...
[請提交每個「如何」作爲一個獨立的,新的問題。]
儘管這個問題是老了,你可能現在解決您的問題。 我正在爲未來的讀者撰寫這個答案。
您可以在所有環境中使用相同的存儲桶。但是你應該使用不同的桶。 原因:資產被上傳到同一個桶中,所有環境都可能會在它們之間發生ID衝突。遲早你會面臨這個問題。所以它最好是安全的。
在Heroku中,您可以爲多個環境設置單獨的配置。在你的情況dev
production
和staging
(我假設你已經設置了這些引用上面的名字,或者如果你還沒有,並試圖添加分段環境到現有的應用程序,你可以參考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
希望此回答有助於某人:-)
- 1. aws每個人需要創建新的密鑰對來訪問EC2?
- 2. AWS S3 Node.js SDK:需要一次下載一個桶中的所有文件
- 3. Google地球API是否需要密鑰?
- 4. 您何時需要Google Maps API密鑰?
- 5. 您是否需要爲要加密的每個子域「級別」提供通配符SSL證書?
- 6. 您是否需要爲每個開發者支付iPhone SDK?
- 7. 我是否需要爲Spring Boot中的每個@RequestBody分開一個對象
- 8. NHibernate一對多實體映射 - 密鑰列是否需要爲空?
- 9. aws-s3錯誤:AWS :: S3 :: MissingAccessKey錯誤,但密鑰已定義?
- 10. 弱實體是否需要部分密鑰?
- 11. AWS S3錯誤的存儲桶對象
- 12. S3 boto library:如何對桶中的密鑰執行HEAD請求
- 13. 您是否可以授予AWS IAM用戶創建CloudFront密鑰對的權限?
- 14. DynamoDB在分區密鑰桶變大時是否縮放?
- 15. 我是否需要每個強命名庫版本的新.snk密鑰文件?
- 16. AWS S3桶端點故障
- 17. 啓用MFA的S3 AWS桶
- 18. AWS SQS是否需要
- 19. Apache Flink AWS S3 Sink是否需要Hadoop進行本地測試?
- 20. 是否需要加密認證的密鑰?
- 21. 我是否需要爲每個頁面分開JavaScript?
- 22. NodeJS TypeError('JwtStrategy需要密鑰或密鑰');
- 23. AWS密鑰對存儲
- 24. 是否可以從S3存儲桶子目錄創建AWS athena分區或列?
- 25. AWS S3 AccessDenied。存儲桶權限被授予,所以當我是用戶時,我需要存儲桶策略嗎?
- 26. 如何查找AWS密鑰對公鑰?
- 27. 分配密鑰和變量,而不需要在模式
- 28. 如何從AWS S3存儲桶獲取唯一對象列表
- 29. 檢查s3存儲桶中是否存在單個對象?
- 30. 是否需要分配「資源」在RxJava