Estoy tratando de hacer una publicación en mi depósito, y estoy un poco confundido acerca de cómo se supone que la política para los datos del formulario debe coincidir con la política de mi depósito.
@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/, '')Política de depósitos:
{ "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"] } ] }¿Estos coinciden? No me he topado con ninguna documentación que muestre una buena comparación lado a lado de los dos.
Las condiciones son independientes a la póliza.
Las condiciones imponen atributos particulares de la carga. Por ejemplo, { "{acl": "public-read" } aplica la regla de que la carga debe establecer la ACL en public-read . Si la carga no establece ese valor, la carga será rechazada.
La política del depósito se aplica cada vez que algo intenta acceder a Amazon S3. Entonces, "s3:x-amz-acl": "public-read" dice que las personas pueden acceder al depósito siempre que ese valor sea verdadero. Esto es algo muy extraño para poner en una política de depósito, porque ese atributo solo es relevante para una operación PutObject . Al leer un objeto de S3, no se aplica.
Consulte Especificación de condiciones en una política para ver un ejemplo con el uso de PutObject .