2017-03-06 3 views
0

バケットへの投稿をしようとしていますが、フォームデータのポリシーがバケットのポリシーとどのように一致するはずです。s3バケットポリシーポスト

@time = Time.now.utc 
@time_policy = @time.strftime('%Y%m%dT000000Z') 
@date_stamp = @time.strftime('%Y%m%d') 

ret = {"expiration" => 1.day.from_now.utc.xmlschema, 
     "conditions" => [ 
      {"bucket" => Rails.application.secrets.aws_bucket}, 
      {"x-amz-credential": "#{Rails.application.secrets.aws_access_key_id}/#{@date_stamp}/us-west-2/s3/aws4_request"}, 
      {"x-amz-algorithm": "AWS4-HMAC-SHA256"}, 
      {"x-amz-date": @time_policy }, 
     ] 
     } 

    @policy = Base64.encode64(ret.to_json).gsub(/\n|\r/, '') 

バケツポリシー:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Allow Get", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::example-development/*" 
     }, 
     { 
      "Sid": "AddPerm", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::123456789:user/example" 
      }, 
      "Action": "s3:*", 
      "Resource": ["arn:aws:s3:::example-development/*","arn:aws:s3:::example-development"] 
     } 
    ] 
} 

これらの試合をしますか?私は、両者を比較して良い文書を見つけたわけではありません。

答えて

1

条件はポリシーに依存しません。

条件アップロードの特定の属性を強制します。たとえば、{ "{acl": "public-read" }は、アップロードでACLにpublic-readを設定する必要があるという規則を適用します。アップロードでその値が設定されていない場合、アップロードは拒否されます。

バケットポリシーは、何かがAmazon S3にアクセスしようとするたびに強制されます。したがって、"s3:x-amz-acl": "public-read"によれば、その値が真である限り、人々はバケットにアクセスできます。これは、バケットポリシーに入れるのは非常に奇妙なことです。その属性は、PutObject操作にのみ関連するためです。 S3からオブジェクトを読み込むときは、適用されません。

PutObjectを使用する例としては、Specifying Conditions in a Policyを参照してください。

+0

私は同意する、私は本当にアップロードを仕事にしようとしていた。当時、特定ではないバケツが問題になるかどうかは不明でした。 –