每个S3 Bucket是否需要一对单独的AWS钥匙



OR我可以使用相同的一对吗,比如说3个bucket(dev、production、staging)。

请告知!

您当然可以使用一组AWS凭据来管理多个S3存储桶。

或者,您可以将其设置为每个bucket需要不同的AWS凭据。

或者,您可以配置访问权限,以便使用EC2实例中的IAM实例角色—我们的实例,而无需创建和管理单个密钥。

或者,您可以授予其他AWS帐户中的用户访问权限,以承担管理帐户中S3存储桶的角色。

或者,您可以使用Amazon Cognito,这样个人用户就可以在亚马逊、脸书、谷歌或任何与OpenID Connect兼容的身份提供商上使用自己的个人帐户登录,然后在S3存储桶中创建和管理自己的对象,而无需相互踩脚。

或者。。。

[请将每个"如何"作为一个单独的新问题提交。]

您可以执行任一操作。这取决于您如何设置与用户(或组)关联的策略。我建议每个环境使用一组不同的密钥,以防一个环境受到损害,并防止意外重写。

这里有一个将用户名与bucket名称匹配的策略:

{
   "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用户。给它们取与水桶相同的名字。每个人都会得到一个不同的密钥+秘密。当您的应用程序尝试访问bucket时,它将确认密钥和机密对于特定于环境的bucket是正确的。

虽然这个问题很老,但您现在可能已经解决了问题。我为未来的读者写下这个答案。

您可以对所有环境使用相同的bucket。但是你应该使用不同的桶。原因:资产被上传到同一个bucket上,所有环境之间可能存在ID冲突。你迟早会面临这个问题。所以最好是防故障。

在Heroku中,您可以为多个环境设置单独的配置。在您的案例中,devproductionstaging(我假设您已经用以上名称设置了这些引用,或者如果您还没有,并试图将暂存环境添加到现有应用程序中,您可以参考这个,或者如果从头开始,可以参考这个)。

你可能有你的配置类似于(它有与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

希望这个答案能帮助到某人:-)

相关内容

最新更新