或者我可以使用相同的一对,因为我们说3个桶(开发,生产,分期)。
请指教!
答案 0 :(得分:3)
您当然可以使用一组AWS凭据来管理多个S3存储桶。
或者,您可以对其进行设置,以便每个存储桶都需要不同的AWS凭据。
或者,您可以配置访问权限,以便在EC2实例的实例中使用IAM实例角色,而无需创建和管理单个密钥。
或者,您可以授予其他AWS账户中用户的访问权,以承担管理帐户中S3存储桶的角色。
或者,您可以使用Amazon Cognito,以便个人用户可以在Amazon,Facebook,Google或任何与OpenID Connect兼容的身份提供商上使用自己的个人帐户登录,然后在S3存储桶中创建和管理自己的对象没有踩到对方的脚趾。
或者......,
[请将每个“如何”作为单独的新问题提交。]
答案 1 :(得分: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用户。给它们与桶相同的名称。每个人都将获得一个不同的密钥+秘密。当您的应用尝试访问存储桶时,它将确认密钥和密钥对于特定于环境的存储桶是否正确。
答案 2 :(得分:0)
虽然这个问题已经过时了,但您现在可能已经解决了问题。 我正在为未来的读者写这个答案。
您可以在所有环境中使用相同的存储桶。但是你应该使用不同的桶。 原因:资产上传到同一个存储桶,所有环境都可能会在它们之间产生ID冲突。迟早你会遇到这个问题。因此,最好是安全失败。
在Heroku中,您可以为多个环境设置单独的配置。在您的情况下dev
production
和staging
(我假设您已使用以上名称设置这些引用,或者如果您尚未尝试将暂存环境添加到现有应用中,则可以请参考this或从this开始。
你可能正在使用你的配置(它有与Paperclip相关的配置)
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
希望这个答案有助于某人: - )