回答

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 

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

相关问题