Skip to content

Instantly share code, notes, and snippets.

@snaka
Last active April 6, 2016 06:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snaka/29c9d104eaf0c00a106b501a14df17d4 to your computer and use it in GitHub Desktop.
Save snaka/29c9d104eaf0c00a106b501a14df17d4 to your computer and use it in GitHub Desktop.
POST file to s3 with signature ver.2
#
# POST with signature v2
#
require "base64"
require "openssl"
require "digest/sha1"
aws_secret_key = ENV["AWS_SECRET_ACCESS_KEY"]
aws_access_key_id = ENV["AWS_ACCESS_KEY_ID"]
s3_bucket = "mybucket"
target_file = "test.txt"
policy_document = <<EOS
{"expiration": "2016-12-31T00:00:00Z",
"conditions": [
{"bucket": "#{s3_bucket}"},
{"acl": "private"},
["starts-with", "$key", ""],
{"x-amz-server-side-encryption": "AES256"}
]
}
EOS
policy = Base64.encode64(policy_document).delete("\n")
signature = Base64.encode64(
OpenSSL::HMAC.digest(
OpenSSL::Digest::SHA1.new,
aws_secret_key,
policy
)
).delete("\n")
cmd = <<__CURL_COMMAND__
curl -v -X POST \\
-F x-amz-server-side-encryption="AES256" \\
-F key=#{target_file} \\
-F AWSAccessKeyId="#{aws_access_key_id}" \\
-F acl="private" \\
-F policy="#{policy}" \\
-F signature="#{signature}" \\
-F "file=@#{target_file}" \\
https://#{s3_bucket}.s3.amazonaws.com/
__CURL_COMMAND__
puts cmd
puts `#{cmd}`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment